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

Merge branch 'feat/production-safety' of http://192.168.6.110/product-group-fe/sfy-safety-group/sfy-safety into feat/production-safety

sunqijun 1 місяць тому
батько
коміт
d8923f96fa
19 змінених файлів з 471 додано та 79 видалено
  1. 67 0
      src/api/production-safety-system/index.ts
  2. 18 2
      src/api/production-safety/responsibility-implementation/index.ts
  3. 76 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/areaCheckPlanManagement.vue
  4. 95 14
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue
  5. 1 4
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/configs/form.ts
  6. 2 2
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/configs/tables.ts
  7. 20 0
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/areaCheckPlanManagementDept.vue
  8. 37 7
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanManagementDeptDetail.vue
  9. 69 28
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanRecordDetailDept.vue
  10. 1 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/checkTemplateManagement.vue
  11. 51 7
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/components/checkTemplateManagementDetail.vue
  12. 1 0
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/configs/form.ts
  13. 6 6
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/configs/tables.ts
  14. 1 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/employeeReportHiddenTroubleManagement/employeeReportHiddenTroubleManagement.vue
  15. 1 2
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/configs/tables.ts
  16. 3 0
      src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagement.vue
  17. 4 2
      src/views/production-safety/productionSafetySystem/safetyTraining/components/safetyTrainingDetail.vue
  18. 17 1
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/audit.vue
  19. 1 1
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/list.vue

+ 67 - 0
src/api/production-safety-system/index.ts

@@ -647,6 +647,7 @@ export interface SaveChecklistTemplateReq {
   businessWork: string;
   fillInstruction: string;
   ChecklistTemplateItem?: ChecklistTemplateItem[];
+  status?: number; // 0-禁用,1-启用,2-草稿
 }
 
 /** 分页查询请求 - 响应含 pageNumber/pageSize/total/totalPage/records */
@@ -915,6 +916,13 @@ export function mapAreaCheckPlanApiRecordToUi(api: AreaCheckPlanManageApiRecord
     isDeleted: api.isDeleted,
     createdAt: api.createdAt,
     updatedAt: api.updatedAt,
+    primaryResponsibleDeptExecGroupName: api.primaryResponsibleDeptExecGroupName,
+    primaryResponsibleDeptPersonName: api.primaryResponsibleDeptPersonName,
+    safetyEmergencyExecGroupName: api.safetyEmergencyExecGroupName,
+    safetyEmergencyPersonName: api.safetyEmergencyPersonName,
+    hospitalLeaderExecGroupName: api.hospitalLeaderExecGroupName,
+    hospitalLeaderPersonName: api.hospitalLeaderPersonName,
+    businessWork: api.businessWork,
   };
 }
 
@@ -1497,3 +1505,62 @@ export function updateAreaCheckPlan(data: AreaCheckPlanRecord & { id: number })
   return updateAreaCheckPlanManage(data);
 }
 
+/**
+ * 导出区域检查计划清单
+ * @returns Promise<any> 导出的区域检查计划清单数据
+ */
+export function exportAreaCheckPlanList (params: AreaCheckPlanQuery) {
+  return http.request({
+    url: '/areaCheckPlanManageDept/exportAreaCheckPlan',
+    method: 'post',
+    responseType: 'blob',
+    data: params,
+  }, {
+    isTransformResponse: false,
+  });
+}
+
+/**
+ * 导出区域检查计划清单
+ * @returns Promise<any> 导出的区域检查计划清单数据
+ */
+export function exportAreaCheckInspectionRecord (params: AreaCheckPlanQuery) {
+  return http.request({
+    url: '/areaCheckPlanManageDept/exportAreaCheckPlanDetail',
+    method: 'post',
+    responseType: 'blob',
+    data: params,
+  }, {
+    isTransformResponse: false,
+  });
+}
+
+/**
+ * 导出区域检查计划管理
+ * @returns Promise<any> 导出的区域检查计划管理数据
+ */
+export function exportAreaCheckPlanAdministration (params: AreaCheckPlanQuery) {
+  return http.request({
+    url: '/areaCheckPlanManageAdmin/exportAreaCheckPlan',
+    method: 'post',
+    responseType: 'blob',
+    data: params,
+  }, {
+    isTransformResponse: false,
+  });
+}
+
+/**
+ * 导出区域检查计划管理
+ * @returns Promise<any> 导出的区域检查计划管理数据
+ */
+export function exportInspectionRecordTow (params: AreaCheckPlanQuery) {
+  return http.request({
+    url: '/areaCheckPlanManageAdmin/exportAreaCheckPlanLog',
+    method: 'post',
+    responseType: 'blob',
+    data: params,
+  }, {
+    isTransformResponse: false,
+  });
+}

+ 18 - 2
src/api/production-safety/responsibility-implementation/index.ts

