xiaweibo 2 mesiacov pred
rodič
commit
8cf8970438
24 zmenil súbory, kde vykonal 201 pridanie a 152 odobranie
  1. 3 3
      src/api/evaluationSystem/index.ts
  2. 2 3
      src/api/receiptRecord/index.ts
  3. 4 4
      src/router/routers/production-safety-router/safetyAssessment.ts
  4. 1 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/oneByOneManagement/oneByOneManagement.vue
  5. 36 5
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/add.vue
  6. 1 10
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/configs/form.ts
  7. 57 6
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/edit.vue
  8. 0 14
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/list.vue
  9. 33 7
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/view.vue
  10. 2 2
      src/views/production-safety/safetyAssessment/evaluationDepartment/EvaluationDepartmentItem.vue
  11. 5 5
      src/views/production-safety/safetyAssessment/evaluationDepartment/components/EvaluationDepartmentFeedback.vue
  12. 1 1
      src/views/production-safety/safetyAssessment/evaluationDepartment/configs/status.ts
  13. 1 1
      src/views/production-safety/safetyAssessment/evaluationDepartment/constants.ts
  14. 1 1
      src/views/production-safety/safetyAssessment/evaluationDepartment/evaluationDepartment.vue
  15. 1 1
      src/views/production-safety/safetyAssessment/evaluationSystem/EvaluationSystemItem.vue
  16. 1 0
      src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationSystemDetail.vue
  17. 13 9
      src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationSystemFeedback.vue
  18. 5 5
      src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationTarget.vue
  19. 3 3
      src/views/production-safety/safetyAssessment/evaluationSystem/configs/status.ts
  20. 5 5
      src/views/production-safety/safetyAssessment/evaluationSystem/evaluationSystem.vue
  21. 7 47
      src/views/production-safety/safetyAssessment/pointDeduction/components/PointDeductionDetail.vue
  22. 2 2
      src/views/production-safety/safetyAssessment/pointDeduction/configs/form.ts
  23. 16 16
      src/views/production-safety/safetyAssessment/receiptRecord/configs/form.ts
  24. 1 1
      src/views/production-safety/safetyAssessment/receiptRecord/receiptRecord.vue

+ 3 - 3
src/api/evaluationSystem/index.ts

