Переглянути джерело

feat(performanceManage): 重构月度考核表单布局并新增指标管理功能

重构非干部考核表单布局,将原有字段分组展示,并添加核心指标和其他指标的管理功能。新增指标项可进行增删改查操作,同时优化表单样式和用户体验。调整部分字段为自动计算不可编辑状态,减少手动输入错误。
huoyi 1 місяць тому
батько
коміт
636227c7fe
1 змінених файлів з 385 додано та 217 видалено
  1. 385 217
      src/views/performanceManage/monthlyAssess/index.vue

+ 385 - 217
src/views/performanceManage/monthlyAssess/index.vue

@@ -140,46 +140,39 @@
140 140
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="80%" :close-on-click-modal="false">
141 141
       <!-- 非干部表单 -->
142 142
       <el-form v-if="dialog.type === 'non-cadre'" :model="nonCadreForm" ref="formRef" :rules="nonCadreRules" label-width="180px" class="form-container">
143
+        <!-- 第一部分:基础信息 -->
143 144
         <el-row :gutter="20">
144 145
           <el-col :span="8">
145
-            <el-form-item label="大队" prop="brigade">
146
-              <el-input v-model="nonCadreForm.brigade" placeholder="请输入大队" />
146
+            <el-form-item label="姓名" prop="employeeName">
147
+              <el-input v-model="nonCadreForm.employeeName" placeholder="请输入姓名" />
147 148
             </el-form-item>
148 149
           </el-col>
149 150
           <el-col :span="8">
150
-            <el-form-item label="用工形式" prop="employmentType">
151
-              <el-select v-model="nonCadreForm.employmentType" placeholder="请选择用工形式" style="width: 100%">
152
-                <el-option v-for="item in employmentTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
153
-              </el-select>
151
+            <el-form-item label="考核月份" prop="assessmentMonth">
152
+              <el-date-picker v-model="nonCadreForm.assessmentMonth" type="month" placeholder="请选择考核月份" 
153
+                value-format="YYYY-MM" style="width: 100%" />
154 154
             </el-form-item>
155 155
           </el-col>
156 156
           <el-col :span="8">
157
-            <el-form-item label="员工编号" prop="employeeCode">
158
-              <el-input v-model="nonCadreForm.employeeCode" placeholder="请输入员工编号" />
159
-            </el-form-item>
157
+            <div class="score-display">
158
+              <span class="score-label">总分:</span>
159
+              <span class="score-value">{{ nonCadreForm.totalScore }}</span>
160
+              <span class="result-label">考核结果:</span>
161
+              <span class="result-value" :class="{'text-danger': nonCadreForm.assessmentResult === 'unqualified'}">
162
+                {{ getResultText(nonCadreForm.assessmentResult) }}
163
+              </span>
164
+            </div>
160 165
           </el-col>
161 166
         </el-row>
162 167
 
163 168
         <el-row :gutter="20">
164 169
           <el-col :span="8">
165
-            <el-form-item label="员工姓名" prop="employeeName">
166
-              <el-input v-model="nonCadreForm.employeeName" placeholder="请输入员工姓名" />
167
-            </el-form-item>
168
-          </el-col>
169
-          <el-col :span="8">
170
-            <el-form-item label="考核组" prop="assessmentGroup">
171
-              <el-input v-model="nonCadreForm.assessmentGroup" placeholder="请输入考核组" />
172
-            </el-form-item>
173
-          </el-col>
174
-          <el-col :span="8">
175
-            <el-form-item label="考核月份" prop="assessmentMonth">
176
-              <el-date-picker v-model="nonCadreForm.assessmentMonth" type="month" placeholder="请选择考核月份" 
177
-                value-format="YYYY-MM" style="width: 100%" />
170
+            <el-form-item label="用工形式" prop="employmentType">
171
+              <el-select v-model="nonCadreForm.employmentType" placeholder="请选择用工形式" style="width: 100%">
172
+                <el-option v-for="item in employmentTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
173
+              </el-select>
178 174
             </el-form-item>
179 175
           </el-col>
180
-        </el-row>
181
-
182
-        <el-row :gutter="20">
183 176
           <el-col :span="8">
