xiaweibo 1 месяц назад
Родитель
Сommit
9efa796ac9

+ 1 - 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 */

+ 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,
+  });
+}

+ 25 - 0
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/areaCheckPlanManagement.vue

@@ -599,6 +599,31 @@
       { 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();
   });

+ 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 - 6
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 || 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,6 +330,7 @@
         businessWork: ruleFormData.value.businessWork || '',
         fillInstruction: ruleFormData.value.fillInstruction || '',
         ChecklistTemplateItem: items,
+        status: ruleFormData.value.status || 1,
       };
 
       if (isEditMode.value && props.id) {
@@ -325,6 +348,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',

+ 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);