@@ -1019,12 +1019,28 @@ export function exportConstructionSafetyList () {
  * 导出危险作业审批管理
  * @returns Promise<any> 导出的危险作业审批管理数据
  */
-export function exportHazardApprovalList () {
+export function exportHazardApprovalList (queryParams) {
   return http.request({
-    url: '/dangerWork/exportDangerWorkApproval',
+    url: '/dangerWork/exportDangerWork',
     method: 'post',
     responseType: 'blob',
+    data: queryParams,
   }, {
     isTransformResponse: false,
   });
 }
+
+/**
+ * 导出危险作业管理审核
+ * @returns Promise<any> 导出的危险作业管理审核
+ */
+export function exportHazardWorkApprovalList (queryParams) {
+  return http.request({
+    url: '/dangerWork/exportDangerWorkApproval',
+    method: 'post',
+    responseType: 'blob',
+    data: queryParams,
+  }, {
+    isTransformResponse: false,
+  });
+}

+ 76 - 1
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/areaCheckPlanManagement.vue

@@ -10,6 +10,9 @@
             <el-button type="primary" class="search-table-container--button" @click="handleCreate">
               添加
             </el-button>
+            <el-button plain class="search-table-container--button" @click="handleImport">
+              导入
+            </el-button>
           </div>
 
           <div class="act-search">
@@ -70,6 +73,9 @@
             <section class="search-btn">
               <el-button type="primary" @click="handleSearch">查询</el-button>
               <el-button @click="handleReset">重置</el-button>
+              <el-button plain  @click="handleDownload">
+                导出
+              </el-button>
             </section>
           </div>
         </header>
@@ -270,6 +276,16 @@
         <el-button type="primary" @click="handleIssueSave">保存</el-button>
       </template>
     </el-dialog>
+    <BatchImport
+      v-if="batchImportVisible"
+      :visible="batchImportVisible"
+      :import-api-url="importApiUrl"
+      :template-url="templateUrl"
+      template-name="下载模板"
+      :show-template="false"
+      @close="batchImportVisible = false"
+      @update="handleUpdate"
+    />
   </div>
 </template>
 
@@ -290,12 +306,16 @@
     cancelAreaCheckPlanManage,
     queryAreaCheckPlanManageDetail,
     mapAreaCheckPlanApiRecordToUi,
+    exportAreaCheckPlanAdministration,
   } from '@/api/production-safety-system';
   import { getAllDepartments } from '@/api/auth/dept';
   import type { DeptTree } from '@/types/dept/type';
   import { queryUserGroupPage } from '@/api/system/person-group';
   import type { PersonGroupListItem } from '@/types/person-group/type';
-
+  import BatchImport from '@/components/batch-import/BatchImport.vue';
+  import { useGlobSetting } from '@/hooks/setting';
+  import urlJoin from 'url-join';
+  import { downloadByData } from '@/utils/file/download';
   const router = useRouter();
 
   const basicTableRef = ref<InstanceType<typeof BasicTable>>();
@@ -594,11 +614,66 @@
     }
   };
 
+  // 批量导入
+  const batchImportVisible = ref(false);
+  const { urlPrefix } = useGlobSetting();
+  // /productionSafety/academyFile/import
+  const importApiUrl = ref(urlJoin(urlPrefix, '/areaCheckPlanManageAdmin/importAreaCheckPlan'));
+  const templateUrl = ref('./skyeye-file-upload/sfysecurity/TEMPLATE/import-academy-file-template.xlsx');
+
+  const handleImport = () => {
+    batchImportVisible.value = true;
+  };
+
+  const handleUpdate = () => {
+    batchImportVisible.value = false;
+    // getTableData();
+  };
+
+  const handleDownload = async () => {
+    try {
+      const response = await exportAreaCheckPlanAdministration(tableQuery.queryParam);
+      if (response) {
+        const fileName = `区域检查计划管理_${new Date().toISOString().split('T')[0]}.xlsx`;
+        downloadByData(response, fileName);
+        ElMessage.success('导出成功');
+      }
+    } catch (e) {
+      console.error('导出院级文件失败:', e);
+      ElMessage.error('导出失败,请重试');
+    }
+  };
+
   onMounted(() => {
     venueCategoryOptions.value = [
       { label: '各级风险点', value: '各级风险点' },
       { label: '关键业务活动', value: '关键业务活动' },
       { label: '日常安全', value: '日常安全' },
+      { label: '各级危险点', value: '各级危险点' },
+      { label: '试验室及试验过程', value: '试验室及试验过程' },
+      { label: '办公区域(含地下车库、图书馆、档案库房、仓库等)', value: '办公区域(含地下车库、图书馆、档案库房、仓库等)' },
+      { label: '老旧厂房', value: '老旧厂房' },
+      { label: '施工现场', value: '施工现场' },
+      { label: '职工食堂', value: '职工食堂' },
+      { label: '职工宿舍', value: '职工宿舍' },
+      { label: '体育活动场所', value: '体育活动场所' },
+      { label: '托育园', value: '托育园' },
+      { label: '租、出借房屋', value: '租、出借房屋' },
+      { label: '院内经营服务场所', value: '院内经营服务场所' },
+      { label: '垃圾房', value: '垃圾房' },
+      { label: '院内交通', value: '院内交通' },
+      { label: '消防设施设备', value: '消防设施设备' },
+      { label: '特种设备', value: '特种设备' },
+      { label: '防雷设施', value: '防雷设施' },
+      { label: '供、配电设施设备(含弱电)', value: '供、配电设施设备(含弱电)' },
+      { label: '公务车辆', value: '公务车辆' },
+      { label: '燃气管道设施(含报警装置)', value: '燃气管道设施(含报警装置)' },
+      { label: '建筑物外墙标识物、装饰物', value: '建筑物外墙标识物、装饰物' },
+      { label: 'UPS电源', value: 'UPS电源' },
+      { label: '危险化学品', value: '危险化学品' },
+      { label: '设施设备应急操作流程', value: '设施设备应急操作流程' },
+      { label: '堆场、物资库房', value: '堆场、物资库房' },
+      { label: '室内外停车场', value: '室内外停车场' }
     ];
     getTableData();
   });

+ 95 - 14
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue

@@ -39,11 +39,11 @@
         <div class="row">
           <div class="col">
             <div class="label">主责部门执行人所属分组名称:</div>
-            <div class="value">{{ viewDetail.mainDeptExecutorGroupName || '-' }}</div>
+            <div class="value">{{ viewDetail.primaryResponsibleDeptExecGroupName || '-' }}</div>
           </div>
           <div class="col">
             <div class="label">主责部门责任人:</div>
-            <div class="value">{{ viewDetail.mainDeptResponsiblePerson || '-' }}</div>
+            <div class="value">{{ viewDetail.primaryResponsibleDeptPersonName || '-' }}</div>
           </div>
         </div>
         <div class="row">
@@ -58,12 +58,12 @@
         </div>
         <div class="row">
           <div class="col">
