소스 검색

Merge remote-tracking branch 'origin/feat/production-safety' into feat/production-safety

sunqijun 3 달 전
부모
커밋
7669bad591
16개의 변경된 파일268개의 추가작업 그리고 87개의 파일을 삭제
  1. 20 0
      src/api/evaluationSystem/index.ts
  2. 1 1
      src/api/hiddenDanger/index.ts
  3. 2 5
      src/api/production-safety-system/index.ts
  4. 4 6
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue
  5. 2 4
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanManagementDeptDetail.vue
  6. 2 2
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/components/hiddenTroubleAccountManagementDetail.vue
  7. 1 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/hiddenTroubleAccountManagement.vue
  8. 13 0
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/oneByOneManagementDept/components/oneByOneManagementDeptDetail.vue
  9. 70 12
      src/views/production-safety/safetyAssessment/evaluationDepartment/components/EvaluationDepartmentFeedback.vue
  10. 1 8
      src/views/production-safety/safetyAssessment/evaluationDepartment/configs/tables.ts
  11. 131 13
      src/views/production-safety/safetyAssessment/evaluationSystem/components/EvaluationSystemFeedback.vue
  12. 9 13
      src/views/production-safety/safetyAssessment/evaluationSystem/evaluationSystem.vue
  13. 1 1
      src/views/production-safety/safetyAssessment/inventory/inventory.vue
  14. 3 3
      src/views/production-safety/safetyAssessment/pointDeduction/components/PointDeductionDetail.vue
  15. 4 14
      src/views/production-safety/safetyAssessment/pointDeduction/configs/form.ts
  16. 4 4
      src/views/production-safety/safetyAssessment/receiptRecord/receiptRecordAdministratorReview.vue

+ 20 - 0
src/api/evaluationSystem/index.ts

@@ -182,6 +182,26 @@ export function saveSecurityExamineIssue(data: SaveSecurityExamineIssueRequest)
   });
 }
 
+/**
+ * 部门自评审核人
+ */
+export interface SecurityExamineSelfApproveUser {
+  id: number;
+  realname: string;
+}
+
+/**
+ * 查询部门自评审核人列表
+ * @param id 考核表ID
+ */
+export function querySecurityExamineSelfApprove(id: number) {
+  return http.request<SecurityExamineSelfApproveUser[]>({
+    url: '/securityExamine/admin/querySecurityExamineSelfApprove',
+    method: 'get',
+    params: { id },
+  });
+}
+
 /**
  * 考核对象评分项
  */

+ 1 - 1
src/api/hiddenDanger/index.ts