184 177
             <el-form-item label="分管班组长" prop="teamLeader">
185 178
               <el-input v-model="nonCadreForm.teamLeader" placeholder="请输入分管班组长" />
@@ -190,199 +183,229 @@
190 183
               <el-input v-model="nonCadreForm.supervisor" placeholder="请输入分管主管" />
191 184
             </el-form-item>
192 185
           </el-col>
193
-          <el-col :span="8">
194
-            <el-form-item label="分管员工数量" prop="managedEmployeeCount">
195
-              <el-input-number v-model="nonCadreForm.managedEmployeeCount" :min="0" style="width: 100%" />
196
-            </el-form-item>
197
-          </el-col>
198
-        </el-row>
199
-
200
-        <el-divider content-position="left">红线指标</el-divider>
201
-        <el-row :gutter="20">
202
-          <el-col :span="12">
203
-            <el-form-item label="红线指标触发次数" prop="redLineTriggerCount">
204
-              <el-input-number v-model="nonCadreForm.redLineTriggerCount" :min="0" style="width: 100%" />
205
-            </el-form-item>
206
-          </el-col>
207
-          <el-col :span="12">
208
-            <el-form-item label="红线指标依据" prop="redLineBasis">
209
-              <el-input v-model="nonCadreForm.redLineBasis" type="textarea" :rows="2" placeholder="请输入红线指标依据" />
210
-            </el-form-item>
211
-          </el-col>
212
-        </el-row>
213
-
214
-        <el-divider content-position="left">核心指标</el-divider>
215
-        <el-row :gutter="20">
216
-          <el-col :span="12">
217
-            <el-form-item label="核心指标分值" prop="coreIndicatorScore">
218
-              <el-input-number v-model="nonCadreForm.coreIndicatorScore" :min="0" :precision="2" style="width: 100%" />
219
-            </el-form-item>
220
-          </el-col>
221
-          <el-col :span="12">
222
-            <el-form-item label="核心指标依据" prop="coreIndicatorBasis">
223
-              <el-input v-model="nonCadreForm.coreIndicatorBasis" type="textarea" :rows="2" placeholder="请输入核心指标依据" />
224
-            </el-form-item>
225
-          </el-col>
226
-        </el-row>
227
-
228
-        <el-divider content-position="left">其他指标</el-divider>
229
-        <el-row :gutter="20">
230
-          <el-col :span="12">
231
-            <el-form-item label="其他指标分值" prop="otherIndicatorScore">
232
-              <el-input-number v-model="nonCadreForm.otherIndicatorScore" :min="0" :precision="2" style="width: 100%" />
233
-            </el-form-item>
234
-          </el-col>
235
-          <el-col :span="12">
236
-            <el-form-item label="其他指标依据" prop="otherIndicatorBasis">
237
-              <el-input v-model="nonCadreForm.otherIndicatorBasis" type="textarea" :rows="2" placeholder="请输入其他指标依据" />
238
-            </el-form-item>
239
-          </el-col>
240
-        </el-row>
241
-
242
-        <el-divider content-position="left">其他指标中的安全(仅含SOC/站品控检查扣分)</el-divider>
243
-        <el-row :gutter="20">
244
-          <el-col :span="12">
245
-            <el-form-item label="分值" prop="safetyWithSocScore">
246
-              <el-input-number v-model="nonCadreForm.safetyWithSocScore" :min="0" :precision="2" style="width: 100%" />
247
-            </el-form-item>
248
-          </el-col>
249
-          <el-col :span="12">
250
-            <el-form-item label="依据" prop="safetyWithSocBasis">
251
-              <el-input v-model="nonCadreForm.safetyWithSocBasis" type="textarea" :rows="2" placeholder="请输入依据" />
252
-            </el-form-item>
253
-          </el-col>
254
-        </el-row>
255
-
256
-        <el-divider content-position="left">其他指标中的安全(不含SOC/站品控检查扣分)</el-divider>
257
-        <el-row :gutter="20">
258
-          <el-col :span="12">
259
-            <el-form-item label="分值" prop="safetyWithoutSocScore">
260
-              <el-input-number v-model="nonCadreForm.safetyWithoutSocScore" :min="0" :precision="2" style="width: 100%" />
261
-            </el-form-item>
262
-          </el-col>
263
-          <el-col :span="12">
264
-            <el-form-item label="依据" prop="safetyWithoutSocBasis">
265
-              <el-input v-model="nonCadreForm.safetyWithoutSocBasis" type="textarea" :rows="2" placeholder="请输入依据" />
266
-            </el-form-item>
267
-          </el-col>
268
-        </el-row>
269
-
270
-        <el-divider content-position="left">其他指标中的非安全指标扣分</el-divider>
271
-        <el-row :gutter="20">
272
-          <el-col :span="12">
273
-            <el-form-item label="扣分" prop="nonSafetyDeduction">
274
-              <el-input-number v-model="nonCadreForm.nonSafetyDeduction" :min="0" :precision="2" style="width: 100%" />
275
-            </el-form-item>
276
-          </el-col>
277
-          <el-col :span="12">
278
-            <el-form-item label="依据" prop="nonSafetyDeductionBasis">
279
-              <el-input v-model="nonCadreForm.nonSafetyDeductionBasis" type="textarea" :rows="2" placeholder="请输入依据" />
280
-            </el-form-item>
281
-          </el-col>
282
-        </el-row>
283
-
284
-        <el-divider content-position="left">综合扣分</el-divider>
285
-        <el-row :gutter="20">
286
-          <el-col :span="12">
287
-            <el-form-item label="非核心安全+核心扣分" prop="nonCoreSafetyCoreDeduction">
288
-              <el-input-number v-model="nonCadreForm.nonCoreSafetyCoreDeduction" :min="0" :precision="2" style="width: 100%" />
289
-            </el-form-item>
290
-          </el-col>
291
-          <el-col :span="12">
292
-            <el-form-item label="SOC/站品控检查的涉及核心、安全指标扣分" prop="socSafetyCoreDeduction">
293
-              <el-input-number v-model="nonCadreForm.socSafetyCoreDeduction" :min="0" :precision="2" style="width: 100%" />
294
-            </el-form-item>
295
-          </el-col>
296
-        </el-row>
297
-
298
-        <el-row :gutter="20">
299
-          <el-col :span="24">
300
-            <el-form-item label="SOC/站品控检查的涉及核心、安全指标扣分依据" prop="socSafetyCoreDeductionBasis">
301
-              <el-input v-model="nonCadreForm.socSafetyCoreDeductionBasis" type="textarea" :rows="2" placeholder="请输入依据" />
302
-            </el-form-item>
303
-          </el-col>
304
-        </el-row>
305
-
306
-        <el-divider content-position="left">统计信息</el-divider>
307
-        <el-row :gutter="20">
308
-          <el-col :span="8">
309
-            <el-form-item label="扣分平均值" prop="averageDeduction">
310
-              <el-input-number v-model="nonCadreForm.averageDeduction" :min="0" :precision="2" style="width: 100%" />
311
-            </el-form-item>
312
-          </el-col>
313
-          <el-col :span="8">
314
-            <el-form-item label="总分" prop="totalScore">
315
-              <el-input-number v-model="nonCadreForm.totalScore" :min="0" :precision="2" style="width: 100%" />
316
-            </el-form-item>
317
-          </el-col>
318
-          <el-col :span="8">
319
-            <el-form-item label="奖励(元)" prop="rewardAmount">
320
-              <el-input-number v-model="nonCadreForm.rewardAmount" :min="0" :precision="2" style="width: 100%" />
321
-            </el-form-item>
322
-          </el-col>
323 186
         </el-row>
