Browse Source

feat(qualificationSummary): add review record management function

1. 调整弹窗宽度从600px到700px适配新表单内容
2. 移除冗余的个人基础信息表单项
3. 新增复审明细表格支持增删复审记录
4. 同步更新表单初始化、重置和编辑回显逻辑
5. 添加表单栅格布局优化页面排版
huoyi 3 weeks ago
parent
commit
fb43424abe
1 changed files with 70 additions and 32 deletions
  1. 70 32
      src/views/ledgerManage/qualificationSummary/index.vue

+ 70 - 32
src/views/ledgerManage/qualificationSummary/index.vue

@@ -77,26 +77,11 @@
77
       @pagination="getList" />
77
       @pagination="getList" />
78
 
78
 
79
     <!-- 添加或修改证书信息对话框 -->
79
     <!-- 添加或修改证书信息对话框 -->
80
-    <el-dialog :title="title" v-model="open" width="600px" append-to-body destroy-on-close>
81
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
80
+    <el-dialog :title="title" v-model="open" width="700px" append-to-body destroy-on-close>
81
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px" >
82
         <el-form-item label="姓名" prop="userId">
82
         <el-form-item label="姓名" prop="userId">
83
           <UserSelect v-model="form.userId" placeholder="请选择姓名" style="width: 100%" />
83
           <UserSelect v-model="form.userId" placeholder="请选择姓名" style="width: 100%" />
84
         </el-form-item>
84
         </el-form-item>
85
-        <el-form-item label="单位" prop="unitName">
86
-          <el-input v-model="form.unitName" placeholder="请输入单位" />
87
-        </el-form-item>
88
-        <el-form-item label="性别" prop="gender">
89
-          <el-select v-model="form.gender" placeholder="请选择性别" clearable style="width: 100%">
90
-            <el-option label="男" value="0" />
91
-            <el-option label="女" value="1" />
92
-          </el-select>
93
-        </el-form-item>
94
-        <el-form-item label="出生日期" prop="birthDate">
95
-          <el-date-picker v-model="form.birthDate" value-format="YYYY-MM-DD" type="date" placeholder="请选择出生日期" style="width: 100%" />
96
-        </el-form-item>
97
-        <el-form-item label="身份证号" prop="idCard">
98
-          <el-input v-model="form.idCard" placeholder="请输入身份证号" />
99
-        </el-form-item>
100
         <el-form-item label="证书等级" prop="certLevel">
85
         <el-form-item label="证书等级" prop="certLevel">
101
           <el-select v-model="form.certLevel" placeholder="请选择证书等级" clearable style="width: 100%">
86
           <el-select v-model="form.certLevel" placeholder="请选择证书等级" clearable style="width: 100%">
102
             <el-option v-for="dict in sys_user_qualification_level" :key="dict.value" :label="dict.label" :value="dict.value" />
87
             <el-option v-for="dict in sys_user_qualification_level" :key="dict.value" :label="dict.label" :value="dict.value" />
@@ -117,9 +102,6 @@
117
         <el-form-item label="评定成绩" prop="evalScore">
102
         <el-form-item label="评定成绩" prop="evalScore">
118
           <el-input v-model="form.evalScore" placeholder="请输入评定成绩" />
103
           <el-input v-model="form.evalScore" placeholder="请输入评定成绩" />
119
         </el-form-item>
104
         </el-form-item>
120
-        <el-form-item label="用工形式" prop="employmentType">
121
-          <el-input v-model="form.employmentType" placeholder="请输入用工形式" />
122
-        </el-form-item>
123
         <el-form-item label="服务期(月)" prop="serviceMonths">
105
         <el-form-item label="服务期(月)" prop="serviceMonths">
124
           <el-input-number v-model="form.serviceMonths" :min="0" placeholder="请输入服务期(月)" style="width: 100%" />
106
           <el-input-number v-model="form.serviceMonths" :min="0" placeholder="请输入服务期(月)" style="width: 100%" />
125
         </el-form-item>
107
         </el-form-item>
@@ -132,6 +114,31 @@
132
         <el-form-item label="备注" prop="remark">
114
         <el-form-item label="备注" prop="remark">
133
           <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
115
           <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
134
         </el-form-item>
116
         </el-form-item>
117
+        <el-form-item label="复审明细" prop="reviewRecords">
118
+          <div style="width: 100%">
119
+            <el-button type="primary" icon="Plus" @click="handleAddReview" style="margin-bottom: 10px">
120
+              新增明细
121
+            </el-button>
122
+            <el-table :data="form.reviewRecords || []" border fit style="width: 100%">
123
+              <el-table-column min-width="150">
124
+                <template #default="scope">
125
+                  {{ scope.row.reviewSeq === 1 ? '第一次复审时间' : scope.row.reviewSeq === 2 ? '第二次复审时间' : scope.row.reviewSeq === 3 ? '第三次复审时间' : `第${scope.row.reviewSeq}次复审时间` }}
126
+                </template>
127
+              </el-table-column>
128
+              <el-table-column label="复审时间" min-width="200">
129
+                <template #default="scope">
130
+                  <el-date-picker v-model="scope.row.reviewTime" value-format="YYYY-MM-DD" type="date"
131
+                    placeholder="选择日期" style="width: 100%" />
132
+                </template>
133
+              </el-table-column>
134
+              <el-table-column label="操作" width="80" align="center">
135
+                <template #default="scope">
136
+                  <el-button type="danger" link icon="Delete" @click="handleDeleteReview(scope.$index)" />
137
+                </template>
138
+              </el-table-column>
139
+            </el-table>
140
+          </div>
141
+        </el-form-item>
135
       </el-form>