-            <div class="label">安全应急部执行人所属分组名称:</div>
-            <div class="value">{{ viewDetail.safetyEmergencyExecutorGroupName || '-' }}</div>
+            <div class="label">安全应急部执行人所属分组名称:</div> 
+            <div class="value">{{ viewDetail.safetyEmergencyExecGroupName || '-' }}</div>
           </div>
           <div class="col">
             <div class="label">安全应急部责任人:</div>
-            <div class="value">{{ viewDetail.safetyEmergencyResponsiblePerson || '-' }}</div>
+            <div class="value">{{ viewDetail.safetyEmergencyPersonName || '-' }}</div>
           </div>
         </div>
         <div class="row">
@@ -79,11 +79,11 @@
         <div class="row">
           <div class="col">
             <div class="label">院领导执行人所属分组名称:</div>
-            <div class="value">{{ viewDetail.hospitalLeaderExecutorGroupName || '-' }}</div>
+            <div class="value">{{ viewDetail.hospitalLeaderExecGroupName || '-' }}</div>
           </div>
           <div class="col">
             <div class="label">院领导责任人:</div>
-            <div class="value">{{ viewDetail.hospitalLeaderResponsiblePerson || '-' }}</div>
+            <div class="value">{{ viewDetail.hospitalLeaderPersonName || '-' }}</div>
           </div>
         </div>
         <div class="row">
@@ -175,17 +175,17 @@
           </el-button>
         </template>
         <template #sign="scope">
-          <template v-if="parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile).length">
+          <template v-if="JSON.parse(scope.row.checkedPersonSign || '[]').length">
             <div
               class="file-container--div"
-              v-for="item in parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile)"
+              v-for="item in JSON.parse(scope.row.checkedPersonSign || '[]')"
               :key="item.fileUrl || item.fileName"
             >
-              <img
+              <!-- <img
                 class="file-container--div__icon"
                 :src="FILE_TYPE_ICON[item.fileType as keyof typeof FILE_TYPE_ICON]"
                 @click="previewOnline(item.fileUrl, item.fileType as keyof typeof FILE_TYPE_ICON)"
-              />
+              /> -->
               <span
                 class="file-container--div__name"
                 @click="previewOnline(item.fileUrl, item.fileType as keyof typeof FILE_TYPE_ICON)"
@@ -293,6 +293,23 @@
           </el-radio>
         </el-radio-group>
       </template>
+      <template #venueCategoryName>
+        <el-select
+          v-model="ruleFormData.venueCategoryName"
+          placeholder="请选择检查类别"
+          filterable
+          clearable
+          :disabled="isViewMode"
+          style="width: 100%"
+        >
+          <el-option
+            v-for="item in venueCategoryOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </template>
     </BasicForm>
   </main>
   <footer class="safety-platform-container__footer">
@@ -445,6 +462,7 @@
     queryCheckListTemplateNameList,
     queryUnqualifiedItemNumPage,
     sandAreaCheckRecordToProductionHiddenDanger,
+    exportInspectionRecordTow,
     type ChecklistTemplate,
     type UnqualifiedItemNumRecord,
     type SandAreaCheckRecordToHiddenDangerReq,
@@ -455,6 +473,8 @@
     HIDDEN_DANGER_FORM_DATA,
     HIDDEN_DANGER_FORM_RULES,
   } from '@/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/configs/form';
+  import { downloadByData } from '@/utils/file/download';
+import { id } from 'element-plus/es/locale';
 
   const router = useRouter();
   const route = useRoute();
@@ -464,7 +484,7 @@
   const isCreateMode = computed(() => operate.value === 'area-check-plan-create');
   const isEditMode = computed(() => operate.value === 'area-check-plan-edit');
   const isViewMode = computed(() => operate.value === 'area-check-plan-view');
-
+  const venueCategoryOptions = ref<Array<{ label: string; value: string }>>([]);
   const AREA_CHECK_PLAN_FORM_CONFIG = AREA_CHECK_PLAN_FORM_CONFIG_IMPORT ?? [];
   const AREA_CHECK_PLAN_FORM_DATA = AREA_CHECK_PLAN_FORM_DATA_IMPORT ?? {};
   const AREA_CHECK_PLAN_FORM_RULES = AREA_CHECK_PLAN_FORM_RULES_IMPORT ?? {};
@@ -654,6 +674,12 @@
        createdPersonName: d?. createdPersonName ?? '-',
       createdAt: d?.createdAt ?? '-',
       businessWork: d?.businessWork ?? '-',
+      primaryResponsibleDeptExecGroupName: d?.primaryResponsibleDeptExecGroupName ?? '-',
+      primaryResponsibleDeptPersonName: d?.primaryResponsibleDeptPersonName ?? '-',
+      safetyEmergencyExecGroupName: d?.safetyEmergencyExecGroupName ?? '-',
+      safetyEmergencyPersonName: d?.safetyEmergencyPersonName ?? '-',
+      hospitalLeaderExecGroupName: d?.hospitalLeaderExecGroupName ?? '-',
+      hospitalLeaderPersonName: d?.hospitalLeaderPersonName ?? '-',
     };
   });
 
@@ -825,8 +851,27 @@
     recordPagination.pageNumber = 1;
     loadRecordList();
   };