@@ -28,7 +28,7 @@ export interface EvaluationSystemItem {
   deptIds: string; // 下发部门ID
   planStartTime: string; // 计划开始时间
   planEndTime: string; // 计划结束时间
-  status: number; // 状态(0-未下发/2-待反馈/3-待评分/4-待审核/5-已作废/1-已完成)
+  status: number; // 状态(0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成)
   statusName: string; // 状态名称
   createdUserId: number;
   createdUserName: string; // 创建人
@@ -234,7 +234,7 @@ export interface EvaluationTargetItem {
   attachments: string; // 考核文档
   planEndTime: string; // 计划结束时间
   deptId: number; // 部门ID
-  status: number; // 状态(0-未下发/2-待反馈/3-待评分/4-待审核/5-已作废/1-已完成)
+  status: number; // 状态(0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成)
   statusName: string; // 状态名称
   reviewRejectReson?: string; // 审核拒绝原因
   approveRejectReson?: string; // 审批拒绝原因
@@ -257,7 +257,7 @@ export interface QuerySecurityExamineIssueQueryParam {
   psemId?: number; // 考核表ID(从路由参数获取)
   planStartTime?: string; // 计划开始时间
   planEndTime?: string; // 计划结束时间
-  status?: number; // 状态(0-未下发/2-待反馈/3-待评分/4-待审核/5-已作废/1-已完成)
+  status?: number; // 状态(0-未下发/2-待反馈/3-待复核/4-待审核/5-已作废/1-已完成)
   deptName?: string; // 部门名称(考核对象)
 }
 

+ 2 - 3
src/api/receiptRecord/index.ts

@@ -233,8 +233,7 @@ export function querInventoryManageList() {
  */
 export function updateClaimItemsLogConfirm(id: number) {
   return http.request({
-    url: '/claimItemsLog/updateConfirm',
-    method: 'post',
-    data: { id },
+    url: `/claimItemsLog/updateConfirm?id=${id}`,
+    method: 'put',
   });
 }

+ 4 - 4
src/router/routers/production-safety-router/safetyAssessment.ts

@@ -119,7 +119,7 @@
         path: 'evaluation-department',
         component: '/production-safety/safetyAssessment/evaluationDepartment/evaluationDepartment',
         meta: {
-          title: '安全考核管理(部)',
+          title: '安全考核自评',
           icon: 'OverviewIcon',
           isRoot: false,
           hidden: false,
@@ -133,7 +133,7 @@
         path: 'evaluation-department-item',
         component: '/production-safety/safetyAssessment/evaluationDepartment/EvaluationDepartmentItem',
         meta: {
-          title: '安全考核管理(部)详情',
+          title: '安全考核自评详情',
           icon: 'OverviewIcon',
           isRoot: false,
           hidden: true,
@@ -148,7 +148,7 @@
         path: 'evaluation-system',
         component: '/production-safety/safetyAssessment/evaluationSystem/evaluationSystem',
         meta: {
-          title: '安全考核管理(管)',
+          title: '安全考核管理',
           icon: 'OverviewIcon',
           isRoot: false,
           hidden: false,
@@ -162,7 +162,7 @@
         path: 'evaluation-system-item',
         component: '/production-safety/safetyAssessment/evaluationSystem/EvaluationSystemItem',
         meta: {
-          title: '安全考核管理(管)详情',
+          title: '安全考核管理详情',
           icon: 'OverviewIcon',
           isRoot: false,
           hidden: true,

+ 1 - 1
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/oneByOneManagement/oneByOneManagement.vue

@@ -367,7 +367,7 @@
     });
   };
 
-  /** 通知对象:跳转通知对象页(与安全考核管理(管)的考核对象一致) */
+  /** 通知对象:跳转通知对象页(与安全考核管理的考核对象一致) */
   const handleNotifyTarget = (row: { id: number }) => {
     router.push({
       name: 'oneByOneManagementItem',

+ 36 - 5
src/views/production-safety/risk-identification-and-control/special-equipment-manage/add.vue

@@ -19,11 +19,17 @@
             <el-radio :label="3">报废</el-radio>
           </el-radio-group>
         </template>
-        <template #isUseDepartment>
-          <el-radio-group v-model="formData.isUseDepartment">
-            <el-radio :label="1">是</el-radio>
-            <el-radio :label="0">否</el-radio>
-          </el-radio-group>
+        <template #useDepartment>
+          <el-cascader
+            v-model="useDepartmentPath"
+            :options="deptOptions"
+            :props="deptCascaderProps"
+            :show-all-levels="false"
+            placeholder="请选择使用部门"
+            filterable
+            clearable
+            @change="handleUseDeptChange"
+          />
         </template>
         <template #responsibilityDept>
           <el-cascader
@@ -73,6 +79,7 @@
   // 部门树(queryAllDeptTree 样式)
   const deptOptions = ref<any[]>([]);
   const responsibilityDeptPath = ref<number[]>([]);
+  const useDepartmentPath = ref<number[]>([]);
   const deptCascaderProps = {
     expandTrigger: 'click',
     checkStrictly: true,
@@ -92,14 +99,38 @@
     }
   };
 
+  /** 根据部门树路径取末级部门名称(使用部门复用责任部门) */
+  const getDeptNameByPath = (options: any[], pathIds: number[]): string => {
+    if (!pathIds?.length) return '';
+    let current = options;
+    let name = '';
+    for (const id of pathIds) {
+      const node = current.find((n: any) => n.id === id);
+      if (!node) return name;
+      name = node.deptName;
+      current = node.children || [];
+    }
+    return name;
+  };
+
   const handleDeptChange = (val: number[]) => {
     if (Array.isArray(val) && val.length) {
       (formData as any).responsibilityDeptId = val[val.length - 1];
+      (formData as any).useDepartment = getDeptNameByPath(deptOptions.value, val);
+      useDepartmentPath.value = [...val];
     } else {
       (formData as any).responsibilityDeptId = undefined;
     }
   };
 
+  const handleUseDeptChange = (val: number[]) => {
+    if (Array.isArray(val) && val.length) {
+      (formData as any).useDepartment = getDeptNameByPath(deptOptions.value, val);
+    } else {
+      (formData as any).useDepartment = '';
+    }
+  };
+
   const handleSubmit = async () => {
     const valid = await basicFormRef.value?.validateForm().catch(() => false);
     if (!valid) return;

+ 1 - 10
src/views/production-safety/risk-identification-and-control/special-equipment-manage/configs/form.ts

@@ -85,10 +85,7 @@ export const SPECIAL_EQUIPMENT_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'useDepartment',
     label: '使用部门:',
-    component: 'ElInput',
-    componentProps: {
-      placeholder: '',
-    },
+    slot: 'useDepartment',
   },
   {
     prop: 'responsibilityDeptId',
@@ -174,11 +171,6 @@ export const SPECIAL_EQUIPMENT_FORM_CONFIG: FormConfig[] = [
     label: '设备状态:',
     slot: 'deviceStatus',
   },
-  {
-    prop: 'isUseDepartment',
-    label: '是否使用部门:',
-    slot: 'isUseDepartment',
-  },
   {
     prop: 'nextInspectionDate',
     label: '下次检测时间:',
@@ -213,7 +205,6 @@ export const SPECIAL_EQUIPMENT_FORM_DATA = {
   useYears: undefined as number | undefined,
   inspectionTime: '',
   deviceStatus: 1,
-  isUseDepartment: 1,
   nextInspectionDate: '',
 };
 

+ 57 - 6
src/views/production-safety/risk-identification-and-control/special-equipment-manage/edit.vue

@@ -20,11 +20,17 @@
             <el-radio :label="3">报废</el-radio>
           </el-radio-group>
         </template>
-        <template #isUseDepartment>
-          <el-radio-group v-model="formData.isUseDepartment">
-            <el-radio :label="1">是</el-radio>
-            <el-radio :label="0">否</el-radio>
-          </el-radio-group>
+        <template #useDepartment>
+          <el-cascader
+            v-model="useDepartmentPath"
+            :options="deptOptions"
+            :props="deptCascaderProps"
+            :show-all-levels="false"
+            placeholder="请选择使用部门"
+            filterable
+            clearable
+            @change="handleUseDeptChange"
+          />
         </template>
         <template #responsibilityDept>
           <el-cascader
@@ -79,6 +85,7 @@
   // 部门树(queryAllDeptTree 样式)
   const deptOptions = ref<any[]>([]);
   const responsibilityDeptPath = ref<number[]>([]);
+  const useDepartmentPath = ref<number[]>([]);
   const deptCascaderProps = {
     expandTrigger: 'click',
     checkStrictly: true,
@@ -110,20 +117,65 @@
         };
         dfs(deptOptions.value, []);
       }
+      // 使用部门回显:根据名称在树中查找路径
+      if ((formData as any).useDepartment) {
+        useDepartmentPath.value = getDeptPathByName(deptOptions.value, (formData as any).useDepartment);
+      }
     } catch (e) {
       console.error('获取部门树失败:', e);
       deptOptions.value = [];
     }
   };
 
+  /** 根据部门名称在树中查找路径(用于回显) */
+  const getDeptPathByName = (options: any[], name: string): number[] => {
+    if (!name || !options?.length) return [];
+    const dfs = (nodes: any[], currentPath: number[]): number[] => {
+      for (const n of nodes) {
+        const newPath = [...currentPath, n.id];
+        if (n.deptName === name) return newPath;
+        if (n.children?.length) {
+          const found = dfs(n.children, newPath);
+          if (found.length) return found;
+        }
+      }
+      return [];
+    };
+    return dfs(options, []);
+  };
+
+  /** 根据部门树路径取末级部门名称(使用部门复用责任部门) */
+  const getDeptNameByPath = (options: any[], pathIds: number[]): string => {
+    if (!pathIds?.length) return '';
+    let current = options;
+    let name = '';
+    for (const id of pathIds) {
+      const node = current.find((n: any) => n.id === id);
+      if (!node) return name;
+      name = node.deptName;
+      current = node.children || [];
+    }
+    return name;
+  };
+
   const handleDeptChange = (val: number[]) => {
     if (Array.isArray(val) && val.length) {
       (formData as any).responsibilityDeptId = val[val.length - 1];
+      (formData as any).useDepartment = getDeptNameByPath(deptOptions.value, val);
+      useDepartmentPath.value = [...val];
     } else {
       (formData as any).responsibilityDeptId = undefined;
     }
   };
 
+  const handleUseDeptChange = (val: number[]) => {
+    if (Array.isArray(val) && val.length) {
+      (formData as any).useDepartment = getDeptNameByPath(deptOptions.value, val);
+    } else {
+      (formData as any).useDepartment = '';
+    }
+  };
+
   const getDetail = async () => {
     if (!id.value) {
       ElMessage.error('缺少 id');
@@ -155,7 +207,6 @@
         formData.productionDate = res.productionDate ?? '';
         formData.inspectionCycle = res.inspectionCycle ?? undefined;
         formData.deviceStatus = res.deviceStatus ?? 1;
-        formData.isUseDepartment = res.isUseDepartment ?? 1;
         formData.nextInspectionDate = res.nextInspectionDate ?? '';
         formData.remark = res.remark ?? '';
       }

+ 0 - 14
src/views/production-safety/risk-identification-and-control/special-equipment-manage/list.vue

@@ -40,18 +40,6 @@
                   <el-option label="报废" :value="3" />
                 </el-select>
               </div>
-              <div class="select-box--item">
-                <span>是否使用部门:</span>
-                <el-select
-                  v-model="queryParams.queryParam.isUseDepartment"
-                  placeholder="是否使用部门"
-                  clearable
-                  class="act-search-input"
-                >
-                  <el-option label="是" :value="1" />
-                  <el-option label="否" :value="0" />
-                </el-select>
-              </div>
               <div class="select-box--item">
                 <span>责任部门:</span>
                 <el-cascader
@@ -151,7 +139,6 @@
       deviceStatus: undefined,
       categoryId: undefined,
       typeId: undefined,
-      isUseDepartment: undefined,
       responsibilityDeptId: undefined,
       useUnit: '',
     },
@@ -246,7 +233,6 @@
       deviceStatus: undefined,
       categoryId: undefined,
       typeId: undefined,
-      isUseDepartment: undefined,
       responsibilityDeptId: undefined,
       useUnit: '',
     };

+ 33 - 7
src/views/production-safety/risk-identification-and-control/special-equipment-manage/view.vue

@@ -18,11 +18,18 @@
             <el-radio :label="3">报废</el-radio>
           </el-radio-group>
         </template>
-        <template #isUseDepartment>
-          <el-radio-group v-model="formData.isUseDepartment" disabled>
-            <el-radio :label="1">是</el-radio>
-            <el-radio :label="0">否</el-radio>
-          </el-radio-group>
+        <template #useDepartment>
+          <el-cascader
+            v-model="useDepartmentPath"
+            :options="deptOptions"
+            :props="deptCascaderProps"
+            :show-all-levels="false"
+            placeholder="请选择使用部门"
+            class="act-search-input"
+            filterable
+            clearable
+            disabled
+          />
         </template>
         <template #responsibilityDept>
           <el-cascader
@@ -81,6 +88,7 @@
   // 部门树(queryAllDeptTree 样式,仅展示)
   const deptOptions = ref<any[]>([]);
   const responsibilityDeptPath = ref<number[]>([]);
+  const useDepartmentPath = ref<number[]>([]);
   const deptCascaderProps = {
     expandTrigger: 'click',
     checkStrictly: true,
@@ -88,6 +96,23 @@
     label: 'deptName',
   };
 
+  /** 根据部门名称在树中查找路径(用于回显) */
+  const getDeptPathByName = (options: any[], name: string): number[] => {
+    if (!name || !options?.length) return [];
+    const dfs = (nodes: any[], currentPath: number[]): number[] => {
+      for (const n of nodes) {
+        const newPath = [...currentPath, n.id];
+        if (n.deptName === name) return newPath;
+        if (n.children?.length) {
+          const found = dfs(n.children, newPath);
+          if (found.length) return found;
+        }
+      }
+      return [];
+    };
+    return dfs(options, []);
+  };
+
   const getDetail = async () => {
     if (!id.value) {
       ElMessage.error('缺少 id');
@@ -118,7 +143,6 @@
         formData.useYears = res.useYears ?? undefined;
         formData.inspectionTime = res.inspectionTime ?? '';
         formData.deviceStatus = res.deviceStatus ?? 1;
-        formData.isUseDepartment = res.isUseDepartment ?? 1;
         formData.nextInspectionDate = res.nextInspectionDate ?? '';
         formData.remark = res.remark ?? '';
 
@@ -128,7 +152,6 @@
           deptOptions.value = formatDeptTree(deptRes);
           const targetId = (formData as any).responsibilityDeptId;
           if (targetId) {
-            const path: number[] = [];
             const dfs = (nodes: any[], currentPath: number[]): boolean => {
               for (const n of nodes) {
                 const newPath = [...currentPath, n.id];
@@ -144,6 +167,9 @@
             };
             dfs(deptOptions.value, []);
           }
+          if (formData.useDepartment) {
+            useDepartmentPath.value = getDeptPathByName(deptOptions.value, formData.useDepartment);
+          }
         } catch (e) {
           console.error('获取部门树失败:', e);
           deptOptions.value = [];

+ 2 - 2
src/views/production-safety/safetyAssessment/evaluationDepartment/EvaluationDepartmentItem.vue

@@ -19,12 +19,12 @@
 
   const headerTitle = computed(() => {
     if (operate.value === 'evaluationDepartment-feedback') {
-      return '反馈';
+      return '自评反馈';
     }
     if (operate.value === 'evaluationDepartment-advanced-person') {
       return '先进个人信息';
     }
-    return '安全考核管理(部门)详情';
+    return '安全考核自评详情';
   });
 
   const dynamicComponent = computed(() => {

+ 5 - 5
src/views/production-safety/safetyAssessment/evaluationDepartment/components/EvaluationDepartmentFeedback.vue

@@ -129,11 +129,11 @@
     return val && String(val).trim() ? String(val).trim() : '';
   });
 
-  // 计算总计:根据加减分项计算,加分项加自评得分,减分项减自评得分
+  // 计算总计:根据加减分项计算,加分项和基础分加自评得分,减分项减自评得分(基础分按加分项计)
   const getTotalScore = () => {
     return evaluationItems.value.reduce((sum, item) => {
       const score = Number(item.selfScore) || 0;
-      const isAdd = item.isAdd === 1 || item.scoreType === '加分项';
+      const isAdd = item.isAdd === 1 || item.isAdd === 2 || item.scoreType === '加分项' || item.scoreType === '基础分';
       return isAdd ? sum + score : sum - score;
     }, 0);
   };
@@ -295,9 +295,9 @@
       if (detail.scores && detail.scores.length > 0) {
         evaluationItems.value = detail.scores.map((score) => ({
           id: score.id, // 保留评分项ID,用于提交
-          isAdd: score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0), // 是否加分项(0-否,1-是
-          isAddName: score.isAdd === 1 ? '加分项' : '减分项', // 加减分项名称
-          scoreType: score.isAdd === 1 ? '加分项' : '减分项', // 加减分项(用于显示,兼容旧字段)
+          isAdd: score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0), // 加减分项(0-减分项,1-加分项,2-基础分
+          isAddName: score.isAdd === 2 ? '基础分' : score.isAdd === 1 ? '加分项' : '减分项', // 加减分项名称
+          scoreType: score.isAdd === 2 ? '基础分' : score.isAdd === 1 ? '加分项' : '减分项', // 加减分项(用于显示,兼容旧字段)
           evaluationItem: score.exProgram || '', // 考核项目
           evaluationContent: score.exContent || '', // 考核内容
           scoringMethod: score.scoringWay || '', // 评分方式

+ 1 - 1
src/views/production-safety/safetyAssessment/evaluationDepartment/configs/status.ts

@@ -1,4 +1,4 @@
-// 安全考核管理(部门)状态配置 - 与安全考核管理(管)一致
+// 安全考核自评状态配置 - 与安全考核管理一致
 export const EVALUATION_DEPARTMENT_STATUS_OPTIONS = [
   { label: '全部', value: '' },
   { label: '未下发', value: 'NOT_ISSUED' },

+ 1 - 1
src/views/production-safety/safetyAssessment/evaluationDepartment/constants.ts

@@ -1,4 +1,4 @@
-// 安全考核管理(部门) tabs 配置
+// 安全考核自评 tabs 配置
 export const EVALUATION_DEPARTMENT_TABS = [
   { label: '全部', value: 'all' },
   { label: '待反馈', value: 'pending_feedback' },

+ 1 - 1
src/views/production-safety/safetyAssessment/evaluationDepartment/evaluationDepartment.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <div class="breadcrumb-title"> 安全考核管理(部门) </div>
+      <div class="breadcrumb-title"> 安全考核自评 </div>
     </header>
     <main class="safety-platform-container__main">
       <div class="search-table-container">

+ 1 - 1
src/views/production-safety/safetyAssessment/evaluationSystem/EvaluationSystemItem.vue

@@ -32,7 +32,7 @@
       case 'evaluationSystem-advanced-person':
         return '先进个人';
       case 'evaluationSystem-feedback':
-        return '评分';
+        return '复核';
       case 'evaluationSystem-feedback-view':
         return '部门考核详情';
       case 'evaluationSystem-audit':

+ 1 - 0
src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationSystemDetail.vue

@@ -83,6 +83,7 @@
                 :disabled="isViewMode"
                 style="width: 100%"
               >
+                <el-option label="基础分" :value="2" />
                 <el-option label="加分项" :value="1" />
                 <el-option label="减分项" :value="0" />
               </el-select>

+ 13 - 9
src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationSystemFeedback.vue

@@ -46,7 +46,11 @@
           <el-table-column label="考核内容" prop="evaluationContent" min-width="200" />
           <el-table-column label="评分方式" prop="scoringMethod" min-width="150" />
           <el-table-column label="加减分项" prop="scoreType" min-width="120" />
-          <el-table-column label="自评得分" prop="selfScore" min-width="120" />
+          <el-table-column label="自评得分" prop="selfScore" min-width="120">
+            <template #default="scope">
+              {{ scope.row.selfScore === 0 || scope.row.selfScore === null || scope.row.selfScore === undefined ? '' : scope.row.selfScore }}
+            </template>
+          </el-table-column>
           <el-table-column label="资料说明" prop="materialDescription" min-width="200">
             <template #default="scope">
               <div
@@ -85,7 +89,7 @@
                 placeholder="请输入复核得分"
                 @blur="handleScoreBlur"
               />
-              <span v-else>{{ scope.row.reviewScore || 0 }}</span>
+              <span v-else>{{ scope.row.reviewScore === 0 || scope.row.reviewScore === null || scope.row.reviewScore === undefined ? '' : scope.row.reviewScore }}</span>
             </template>
           </el-table-column>
           <el-table-column label="复核不通过原因" prop="reviewRejectReson" min-width="220">
@@ -237,20 +241,20 @@
     return val && String(val).trim() ? String('审核不通过原因:' + val).trim() : '';
   });
 
-  // 计算自评得分总计:根据加减分项计算,加分项加、减分项减(与复核得分规则一致)
+  // 计算自评得分总计:根据加减分项计算,加分项和基础分加、减分项减(基础分按加分项计,与复核得分规则一致)
   const getTotalScore = () => {
     return evaluationItems.value.reduce((sum, item) => {
       const score = Number(item.selfScore) || 0;
-      const isAdd = item.isAdd === 1 || item.scoreType === '加分项';
+      const isAdd = item.isAdd === 1 || item.isAdd === 2 || item.scoreType === '加分项' || item.scoreType === '基础分';
       return isAdd ? sum + score : sum - score;
     }, 0);
   };
 
-  // 计算复核得分总计:根据加减分项计算,加分项加、减分项减(与自评得分规则一致)
+  // 计算复核得分总计:根据加减分项计算,加分项和基础分加、减分项减(基础分按加分项计,与自评得分规则一致)
   const getTotalReviewScore = () => {
     return evaluationItems.value.reduce((sum, item) => {
       const score = Number(item.reviewScore) || 0;
-      const isAdd = item.isAdd === 1 || item.scoreType === '加分项';
+      const isAdd = item.isAdd === 1 || item.isAdd === 2 || item.scoreType === '加分项' || item.scoreType === '基础分';
       return isAdd ? sum + score : sum - score;
     }, 0);
   };
@@ -470,9 +474,9 @@
       if (detail.scores && detail.scores.length > 0) {
         evaluationItems.value = detail.scores.map((score) => ({
           id: score.id, // 保留评分项ID,用于提交
-          isAdd: score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0), // 是否加分项(0-否,1-是
-          isAddName: score.isAdd === 1 ? '加分项' : '减分项', // 加减分项名称
-          scoreType: score.isAdd === 1 ? '加分项' : '减分项', // 加减分项(用于显示,兼容旧字段)
+          isAdd: score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0), // 加减分项(0-减分项,1-加分项,2-基础分
+          isAddName: score.isAdd === 2 ? '基础分' : score.isAdd === 1 ? '加分项' : '减分项', // 加减分项名称
+          scoreType: score.isAdd === 2 ? '基础分' : score.isAdd === 1 ? '加分项' : '减分项', // 加减分项(用于显示,兼容旧字段)
           evaluationItem: score.exProgram || '', // 考核项目
           evaluationContent: score.exContent || '', // 考核内容
           scoringMethod: score.scoringWay || '', // 评分方式

+ 5 - 5
src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationTarget.vue

@@ -222,9 +222,9 @@
                   />
                 </template>
 
-                <!-- 待评分:评分 / 删除 / 作废 -->
+                <!-- 待复核:评分 / 删除 / 作废 -->
                 <template v-else-if="Number(scope.row.status) === 3">
-                  <ActionButton text="评分" @click="handleScore(scope.row.id)" />
+                  <ActionButton text="复核" @click="handleScore(scope.row.id)" />
                   <ActionButton
                     text="删除"
                     :popconfirm="{
@@ -343,7 +343,7 @@
         ? 'person'
         : 'status',
   );
-  // 如果从上级页传入 singleStatus(例如 3:待评分),则只展示对应状态的 tab
+  // 如果从上级页传入 singleStatus(例如 3:待复核),则只展示对应状态的 tab
   const singleStatus = (route.query.singleStatus as string | undefined) || '';
   const showAllTabs = computed(() => !singleStatus);
 
@@ -399,7 +399,7 @@
     return id ? Number(id) : undefined;
   });
 
-  // 如果是单状态模式(例如待评分),初始化筛选条件
+  // 如果是单状态模式(例如待复核),初始化筛选条件
   if (singleStatus) {
     tableQuery.queryParam.status = Number(singleStatus);
   }
@@ -461,7 +461,7 @@
               isAdvancedGroup: item.isAdvancedGroup || false, // 是否先进集体(需要接口返回,暂时使用 false)
               departmentSort: item.scoreRank || 0, // 部门排序(使用排名)
               departmentLeader: item.deptUserName || '-', // 部门负责人
-              baseScore: 100, // 基础分,默认为100
+              baseScore: item.baseNum || 0, // 基础分,默认为100
               reviewSum: item.reviewSum || 0, // 总分数
               addSum: item.addSum || 0, // 加分项分数
               subSum: item.subSum || 0, // 减分项分数

+ 3 - 3
src/views/production-safety/safetyAssessment/evaluationSystem/configs/status.ts

@@ -1,9 +1,9 @@
 // 安全考核管理状态配置(搜索条件使用数值状态码)
-// 0-未下发 / 2-待反馈 / 3-待评分 / 4-待审核 / 5-已作废 / 1-已完成
+// 0-未下发 / 2-待反馈 / 3-待复核 / 4-待审核 / 5-已作废 / 1-已完成
 export const EVALUATION_SYSTEM_STATUS_OPTIONS = [
   { label: '未下发', value: 0 },
   { label: '待反馈', value: 2 },
-  { label: '待评分', value: 3 },
+  { label: '待复核', value: 3 },
   { label: '待审核', value: 4 },
   { label: '已作废', value: 5 },
   { label: '已完成', value: 1 },
@@ -12,7 +12,7 @@ export const EVALUATION_SYSTEM_STATUS_OPTIONS = [
 export const EVALUATION_SYSTEM_STATUS_LABEL: Record<string, string> = {
   '0': '未下发',
   '2': '待反馈',
-  '3': '待评分',
+  '3': '待复核',
   '4': '待审核',
   '5': '已作废',
   '1': '已完成',

+ 5 - 5
src/views/production-safety/safetyAssessment/evaluationSystem/evaluationSystem.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <div class="breadcrumb-title"> 安全考核管理(管) </div>
+      <div class="breadcrumb-title"> 安全考核管理 </div>
     </header>
     <main class="safety-platform-container__main">
       <div class="search-table-container">
@@ -125,9 +125,9 @@
                   <ActionButton text="考核对象" @click="handleTarget(scope.row.id)" />
                 </template>
 
-                <!-- 待评分:评分 / 作废 / 考核对象 -->
+                <!-- 待复核:评分 / 作废 / 考核对象 -->
                 <template v-else-if="Number(scope.row.status) === 3">
-                  <ActionButton text="评分" @click="handleScore(scope.row.id)" />
+                  <ActionButton text="复核" @click="handleScore(scope.row.id)" />
                   <ActionButton
                     text="作废"
                     :popconfirm="{
@@ -562,14 +562,14 @@
     }
   };
 
-  // 评分:跳转到考核对象列表,并仅展示“待评分”tab
+  // 评分:跳转到考核对象列表,并仅展示“待复核”tab
   const handleScore = (id: number) => {
     router.push({
       name: 'EvaluationSystemItem',
       query: {
         id,
         operate: 'evaluationSystem-target',
-        singleStatus: '3', // 3 表示“待评分
+        singleStatus: '3', // 3 表示“待复核
       },
     });
   };

+ 7 - 47
src/views/production-safety/safetyAssessment/pointDeduction/components/PointDeductionDetail.vue

@@ -13,22 +13,13 @@
         </el-radio-group>
       </template>
       <template #deductionReason>
-        <el-select
+        <el-input
           :disabled="isViewMode"
-          v-model="ruleFormData.hiddenDangerId"
-          placeholder="请选择扣分原因"
-          filterable
+          v-model="ruleFormData.deductionReason"
+          placeholder="请输入扣分原因"
           clearable
-          style="width: 100%"
-          @change="onDeductionReasonChange"
-        >
-          <el-option
-            v-for="item in hiddenDangerOptions"
-            :key="item.id"
-            :label="item.deductionReason ?? item.dangerProblem"
-            :value="item.id"
-          />
-        </el-select>
+          type="text"
+        />
       </template>
     </BasicForm>
   </main>
@@ -56,8 +47,6 @@
     updateMonthlyDeduction,
     queryDeductionDetail,
   } from '@/api/pointDeduction';
-  import { queryHiddenDangerPage } from '@/api/hiddenDanger';
-  import type { HiddenDangerItem } from '@/api/hiddenDanger';
 
   const router = useRouter();
   const route = useRoute();
@@ -92,40 +81,12 @@
 
   const basicFormRef = ref<InstanceType<typeof BasicForm>>();
 
-  // 扣分原因下拉选项(来自隐患台账 productionHiddenDanger/queryPage)
-  const hiddenDangerOptions = ref<HiddenDangerItem[]>([]);
-
-  const loadHiddenDangerOptions = async () => {
-    try {
-      const res = await queryHiddenDangerPage({
-        pageNumber: 1,
-        pageSize: 500,
-        queryParam: {},
-      });
-      if (res?.records?.length) {
-        hiddenDangerOptions.value = res.records;
-      }
-    } catch (e) {
-      console.error('获取扣分原因选项失败:', e);
-    }
-  };
-
-  // 选择扣分原因时同步名称到 deductionReason
-  const onDeductionReasonChange = (hiddenDangerId: number | undefined) => {
-    if (hiddenDangerId == null) {
-      ruleFormData.deductionReason = '';
-      return;
-    }
-    const option = hiddenDangerOptions.value.find((item) => item.id === hiddenDangerId);
-    ruleFormData.deductionReason = option ? (option.deductionReason ?? option.dangerProblem) : '';
-  };
-
   const handleValidate = async () => {
     if (!basicFormRef.value) return;
     const res = await basicFormRef.value.validateForm();
     if (!res) return false;
-    if (ruleFormData.hiddenDangerId == null) {
-      ElMessage.error('请选择扣分原因');
+    if (!ruleFormData.deductionReason?.trim()) {
+      ElMessage.error('请输入扣分原因');
       return false;
     }
     return true;
@@ -187,7 +148,6 @@
   onMounted(() => {
     cloneRuleFormData();
     beforeRouteLeave();
-    loadHiddenDangerOptions();
     if (isEditMode.value || isViewMode.value) {
       getDetail();
     }

+ 2 - 2
src/views/production-safety/safetyAssessment/pointDeduction/configs/form.ts

@@ -2,7 +2,7 @@ import { FormConfig } from '@/types/basic-form';
 
 export const POINT_DEDUCTION_FORM_CONFIG: FormConfig[] = [
   {
-    prop: 'hiddenDangerId',
+    prop: 'deductionReason',
     label: '扣分原因:',
     slot: 'deductionReason',
   },
@@ -59,6 +59,6 @@ export const POINT_DEDUCTION_FORM_RULES = {
     { type: 'number', max: 99999, message: '扣分值不能大于99999', trigger: 'blur' },
   ],
   departmentName: [{ required: true, message: '请输入部门名称', trigger: 'blur' }],
-  hiddenDangerId: [{ required: true, message: '请选择扣分原因', trigger: 'change' }],
+  deductionReason: [{ required: true, message: '请输入扣分原因', trigger: 'blur' }],
   status: [{ required: true, message: '请选择状态', trigger: 'change' }],
 };

+ 16 - 16
src/views/production-safety/safetyAssessment/receiptRecord/configs/form.ts

@@ -40,22 +40,22 @@ export const RECEIPT_RECORD_FORM_CONFIG: FormConfig[] = [
       placeholder: '请输入主动信息报告单号',
     },
   },
-  {
-    prop: 'department',
-    label: '部门:',
-    slot: 'department', // 复用添加应急预案的制定部门下拉(el-cascader)
-    componentProps: {
-      placeholder: '请选择部门',
-    },
-  },
-  {
-    prop: 'recipient',
-    label: '领取人:',
-    slot: 'recipient', // 使用用户列表接口(queryAvailableUserList + el-select)
-    componentProps: {
-      placeholder: '请选择领取人',
-    },
-  },
+  // {
+  //   prop: 'department',
+  //   label: '部门:',
+  //   slot: 'department', // 复用添加应急预案的制定部门下拉(el-cascader)
+  //   componentProps: {
+  //     placeholder: '请选择部门',
+  //   },
+  // },
+  // {
+  //   prop: 'recipient',
+  //   label: '领取人:',
+  //   slot: 'recipient', // 使用用户列表接口(queryAvailableUserList + el-select)
+  //   componentProps: {
+  //     placeholder: '请选择领取人',
+  //   },
+  // },
   {
     prop: 'approvalTemplateId',
     label: '审批流程:',

+ 1 - 1
src/views/production-safety/safetyAssessment/receiptRecord/receiptRecord.vue

@@ -8,7 +8,7 @@
         <header>
           <div style="position: relative">
             <el-button type="primary" class="search-table-container--button" @click="handleCreate">
-              添加
+              奖励申请
             </el-button>
             <!-- <el-button plain class="search-table-container--button" @click="handleImport">
               导入