@@ -280,7 +280,7 @@ export interface HiddenDangerDeductPointsRequest {
   deductionReason?: string;
   remark?: string;
   /** 扣分部门,多个用逗号分隔 */
-  department_ids?: string;
+  departmentIds?: string;
 }
 
 export function deductHiddenDangerPoints(data: HiddenDangerDeductPointsRequest) {

+ 2 - 5
src/api/production-safety-system/index.ts

@@ -1231,7 +1231,6 @@ export function cancelAreaCheckPlanManage(id: number) {
   return http.request({
     url: `${ADMIN_BASE}/updateStatusAreaCheckPlanManage?id=${id}`,
     method: 'post',
-    // data: { id },
   });
 }
 
@@ -1281,18 +1280,16 @@ export function queryAreaCheckPlanDetailDeptPage(planId: number, query: Paramete
 /** 删除区域检查计划记录(管理员) */
 export function deleteAreaCheckPlanDetail(id: number) {
   return http.request({
-    url: `${ADMIN_BASE}/deleteAreaCheckPlanDetail`,
+    url: `${ADMIN_BASE}/deleteAreaCheckPlanDetail?id=${id}`,
     method: 'delete',
-    params: { id },
   });
 }
 
 /** 删除区域检查计划记录(部门) */
 export function deleteAreaCheckPlanDetailDept(id: number) {
   return http.request({
-    url: `${DEPT_BASE}/deleteAreaCheckPlanDetail`,
+    url: `${DEPT_BASE}/deleteAreaCheckPlanDetail?id=${id}`,
     method: 'delete',
-    params: { id },
   });
 }
 

+ 4 - 6
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue

@@ -166,15 +166,13 @@
       >
         <template #unqualifiedItemNum="scope">
           <el-button
-            v-if="Number(scope.row.unqualifiedItemNum) > 0"
             type="primary"
             link
             size="small"
             @click="openUnqualifiedDialog(scope.row)"
           >
-            {{ scope.row.unqualifiedItemNum }}
+            {{ scope.row.unqualifiedItemNum ?? 0 }}
           </el-button>
-          <span v-else>{{ scope.row.unqualifiedItemNum ?? 0 }}</span>
         </template>
         <template #sign="scope">
           <template v-if="parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile).length">
@@ -320,15 +318,15 @@
     >
       <template #action="scope">
         <el-button
-          v-if="Number(scope.row.isSand) === 0"
+          v-if="Number(scope.row.IsSand) == 0"
           type="primary"
           link
           size="small"
           @click="handleSandToHiddenDanger(scope.row)"
         >
-          入账
+          入账
         </el-button>
-        <span v-else-if="Number(scope.row.isSand) === 1" style="color: #999999">已入账</span>
+        <span v-else-if="Number(scope.row.IsSand) == 1" style="color: #999999">已入账</span>
         <span v-else>-</span>
       </template>
     </BasicTable>

+ 2 - 4
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanManagementDeptDetail.vue

@@ -167,15 +167,13 @@
       >
         <template #unqualifiedItemNum="scope">
           <el-button
-
             type="primary"
             link
             size="small"
             @click="openUnqualifiedDialog(scope.row)"
           >
-            {{ scope.row.unqualifiedItemNum }}
+            {{ scope.row.unqualifiedItemNum ?? 0 }}
           </el-button>
-          <!-- <span v-else>{{ scope.row.unqualifiedItemNum ?? 0 }}</span> -->
         </template>
         <template #sign="scope">
           <template v-if="parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile).length">
@@ -234,7 +232,7 @@
         >
           入账
         </el-button>
-        <span v-else-if="Number(scope.row.IsSand) === 1" style="color: #999999">已入账</span>
+        <span v-else-if="Number(scope.row.IsSand) == 1" style="color: #999999">已入账</span>
         <span v-else>-</span>
       </template>
     </BasicTable>

+ 2 - 2
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/components/hiddenTroubleAccountManagementDetail.vue

@@ -2,7 +2,7 @@
   <main class="safety-platform-container__main">
     <el-alert
       v-if="isRectifyMode && detailReviewRejectReason"
-      type="warning"
+      type="error"
       :title="'不通过原因:' + detailReviewRejectReason"
       show-icon
       class="detail-reject-alert"
@@ -613,7 +613,7 @@
     }
     try {
       deductForm.value.dangerId = currentId.value;
-      deductForm.value.department_ids =
+      deductForm.value.departmentIds =
         deductDeptIdsArray.value.length > 0 ? deductDeptIdsArray.value.join(',') : undefined;
       await deductHiddenDangerPoints(deductForm.value);
       ElMessage.success('扣分记录成功');

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

@@ -560,7 +560,7 @@
     }
     try {
       deductForm.value.dangerId = deductDangerId.value;
-      deductForm.value.department_ids =
+      deductForm.value.departmentIds =
         deductDeptIdsArray.value.length > 0 ? deductDeptIdsArray.value.join(',') : undefined;
       await deductHiddenDangerPoints(deductForm.value);
       ElMessage.success('扣分记录成功');

+ 13 - 0
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/oneByOneManagementDept/components/oneByOneManagementDeptDetail.vue

@@ -9,6 +9,13 @@
     </header>
     <main class="safety-platform-container__main">
       <div v-if="detailData" class="audit-content">
+        <el-alert
+          v-if="detailData.reviewReason"
+          type="error"
+          :title="'不通过原因:' + detailData.reviewReason"
+          show-icon
+          class="detail-reject-alert"
+        />
         <h4 class="section-title">
           <el-icon class="section-title__icon"><Document /></el-icon>
           <span>基本信息</span>
@@ -220,6 +227,8 @@
     attachmentList?: Array<{ fileName?: string; fileUrl?: string; fileNameOrUrl?: string; url?: string }>;
     statusName?: string;
     statusId?: number;
+    /** 不通过原因(审核不通过时由后端返回) */
+    reviewReason?: string;
     issueRecords?: Array<{
       id: number;
       associationOtObligationDeptName?: string;
@@ -382,6 +391,10 @@
     font-size: 14px;
   }
 
+  .detail-reject-alert {
+    margin-bottom: 16px;
+  }
+
   .audit-content {
     padding: 0 16px;
 

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

@@ -55,7 +55,15 @@
               />
             </template>
           </el-table-column>
-          <el-table-column label="资料说明" prop="materialDescription" min-width="200" />
+          <el-table-column label="资料说明" prop="materialDescription" min-width="400">
+            <template #default="scope">
+              <UploadFiles
+                label="上传附件"
+                :file-list="scope.row.attachmentFileList"
+                @uploadSuccess="(files: FileItem[]) => handleRowUploadSuccess(scope.$index, files)"
+              />
+            </template>
+          </el-table-column>
         </el-table>
       </div>
     </div>
@@ -79,6 +87,7 @@
     importSecurityExamineIssueDeptDetail,
   } from '@/api/evaluationSystem';
   import type { FileItem } from '@/components/UploadFiles/types';
+  import { formatAttachmentList } from '@/components/UploadFiles/utils';
 
   const props = defineProps<{
     id: number;
@@ -221,6 +230,12 @@
     }
   };
 
+  // 行内上传附件成功
+  const handleRowUploadSuccess = (rowIndex: number, files: FileItem[]) => {
+    if (!evaluationItems.value[rowIndex]) return;
+    evaluationItems.value[rowIndex].attachmentFileList = files;
+  };
+
   // 将逗号分隔的 URL 字符串转换为 FileItem[] 格式
   const parseAttachmentsToFileList = (attachmentsStr: string | undefined): FileItem[] => {
     if (!attachmentsStr || !attachmentsStr.trim()) {
@@ -280,7 +295,8 @@
           evaluationContent: score.exContent || '', // 考核内容
           scoringMethod: score.scoringWay || '', // 评分方式
           selfScore: score.selfScore || 0, // 自评得分
-          materialDescription: score.attachments || '', // 资料说明(使用附件字段)
+          materialDescription: score.attachments || '', // 资料说明(使用附件字段,字符串)
+          attachmentFileList: parseAttachmentsToFileList(score.attachments || ''), // 对应的附件文件列表
         }));
       } else {
         evaluationItems.value = [];
@@ -300,18 +316,59 @@
         return;
       }
 