324 187
 
325 188
         <el-row :gutter="20">
326 189
           <el-col :span="8">
327
-            <el-form-item label="扣罚(元)" prop="penaltyAmount">
328
-              <el-input-number v-model="nonCadreForm.penaltyAmount" :min="0" :precision="2" style="width: 100%" />
190
+            <el-form-item label="分管经理" prop="manager">
191
+              <el-input v-model="nonCadreForm.manager" placeholder="请输入分管经理" />
329 192
             </el-form-item>
330 193
           </el-col>
331 194
           <el-col :span="8">
332
-            <el-form-item label="考核结果" prop="assessmentResult">
333
-              <el-select v-model="nonCadreForm.assessmentResult" placeholder="请选择考核结果" style="width: 100%">
334
-                <el-option v-for="item in assessmentResultOptions" :key="item.value" :label="item.label" :value="item.value" />
195
+            <el-form-item label="大队" prop="brigade">
196
+              <el-select v-model="nonCadreForm.brigade" placeholder="请选择大队" style="width: 100%">
197
+                <el-option label="一大队" value="1" />
198
+                <el-option label="二大队" value="2" />
199
+                <el-option label="三大队" value="3" />
335 200
               </el-select>
336 201
             </el-form-item>
337 202
           </el-col>
338 203
           <el-col :span="8">
