Преглед на файлове

refactor(monthlyAssess): 重构奖惩明细展示为表格形式

1. 将原有的循环模板替换为el-table组件展示奖惩明细
2. 新增日期选择列,默认使用当前日期
3. 根据分数正负自动显示奖励或扣罚相关字段
4. 新增默认金额计算逻辑:核心指标为分数*100,其他为分数*50
5. 优化操作按钮样式,调整输入框宽度和占位提示文本
huoyi преди 3 седмици
родител
ревизия
398182d674
променени са 1 файла, в които са добавени 51 реда и са изтрити 37 реда
  1. 51 37
      src/views/performanceManage/monthlyAssess/index.vue

+ 51 - 37
src/views/performanceManage/monthlyAssess/index.vue

@@ -536,42 +536,49 @@
536 536
           </div>
537 537
         </el-form-item>
538 538
 
539
-        <template
540
-          v-for="(detail, index) in (indicatorDialog.form.personnelMonthlyAssessmentIndicatorRewardPunishmentDetailList || [])"
541
-          :key="index">
542
-          <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
543
-            <h4 style="margin-left: 80px;">明细{{ index + 1 }}</h4>
544
-            <el-button type="danger" size="small" @click="removeRewardPunishmentDetail(index)">删除</el-button>
545
-          </div>
546
-          <el-form-item label="检查部门">
547
-            <div style="display: flex; align-items: center; gap: 10px; width: 100%;">
548
-              <el-select v-model="detail.qcDeptType" placeholder="请选择" style="width: 200px;">
549
-                <el-option v-for="item in base_performance_indicator_qc_dept_type" :key="item.value" :label="item.label"
550
-                  :value="item.value" />
551
-              </el-select>
552
-            </div>
553
-          </el-form-item>
554
-          <el-form-item v-if="indicatorDialog.form.score > 0" label="奖励明细">
555
-            <el-input v-model="detail.rewardPunishmentDetail" type="textarea" :rows="2" />
556
-          </el-form-item>
557
-          <el-form-item v-if="indicatorDialog.form.score > 0" label="奖励">
558
-            <div style="display: flex; align-items: center; gap: 10px;">
559
-              <el-input-number v-model="detail.amount" :min="0" :precision="2" style="width: 200px;"
560
-                @change="updateTotal" />
561
-              <span>元</span>
562
-            </div>
563
-          </el-form-item>
564
-          <el-form-item v-if="indicatorDialog.form.score < 0" label="惩罚明细">
565
-            <el-input v-model="detail.rewardPunishmentDetail" type="textarea" :rows="2" />
566
-          </el-form-item>
567
-          <el-form-item v-if="indicatorDialog.form.score < 0" label="扣罚">
568
-            <div style="display: flex; align-items: center; gap: 10px;">
569
-              <el-input-number v-model="detail.amount" :min="0" :precision="2" style="width: 200px;"
570
-                @change="updateTotal" />
571
-              <span>元</span>
572
-            </div>
573
-          </el-form-item>
574
-        </template>
539
+        <el-form-item label="记录明细">
540
+          <el-table :data="indicatorDialog.form.personnelMonthlyAssessmentIndicatorRewardPunishmentDetailList" border max-height="400" >
541
+            <el-table-column label="序号" type="index" width="60" align="center" />
542
+            <el-table-column label="日期" width="180">
543
+              <template #default="scope">
544
+                <el-date-picker v-model="scope.row.date" type="date" value-format="YYYY-MM-DD" placeholder="选择日期" style="width: 100%" />
545
+              </template>
546
+            </el-table-column>
547
+            <el-table-column label="检查部门" >
548
+              <template #default="scope">
549
+                <el-select v-model="scope.row.qcDeptType" placeholder="请选择" clearable>
550
+                  <el-option v-for="item in base_performance_indicator_qc_dept_type" :key="item.value" :label="item.label" :value="item.value" />
551
+                </el-select>
552
+              </template>
553
+            </el-table-column>
554
+            <el-table-column label="扣罚明细"  v-if="indicatorDialog.form.score < 0">
555
+              <template #default="scope">
556
+                <el-input v-model="scope.row.rewardPunishmentDetail" type="textarea" :rows="1" placeholder="请输入扣罚明细" />
557
+              </template>
558
+            </el-table-column>
559
+            <el-table-column label="扣罚(元)"  v-if="indicatorDialog.form.score < 0">
560
+              <template #default="scope">
561
+                <el-input-number v-model="scope.row.amount" :max="0" :precision="2" style="width: 170px;" @change="updateTotal" />
562
+              </template>
563
+            </el-table-column>
564
+            <el-table-column label="奖励明细" v-if="indicatorDialog.form.score > 0">
565
+              <template #default="scope">
566
+                <el-input v-model="scope.row.rewardPunishmentDetail" type="textarea" :rows="1" placeholder="请输入奖励明细" />
567
+              </template>
568
+            </el-table-column>
569
+            <el-table-column label="奖励(元)"  v-if="indicatorDialog.form.score > 0">
570
+              <template #default="scope">
571
+                <el-input-number v-model="scope.row.amount" :min="0" :precision="2" style="width: 170px;" @change="updateTotal" />
572
+              </template>
573
+            </el-table-column>
574
+            <el-table-column label="操作"align="center">
575
+              <template #default="scope">
576
+                <el-button type="danger" link icon="Delete" @click="removeRewardPunishmentDetail(scope.$index)" />
577
+              </template>
578
+            </el-table-column>
579
+          </el-table>
580
+          
581
+        </el-form-item>
575 582
       </el-form>
576 583
 
577 584
       <template #footer>
@@ -843,6 +850,7 @@ function transformIndicatorTree(treeData) {
843 850
 
844 851
 function onIndicatorCascaderChange(value) {
845 852
   const selected = findIndicatorById(indicatorDialog.cascaderOptions, value)
853
+
846 854
   if (selected) {
847 855
     indicatorDialog.form = {
848 856
       ...selected,
@@ -1420,12 +1428,18 @@ const updateTotal = () => {
1420 1428
     return
1421 1429
   }
1422 1430
   const targetCount = indicatorDialog.form.occurCount
1431
+  const today = `${new Date().getFullYear()}-${String(new Date().getMonth() + 1).padStart(2, '0')}-${String(new Date().getDate()).padStart(2, '0')}`
1423 1432
   if (list.length < targetCount) {
1424 1433
     for (let i = list.length; i < targetCount; i++) {
1434
+      const isCoreIndicator = indicatorDialog.form.categoryNameOne === '核心指标'
1435
+      const defaultAmount = isCoreIndicator
1436
+        ? (indicatorDialog.form.score * 100)
1437
+        : (indicatorDialog.form.score * 50)
1425 1438
       list.push({
1439
+        date: today,
1426 1440
         qcDeptType: '',
1427 1441
         rewardPunishmentDetail: '',
1428
-        amount: 0
1442
+        amount: defaultAmount
1429 1443
       })
1430 1444
     }
1431 1445
   }