-      // 使用详情原始数据,更新自评得分和isAdd字段
+      // 使用详情原始数据,更新自评得分、加减分项及资料说明附件
+      const updatedScores =
+        (await Promise.all(
+          (detailData.value.scores || []).map(async (score: any) => {
+            const item = evaluationItems.value.find((row) => row.id === score.id);
+
+            // 处理资料说明附件:将 UploadFiles 返回的文件列表转换为逗号分隔的 URL 字符串
+            let attachments = score.attachments || '';
+            if (item && Array.isArray(item.attachmentFileList)) {
+              const existingFiles: string[] = [];
+              const newFiles: any[] = [];
+
+              item.attachmentFileList.forEach((file: any) => {
+                if (file.fileUrl && !file.file) {
+                  existingFiles.push(file.fileUrl);
+                } else {
+                  newFiles.push(file);
+                }
+              });
+
+              let uploadedUrls: string[] = [];
+              if (newFiles.length > 0) {
+                const uploadedFiles = await formatAttachmentList(newFiles);
+                uploadedUrls = uploadedFiles
+                  .map((f: any) => f.fileUrl || f.url || '')
+                  .filter((url: string) => url);
+              }
+
+              attachments = [...existingFiles, ...uploadedUrls].filter((url) => url).join(',');
+            }
+
+            return {
+              ...score,
+              selfScore: item ? Number(item.selfScore) || 0 : score.selfScore || 0,
+              isAdd: item
+                ? item.isAdd !== undefined
+                  ? item.isAdd
+                  : item.selfScore >= 0
+                    ? 1
+                    : 0
+                : score.isAdd !== undefined
+                  ? score.isAdd
+                  : score.selfScore >= 0
+                    ? 1
+                    : 0,
+              attachments,
+            };
+          }),
+        )) || [];
+
       const submitData = {
         ...detailData.value,
-        scores: detailData.value.scores?.map((score: any) => {
-          // 找到对应的自评得分和isAdd
-          const item = evaluationItems.value.find((item) => item.id === score.id);
-          return {
-            ...score,
-            selfScore: item ? Number(item.selfScore) || 0 : score.selfScore || 0,
-            isAdd: item ? (item.isAdd !== undefined ? item.isAdd : (item.selfScore >= 0 ? 1 : 0)) : (score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0)),
-          };
-        }) || [],
+        scores: updatedScores,
       };
 
       await updateSecurityExamineDeptSubmit(submitData);