339
-            <el-form-item label="应用方式" prop="applicationMethod">
340
-              <el-select v-model="nonCadreForm.applicationMethod" placeholder="请选择应用方式" style="width: 100%">
341
-                <el-option v-for="item in applicationMethodOptions" :key="item.value" :label="item.label" :value="item.value" />
204
+            <el-form-item label="考核组" prop="assessmentGroup">
205
+              <el-select v-model="nonCadreForm.assessmentGroup" placeholder="请选择考核组" style="width: 100%">
206
+                <el-option label="一组" value="1" />
207
+                <el-option label="二组" value="2" />
208
+                <el-option label="三组" value="3" />
342 209
               </el-select>
343 210
             </el-form-item>
344 211
           </el-col>
345 212
         </el-row>
346 213
 
347
-        <el-row :gutter="20">
348
-          <el-col :span="12">
349
-            <el-form-item label="奖励明细" prop="rewardDetails">
350
-              <el-input v-model="nonCadreForm.rewardDetails" type="textarea" :rows="2" placeholder="请输入奖励明细" />
351
-            </el-form-item>
352
-          </el-col>
353
-          <el-col :span="12">
354
-            <el-form-item label="惩罚明细" prop="penaltyDetails">
355
-              <el-input v-model="nonCadreForm.penaltyDetails" type="textarea" :rows="2" placeholder="请输入惩罚明细" />
356
-            </el-form-item>
357
-          </el-col>
358
-        </el-row>
359
-
360
-        <el-row :gutter="20">
361
-          <el-col :span="12">
362
-            <el-form-item label="考核结果备注" prop="assessmentResultRemark">
363
-              <el-input v-model="nonCadreForm.assessmentResultRemark" type="textarea" :rows="2" placeholder="请输入考核结果备注" />
364
-            </el-form-item>
365
-          </el-col>
366
-          <el-col :span="12">
367
-            <el-form-item label="应用方式备注" prop="applicationMethodRemark">
368
-              <el-input v-model="nonCadreForm.applicationMethodRemark" type="textarea" :rows="2" placeholder="请输入应用方式备注" />
369
-            </el-form-item>
370
-          </el-col>
371
-        </el-row>
214
+        <!-- 考核指标区域 -->
215
+        <div class="section-title blue">考核指标</div>
216
+        <div class="indicators-box">
217
+          <!-- 核心指标 -->
218
+          <div class="indicator-group">
219
+            <div class="indicator-group-title">核心指标</div>
220
+            <div class="indicator-item" v-for="(item, index) in nonCadreForm.coreIndicators" :key="index">
221
+              <div class="indicator-name">{{ item.name }}</div>
222
+              <div class="indicator-value">{{ item.score }}/次</div>
223
+              <div class="indicator-count">{{ item.count }}次</div>
224
+              <div class="indicator-source">{{ item.source }}</div>
225
+              <div class="indicator-total">{{ item.total }}</div>
226
+              <div class="indicator-actions">
227
+                <el-button type="primary" link icon="Edit" @click="editIndicator('core', index)">编辑</el-button>
228
+                <el-button type="danger" link icon="Delete" @click="deleteIndicator('core', index)">删除</el-button>
229
+              </div>
230
+            </div>
231
+            <el-button type="primary" plain icon="Plus" @click="addIndicator('core')" style="margin-top: 10px;">添加核心指标</el-button>
232
+          </div>
233
+
234
+          <!-- 其他指标 -->
235
+          <div class="indicator-group" style="margin-top: 20px;">
236
+            <div class="indicator-group-title">其他指标</div>
237
+            <div class="indicator-item" v-for="(item, index) in nonCadreForm.otherIndicators" :key="index">
238
+              <div class="indicator-name">{{ item.name }}</div>
239
+              <div class="indicator-value">{{ item.score }}/次</div>
240
+              <div class="indicator-count">{{ item.count }}次</div>
241
+              <div class="indicator-source">{{ item.source }}</div>
242
+              <div class="indicator-total">{{ item.total }}</div>
243
+              <div class="indicator-actions">
244
+                <el-button type="primary" link icon="Edit" @click="editIndicator('other', index)">编辑</el-button>
245
+                <el-button type="danger" link icon="Delete" @click="deleteIndicator('other', index)">删除</el-button>
246
+              </div>
247
+            </div>
248
+            <el-button type="primary" plain icon="Plus" @click="addIndicator('other')" style="margin-top: 10px;">添加其他指标</el-button>
249
+          </div>
250
+        </div>
372 251
 
