Преглед изворни кода

feat(risk): 作业上报加工期字段 + 列表/详情展示

- 新增弹窗:加「工期」input-number 字段(在项目名称和施工开始时间之间)
  * 联动:工期 + 开始时间 → 自动算结束时间
  * 联动:开始/结束时间变化 → 自动重算工期
  * 必填校验 (>=1 天)
- 列表:加「工期(天)」列(在项目名称和施工开始时间之间)
- 详情:加「工期(天)」项
- 之前实现的 handleDurationChange / handleStartTimeChange / handleEndTimeChange 函数保留
- 测试数据补全 duration_days
yangjingjing пре 1 дан
родитељ
комит
3877b8f3de
1 измењених фајлова са 43 додато и 0 уклоњено
  1. 43 0
      src/views/risk/workReport/index.vue

+ 43 - 0
src/views/risk/workReport/index.vue

@@ -68,6 +68,12 @@
           :show-overflow-tooltip="true"
           min-width="180"
         />
+        <el-table-column
+          label="工期(天)"
+          align="center"
+          prop="durationDays"
+          width="90"
+        />
         <el-table-column
           label="施工开始时间"
           align="center"
@@ -143,6 +149,23 @@
           </el-col>
         </el-row>
 
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="工期" prop="durationDays">
+              <el-input-number
+                v-model="form.durationDays"
+                :min="1"
+                :max="3650"
+                :step="1"
+                placeholder="请输入工期,如:3天"
+                controls-position="right"
+                style="width: 100%"
+                @change="handleDurationChange"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="施工开始时间" prop="workStartTime">
@@ -275,6 +298,9 @@
         <el-descriptions-item label="项目名称">
           {{ viewForm.workTitle }}
         </el-descriptions-item>
+        <el-descriptions-item label="工期(天)">
+          {{ viewForm.durationDays ?? '-' }}
+        </el-descriptions-item>
         <el-descriptions-item label="施工开始时间">
           {{ viewForm.workStartTime }}
         </el-descriptions-item>
@@ -428,6 +454,7 @@ const data = reactive<any>({
     workContent: '',
     workStartTime: '',
     workEndTime: '',
+    durationDays: undefined,
     reporterName: '',
     contactPhone: '',
     photoList: [],
@@ -446,6 +473,21 @@ const data = reactive<any>({
   rules: {
     workType: [{ required: true, message: '请选择作业类型', trigger: 'change' }],
     workTitle: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
+    durationDays: [
+      { required: true, message: '请输入工期', trigger: 'blur' },
+      {
+        validator: (_rule: any, value: any, callback: any) => {
+          if (value === undefined || value === null || value === '') {
+            callback(new Error('请输入工期'));
+          } else if (Number(value) < 1) {
+            callback(new Error('工期必须大于等于1天'));
+          } else {
+            callback();
+          }
+        },
+        trigger: 'blur'
+      }
+    ],
     workStartTime: [{ required: true, message: '请选择施工开始时间', trigger: 'change' }],
     workEndTime: [
       { required: true, message: '请选择施工结束时间', trigger: 'change' },
@@ -665,6 +707,7 @@ const reset = () => {
     workContent: '',
     workStartTime: '',
     workEndTime: '',
+    durationDays: undefined,
     reporterName: '',
     contactPhone: '',
     photoList: [],