@@ -330,6 +387,7 @@
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
+  @use '@/styles/basic-table-file.scss' as *;
 
   .reject-alert {
     margin-bottom: 20px;

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

@@ -7,14 +7,7 @@ export const TABLE_OPTIONS = {
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const EVALUATION_DEPARTMENT_TABLE_COLUMNS: TableColumnProps[] = [
-  {
-    prop: 'select',
-    label: '',
-    type: 'selection',
-    align: 'center',
-    width: '80px',
-  },
+export const EVALUATION_DEPARTMENT_TABLE_COLUMNS: TableColumnProps[] = [  
   {
     label: '编号',
     type: 'index',

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

@@ -43,7 +43,31 @@
           <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="materialDescription" min-width="200" />
+          <el-table-column label="资料说明" prop="materialDescription" min-width="200">
+            <template #default="scope">
+              <div
+                class="file-container--div"
+                v-for="item in parseAttachments(scope.row.materialDescription)"
+                :key="item.fileUrl"
+              >
+                <img
+                  class="file-container--div__icon"
+                  @click="previewOnline(item.fileUrl, item.fileType as keyof typeof FILE_TYPE_ICON)"
+                  :src="FILE_TYPE_ICON[item.fileType]"
+                />
+                <span
+                  class="file-container--div__name"
+                  @click="previewOnline(item.fileUrl, item.fileType as keyof typeof FILE_TYPE_ICON)"
+                  >{{ item.fileName }}</span
+                >
+                <img
+                  class="file-container--div__download"
+                  :src="DownloadIcon"
+                  @click="downloadFile(item.fileUrl, item.fileName)"
+                />
+              </div>
+            </template>
+          </el-table-column>
           <el-table-column label="复核人姓名" prop="reviewUserName" min-width="120" />
           <el-table-column label="复核得分" prop="reviewScore" min-width="180">
             <template #default="scope">
@@ -98,7 +122,6 @@
   import { useRouter, useRoute } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import type { FormInstance } from 'element-plus';
-  import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
   import {
     querySecurityExamineIssueDetail,
     updateSecurityExamineIssueReviewSubmit,
@@ -110,6 +133,11 @@
     importSecurityExamineIssueDeptDetail,
   } from '@/api/evaluationSystem';
   import type { FileItem } from '@/components/UploadFiles/types';
+  import { formatAttachmentList } from '@/components/UploadFiles/utils';
+  import DownloadIcon from '@/views/disaster/disaster-control/src/svg/download.svg';
+  import { downloadFile } from '@/views/disaster/utils';
+  import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
+  import { FILE_TYPE_ICON } from '@/components/UploadFiles/constants';
 
   const props = defineProps<{
     id: number;
@@ -313,6 +341,53 @@
     }
   };
 
+  // 预览
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
+  const previewOnline = (url: string | undefined, type: keyof typeof FILE_TYPE_ICON) => {
+    if (url) {
+      previewOnlineRef.value?.open(url, type);
+    }
+  };
+
+  // 解析逗号分隔的URL字符串为文件列表(用于表格资料说明展示)
+  const parseAttachments = (
+    attachmentsStr: string | undefined,
+  ): Array<{
+    fileUrl: string;
+    fileName: string;
+    fileType: string;
+  }> => {
+    if (!attachmentsStr || !attachmentsStr.trim()) {
+      return [];
+    }
+
+    const urls = attachmentsStr
+      .split(',')
+      .map((url) => url.trim())
+      .filter((url) => url);
+
+    return urls.map((url) => {
+      const urlParts = url.split('/');
+      const fileName = urlParts[urlParts.length - 1] || '未知文件';
+
+      const extension = fileName.split('.').pop()?.toLowerCase() || '';
+      let fileType = 'pdf';
+      if (extension === 'doc' || extension === 'docx') {
+        fileType = 'word';
+      } else if (extension === 'xls' || extension === 'xlsx') {
+        fileType = 'excel';
+      } else if (extension === 'ppt' || extension === 'pptx') {
+        fileType = 'ppt';
+      }
+
+      return {
+        fileUrl: url,
+        fileName,
+        fileType,
+      };
+    });
+  };
+
   // 将逗号分隔的 URL 字符串转换为 FileItem[] 格式
   const parseAttachmentsToFileList = (attachmentsStr: string | undefined): FileItem[] => {
     if (!attachmentsStr || !attachmentsStr.trim()) {
@@ -386,7 +461,8 @@
           selfScore: score.selfScore || 0, // 自评得分
           reviewUserName: score.reviewUserName || '-', // 复核人姓名(从详情顶层获取)
           reviewScore: score.reviewScore || 0, // 复核得分
-          materialDescription: score.attachments || '', // 资料说明(使用附件字段)
+          materialDescription: score.attachments || '', // 资料说明(使用附件字段,字符串)
+          attachmentFileList: parseAttachmentsToFileList(score.attachments || ''), // 资料说明对应的附件文件列表
           isReviewInput: score.isReviewInput == true, // 是否显示复核得分输入框
         }));
       } else {
@@ -407,18 +483,59 @@
         return;
       }
 
-      // 使用详情原始数据,更新复核得分和isAdd字段
+      // 使用详情原始数据,更新复核得分、加减分项及资料说明附件
+      const updatedScores =
+        (await Promise.all(
+          (detailData.value.scores || []).map(async (score: any) => {
+            const item = evaluationItems.value.find((row) => row.id === score.id);
+
+            // 处理资料说明附件:将 UploadFiles 返回的文件列表转换为逗号分隔的 URL 字符串
+            let attachments = score.attachments || '';
+            if (item && Array.isArray(item.attachmentFileList)) {
+              const existingFiles: string[] = [];
+              const newFiles: any[] = [];
+
+              item.attachmentFileList.forEach((file: any) => {
+                if (file.fileUrl && !file.file) {
+                  existingFiles.push(file.fileUrl);
+                } else {
+                  newFiles.push(file);
+                }
+              });
+
+              let uploadedUrls: string[] = [];
+              if (newFiles.length > 0) {
+                const uploadedFiles = await formatAttachmentList(newFiles);
+                uploadedUrls = uploadedFiles
+                  .map((f: any) => f.fileUrl || f.url || '')
+                  .filter((url: string) => url);
+              }
+
+              attachments = [...existingFiles, ...uploadedUrls].filter((url) => url).join(',');
+            }
+
+            return {
+              ...score,
+              reviewScore: item ? Number(item.reviewScore) || 0 : score.reviewScore || 0,
+              isAdd: item
+                ? item.isAdd !== undefined
+                  ? item.isAdd
+                  : item.selfScore >= 0
+                    ? 1
+                    : 0
+                : score.isAdd !== undefined
+                  ? score.isAdd
+                  : score.selfScore >= 0
+                    ? 1
+                    : 0,
+              attachments,
+            };
+          }),
+        )) || [];
+
       const submitData = {
         ...detailData.value,
-        scores: detailData.value.scores?.map((score: any) => {
-          // 找到对应的复核得分和isAdd
-          const item = evaluationItems.value.find((item) => item.id === score.id);
-          return {
-            ...score,
-            reviewScore: item ? Number(item.reviewScore) || 0 : score.reviewScore || 0,
-            isAdd: item ? (item.isAdd !== undefined ? item.isAdd : (item.selfScore >= 0 ? 1 : 0)) : (score.isAdd !== undefined ? score.isAdd : (score.selfScore >= 0 ? 1 : 0)),
-          };
-        }) || [],
+        scores: updatedScores,
       };
 
       if (isAudit.value) {
@@ -480,6 +597,7 @@
 
 <style scoped lang="scss">
   @use '@/styles/page-details-layout.scss' as *;
+  @use '@/styles/basic-table-file.scss' as *;
 
   .reject-alert {
     margin-bottom: 20px;

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

@@ -201,7 +201,7 @@
               @change="handleIssueDeptChange"
             />
           </el-form-item>
-          <el-form-item label="用户名称:">
+          <el-form-item label="用户名称分组:">
             <el-select
               v-model="issueForm.userGroupId"
               placeholder="请选择用户组"
@@ -287,6 +287,7 @@
     deleteSecurityExamine,
     saveSecurityExamineIssue,
     updateSecurityExamineRepeal,
+    querySecurityExamineSelfApprove,
   } from '@/api/evaluationSystem';
   import type { EvaluationSystemQueryParam } from '@/api/evaluationSystem';
   import { ElMessage } from 'element-plus';
@@ -298,8 +299,7 @@
   import type { DeptTree } from '@/types/dept/type';
   import { queryUserGroupPage } from '@/api/system/person-group';
   import type { PersonGroupListItem } from '@/types/person-group/type';
-  import { queryAvailableUserList } from '@/api/production-safety/responsibility-implementation';
-  import type { UserLisItem } from '@/api/system/user-operate';
+  import type { SecurityExamineSelfApproveUser } from '@/api/evaluationSystem';
 
   const router = useRouter();
 
@@ -329,7 +329,7 @@
   const userGroupOptions = ref<PersonGroupListItem[]>([]);
 
   // 部门自评审核人用户列表
-  const deptSelfApproveUserList = ref<UserLisItem[]>([]);
+  const deptSelfApproveUserList = ref<SecurityExamineSelfApproveUser[]>([]);
 
   // 部门树(复用物品领取记录的部门字段下拉框逻辑)
   const issueDeptCascaderRef = ref();
@@ -367,15 +367,11 @@
     }
   };
 
-  // 获取部门自评审核人用户列表
-  const getDeptSelfApproveUserList = async () => {
+  // 获取部门自评审核人用户列表(根据考核表ID查询)
+  const getDeptSelfApproveUserList = async (id: number) => {
     try {
-      const res = await queryAvailableUserList({
-        pageNumber: 1,
-        pageSize: 9999,
-        queryParam: {}, // 不传递 deptId 参数
-      });
-      deptSelfApproveUserList.value = res?.records || [];
+      const res = await querySecurityExamineSelfApprove(id);
+      deptSelfApproveUserList.value = res || [];
     } catch (e) {
       console.error('获取部门自评审核人列表失败:', e);
       deptSelfApproveUserList.value = [];
@@ -503,7 +499,7 @@
     issueDeptIds.value = [];
     issueDialogVisible.value = true;
     // 弹窗打开时才加载下发弹窗所需数据
-    await Promise.all([getDeptTreeData(), getUserGroupOptions(), getDeptSelfApproveUserList()]);
+    await Promise.all([getDeptTreeData(), getUserGroupOptions(), getDeptSelfApproveUserList(id)]);
   };
 
   const handleIssueDeptChange = () => {

+ 1 - 1
src/views/production-safety/safetyAssessment/inventory/inventory.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">

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

@@ -14,7 +14,7 @@
       </template>
       <template #deductionReason>
         <el-select
-          v-if="!isViewMode"
+          :disabled="isViewMode"
           v-model="ruleFormData.hiddenDangerId"
           placeholder="请选择扣分原因"
           filterable
@@ -29,7 +29,6 @@
             :value="item.id"
           />
         </el-select>
-        <span v-else>{{ ruleFormData.deductionReason || '-' }}</span>
       </template>
     </BasicForm>
   </main>
@@ -157,7 +156,8 @@
     if (!res) return;
     try {
       const basePayload = {
-        deductionTitle: ruleFormData.deductionTitle,
+        // 扣分标题沿用扣分原因,后端若需要标题字段可复用
+        deductionTitle: ruleFormData.deductionReason,
         deductionDate: ruleFormData.deductionDate,
         deductionScore: ruleFormData.deductionValue,
         departmentName: ruleFormData.departmentName,

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

@@ -2,12 +2,9 @@ import { FormConfig } from '@/types/basic-form';
 
 export const POINT_DEDUCTION_FORM_CONFIG: FormConfig[] = [
   {
-    prop: 'deductionTitle',
-    label: '扣分标题:',
-    component: 'ElInput',
-    componentProps: {
-      placeholder: '请输入扣分标题',
-    },
+    prop: 'hiddenDangerId',
+    label: '扣分原因:',
+    slot: 'deductionReason',
   },
   {
     prop: 'deductionDate',
@@ -32,17 +29,12 @@ export const POINT_DEDUCTION_FORM_CONFIG: FormConfig[] = [
   },
   {
     prop: 'departmentName',
-    label: '部门名称:',
+    label: '部门:',
     component: 'ElInput',
     componentProps: {
       placeholder: '请输入部门名称',
     },
   },
-  {
-    prop: 'hiddenDangerId',
-    label: '扣分原因:',
-    slot: 'deductionReason',
-  },
   {
     prop: 'status',
     label: '状态:',
@@ -51,7 +43,6 @@ export const POINT_DEDUCTION_FORM_CONFIG: FormConfig[] = [
 ];
 
 export const POINT_DEDUCTION_FORM_DATA = {
-  deductionTitle: '',
   deductionDate: '',
   deductionValue: 1, // 最小值为1
   departmentName: '',
@@ -61,7 +52,6 @@ export const POINT_DEDUCTION_FORM_DATA = {
 };
 
 export const POINT_DEDUCTION_FORM_RULES = {
-  deductionTitle: [{ required: true, message: '请输入扣分标题', trigger: 'blur' }],
   deductionDate: [{ required: true, message: '请选择扣分日期', trigger: 'change' }],
   deductionValue: [
     { required: true, message: '请输入扣分值', trigger: 'blur' },

+ 4 - 4
src/views/production-safety/safetyAssessment/receiptRecord/receiptRecordAdministratorReview.vue

@@ -69,17 +69,17 @@
             </template>
             <template #action="scope">
               <div class="action-container--div" style="justify-content: left">
-                <!-- 0 待审核:审核、显示 -->
+                <!-- 0 待审核:审核、查看 -->
                 <template v-if="Number(scope.row.status) === 0">
                   <ActionButton
                     text="审核"
                     @click="handleAudit(scope.row.id, scope.row.approvalOrder)"
                   />
-                  <ActionButton text="显示" @click="handleView(scope.row.id)" />
+                  <ActionButton text="查看" @click="handleView(scope.row.id)" />
                 </template>
-                <!-- 1 审核通过、-1 审核不通过、2 已领取:显示 -->
+                <!-- 1 审核通过、-1 审核不通过、2 已领取:查看 -->
                 <template v-else>
-                  <ActionButton text="显示" @click="handleView(scope.row.id)" />
+                  <ActionButton text="查看" @click="handleView(scope.row.id)" />
                 </template>
               </div>
             </template>