373
-        <el-divider content-position="left">豁免信息</el-divider>
374
-        <el-row :gutter="20">
375
-          <el-col :span="12">
376
-            <el-form-item label="是否豁免" prop="isExempted">
377
-              <el-switch v-model="nonCadreForm.isExempted" active-text="是" inactive-text="否" />
378
-            </el-form-item>
379
-          </el-col>
380
-          <el-col :span="12">
381
-            <el-form-item label="是否豁免备注" prop="exemptionRemark">
382
-              <el-input v-model="nonCadreForm.exemptionRemark" type="textarea" :rows="2" placeholder="请输入豁免备注" />
383
-            </el-form-item>
384
-          </el-col>
385
-        </el-row>
252
+        <!-- 第二部分:详细信息 -->
253
+        <div style="margin-top: 30px;">
254
+          <el-row :gutter="20">
255
+            <el-col :span="12">
256
+              <el-form-item label="红线指标触发次数">
257
+                <el-input v-model="nonCadreForm.redLineTriggerCount" disabled placeholder="不可编辑,红线明细的次数之和" />
258
+              </el-form-item>
259
+            </el-col>
260
+            <el-col :span="12">
261
+              <el-form-item label="红线指标依据">
262
+                <el-input v-model="nonCadreForm.redLineBasis" type="textarea" :rows="1" disabled placeholder="不可编辑,红线明细的集合" />
263
+              </el-form-item>
264
+            </el-col>
265
+          </el-row>
266
+
267
+          <el-row :gutter="20">
268
+            <el-col :span="12">
269
+              <el-form-item label="核心指标分值">
270
+                <el-input v-model="nonCadreForm.coreIndicatorScore" disabled placeholder="不可编辑,各个明细的集合" />
271
+              </el-form-item>
272
+            </el-col>
273
+            <el-col :span="12">
274
+              <el-form-item label="核心指标依据">
275
+                <el-input v-model="nonCadreForm.coreIndicatorBasis" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
276
+              </el-form-item>
277
+            </el-col>
278
+          </el-row>
279
+
280
+          <el-row :gutter="20">
281
+            <el-col :span="12">
282
+              <el-form-item label="其他指标中的安全指标(仅含SOC/站品控检查扣分)分值">
283
+                <el-input v-model="nonCadreForm.safetyWithSocScore" disabled placeholder="不可编辑,各个明细的集合" />
284
+              </el-form-item>
285
+            </el-col>
286
+            <el-col :span="12">
287
+              <el-form-item label="其他指标中的安全指标(仅含SOC/站品控检查扣分)依据">
288
+                <el-input v-model="nonCadreForm.safetyWithSocBasis" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
289
+              </el-form-item>
290
+            </el-col>
291
+          </el-row>
292
+
293
+          <el-row :gutter="20">
294
+            <el-col :span="12">
295
+              <el-form-item label="其他指标中的非安全指标分值">
296
+                <el-input v-model="nonCadreForm.nonSafetyIndicatorScore" disabled placeholder="不可编辑,各个明细的集合" />
297
+              </el-form-item>
298
+            </el-col>
299
+            <el-col :span="12">
300
+              <el-form-item label="其他指标中的非安全指标依据">
301
+                <el-input v-model="nonCadreForm.nonSafetyIndicatorBasis" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
302
+              </el-form-item>
303
+            </el-col>
304
+          </el-row>
305
+
306
+          <el-row :gutter="20">
307
+            <el-col :span="12">
308
+              <el-form-item label="SOC/站品控检查的涉及核心、安全指标扣分">
309
+                <el-input v-model="nonCadreForm.socSafetyCoreDeduction" disabled placeholder="不可编辑,各个明细的集合" />
310
+              </el-form-item>
311
+            </el-col>
312
+            <el-col :span="12">
313
+              <el-form-item label="SOC/站品控检查的涉及核心、安全指标扣分依据">
314
+                <el-input v-model="nonCadreForm.socSafetyCoreDeductionBasis" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
315
+              </el-form-item>
316
+            </el-col>
317
+          </el-row>
318
+
319
+          <el-row :gutter="20">
320
+            <el-col :span="12">
321
+              <el-form-item label="非核心安全+核心扣分">
322
+                <el-input v-model="nonCadreForm.nonCoreSafetyCoreDeduction" disabled placeholder="不可编辑,各个明细的集合" />
323
+              </el-form-item>
324
+            </el-col>
325
+            <el-col :span="12">
326
+              <el-form-item label="分管员工数量" prop="managedEmployeeCount">
327
+                <el-input-number v-model="nonCadreForm.managedEmployeeCount" :min="0" style="width: 100%" />
328
+              </el-form-item>
329
+            </el-col>
330
+          </el-row>
331
+
332
+          <el-row :gutter="20">
333
+            <el-col :span="12">
334
+              <el-form-item label="扣分平均值">
335
+                <el-input v-model="nonCadreForm.averageDeduction" disabled placeholder="不可编辑,计算" />
336
+              </el-form-item>
337
+            </el-col>
338
+            <el-col :span="12">
339
+              <el-form-item label="考核备注" prop="assessmentRemark">
340
+                <el-input v-model="nonCadreForm.assessmentRemark" type="textarea" :rows="1" placeholder="请输入考核备注" />
341
+              </el-form-item>
342
+            </el-col>
343
+          </el-row>
344
+
345
+          <el-row :gutter="20">
346
+            <el-col :span="12">
347
+              <el-form-item label="奖励明细汇总">
348
+                <el-input v-model="nonCadreForm.rewardDetailsSummary" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
349
+              </el-form-item>
350
+            </el-col>
351
+            <el-col :span="12">
352
+              <el-form-item label="惩罚明细汇总">
353
+                <el-input v-model="nonCadreForm.penaltyDetailsSummary" type="textarea" :rows="1" disabled placeholder="不可编辑,各个明细的集合" />
354
+              </el-form-item>
355
+            </el-col>
356
+          </el-row>
357
+
358
+          <el-row :gutter="20">
359
+            <el-col :span="8">
360
+              <el-form-item label="奖励汇总" prop="rewardAmount">
361
+                <div class="input-with-unit">
362
+                  <el-input-number v-model="nonCadreForm.rewardAmount" :min="0" :precision="2" style="width: calc(100% - 40px)" />
363
+                  <span class="unit">元</span>
364
+                </div>
365
+              </el-form-item>
366
+            </el-col>
367
+            <el-col :span="8">
368
+              <el-form-item label="扣罚汇总" prop="penaltyAmount">
369
+                <div class="input-with-unit">
370
+                  <el-input-number v-model="nonCadreForm.penaltyAmount" :min="0" :precision="2" style="width: calc(100% - 40px)" />
371
+                  <span class="unit">元</span>
372
+                </div>
373
+              </el-form-item>
374
+            </el-col>
375
+            <el-col :span="8"></el-col>
376
+          </el-row>
377
+
378
+          <el-row :gutter="20">
379
+            <el-col :span="12">
380
+              <el-form-item label="是否豁免" prop="isExempted">
381
+                <div class="exemption-container">
382
+                  <el-switch v-model="nonCadreForm.isExempted" active-text="是" inactive-text="否" />
383
+                  <span class="exemption-hint text-danger" v-if="nonCadreForm.isExempted">无扣分/仅病假/仅事假/仅病假、事假,显示为是,备注说明豁免情况</span>
384
+                </div>
385
+              </el-form-item>
386
+            </el-col>
387
+            <el-col :span="12">
388
+              <el-form-item label="豁免备注" prop="exemptionRemark">
389
+                <el-input v-model="nonCadreForm.exemptionRemark" type="textarea" :rows="1" placeholder="请输入豁免备注" />
390
+              </el-form-item>
391
+            </el-col>
392
+          </el-row>
393
+
394
+          <el-row :gutter="20">
395
+            <el-col :span="12">
396
+              <el-form-item label="应用方式" prop="applicationMethod">
397
+                <el-select v-model="nonCadreForm.applicationMethod" placeholder="请选择应用方式" style="width: 100%">
398
+                  <el-option v-for="item in applicationMethodOptions" :key="item.value" :label="item.label" :value="item.value" />
399
+                </el-select>
400
+              </el-form-item>
401
+            </el-col>
402
+            <el-col :span="12">
403
+              <el-form-item label="应用备注" prop="applicationMethodRemark">
404
+                <el-input v-model="nonCadreForm.applicationMethodRemark" type="textarea" :rows="1" placeholder="请输入应用备注" />
405
+              </el-form-item>
406
+            </el-col>
407
+          </el-row>
408
+        </div>
386 409
       </el-form>