-  const onRecordExport = () => {
-    ElMessage.success('导出功能开发中');
+  const onRecordExport = async () => {
+    try {
+      const [start, end] = recordDateRange.value && recordDateRange.value.length === 2
+        ? recordDateRange.value
+        : ['', ''];
+      const queryParam = {
+          id: currentId.value,
+          searchKey: recordSearchKeyword.value || undefined,
+          startDate: start || undefined,
+          endDate: end || undefined,
+        };
+      const response = await exportInspectionRecordTow(queryParam);
+      if (response) {
+        const fileName = `区域检查记录_${new Date().toISOString().split('T')[0]}.xlsx`;
+        downloadByData(response, fileName);
+        ElMessage.success('导出成功');
+      }
+    } catch (e) {
+      console.error('导出区域检查记录失败:', e);
+      ElMessage.error('导出失败,请重试');
+    }
   };
 
   const handleSandToHiddenDanger = (row: { id?: number } & Record<string, unknown>) => {
@@ -958,6 +1003,12 @@
       ruleFormData.categoryName = detail.categoryName ?? '';
       ruleFormData.checklistTemplateName = detail.checklistTemplateName ?? '';
       ruleFormData.checkKeyContent = detail.checkKeyContent ?? '';
+      ruleFormData.primaryResponsibleDeptExecGroupName = detail.primaryResponsibleDeptExecGroupName ?? '';
+      ruleFormData.primaryResponsibleDeptPersonName = detail.primaryResponsibleDeptPersonName ?? '';
+      ruleFormData.safetyEmergencyExecGroupName = detail.safetyEmergencyExecGroupName ?? '';
+      ruleFormData.safetyEmergencyPersonName = detail.safetyEmergencyPersonName ?? '';
+      ruleFormData.hospitalLeaderExecGroupName = detail.hospitalLeaderExecGroupName ?? '';
+      ruleFormData.hospitalLeaderPersonName = detail.hospitalLeaderPersonName ?? '';
       updateChecklistTemplateOptionsByCategory(ruleFormData.categoryName as string | undefined);
       cloneRuleFormData();
       if (isViewMode.value) {
@@ -987,6 +1038,36 @@
 
   onMounted(async () => {
     cloneRuleFormData();
+    venueCategoryOptions.value = [
+      { label: '各级风险点', value: '各级风险点' },
+      { label: '关键业务活动', value: '关键业务活动' },
+      { label: '日常安全', value: '日常安全' },
+      { label: '各级危险点', value: '各级危险点' },
+      { label: '试验室及试验过程', value: '试验室及试验过程' },
+      { label: '办公区域(含地下车库、图书馆、档案库房、仓库等)', value: '办公区域(含地下车库、图书馆、档案库房、仓库等)' },
+      { label: '老旧厂房', value: '老旧厂房' },
+      { label: '施工现场', value: '施工现场' },
+      { label: '职工食堂', value: '职工食堂' },
+      { label: '职工宿舍', value: '职工宿舍' },
+      { label: '体育活动场所', value: '体育活动场所' },
+      { label: '托育园', value: '托育园' },
+      { label: '租、出借房屋', value: '租、出借房屋' },
+      { label: '院内经营服务场所', value: '院内经营服务场所' },
+      { label: '垃圾房', value: '垃圾房' },
+      { label: '院内交通', value: '院内交通' },
+      { label: '消防设施设备', value: '消防设施设备' },
+      { label: '特种设备', value: '特种设备' },
+      { label: '防雷设施', value: '防雷设施' },
+      { label: '供、配电设施设备(含弱电)', value: '供、配电设施设备(含弱电)' },
+      { label: '公务车辆', value: '公务车辆' },
+      { label: '燃气管道设施(含报警装置)', value: '燃气管道设施(含报警装置)' },
+      { label: '建筑物外墙标识物、装饰物', value: '建筑物外墙标识物、装饰物' },
+      { label: 'UPS电源', value: 'UPS电源' },
+      { label: '危险化学品', value: '危险化学品' },
+      { label: '设施设备应急操作流程', value: '设施设备应急操作流程' },
+      { label: '堆场、物资库房', value: '堆场、物资库房' },
+      { label: '室内外停车场', value: '室内外停车场' }
+    ];
     await getDeptTreeData();
     await loadChecklistCategoryOptions();
     await loadChecklistTemplateOptions();

+ 1 - 4
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/configs/form.ts

@@ -30,10 +30,7 @@ export const AREA_CHECK_PLAN_FORM_CONFIG: FormConfig[] = [
   {
     prop: 'venueCategoryName',
     label: '检查类别:',
-    component: 'ElInput',
-    componentProps: {
-      placeholder: '输入检查类别',
-    },
+    slot: 'venueCategoryName',
   },
   {
     prop: 'checkVenue',

+ 2 - 2
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/configs/tables.ts

@@ -61,14 +61,14 @@ export const AREA_CHECK_PLAN_TABLE_COLUMNS: TableColumnProps[] = [
   },
   {
     label: '主责部门执行人所属分组名称',
-    prop: 'mainDeptExecutorGroupName',
+    prop: 'primaryResponsibleDeptExecGroupName',
     align: 'left',
     minWidth: '240px',
     showOverflowTooltip: true,
   },
   {
     label: '主责部门责任人',
-    prop: 'mainDeptResponsiblePerson',
+    prop: 'primaryResponsibleDeptPersonName',
     align: 'left',
     minWidth: '160px',
     showOverflowTooltip: true,

+ 20 - 0
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/areaCheckPlanManagementDept.vue

@@ -66,6 +66,9 @@
             <section class="search-btn">
               <el-button type="primary" @click="handleSearch">查询</el-button>
               <el-button @click="handleReset">重置</el-button>
+              <el-button plain  @click="handleDownload">
+                导出
+              </el-button>
             </section>
           </div>
         </header>
@@ -115,8 +118,11 @@
   import type { AreaCheckPlanQuery, AreaCheckPlanRecord } from '../areaCheckPlanManagement/configs/types';
   import {
     queryAreaCheckPlanManageDeptPage,
+    exportAreaCheckPlanList,
     mapAreaCheckPlanApiRecordToUi,
   } from '@/api/production-safety-system';
+  import { downloadByData } from '@/utils/file/download';
+  import { ElMessage } from 'element-plus';
 
   const router = useRouter();
 
@@ -206,6 +212,20 @@
     });
   };
 
+  const handleDownload = async () => {
+    try {
+      const response = await exportAreaCheckPlanList(tableQuery.queryParam);
+      if (response) {
+        const fileName = `区域检查计划管理_${new Date().toISOString().split('T')[0]}.xlsx`;
+        downloadByData(response, fileName);
+        ElMessage.success('导出成功');
+      }
+    } catch (e) {
+      console.error('导出院级文件失败:', e);
+      ElMessage.error('导出失败,请重试');
+    }
+  };
+
   onMounted(() => {
     venueCategoryOptions.value = [
       { label: '各级风险点', value: '各级风险点' },

+ 37 - 7
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanManagementDeptDetail.vue

@@ -39,11 +39,11 @@
         <div class="row">
           <div class="col">
             <div class="label">主责部门执行人所属分组名称:</div>
-            <div class="value">{{ viewDetail.mainDeptExecutorGroupName || '-' }}</div>
+            <div class="value">{{ viewDetail.primaryResponsibleDeptExecGroupName || '-' }}</div>
           </div>
           <div class="col">
             <div class="label">主责部门责任人:</div>
-            <div class="value">{{ viewDetail.mainDeptResponsiblePerson || '-' }}</div>
+            <div class="value">{{ viewDetail.primaryResponsibleDeptPersonName || '-' }}</div>
           </div>
         </div>
         <div class="row">
@@ -176,10 +176,10 @@
           </el-button>
         </template>
         <template #sign="scope">
-          <template v-if="parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile).length">
+          <template v-if="JSON.parse(scope.row.checkedPersonSign || '[]').length">
             <div
               class="file-container--div"
-              v-for="item in parseSignFiles(scope.row.checkedPersonSign || scope.row.signFile)"
+              v-for="item in JSON.parse(scope.row.checkedPersonSign || '[]')"
               :key="item.fileUrl || item.fileName"
             >
               <img
@@ -334,6 +334,7 @@
     mapAreaCheckPlanApiRecordToUi,
     queryUnqualifiedItemNumDeptPage,
     sandAreaCheckRecordToProductionHiddenDanger,
+    exportAreaCheckInspectionRecord,
     type UnqualifiedItemNumRecord,
     type SandAreaCheckRecordToHiddenDangerReq,
   } from '@/api/production-safety-system';
@@ -347,6 +348,7 @@
     HIDDEN_DANGER_FORM_RULES,
   } from '@/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/configs/form';
   import { queryAvailableUserList } from '@/api/production-safety/responsibility-implementation';
+  import { downloadByData } from '@/utils/file/download';
 
   const router = useRouter();
   const route = useRoute();
@@ -387,6 +389,8 @@
       createdPersonName: (d?.createdPersonName ?? '') || '-',
       createdAt: (d?.createdAt ?? '') || '-',
       businessWork: (d?.businessWork ?? '') || '-',
+      primaryResponsibleDeptExecGroupName: d?.primaryResponsibleDeptExecGroupName ?? '-',
+      primaryResponsibleDeptPersonName: d?.primaryResponsibleDeptPersonName ?? '-',
     };
   });
 
@@ -561,8 +565,26 @@
     recordPagination.pageNumber = 1;
     loadRecordList();
   };
-  const onRecordExport = () => {
-    ElMessage.success('导出功能开发中');
+  const onRecordExport = async () => {
+    try {
+      const [start, end] = recordDateRange.value && recordDateRange.value.length === 2
+        ? recordDateRange.value
+        : ['', ''];
+      const queryParam = {
+          searchKey: recordSearchKeyword.value || undefined,
+          startDate: start || undefined,
+          endDate: end || undefined,
+      };
+      const response = await exportAreaCheckInspectionRecord(queryParam);
+      if (response) {
+        const fileName = `检查记录_${new Date().toISOString().split('T')[0]}.xlsx`;
+        downloadByData(response, fileName);
+        ElMessage.success('导出成功');
+      }
+    } catch (e) {
+      console.error('导出院级文件失败:', e);
+      ElMessage.error('导出失败,请重试');
+    }
   };
 
   const loadUnqualifiedList = async () => {
@@ -667,11 +689,15 @@
   };
 
   const onAddRecord = () => {
+    const needOverallDesc = !viewDetail.value.needOverallDesc ? 0 : 1;
+    const needSigneeSign = !viewDetail.value.needSigneeSign ? 0 : 1;
     router.push({
       name: 'areaCheckPlanManagementDeptItem',
       query: {
         operate: 'area-check-plan-record-add',
-        planId: currentId.value,
+        planId: currentId.value,  
+        needOverallDesc,
+        needSigneeSign,
       },
     });
   };
@@ -700,12 +726,16 @@
   };
 
   const onViewRecord = (row: Record<string, unknown>) => {
+    const needOverallDesc = !viewDetail.value.needOverallDesc ? 0 : 1;
+    const needSigneeSign = !viewDetail.value.needSigneeSign ? 0 : 1;
     router.push({
       name: 'areaCheckPlanManagementDeptItem',
       query: {
         operate: 'area-check-plan-record-view',
         recordId: row.id,
         planId: currentId.value,
+        needOverallDesc,
+        needSigneeSign,
       },
     });
   };

+ 69 - 28
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanRecordDetailDept.vue

@@ -1,6 +1,6 @@
 <template>
   <main class="safety-platform-container__main">
-    <el-form ref="formRef" :model="formData" :rules="isAddMode ? formRules : undefined" label-width="180px" class="check-record-form">
+    <el-form ref="formRef" :model="formData" :rules="isViewMode ? undefined : formRules" label-width="180px" class="check-record-form">
       <el-form-item label="被检查单位:" prop="inspectedUnit">
         <el-input v-model="formData.inspectedUnit" :disabled="!isAddMode" placeholder="请输入被检查单位" clearable />
       </el-form-item>
@@ -11,10 +11,10 @@
         <el-date-picker
           v-if="isAddMode"
           v-model="formData.checkTime"
-          type="date"
+          type="datetime"
           placeholder="选择检查日期"
-          value-format="YYYY-MM-DD"
-          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          format="YYYY-MM-DD HH:mm:ss"
           style="width: 100%"
         />
         <el-input v-else v-model="formData.checkTime" disabled />
@@ -22,7 +22,7 @@
       <el-form-item label="检查地点:" prop="checkPlace">
         <el-input v-model="formData.checkPlace" :disabled="!isAddMode" placeholder="请输入检查地点" clearable />
       </el-form-item>
-      <el-form-item label="整体检查情况描述:" prop="overallDesc">
+      <el-form-item v-if="needOverallDesc === '1'" label="整体检查情况描述:" prop="overallDesc" :required="needOverallDesc === '1' && isAddMode">
         <el-input
           v-model="formData.overallDesc"
           type="textarea"
@@ -33,16 +33,31 @@
           :placeholder="isAddMode ? '请输入整体检查情况描述(限300字)' : '整体检查情况描述(限300字)'"
         />
       </el-form-item>
-      <el-form-item label="被检查人签字文件:" prop="signFile">
-        <div v-if="!isAddMode" class="upload-files-disabled">
-          <UploadFiles label="上传附件" :file-list="displayFileList" />
-        </div>
+      <el-form-item v-if="needSigneeSign === '1'" label="被检查人签字文件:" prop="signFile" :required="needSigneeSign === '1' && isAddMode">
         <UploadFiles
-          v-else
-          label="上传附件"
-          :file-list="displayFileList"
-          @uploadSuccess="handleUploadSuccess"
+          v-if="!isViewMode"
+          label="上传文件"
+          :maxCount="1"
+          :file-list="signFileList"
+          :disabled="isViewMode"
+          :allow-all-file-types="true"
+          :accept="'.jpg,.jpeg,.png'"
+          :desc="'支持.jpg,.jpeg,.png'"
+          @uploadSuccess="(list: FileItem[]) => handleUploadSuccess(list)"
         />
+        <div class="file-list" v-else>
+          <div class="file-item" v-for="file in signFileList" :key="file.fileId">
+            <span class="file-item--name">{{ file.fileName }}</span>
+            <div class="file-item--footer">
+              <el-button link type="primary" @click="previewOnline(file.fileUrl, file.fileType)"
+                >预览</el-button
+              >
+              <el-button link type="primary" @click.stop="downloadFile(file.fileUrl, file.fileName)"
+                >下载</el-button
+              >
+            </div>
+          </div>
+        </div>
       </el-form-item>
     </el-form>
 
@@ -77,6 +92,9 @@
       <el-button @click="handleBack">返回</el-button>
       <el-button type="primary" @click="handleSubmit">提交</el-button>
     </footer>
+
+    <PreviewOnline ref="previewOnlineRef" />
+
   </main>
 </template>
 
@@ -92,15 +110,21 @@
     saveAreaCheckPlanDetailDept,
     type AreaCheckRecordTemplateItem,
   } from '@/api/production-safety-system';
+  import { formatAttachmentList } from '@/components/UploadFiles/utils';
+  import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
+  import { downloadFile } from '@/views/disaster/utils';
 
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
   const router = useRouter();
   const route = useRoute();
 
   const operate = computed(() => (route.query.operate as string) || '');
   const isAddMode = computed(() => operate.value === 'area-check-plan-record-add');
+  const isViewMode = computed(() => operate.value === 'area-check-plan-record-view');
   const recordId = computed(() => Number(route.query.recordId));
   const planId = computed(() => Number(route.query.planId));
-
+  const needOverallDesc = computed(() => route.query.needOverallDesc);
+  const needSigneeSign = computed(() => route.query.needSigneeSign);
   const formRef = ref();
   const formData = ref({
     inspectedUnit: '',
@@ -116,6 +140,16 @@
     inspector: [{ required: true, message: '请输入检查人员', trigger: 'blur' }],
     checkTime: [{ required: true, message: '请选择检查时间', trigger: 'change' }],
     checkPlace: [{ required: true, message: '请输入检查地点', trigger: 'blur' }],
+    overallDesc: [{ 
+      required: needOverallDesc.value === '1', 
+      message: '请输入整体检查情况描述', 
+      trigger: 'blur' 
+    }],
+    signFile: [{ 
+      required: needSigneeSign.value === '1', 
+      message: '请上传被检查人签字文件', 
+      trigger: 'change' 
+    }],
   };
 
   interface CheckItem {
@@ -153,10 +187,7 @@
 
   const handleUploadSuccess = (files: FileItem[]) => {
     signFileList.value = files;
-    formData.value.signFile = files
-      .map((f) => f.fileUrl || f.fileName)
-      .filter(Boolean)
-      .join(',');
+    formData.value.signFile = JSON.stringify(files);
   };
 
   const handleBack = () => {
@@ -172,16 +203,19 @@
       return;
     }
     try {
+
+      const uploadedFileList = await formatAttachmentList(signFileList.value);
+
       await saveAreaCheckPlanDetailDept({
-        areaPlanId: planId.value,
-        checkedCompanyName: formData.value.inspectedUnit,
-        checkTime: formData.value.checkTime,
-        checkPersonName: formData.value.inspector,
-        // 暂无人员 code 来源,前端先不传或由后端根据名称解析
-        checkAddress: formData.value.checkPlace,
-        overallCheckDesc: formData.value.overallDesc,
-        checkedPersonSign: formData.value.signFile,
-        areaCheckRecords: checkItems.value.map((item) => ({
+          areaPlanId: planId.value,
+          checkedCompanyName: formData.value.inspectedUnit,
+          checkTime: formData.value.checkTime,
+          checkPersonName: formData.value.inspector,
+          // 暂无人员 code 来源,前端先不传或由后端根据名称解析
+          checkAddress: formData.value.checkPlace,
+          overallCheckDesc: formData.value.overallDesc,
+          checkedPersonSign: JSON.stringify(uploadedFileList),
+          areaCheckRecords: checkItems.value.map((item) => ({
           checkContent: item.checkContent || '',
           checkStandard: item.checkStandard || '',
           // 新增检查日志时,检查结果和问题直接使用接口返回的数据
@@ -209,8 +243,9 @@
           checkTime: String(r?.checkTime ?? ''),
           checkPlace: String(r?.checkAddress ?? r?.checkPlace ?? ''),
           overallDesc: String(r?.overallCheckDesc ?? ''),
-          signFile: String(r?.checkedPersonSign ?? ''),
+          signFile: JSON.stringify(convertSignFileToFileItems(String(r?.checkedPersonSign ?? ''))),
         };
+        signFileList.value = JSON.parse(r.checkedPersonSign || '[]');
         const records = (r?.areaCheckRecords ?? []) as Array<Record<string, unknown>>;
         checkItems.value = records.map((item) => ({
           checkContent: (item.checkContent ?? '') as string,
@@ -276,6 +311,12 @@
     }
   };
 
+  const previewOnline = (url: string | undefined, type) => {
+    if (url) {
+      previewOnlineRef.value?.open(url, type);
+    }
+  };
+
   onMounted(() => {
     initFormData();
   });

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

@@ -15,7 +15,7 @@
           <div class="act-search">
             <section class="select-box">
               <div class="select-box--item">
-                <span>模版条件:</span>
+                <span>模版名称:</span>
                 <el-input
                   v-model="tableQuery.queryParam.templateName"
                   placeholder="搜索检查单模版名称"

+ 51 - 7
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/components/checkTemplateManagementDetail.vue

@@ -48,6 +48,12 @@
           show-word-limit
         />
       </el-form-item>
+      <el-form-item label="状态:" prop="status">
+        <el-radio-group v-model="ruleFormData.status" :disabled="isViewMode">
+          <el-radio :label="1">启用</el-radio>
+          <el-radio :label="0">禁用</el-radio>
+        </el-radio-group>
+      </el-form-item>
     </el-form>
 
     <div class="check-items-section">
@@ -62,7 +68,7 @@
         </el-upload>
       </div>
       <div class="check-items-table">
-        <el-table :data="checkItems" border>
+        <el-table :data="checkItems" border :span-method="handleSpanMethod">
           <el-table-column label="编号" type="index" width="80" align="center" />
           <el-table-column label="检查内容" min-width="180">
             <template #header>
@@ -80,7 +86,7 @@
             <template #default="scope">
               <el-input
                 v-model="scope.row.checkStandard"
-                placeholder="请输入检查标准"
+                placeholder="请输入检查标准" 
                 :disabled="isViewMode"
               />
             </template>
@@ -90,7 +96,7 @@
               <el-radio-group v-model="scope.row.checkResult" :disabled="isViewMode">
                 <el-radio value="合格">合格</el-radio>
                 <el-radio value="不合格">不合格</el-radio>
-                <el-radio value="待检">待检</el-radio>
+                <!-- <el-radio value="待检">待检</el-radio> -->
               </el-radio-group>
             </template>
           </el-table-column>
@@ -99,7 +105,7 @@
               <el-input
                 v-model="scope.row.checkProblem"
                 placeholder="请输入检查发现问题"
-                :disabled="isViewMode"
+                :disabled="true"
               />
             </template>
           </el-table-column>
@@ -124,7 +130,7 @@
 </template>
 
 <script setup lang="ts">
-  import { computed, onMounted, ref } from 'vue';
+  import { computed, onMounted, ref ,nextTick } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import type { FormInstance } from 'element-plus';
@@ -201,7 +207,11 @@
   };
 
   const handleAddItem = (index: number) => {
-    checkItems.value.splice(index + 1, 0, createEmptyCheckItem());
+    const currentItem = checkItems.value[index];
+    checkItems.value.splice(index + 1, 0, {
+      ...createEmptyCheckItem(),
+      checkContent: currentItem.checkContent || '',
+    });
   };
 
   /** 向上插入分类:在当前行之前插入一条空白数据 */
@@ -245,6 +255,7 @@
       ruleFormData.value.categoryCode = detail.categoryCode || '';
       ruleFormData.value.businessWork = detail.businessWork || '';
       ruleFormData.value.fillInstruction = detail.fillInstruction || '';
+      ruleFormData.value.status = detail.status === 0 ? 0 : 1;
 
       const items = detail.ChecklistTemplateItem;
       if (items && items.length > 0) {
@@ -260,12 +271,23 @@
           }));
       }
       if (checkItems.value.length === 0) checkItems.value = [createEmptyCheckItem()];
+
+      await nextTick();
+      recalculateMerges();
+
     } catch (e: any) {
       console.error('获取检查单模版详情失败:', e);
       ElMessage.error(e?.message || e?.data || '获取详情失败,请重试');
     }
   };
 
+  const recalculateMerges = () => {
+    // 强制表格重新计算合并
+    const temp = [...checkItems.value];
+    checkItems.value = [];
+    checkItems.value = temp;
+  };
+
   const createEmptyCheckItem = (): CheckItemRow => ({
     checkContent: '',
     checkStandard: '',
@@ -308,8 +330,8 @@
         businessWork: ruleFormData.value.businessWork || '',
         fillInstruction: ruleFormData.value.fillInstruction || '',
         ChecklistTemplateItem: items,
+        status: ruleFormData.value.status,
       };
-
       if (isEditMode.value && props.id) {
         await updateChecklistTemplate({ id: props.id, ...payload });
         ElMessage.success('保存成功');
@@ -325,6 +347,28 @@
     }
   };
 
+  const handleSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
+    if (columnIndex === 1) {
+      const currentContent = row.checkContent;
+      if (!currentContent) {
+        return { rowspan: 1, colspan: 1 };
+      }
+      let rowspan = 1;
+      for (let i = rowIndex + 1; i < checkItems.value.length; i++) {
+        if (checkItems.value[i].checkContent === currentContent) {
+          rowspan++;
+        } else {
+          break;
+        }
+      }
+      if (rowIndex > 0 && checkItems.value[rowIndex - 1].checkContent === currentContent) {
+        return { rowspan: 0, colspan: 0 };
+      }
+      return { rowspan, colspan: 1 };
+    }
+    return { rowspan: 1, colspan: 1 };
+  };
+
   onMounted(async () => {
     await loadCategoryOptions();
     if (isEditMode.value || isViewMode.value) {

+ 1 - 0
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/configs/form.ts

@@ -19,4 +19,5 @@ export const CHECK_TEMPLATE_FORM_RULES = {
   categoryName: [{ required: true, message: '请选择类别名称', trigger: 'change' }],
   businessWork: [{ required: true, message: '请输入业务工作', trigger: 'blur' }],
   fillInstruction: [{ required: true, message: '请输入填写说明', trigger: 'blur' }],
+  status: [{ required: true, message: '请选择状态', trigger: 'change' }],
 };

+ 6 - 6
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/checkTemplateManagement/configs/tables.ts

@@ -40,12 +40,12 @@ export const CHECK_TEMPLATE_TABLE_COLUMNS: TableColumnProps[] = [
     align: 'center',
     minWidth: '100px',
   },
-  {
-    label: '备注',
-    prop: 'remark',
-    align: 'left',
-    minWidth: '150px',
-  },
+  // {
+  //   label: '备注',
+  //   prop: 'remark',
+  //   align: 'left',
+  //   minWidth: '150px',
+  // },
   {
     label: '修改用户名称',
     prop: 'updateUserName',

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

@@ -7,7 +7,7 @@
       <div class="search-table-container">
         <header>
           <div style="position: relative">
-            <el-button type="primary" class="search-table-container--button" @click="handleCreate"> 新增 </el-button>
+            <!-- <el-button type="primary" class="search-table-container--button" @click="handleCreate"> 新增 </el-button> -->
             <el-button plain class="search-table-container--button" @click="handleImport"> 导入 </el-button>
           </div>
 

+ 1 - 2
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/configs/tables.ts

@@ -102,8 +102,7 @@ export const WORK_PLAN_TABLE_COLUMNS: TableColumnProps[] = [
   {
     label: '计划完成时间',
     prop: 'plannedEndTime',
-    align: 'left',
-    minWidth: '160px',
+    slot: 'plannedEndTime',
   },
   {
     label: '操作',

+ 3 - 0
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/safetySystemConstructionWorkPlanManagement.vue

@@ -131,6 +131,9 @@
             <template #feedbackRatio="scope">
               {{ (scope.row.feedbackRatio === 0 && scope.row.status === 1) ? '-' : scope.row.feedbackRatio+'%' }}
             </template>
+            <template #plannedEndTime="scope">
+                {{ scope.row.status === 1 ? '-' : scope.row.plannedEndTime }}
+            </template>
           </BasicTable>
         </div>
       </div>

+ 4 - 2
src/views/production-safety/productionSafetySystem/safetyTraining/components/safetyTrainingDetail.vue

@@ -29,9 +29,9 @@
               <el-button link type="primary" @click="previewOnline(file.fileUrl, file.fileType)"
                 >预览</el-button
               >
-              <!-- <el-button link type="primary" @click.stop="downloadFile(file.fileUrl, file.fileName)"
+              <el-button link type="primary" @click.stop="downloadFile(file.fileUrl, file.fileName)"
                 >下载</el-button
-              > -->
+              >
             </div>
           </div>
         </div>
@@ -93,6 +93,7 @@
   import type { FileItem } from '@/components/UploadFiles/types';
   import { formatAttachmentList } from '@/components/UploadFiles/utils';
   import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
+  import { downloadFile } from '@/views/disaster/utils';
 
   const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
 
@@ -149,6 +150,7 @@
 
   // 文件上传
   const handleUploadSuccess = (files: FileItem[]) => {
+    debugger
     ruleFormData.fileUrlList = files;
     ruleFormData.fileUrl = JSON.stringify(files) || '';
   };

+ 17 - 1
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/audit.vue

@@ -44,6 +44,7 @@
           <!-- <el-button type="primary" @click="$router.push({ name: 'hazardApprovalManageAdd' })">添加 </el-button> -->
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
+          <el-button @click="handleDownload">导出</el-button>
         </div>
       </div>
 
@@ -133,10 +134,11 @@
   import {
     dangerWorkQueryDangerWorkApprovalPage,
     dangerWorkSaveApproval,
+    exportHazardWorkApprovalList,
   } from '@/api/production-safety/responsibility-implementation';
   import { omit } from 'lodash-es';
   import BasicDialog from '@/components/BasicDialog.vue';
-
+  import { downloadByData } from '@/utils/file/download';
   import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
   import { getAllDepartments } from '@/api/auth/dept';
   import { APPROVAL_STATUS } from '@/views/emergency/emergency-plan/src/constant';
@@ -254,6 +256,20 @@
     queryTableList();
   };
 
+  const handleDownload = async () => {
+    try {
+      const response = await exportHazardWorkApprovalList(queryParams.queryParam);
+      if (response) {
+        const fileName = `危险作业管理审核_${new Date().toISOString().split('T')[0]}.xlsx`;
+        downloadByData(response, fileName);
+        ElMessage.success('导出成功');
+      }
+    } catch (e) {
+      console.error('导出院级文件失败:', e);
+      ElMessage.error('导出失败,请重试');
+    }
+  };
+
   onMounted(async () => {
     await getDeptData();
     queryTableList();

+ 1 - 1
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/list.vue

@@ -346,7 +346,7 @@
 
     const handleDownload = async () => {
     try {
-      const response = await exportHazardApprovalList();
+      const response = await exportHazardApprovalList(queryParams.queryParam);
       if (response) {
         const fileName = `危险作业审批管理_${new Date().toISOString().split('T')[0]}.xlsx`;
         downloadByData(response, fileName);