142
       </el-form>
136
       <template #footer>
143
       <template #footer>
137
         <div class="dialog-footer">
144
         <div class="dialog-footer">
@@ -212,21 +219,17 @@ const open = ref(false)
212
 const form = ref({
219
 const form = ref({
213
   id: undefined,
220
   id: undefined,
214
   userId: '',
221
   userId: '',
215
-  unitName: '',
216
-  gender: '',
217
-  birthDate: '',
218
-  idCard: '',
219
   certLevel: '',
222
   certLevel: '',
220
   issueDate: '',
223
   issueDate: '',
221
   certNo: '',
224
   certNo: '',
222
   theoryScore: '',
225
   theoryScore: '',
223
   practiceScore: '',
226
   practiceScore: '',
224
   evalScore: '',
227
   evalScore: '',
225
-  employmentType: '',
226
   serviceMonths: undefined,
228
   serviceMonths: undefined,
227
   expiryDate: '',
229
   expiryDate: '',
228
   status: '',
230
   status: '',
229
-  remark: ''
231
+  remark: '',
232
+  reviewRecords: []
230
 })
233
 })
231
 
234
 
232
 const rules = reactive({
235
 const rules = reactive({
@@ -274,6 +277,9 @@ const handleUpdate = async (row) => {
274
   reset()
277
   reset()
275
   const res = await getQualificationSummary(row.id)
278
   const res = await getQualificationSummary(row.id)
276
   form.value = res.data || {}
279
   form.value = res.data || {}
280
+  if (!form.value.reviewRecords) {
281
+    form.value.reviewRecords = []
282
+  }
277
   open.value = true
283
   open.value = true
278
   title.value = '修改证书信息'
284
   title.value = '修改证书信息'
279
 }
285
 }
@@ -287,6 +293,24 @@ const handleDelete = (row) => {
287
   }).catch(() => { })
293
   }).catch(() => { })
288
 }
294
 }
289
 
295
 
296
+const handleAddReview = () => {
297
+  if (!form.value.reviewRecords) {
298
+    form.value.reviewRecords = []
299
+  }
300
+  const nextSeq = form.value.reviewRecords.length + 1
301
+  form.value.reviewRecords.push({
302
+    reviewSeq: nextSeq,
303
+    reviewTime: ''
304
+  })
305
+}
306
+
307
+const handleDeleteReview = (index) => {
308
+  form.value.reviewRecords.splice(index, 1)
309
+  form.value.reviewRecords.forEach((item, i) => {
310
+    item.reviewSeq = i + 1
311
+  })
312
+}
313
+
290
 const submitForm = async () => {
314
 const submitForm = async () => {
291
   const valid = await formRef.value.validate().catch(() => false)
315
   const valid = await formRef.value.validate().catch(() => false)
292
   if (!valid) return
316
   if (!valid) return
@@ -316,21 +340,17 @@ const reset = () => {
316
   form.value = {
340
   form.value = {
317
     id: undefined,
341
     id: undefined,
318
     userId: '',
342
     userId: '',
319
-    unitName: '',
320
-    gender: '',
321
-    birthDate: '',
322
-    idCard: '',
323
     certLevel: '',
343
     certLevel: '',
324
     issueDate: '',
344
     issueDate: '',
325
     certNo: '',
345
     certNo: '',
326
     theoryScore: '',
346
     theoryScore: '',
327
     practiceScore: '',
347
     practiceScore: '',
328
     evalScore: '',
348
     evalScore: '',
329
-    employmentType: '',
330
     serviceMonths: undefined,
349
     serviceMonths: undefined,
331
     expiryDate: '',
350
     expiryDate: '',
332
     status: '',
351
     status: '',
333
-    remark: ''
352
+    remark: '',
353
+    reviewRecords: []
334
   }
354
   }
335
   formRef.value && formRef.value.resetFields()
355
   formRef.value && formRef.value.resetFields()
336
 }
356
 }
@@ -398,4 +418,22 @@ onMounted(() => {
398
 .operation-container {
418
 .operation-container {
399
   margin-top: 10px;
419
   margin-top: 10px;
400
 }
420
 }
421
+
422
+.form-grid {
423
+  display: grid;
424
+  grid-template-columns: repeat(2, 1fr);
425
+  gap: 10px;
426
+}
427
+
428
+.form-grid :deep(.el-form-item) {
429
+  margin-bottom: 15px;
430
+}
431
+
432
+.form-grid :deep(.el-form-item:nth-child(n+15)) {
433
+  grid-column: span 2;
434
+}
435
+
436
+.form-grid :deep(.el-form-item:nth-child(16)) {
437
+  grid-column: span 2;
438
+}
401
 </style>
439
 </style>