387 410
 
388 411
       <!-- 干部表单 -->
@@ -536,35 +559,38 @@ const nonCadreForm = reactive({
536 559
   assessmentGroup: '',
537 560
   teamLeader: '',
538 561
   supervisor: '',
562
+  manager: '',
539 563
   managedEmployeeCount: 0,
540 564
   assessmentMonth: '',
541
-  redLineTriggerCount: 0,
565
+  redLineTriggerCount: '',
542 566
   redLineBasis: '',
543
-  coreIndicatorScore: 0,
567
+  coreIndicatorScore: '',
544 568
   coreIndicatorBasis: '',
545
-  otherIndicatorScore: 0,
546
-  otherIndicatorBasis: '',
547
-  safetyWithSocScore: 0,
569
+  safetyWithSocScore: '',
548 570
   safetyWithSocBasis: '',
549
-  safetyWithoutSocScore: 0,
550
-  safetyWithoutSocBasis: '',
551
-  nonSafetyDeduction: 0,
552
-  nonSafetyDeductionBasis: '',
553
-  nonCoreSafetyCoreDeduction: 0,
554
-  socSafetyCoreDeduction: 0,
571
+  nonSafetyIndicatorScore: '',
572
+  nonSafetyIndicatorBasis: '',
573
+  nonCoreSafetyCoreDeduction: '',
574
+  socSafetyCoreDeduction: '',
555 575
   socSafetyCoreDeductionBasis: '',
556
-  averageDeduction: 0,
576
+  averageDeduction: '',
557 577
   totalScore: 0,
558 578
   rewardAmount: 0,
559 579
   penaltyAmount: 0,
560 580
   assessmentResult: '',
561 581
   applicationMethod: '',
562
-  rewardDetails: '',
563
-  penaltyDetails: '',
564
-  assessmentResultRemark: '',
582
+  rewardDetailsSummary: '',
583
+  penaltyDetailsSummary: '',
584
+  assessmentRemark: '',
565 585
   applicationMethodRemark: '',
566 586
   isExempted: false,
567
-  exemptionRemark: ''
587
+  exemptionRemark: '',
588
+  coreIndicators: [
589
+    { name: '核心指标细项', score: -3, count: 3, source: 'SOC', total: -9 }
590
+  ],
591
+  otherIndicators: [
592
+    { name: '其他指标细项', score: -3, count: 1, source: '品控', total: -3 }
593
+  ]
568 594
 })
569 595
 
570 596
 // 干部表单数据
@@ -783,6 +809,43 @@ const generateMonthlyAssessment = async () => {
783 809
   }
784 810
 }
785 811
 
812
+// 获取考核结果文本
813
+const getResultText = (value) => {
814
+  const map = {
815
+    'excellent': '优秀',
816
+    'good': '良好',
817
+    'qualified': '合格',
818
+    'unqualified': '不称职'
819
+  }
820
+  return map[value] || ''
821
+}
822
+
823
+// 添加指标
824
+const addIndicator = (type) => {
825
+  ElMessage.success('添加功能开发中')
826
+}
827
+
828
+// 编辑指标
829
+const editIndicator = (type, index) => {
830
+  ElMessage.success('编辑功能开发中')
831
+}
832
+
833
+// 删除指标
834
+const deleteIndicator = (type, index) => {
835
+  ElMessageBox.confirm('确认删除该指标吗?', '提示', {
836
+    confirmButtonText: '确定',
837
+    cancelButtonText: '取消',
838
+    type: 'warning'
839
+  }).then(() => {
840
+    if (type === 'core') {
841
+      nonCadreForm.coreIndicators.splice(index, 1)
842
+    } else {
843
+      nonCadreForm.otherIndicators.splice(index, 1)
844
+    }
845
+    ElMessage.success('删除成功')
846
+  }).catch(() => {})
847
+}
848
+
786 849
 // 监听Tab切换
787 850
 const handleTabChange = () => {
788 851
   queryParams.pageNum = 1
@@ -844,4 +907,109 @@ onMounted(() => {
844 907
 :deep(.el-form-item__label) {
845 908
   font-weight: 500;
846 909
 }
910
+
911
+/* 新增样式 */
912
+.score-display {
913
+  display: flex;
914
+  align-items: center;
915
+  gap: 10px;
916
+  height: 32px;
917
+  line-height: 32px;
918
+  padding: 0 10px;
919
+}
920
+
921
+.score-label, .result-label {
922
+  font-weight: bold;
923
+  font-size: 16px;
924
+}
925
+
926
+.score-value {
927
+  font-size: 20px;
928
+  font-weight: bold;
929
+}
930
+
931
+.result-value {
932
+  font-size: 20px;
933
+  font-weight: bold;
934
+}
935
+
936
+.text-danger {
937
+  color: #f56c6c;
938
+}
939
+
940
+.section-title {
941
+  font-size: 22px;
942
+  font-weight: bold;
943
+  margin: 25px 0 15px 0;
944
+  padding-left: 5px;
945
+}
946
+
947
+.section-title.blue {
948
+  color: #409eff;
949
+  border-left: 4px solid #409eff;
950
+}
951
+
952
+.indicators-box {
953
+  border: 1px solid #dcdfe6;
954
+  border-radius: 4px;
955
+  padding: 15px;
956
+}
957
+
958
+.indicator-group {
959
+  padding: 10px 0;
960
+}
961
+
962
+.indicator-group-title {
963
+  font-size: 18px;
964
+  font-weight: bold;
965
+  color: #303133;
966
+  margin-bottom: 15px;
967
+}
968
+
969
+.indicator-item {
970
+  display: flex;
971
+  align-items: center;
972
+  gap: 10px;
973
+  margin-bottom: 10px;
974
+  padding: 10px;
975
+  background: #f5f7fa;
976
+  border-radius: 4px;
977
+}
978
+
979
+.indicator-name {
980
+  flex: 2;
981
+  font-size: 16px;
982
+}
983
+
984
+.indicator-value, .indicator-count, .indicator-source, .indicator-total {
985
+  flex: 1;
986
+  font-size: 16px;
987
+  text-align: center;
988
+}
989
+
990
+.indicator-actions {
991
+  display: flex;
992
+  gap: 5px;
993
+}
994
+
995
+.input-with-unit {
996
+  display: flex;
997
+  align-items: center;
998
+  gap: 10px;
999
+}
1000
+
1001
+.unit {
1002
+  font-size: 14px;
1003
+  color: #606266;
1004
+}
1005
+
1006
+.exemption-container {
1007
+  display: flex;
1008
+  align-items: center;
1009
+  gap: 15px;
1010
+}
1011
+
1012
+.exemption-hint {
1013
+  font-size: 12px;
1014
+}
847 1015
 </style>