This commit is contained in:
parent
ed7d25f1c0
commit
3659b0ffe3
|
|
@ -15,12 +15,13 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
dialogConfig: reactive({
|
dialogConfig: reactive({
|
||||||
outerVisible: false,
|
outerVisible: false,
|
||||||
outerTitle: '新增业务类型',
|
outerTitle: '新建业务类型',
|
||||||
outerWidth: '720px',
|
outerWidth: '720px',
|
||||||
minHeight: '320px',
|
minHeight: '320px',
|
||||||
maxHeight: '80vh',
|
maxHeight: '80vh',
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ const actionColumns = [
|
||||||
// 新增
|
// 新增
|
||||||
const onHandleAdd = () => {
|
const onHandleAdd = () => {
|
||||||
editId.value = null
|
editId.value = null
|
||||||
dialogConfig.outerTitle = '新增业务类型'
|
dialogConfig.outerTitle = '新建业务类型'
|
||||||
dialogConfig.outerVisible = true
|
dialogConfig.outerVisible = true
|
||||||
// 重置表单数据
|
// 重置表单数据
|
||||||
addAndEditForm.value = getInitFormData()
|
addAndEditForm.value = getInitFormData()
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,13 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
dialogConfig: reactive({
|
dialogConfig: reactive({
|
||||||
outerVisible: false,
|
outerVisible: false,
|
||||||
outerTitle: '新增运检站',
|
outerTitle: '新建运检站',
|
||||||
outerWidth: '720px',
|
outerWidth: '720px',
|
||||||
minHeight: '320px',
|
minHeight: '320px',
|
||||||
maxHeight: '80vh',
|
maxHeight: '80vh',
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ const actionColumns = [
|
||||||
// 新增
|
// 新增
|
||||||
const onHandleAdd = () => {
|
const onHandleAdd = () => {
|
||||||
editId.value = null
|
editId.value = null
|
||||||
dialogConfig.outerTitle = '新增运检站'
|
dialogConfig.outerTitle = '新建运检站'
|
||||||
dialogConfig.outerVisible = true
|
dialogConfig.outerVisible = true
|
||||||
// 重置表单数据
|
// 重置表单数据
|
||||||
addAndEditForm.value = getInitFormData()
|
addAndEditForm.value = getInitFormData()
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,23 +4,24 @@ export default {
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
prop: 'planMajorName',
|
prop: 'planMajorName',
|
||||||
placeholder: '请输入业务类型名称',
|
placeholder: '请输入计划类别名称',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
tableColumns: [
|
tableColumns: [
|
||||||
{
|
{
|
||||||
prop: 'planMajorName',
|
prop: 'planMajorName',
|
||||||
label: '业务类型名称',
|
label: '计划类别名称',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
dialogConfig: reactive({
|
dialogConfig: reactive({
|
||||||
outerVisible: false,
|
outerVisible: false,
|
||||||
outerTitle: '新增业务类型',
|
outerTitle: '新建计划类别',
|
||||||
outerWidth: '720px',
|
outerWidth: '720px',
|
||||||
minHeight: '320px',
|
minHeight: '320px',
|
||||||
maxHeight: '80vh',
|
maxHeight: '80vh',
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ export default {
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '备注',
|
label: '备注',
|
||||||
|
width: '200',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
label-width="140px"
|
label-width="140px"
|
||||||
size="default"
|
size="large"
|
||||||
class="month-form"
|
class="month-form"
|
||||||
>
|
>
|
||||||
<el-form-item label="月计划执行月份:" prop="month" class="month-item">
|
<el-form-item label="月计划执行月份:" prop="month" class="month-item">
|
||||||
|
|
@ -47,6 +47,7 @@
|
||||||
@selection-change="onSelectionChange"
|
@selection-change="onSelectionChange"
|
||||||
class="task-table"
|
class="task-table"
|
||||||
stripe
|
stripe
|
||||||
|
border
|
||||||
:header-cell-style="{ background: '#f5f7fa', color: '#606266', fontWeight: 600 }"
|
:header-cell-style="{ background: '#f5f7fa', color: '#606266', fontWeight: 600 }"
|
||||||
>
|
>
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
|
@ -54,8 +55,8 @@
|
||||||
prop="projectName"
|
prop="projectName"
|
||||||
label="项目名称"
|
label="项目名称"
|
||||||
min-width="260"
|
min-width="260"
|
||||||
show-overflow-tooltip
|
|
||||||
align="center"
|
align="center"
|
||||||
|
show-overflow-tooltip
|
||||||
/>
|
/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="workContent"
|
prop="workContent"
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
label-width="160"
|
label-width="auto"
|
||||||
size="large"
|
size="large"
|
||||||
:disabled="isDetail"
|
:disabled="isDetail"
|
||||||
>
|
>
|
||||||
|
|
@ -74,12 +74,12 @@
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="工作任务">
|
<el-form-item label="工作任务">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
disabled
|
||||||
v-model.trim="formData.workContent"
|
|
||||||
placeholder="请输入作业内容"
|
|
||||||
maxlength="500"
|
maxlength="500"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
disabled
|
type="textarea"
|
||||||
|
placeholder="请输入作业内容"
|
||||||
|
v-model.trim="formData.workContent"
|
||||||
:autosize="{ minRows: 4, maxRows: 12 }"
|
:autosize="{ minRows: 4, maxRows: 12 }"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -90,15 +90,15 @@
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="类别" prop="planCategoryId">
|
<el-form-item label="类别" prop="planCategoryId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.planCategoryId"
|
|
||||||
placeholder="请选择类别"
|
placeholder="请选择类别"
|
||||||
|
v-model="formData.planCategoryId"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planCategoryOptions"
|
|
||||||
:key="item.planMajorId"
|
:key="item.planMajorId"
|
||||||
:label="item.planMajorName"
|
|
||||||
:value="item.planMajorId"
|
:value="item.planMajorId"
|
||||||
|
:label="item.planMajorName"
|
||||||
|
v-for="item in planCategoryOptions"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
:label="index == 0 ? '工作量' : ''"
|
:label="index == 0 ? '工作量' : ''"
|
||||||
:prop="`workloadList.${index}.workloadCategoryId`"
|
prop="workloadCategoryId"
|
||||||
>
|
>
|
||||||
<el-select
|
<el-select
|
||||||
clearable
|
clearable
|
||||||
|
|
@ -128,14 +128,13 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="4">
|
<el-col :span="4">
|
||||||
<el-form-item
|
<el-form-item label-width="0" prop="workloadNum">
|
||||||
label-width="0"
|
|
||||||
:prop="`workloadList.${index}.workloadNum`"
|
|
||||||
>
|
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
style="width: 240px"
|
style="width: 240px"
|
||||||
placeholder="输入数量"
|
placeholder="输入数量"
|
||||||
|
show-word-limit
|
||||||
|
maxlength="7"
|
||||||
v-model="item.workloadNum"
|
v-model="item.workloadNum"
|
||||||
>
|
>
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
|
|
@ -165,6 +164,8 @@
|
||||||
<el-form-item label="基塔数" prop="towerBaseNumber">
|
<el-form-item label="基塔数" prop="towerBaseNumber">
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
|
show-word-limit
|
||||||
|
maxlength="7"
|
||||||
placeholder="请输入基塔数"
|
placeholder="请输入基塔数"
|
||||||
v-model.trim="formData.towerBaseNumber"
|
v-model.trim="formData.towerBaseNumber"
|
||||||
/>
|
/>
|
||||||
|
|
@ -201,7 +202,21 @@
|
||||||
|
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="计划投入管理人员" prop="planPersonnelList">
|
<el-form-item prop="planPersonnelList">
|
||||||
|
<template #label>
|
||||||
|
<div style="display: flex; flex-direction: column">
|
||||||
|
<span>计划投入管理人员</span>
|
||||||
|
<span
|
||||||
|
style="
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
"
|
||||||
|
>
|
||||||
|
(职工,劳务派遣,海峡)
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<el-input
|
<el-input
|
||||||
readonly
|
readonly
|
||||||
placeholder="点击选择管理人员"
|
placeholder="点击选择管理人员"
|
||||||
|
|
@ -223,6 +238,8 @@
|
||||||
<el-form-item label="计划投入管理车辆数" prop="planCarNum">
|
<el-form-item label="计划投入管理车辆数" prop="planCarNum">
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
|
maxlength="7"
|
||||||
|
show-word-limit
|
||||||
placeholder="请输入车辆数量"
|
placeholder="请输入车辆数量"
|
||||||
v-model.trim="formData.planCarNum"
|
v-model.trim="formData.planCarNum"
|
||||||
/>
|
/>
|
||||||
|
|
@ -232,10 +249,25 @@
|
||||||
|
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-form-item label="计划投入熟练工人员数量" prop="planSkilledWorkerNum">
|
<el-form-item prop="planSkilledWorkerNum">
|
||||||
|
<template #label>
|
||||||
|
<div style="display: flex; flex-direction: column">
|
||||||
|
<span>计划投入熟练工人员数量</span>
|
||||||
|
<span
|
||||||
|
style="
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
"
|
||||||
|
>
|
||||||
|
(分包)
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
maxlength="7"
|
||||||
placeholder="请输入熟练工人员数量"
|
show-word-limit
|
||||||
|
placeholder="熟练工人员数量"
|
||||||
v-model.trim="formData.planSkilledWorkerNum"
|
v-model.trim="formData.planSkilledWorkerNum"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -244,20 +276,37 @@
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="计划投入工日"
|
label="计划投入工日"
|
||||||
prop="planSkilledWorkerDay"
|
prop="planSkilledWorkerDay"
|
||||||
label-width="auto"
|
label-width="120"
|
||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
placeholder="计划投入工日"
|
maxlength="7"
|
||||||
|
placeholder="工日"
|
||||||
v-model.trim="formData.planSkilledWorkerDay"
|
v-model.trim="formData.planSkilledWorkerDay"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<el-form-item label="计划投入辅助工人员数量" prop="planAuxiliaryWorkerNum">
|
<el-form-item prop="planAuxiliaryWorkerNum">
|
||||||
|
<template #label>
|
||||||
|
<div style="display: flex; flex-direction: column">
|
||||||
|
<span>计划投入辅助工人员数量</span>
|
||||||
|
<span
|
||||||
|
style="
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
"
|
||||||
|
>
|
||||||
|
(分包)
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入辅助工人员数量"
|
maxlength="7"
|
||||||
|
show-word-limit
|
||||||
|
placeholder="辅助工人员数量"
|
||||||
v-model.trim="formData.planAuxiliaryWorkerNum"
|
v-model.trim="formData.planAuxiliaryWorkerNum"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -266,11 +315,13 @@
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="计划投入工日"
|
label="计划投入工日"
|
||||||
prop="planAuxiliaryWorkerDay"
|
prop="planAuxiliaryWorkerDay"
|
||||||
label-width="auto"
|
label-width="120"
|
||||||
>
|
>
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
placeholder="计划投入工日"
|
maxlength="7"
|
||||||
|
show-word-limit
|
||||||
|
placeholder="工日"
|
||||||
v-model.trim="formData.planAuxiliaryWorkerDay"
|
v-model.trim="formData.planAuxiliaryWorkerDay"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -282,6 +333,8 @@
|
||||||
<el-form-item label="计划投入分包车辆数" prop="planSubCarNum">
|
<el-form-item label="计划投入分包车辆数" prop="planSubCarNum">
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
|
maxlength="7"
|
||||||
|
show-word-limit
|
||||||
placeholder="请输入分包车辆数量"
|
placeholder="请输入分包车辆数量"
|
||||||
v-model.trim="formData.planSubCarNum"
|
v-model.trim="formData.planSubCarNum"
|
||||||
/>
|
/>
|
||||||
|
|
@ -291,6 +344,8 @@
|
||||||
<el-form-item label="实际工作天数">
|
<el-form-item label="实际工作天数">
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
|
maxlength="7"
|
||||||
|
show-word-limit
|
||||||
placeholder="请输入实际工作天数"
|
placeholder="请输入实际工作天数"
|
||||||
v-model.trim="formData.actualWorkingDay"
|
v-model.trim="formData.actualWorkingDay"
|
||||||
/>
|
/>
|
||||||
|
|
@ -635,25 +690,46 @@ const rules = {
|
||||||
businessTypeId: [{ required: true, message: '请选择业务类型', trigger: 'change' }],
|
businessTypeId: [{ required: true, message: '请选择业务类型', trigger: 'change' }],
|
||||||
riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
|
riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
|
||||||
planCategoryId: [{ required: true, message: '请选择类别', trigger: 'change' }],
|
planCategoryId: [{ required: true, message: '请选择类别', trigger: 'change' }],
|
||||||
towerBaseNumber: [{ required: true, message: '请输入基塔数', trigger: 'blur' }],
|
towerBaseNumber: [
|
||||||
|
{ required: true, message: '请输入基塔数', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
|
],
|
||||||
planPersonnelList: [{ required: true, message: '请选择计划投入管理人员', trigger: 'blur' }],
|
planPersonnelList: [{ required: true, message: '请选择计划投入管理人员', trigger: 'blur' }],
|
||||||
|
workloadCategoryId: [{ required: true, message: '请选择工作量类别', trigger: 'change' }],
|
||||||
|
workloadNum: [
|
||||||
|
{ required: true, message: '请输入工作量', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
|
],
|
||||||
|
|
||||||
planCarNum: [{ required: true, message: '请输入计划投入管理人员车辆数', trigger: 'blur' }],
|
planCarNum: [
|
||||||
|
{ required: true, message: '请输入管理人员车辆数', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
|
],
|
||||||
planSkilledWorkerNum: [
|
planSkilledWorkerNum: [
|
||||||
{ required: true, message: '请输入计划投入熟练工人员数量', trigger: 'blur' },
|
{ required: true, message: '请输入熟练工人员数量', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
|
|
||||||
planAuxiliaryWorkerNum: [
|
planAuxiliaryWorkerNum: [
|
||||||
{ required: true, message: '请输入计划投入辅助工人员数量', trigger: 'blur' },
|
{ required: true, message: '请输入辅助工人员数量', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
planSkilledWorkerDay: [
|
planSkilledWorkerDay: [
|
||||||
{ required: true, message: '请输入计划投入熟练工人员工日', trigger: 'blur' },
|
{ required: true, message: '请输入工日', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
planAuxiliaryWorkerDay: [
|
planAuxiliaryWorkerDay: [
|
||||||
{ required: true, message: '请输入计划投入辅助工人员工日', trigger: 'blur' },
|
{ required: true, message: '请输入工日', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
|
],
|
||||||
|
planSubCarNum: [
|
||||||
|
{ required: true, message: '请输入分包车辆数', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
|
],
|
||||||
|
actualWorkingDay: [
|
||||||
|
{ required: true, message: '请输入实际工作天数', trigger: 'blur' },
|
||||||
|
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' },
|
||||||
],
|
],
|
||||||
planSubCarNum: [{ required: true, message: '请输入计划投入分包车辆数', trigger: 'blur' }],
|
|
||||||
actualWorkingDay: [{ required: true, message: '请输入实际工作天数', trigger: 'blur' }],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const onBack = () => {
|
const onBack = () => {
|
||||||
|
|
|
||||||
|
|
@ -235,11 +235,6 @@ const onExportPersonArrange = (queryParams) => {
|
||||||
...queryParams,
|
...queryParams,
|
||||||
},
|
},
|
||||||
`人员安排表.xlsx`,
|
`人员安排表.xlsx`,
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -251,11 +246,6 @@ const onExportOverallSummary = (queryParams) => {
|
||||||
...queryParams,
|
...queryParams,
|
||||||
},
|
},
|
||||||
`整体汇总表.xlsx`,
|
`整体汇总表.xlsx`,
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,11 +257,6 @@ const onExportWorkloadSummary = (queryParams) => {
|
||||||
...queryParams,
|
...queryParams,
|
||||||
},
|
},
|
||||||
`工作量汇总表.xlsx`,
|
`工作量汇总表.xlsx`,
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,12 @@
|
||||||
<!-- 月份 -->
|
<!-- 月份 -->
|
||||||
<el-form-item label="月份" prop="planManagementMonth">
|
<el-form-item label="月份" prop="planManagementMonth">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.planManagementMonth"
|
|
||||||
type="month"
|
type="month"
|
||||||
|
style="width: 100%"
|
||||||
value-format="YYYY-MM"
|
value-format="YYYY-MM"
|
||||||
placeholder="请选择月份"
|
placeholder="请选择月份"
|
||||||
style="width: 100%"
|
v-model="formData.planManagementMonth"
|
||||||
|
@change="handleMonthChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
|
@ -22,7 +23,7 @@
|
||||||
<el-form-item label="项目名称" prop="projectName">
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
<el-input
|
<el-input
|
||||||
clearable
|
clearable
|
||||||
maxlength="50"
|
maxlength="100"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
placeholder="请输入项目名称"
|
placeholder="请输入项目名称"
|
||||||
v-model.trim="formData.projectName"
|
v-model.trim="formData.projectName"
|
||||||
|
|
@ -35,9 +36,9 @@
|
||||||
type="textarea"
|
type="textarea"
|
||||||
maxlength="500"
|
maxlength="500"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
:autosize="{ minRows: 3, maxRows: 6 }"
|
|
||||||
placeholder="请输入作业内容"
|
placeholder="请输入作业内容"
|
||||||
v-model.trim="formData.workContent"
|
v-model.trim="formData.workContent"
|
||||||
|
:autosize="{ minRows: 4, maxRows: 8 }"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
|
@ -64,20 +65,28 @@
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.stareDate"
|
v-model="formData.stareDate"
|
||||||
type="date"
|
type="date"
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
placeholder="请选择计划开始时间"
|
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
:placeholder="!formData.planManagementMonth ? '请先选择月份' : '请选择计划开始时间'"
|
||||||
|
:disabled="!formData.planManagementMonth"
|
||||||
|
:disabled-date="disabledStartDate"
|
||||||
|
:default-value="defaultDateValue"
|
||||||
|
@change="handleStartDateChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- 计划结束时间 -->
|
<!-- 计划结束时间 -->
|
||||||
<el-form-item label="计划结束时间" prop="endDate">
|
<el-form-item label="计划结束时间" prop="endDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.endDate"
|
|
||||||
type="date"
|
type="date"
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
placeholder="请选择计划结束时间"
|
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
v-model="formData.endDate"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
:placeholder="!formData.planManagementMonth ? '请先选择月份' : '请选择计划结束时间'"
|
||||||
|
:disabled="!formData.planManagementMonth"
|
||||||
|
:disabled-date="disabledEndDate"
|
||||||
|
:default-value="defaultDateValue"
|
||||||
|
@change="handleEndDateChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
|
@ -104,7 +113,7 @@
|
||||||
type="textarea"
|
type="textarea"
|
||||||
maxlength="200"
|
maxlength="200"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
:autosize="{ minRows: 3, maxRows: 6 }"
|
:autosize="{ minRows: 4, maxRows: 8 }"
|
||||||
placeholder="请输入备注"
|
placeholder="请输入备注"
|
||||||
v-model.trim="formData.remark"
|
v-model.trim="formData.remark"
|
||||||
/>
|
/>
|
||||||
|
|
@ -113,7 +122,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="AddAndEditForm">
|
<script setup name="AddAndEditForm">
|
||||||
import { ref } from 'vue'
|
import { ref, watch, computed } from 'vue'
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
const { plan_risk_level } = proxy.useDict('plan_risk_level')
|
const { plan_risk_level } = proxy.useDict('plan_risk_level')
|
||||||
|
|
||||||
|
|
@ -130,13 +139,186 @@ const props = defineProps({
|
||||||
|
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
|
|
||||||
|
// 计算月份的开始和结束日期
|
||||||
|
const monthRange = computed(() => {
|
||||||
|
if (!props.formData.planManagementMonth) {
|
||||||
|
return { start: null, end: null }
|
||||||
|
}
|
||||||
|
const [year, month] = props.formData.planManagementMonth.split('-')
|
||||||
|
const start = new Date(year, parseInt(month) - 1, 1)
|
||||||
|
const end = new Date(year, parseInt(month), 0, 23, 59, 59) // 当月最后一天
|
||||||
|
|
||||||
|
return {
|
||||||
|
start: start.getTime(),
|
||||||
|
end: end.getTime(),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 计算默认日期值(用于日期选择器打开时定位到选定月份)
|
||||||
|
const defaultDateValue = computed(() => {
|
||||||
|
if (!props.formData.planManagementMonth) {
|
||||||
|
return new Date() // 如果没有选择月份,使用当前日期
|
||||||
|
}
|
||||||
|
const [year, month] = props.formData.planManagementMonth.split('-')
|
||||||
|
// 返回选定月份的第一天,这样日期选择器打开时会显示该月份
|
||||||
|
return new Date(year, parseInt(month) - 1, 1)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 检查日期是否在选定月份内
|
||||||
|
const isDateInMonth = (dateStr) => {
|
||||||
|
if (!dateStr || !monthRange.value.start) return false
|
||||||
|
const date = new Date(dateStr)
|
||||||
|
const timestamp = date.getTime()
|
||||||
|
return timestamp >= monthRange.value.start && timestamp <= monthRange.value.end
|
||||||
|
}
|
||||||
|
|
||||||
|
// 月份变化处理
|
||||||
|
const handleMonthChange = (value) => {
|
||||||
|
// value 是新的月份值(格式:YYYY-MM)
|
||||||
|
if (!value) {
|
||||||
|
// 如果月份被清空,清空开始和结束时间
|
||||||
|
props.formData.stareDate = ''
|
||||||
|
props.formData.endDate = ''
|
||||||
|
formRef.value?.clearValidate(['stareDate', 'endDate'])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算新月份的范围
|
||||||
|
const [year, month] = value.split('-')
|
||||||
|
const monthStart = new Date(year, parseInt(month) - 1, 1).getTime()
|
||||||
|
const monthEnd = new Date(year, parseInt(month), 0, 23, 59, 59).getTime()
|
||||||
|
|
||||||
|
// 检查开始时间是否在新月份内
|
||||||
|
if (props.formData.stareDate) {
|
||||||
|
const stareTimestamp = new Date(props.formData.stareDate).getTime()
|
||||||
|
if (stareTimestamp < monthStart || stareTimestamp > monthEnd) {
|
||||||
|
props.formData.stareDate = ''
|
||||||
|
formRef.value?.clearValidate('stareDate')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查结束时间是否在新月份内
|
||||||
|
if (props.formData.endDate) {
|
||||||
|
const endTimestamp = new Date(props.formData.endDate).getTime()
|
||||||
|
if (endTimestamp < monthStart || endTimestamp > monthEnd) {
|
||||||
|
props.formData.endDate = ''
|
||||||
|
formRef.value?.clearValidate('endDate')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 禁用开始日期的逻辑(只能选择选定月份内的日期)
|
||||||
|
const disabledStartDate = (time) => {
|
||||||
|
if (!monthRange.value.start || !monthRange.value.end) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const timestamp = time.getTime()
|
||||||
|
return timestamp < monthRange.value.start || timestamp > monthRange.value.end
|
||||||
|
}
|
||||||
|
|
||||||
|
// 禁用结束日期的逻辑(只能选择选定月份内的日期,且不能早于开始时间)
|
||||||
|
const disabledEndDate = (time) => {
|
||||||
|
if (!monthRange.value.start || !monthRange.value.end) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const timestamp = time.getTime()
|
||||||
|
|
||||||
|
// 不能选择月份范围外的日期
|
||||||
|
if (timestamp < monthRange.value.start || timestamp > monthRange.value.end) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果已选择开始时间,结束时间不能早于开始时间
|
||||||
|
if (props.formData.stareDate) {
|
||||||
|
const startTimestamp = new Date(props.formData.stareDate).getTime()
|
||||||
|
return timestamp < startTimestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始时间变化处理
|
||||||
|
const handleStartDateChange = (value) => {
|
||||||
|
// 如果开始时间改变,且结束时间早于开始时间,清空结束时间
|
||||||
|
if (value && props.formData.endDate) {
|
||||||
|
const startTimestamp = new Date(value).getTime()
|
||||||
|
const endTimestamp = new Date(props.formData.endDate).getTime()
|
||||||
|
if (endTimestamp < startTimestamp) {
|
||||||
|
props.formData.endDate = ''
|
||||||
|
formRef.value?.clearValidate('endDate')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 结束时间变化处理
|
||||||
|
const handleEndDateChange = (value) => {
|
||||||
|
// 验证结束时间必须晚于或等于开始时间
|
||||||
|
if (value && props.formData.stareDate) {
|
||||||
|
const startTimestamp = new Date(props.formData.stareDate).getTime()
|
||||||
|
const endTimestamp = new Date(value).getTime()
|
||||||
|
if (endTimestamp < startTimestamp) {
|
||||||
|
proxy.$modal.msgError('结束时间不能早于开始时间')
|
||||||
|
props.formData.endDate = ''
|
||||||
|
formRef.value?.clearValidate('endDate')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
planManagementMonth: [{ required: true, message: '请选择月份', trigger: 'change' }],
|
planManagementMonth: [{ required: true, message: '请选择月份', trigger: 'change' }],
|
||||||
projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
||||||
workContent: [{ required: true, message: '请输入作业内容', trigger: 'blur' }],
|
workContent: [{ required: true, message: '请输入作业内容', trigger: 'blur' }],
|
||||||
inspectionStationId: [{ required: true, message: '请选择实施部门', trigger: 'change' }],
|
inspectionStationId: [{ required: true, message: '请选择实施部门', trigger: 'change' }],
|
||||||
stareDate: [{ required: true, message: '请选择计划开始时间', trigger: 'change' }],
|
stareDate: [
|
||||||
endDate: [{ required: true, message: '请选择计划结束时间', trigger: 'change' }],
|
{ required: true, message: '请选择计划开始时间', trigger: 'change' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (!value) {
|
||||||
|
callback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!props.formData.planManagementMonth) {
|
||||||
|
callback(new Error('请先选择月份'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!isDateInMonth(value)) {
|
||||||
|
callback(new Error('开始时间必须在选定的月份内'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
trigger: 'change',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
endDate: [
|
||||||
|
{ required: true, message: '请选择计划结束时间', trigger: 'change' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (!value) {
|
||||||
|
callback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!props.formData.planManagementMonth) {
|
||||||
|
callback(new Error('请先选择月份'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!isDateInMonth(value)) {
|
||||||
|
callback(new Error('结束时间必须在选定的月份内'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (props.formData.stareDate) {
|
||||||
|
const startTimestamp = new Date(props.formData.stareDate).getTime()
|
||||||
|
const endTimestamp = new Date(value).getTime()
|
||||||
|
if (endTimestamp < startTimestamp) {
|
||||||
|
callback(new Error('结束时间不能早于开始时间'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
},
|
||||||
|
trigger: 'change',
|
||||||
|
},
|
||||||
|
],
|
||||||
riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
|
riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,9 @@ import { ref, nextTick, getCurrentInstance, computed } from 'vue'
|
||||||
import { listPlanAPI, addPlanAPI, updatePlanAPI, delPlanAPI } from '@/api/planMange/plan.js'
|
import { listPlanAPI, addPlanAPI, updatePlanAPI, delPlanAPI } from '@/api/planMange/plan.js'
|
||||||
import { getInspectionStationSelectAPI } from '@/api/common.js'
|
import { getInspectionStationSelectAPI } from '@/api/common.js'
|
||||||
import { useOptions } from '@/hooks/useOptions'
|
import { useOptions } from '@/hooks/useOptions'
|
||||||
|
import useDictStore from '@/store/modules/dict'
|
||||||
|
import { selectDictLabel } from '@/utils/ruoyi'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
import config from './config'
|
import config from './config'
|
||||||
import ComTable from '@/components/ComTable/index.vue'
|
import ComTable from '@/components/ComTable/index.vue'
|
||||||
import ComButton from '@/components/ComButton/index.vue'
|
import ComButton from '@/components/ComButton/index.vue'
|
||||||
|
|
@ -50,6 +52,7 @@ import AddAndEditForm from './addAndEditForm.vue'
|
||||||
|
|
||||||
const { tableColumns: baseTableColumns, dialogConfig, buildFormColumns } = config
|
const { tableColumns: baseTableColumns, dialogConfig, buildFormColumns } = config
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
|
const dictStore = useDictStore()
|
||||||
|
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const comTableRef = ref(null)
|
const comTableRef = ref(null)
|
||||||
|
|
@ -63,13 +66,24 @@ const formColumns = computed(() =>
|
||||||
buildFormColumns(inspectionStationOptions.value, plan_risk_level.value),
|
buildFormColumns(inspectionStationOptions.value, plan_risk_level.value),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 创建动态 formatter 函数,每次执行时从 store 获取最新的字典数据
|
||||||
|
const createDynamicDictFormatter = (dictType, fieldName = null) => {
|
||||||
|
return (row, column, cellValue) => {
|
||||||
|
const value = fieldName ? row[fieldName] : cellValue
|
||||||
|
// 每次执行时都从 store 获取最新的字典数据
|
||||||
|
const dictData = dictStore.getDict(dictType) || []
|
||||||
|
return selectDictLabel(dictData, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 构建表格列配置,添加字典映射的 formatter
|
// 构建表格列配置,添加字典映射的 formatter
|
||||||
const tableColumns = computed(() => {
|
const tableColumns = computed(() => {
|
||||||
return baseTableColumns.map((column) => {
|
return baseTableColumns.map((column) => {
|
||||||
if (column.prop === 'riskLevel') {
|
if (column.prop === 'riskLevel') {
|
||||||
return {
|
return {
|
||||||
...column,
|
...column,
|
||||||
formatter: proxy.createDictFormatter(plan_risk_level.value, 'riskLevel'),
|
// 使用动态 formatter,每次执行时都会获取最新的字典数据
|
||||||
|
formatter: createDynamicDictFormatter('plan_risk_level', 'riskLevel'),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return column
|
return column
|
||||||
|
|
@ -87,7 +101,7 @@ console.log(inspectionStationOptions, 'inspectionStationOptions')
|
||||||
|
|
||||||
// 1. 定义初始表单数据函数(优雅重置)——字段与表单保持同步
|
// 1. 定义初始表单数据函数(优雅重置)——字段与表单保持同步
|
||||||
const getInitFormData = () => ({
|
const getInitFormData = () => ({
|
||||||
planManagementMonth: '', // 月份
|
planManagementMonth: dayjs().format('YYYY-MM'), // 月份 默认当月
|
||||||
projectName: '', // 项目名称
|
projectName: '', // 项目名称
|
||||||
workContent: '', // 作业内容
|
workContent: '', // 作业内容
|
||||||
inspectionStationId: null, // 实施部门
|
inspectionStationId: null, // 实施部门
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue