فهرست منبع

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

sunqijun 1 ماه پیش
والد
کامیت
5887521af8
16فایلهای تغییر یافته به همراه236 افزوده شده و 145 حذف شده
  1. 27 2
      src/api/safety-organization-management/index.ts
  2. 10 4
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/areaCheckPlanManagement.vue
  3. 15 11
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue
  4. 1 91
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/configs/tables.ts
  5. 1 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/areaCheckPlanManagementDept.vue
  6. 2 1
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/components/areaCheckPlanManagementDeptDetail.vue
  7. 15 0
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/configs/status.ts
  8. 64 23
      src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/configs/tables.ts
  9. 2 1
      src/views/production-safety/productionSafetySystem/safetyOrganizationSystemManagement/configs/tables.ts
  10. 1 1
      src/views/production-safety/productionSafetySystem/safetyOrganizationSystemManagement/safetyOrganizationSystemManagement.vue
  11. 6 0
      src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/components/safetyOrganizationSystemManagementDetail.vue
  12. 8 1
      src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/configs/form.ts
  13. 8 1
      src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/configs/tables.ts
  14. 71 3
      src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/securityOrganizationalStructure.vue
  15. 2 2
      src/views/production-safety/risk-identification-and-control/labor-products-purchase-apply-manage-admin/components/detail.vue
  16. 3 3
      src/views/production-safety/risk-identification-and-control/labor-products-purchase-apply-manage/components/detail.vue

+ 27 - 2
src/api/safety-organization-management/index.ts

@@ -2,12 +2,15 @@
  * @Author: liuJie
  * @Date: 2026-02-05 11:15:09
  * @LastEditors: liuJie
- * @LastEditTime: 2026-03-07 22:05:07
+ * @LastEditTime: 2026-03-30 13:26:55
  * @Describe: 安全组织体系管理
  */
 
 import { http } from '@/utils/http/axios';
-
+interface SafetyOrgUserParams {
+    userNum: string|number;
+    depResp: string
+}
 // ————————————————左侧菜单——————————————————————
 /**
  * 新增安全组织列表
@@ -98,6 +101,28 @@ export const delEmployee = (id) => {
   });
 };
 
+/**
+ * @description: 保存组织人员信息和职责
+ * @return {*}
+ */
+export const safetyOrgUserSave = (data:SafetyOrgUserParams)=>{
+    return http.request({
+        url: '/safetyorguser/saveorg',
+        method: 'post',
+        data
+  });
+}
+
+/**
+ * @description: 读取组织人员信息和职责
+ * @return {*}
+ */
+export const safetyOrgUserDetail = (id)=>{
+    return http.request({
+        url: '/safetyorguser/queryOrgDetail?id='+id,
+        method: 'get',
+  });
+}
     
 /**
  * 导出数据

+ 10 - 4
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/areaCheckPlanManagement.vue

@@ -87,6 +87,12 @@
                scope.row.status === 0 ? '-' : scope.row.needOverallDesc === true ? '是' : scope.row.needOverallDesc === false ? '否' : '-'
               }}</span>
             </template>
+            <template #primaryResponsibleDeptName="scope">
+                <div>
+                    <!-- 如果有下发按钮就展示原来的字段primaryResponsibleDeptName,没有下发按钮就展示responsibleDeptName -->
+                    {{ Number(scope.row.status) === 0 ? scope.row.primaryResponsibleDeptName: scope.row.responsibleDeptName}}
+                </div>
+            </template>
             <template #needSigneeSign="scope">
               <span>{{
                 scope.row.status === 0 ? '-' : scope.row.needSigneeSign === true ? '是' : scope.row.needSigneeSign === false ? '否' : '-'
@@ -144,12 +150,12 @@
     <el-dialog
       v-model="showIssueDialog"
       title="下发区域检查计划任务"
-      width="560px"
+      width="680px"
       destroy-on-close
       @open="onIssueDialogOpen"
       @close="currentIssuePlanId = null"
     >
-      <el-form ref="issueFormRef" :model="issueForm" :rules="issueRules" label-width="160px">
+      <el-form ref="issueFormRef" :model="issueForm" :rules="issueRules" label-width="220px">
         <el-form-item label="责任部门:" prop="responsibleDeptIds">
           <el-cascader
             ref="issueResponsibleDeptCascaderRef"
@@ -184,7 +190,7 @@
         <el-form-item label="安全应急部门:" prop="safetyEmergencyDeptId">
           <el-cascader
             v-model="issueForm.safetyEmergencyDeptId"
-            :options="issueDeptTree"
+            :options="issueDeptTreeTow"
             :props="cascaderDeptProp"
             :show-all-levels="false"
             placeholder="请选择安全应急部门"
@@ -207,7 +213,7 @@
         <el-form-item label="院领导部门:" prop="hospitalLeaderDeptId">
           <el-cascader
             v-model="issueForm.hospitalLeaderDeptId"
-            :options="issueDeptTree"
+            :options="issueDeptTreeTow"
             :props="cascaderDeptProp"
             :show-all-levels="false"
             placeholder="请选择院领导部门"

+ 15 - 11
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagement/components/areaCheckPlanManagementDetail.vue

@@ -29,7 +29,10 @@
         <div class="row">
           <div class="col">
             <div class="label">主责部门:</div>
-            <div class="value">{{ viewDetail.primaryResponsibleDeptName || '-' }}</div>
+            <!-- <div class="value">{{ viewDetail.primaryResponsibleDeptName || '-' }}</div> -->
+            <div class="value">
+                {{ Number(viewDetail.status) === 0 ? viewDetail.primaryResponsibleDeptName: viewDetail.responsibleDeptName ||'-'}}
+            </div>
           </div>
           <div class="col">
             <div class="label">自查频率:</div>
@@ -239,8 +242,8 @@
           :show-all-levels="false"
           placeholder="请选择部门"
           filterable
+          :disabled="isViewMode"
           clearable
-          :disabled="true"
           style="width: 100%"
           @change="onSafetyEmergencyDeptChange"
         />
@@ -255,7 +258,7 @@
           placeholder="请选择部门"
           filterable
           clearable
-          :disabled="true"
+          :disabled="isViewMode"
           style="width: 100%"
           @change="onHospitalLeaderDeptChange"
         />
@@ -928,6 +931,7 @@
     const status = d?.status as number | undefined;
     return {
       ...d,
+      responsibleDeptName: d?.responsibleDeptName ?? '-',
       statusName: status != null ? AREA_CHECK_PLAN_STATUS_LABEL[String(status)] ?? '-' : '-',
       planName: d?.planName ?? ruleFormData.planName ?? '-',
       venueCategoryName: d?.venueCategoryName ?? ruleFormData.venueCategoryName ?? '-',
@@ -1287,15 +1291,15 @@
       ruleFormData.primaryResponsibleDeptCode = detail.primaryResponsibleDeptCode ?? '';
       ruleFormData.primaryResponsibleDeptId = findDeptIdByName(deptTree.value, ruleFormData.primaryResponsibleDeptName as string) ?? null;
       ruleFormData.selfCheckFrequency = detail.selfCheckFrequency ?? '';
-      // ruleFormData.safetyEmergencyDeptName = detail.safetyEmergencyDeptName ?? '';
-      ruleFormData.safetyEmergencyDeptName = '安全与应急管理部';
-      // ruleFormData.safetyEmergencyDeptId = findDeptIdByName(deptTree.value, ruleFormData.safetyEmergencyDeptName as string) ?? null;
-      ruleFormData.safetyEmergencyDeptId = 1698;
+      ruleFormData.safetyEmergencyDeptName = detail.safetyEmergencyDeptName ?? '';
+      ruleFormData.safetyEmergencyDeptId = findDeptIdByName(deptTree.value, ruleFormData.safetyEmergencyDeptName as string) ?? null;
+      //   ruleFormData.safetyEmergencyDeptName = '安全与应急管理部';
+    //   ruleFormData.safetyEmergencyDeptId = 1698;
       ruleFormData.safetyEmergencyCheckFrequency = detail.safetyEmergencyCheckFrequency ?? '';
-      // ruleFormData.hospitalLeaderDeptName = detail.hospitalLeaderDeptName ?? '';
-      ruleFormData.hospitalLeaderDeptName = '院领导';
-      // ruleFormData.hospitalLeaderDeptId = findDeptIdByName(deptTree.value, ruleFormData.hospitalLeaderDeptName as string) ?? null;
-      ruleFormData.hospitalLeaderDeptId = 1693;
+      ruleFormData.hospitalLeaderDeptName = detail.hospitalLeaderDeptName ?? '';
+      //ruleFormData.hospitalLeaderDeptName = '院领导';
+      //ruleFormData.hospitalLeaderDeptId = 1693;
+      ruleFormData.hospitalLeaderDeptId = findDeptIdByName(deptTree.value, ruleFormData.hospitalLeaderDeptName as string) ?? null;
       ruleFormData.hospitalLeaderCheckFrequency = detail.hospitalLeaderCheckFrequency ?? '';
       (ruleFormData as Record<string, unknown>).categoryCode = detail.categoryCode ?? '';
       ruleFormData.categoryName = detail.categoryName ?? '';

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

@@ -41,6 +41,7 @@ export const AREA_CHECK_PLAN_TABLE_COLUMNS: TableColumnProps[] = [
   {
     label: '主责部门',
     prop: 'primaryResponsibleDeptName',
+    slot: 'primaryResponsibleDeptName',
     align: 'left',
     minWidth: '140px',
     showOverflowTooltip: true,
@@ -92,97 +93,6 @@ export const AREA_CHECK_PLAN_TABLE_COLUMNS: TableColumnProps[] = [
     minWidth: '240px',
     slot: 'planEndTime',
   },
-  // {
-  //   label: '状态',
-  //   prop: 'status',
-  //   slot: 'status',
-  //   align: 'center',
-  //   minWidth: '120px',
-  // },
-  // {
-  //   label: '安全应急部门名称',
-  //   prop: 'safetyEmergencyDeptName',
-  //   align: 'left',
-  //   minWidth: '180px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '安全应急部检查频次',
-  //   prop: 'safetyEmergencyCheckFrequency',
-  //   align: 'left',
-  //   minWidth: '180px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '安全应急部执行人所属分组名称',
-  //   prop: 'safetyEmergencyExecutorGroupName',
-  //   align: 'left',
-  //   minWidth: '260px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '安全应急部责任人',
-  //   prop: 'safetyEmergencyResponsiblePerson',
-  //   align: 'left',
-  //   minWidth: '180px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '院领导部门名称',
-  //   prop: 'hospitalLeaderDeptName',
-  //   align: 'left',
-  //   minWidth: '180px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '院领导检查频次',
-  //   prop: 'hospitalLeaderCheckFrequency',
-  //   align: 'left',
-  //   minWidth: '160px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '院领导执行人所属分组名称',
-  //   prop: 'hospitalLeaderExecutorGroupName',
-  //   align: 'left',
-  //   minWidth: '220px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '院领导责任人',
-  //   prop: 'hospitalLeaderResponsiblePerson',
-  //   align: 'left',
-  //   minWidth: '140px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '检查重点内容',
-  //   prop: 'checkKeyContent',
-  //   align: 'left',
-  //   minWidth: '150px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '检查单模版名称',
-  //   prop: 'checklistTemplateName',
-  //   align: 'left',
-  //   minWidth: '160px',
-  //   showOverflowTooltip: true,
-  // },
-  // {
-  //   label: '是否需要整体检查情况描述',
-  //   prop: 'needOverallDesc',
-  //   slot: 'needOverallDesc',
-  //   align: 'center',
-  //   minWidth: '240px',
-  // },
-  // {
-  //   label: '是否需要被检查人签字',
-  //   prop: 'needSigneeSign',
-  //   slot: 'needSigneeSign',
-  //   align: 'center',
-  //   minWidth: '200px',
-  // },
   {
     label: '操作',
     prop: 'action',

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

@@ -118,7 +118,7 @@
     AREA_CHECK_PLAN_TABLE_COLUMNS,
     AREA_CHECK_PLAN_STATUS_OPTIONS,
     AREA_CHECK_PLAN_STATUS_LABEL,
-  } from '../areaCheckPlanManagement/configs/tables';
+  } from './configs/tables';
   import { useRouter } from 'vue-router';
   import type { QueryPageRequest } from '@/types/basic-query';
   import type { AreaCheckPlanQuery, AreaCheckPlanRecord } from '../areaCheckPlanManagement/configs/types';

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

@@ -29,7 +29,7 @@
         <div class="row">
           <div class="col">
             <div class="label">主责部门:</div>
-            <div class="value">{{ viewDetail.primaryResponsibleDeptName || '-' }}</div>
+            <div class="value">{{ viewDetail.responsibleDeptName || '-' }}</div>
           </div>
           <div class="col">
             <div class="label">自查频率:</div>
@@ -611,6 +611,7 @@
     console.log(d,'d')
     return {
       ...d,
+      responsibleDeptName: d?.responsibleDeptName ?? '-',
       statusName: status != null ? AREA_CHECK_PLAN_STATUS_LABEL[String(status)] ?? '-' : '-',
       planName: d?.planName ?? '-',
       venueCategoryName: d?.venueCategoryName ?? '-',

+ 15 - 0
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/configs/status.ts

@@ -0,0 +1,15 @@
+// 区域检查计划状态配置(管理员与部门一致):0=未下发 1=进行中 2=已完成 3=已作废
+export const AREA_CHECK_PLAN_STATUS_OPTIONS = [
+  { label: '全部', value: '' as const },
+//   { label: '未下发', value: 0 },
+  { label: '进行中', value: 1 },
+  { label: '已完成', value: 2 },
+  { label: '已作废', value: 3 },
+];
+
+export const AREA_CHECK_PLAN_STATUS_LABEL: Record<string, string> = {
+  '0': '未下发',
+  '1': '进行中',
+  '2': '已完成',
+  '3': '已作废',
+};

+ 64 - 23
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/areaCheckPlanManagementDept/configs/tables.ts

@@ -1,13 +1,16 @@
 import type { TableColumnProps } from '@/types/basic-table';
+import { AREA_CHECK_PLAN_STATUS_OPTIONS, AREA_CHECK_PLAN_STATUS_LABEL } from './status';
+
+export { AREA_CHECK_PLAN_STATUS_OPTIONS, AREA_CHECK_PLAN_STATUS_LABEL };
 
-// 基础表格样式配置
 export const TABLE_OPTIONS = {
   emptyText: '暂无数据',
   loading: true,
   maxHeight: 'calc(70vh - 150px)',
 };
 
-export const INVENTORY_TABLE_COLUMNS: TableColumnProps[] = [
+// 表格样式与检查单模版管理列表一致(TABLE_OPTIONS、编号/操作列宽)
+export const AREA_CHECK_PLAN_TABLE_COLUMNS: TableColumnProps[] = [
   {
     label: '编号',
     type: 'index',
@@ -15,48 +18,86 @@ export const INVENTORY_TABLE_COLUMNS: TableColumnProps[] = [
     width: '80px',
   },
   {
-    label: '物品名称',
-    prop: 'itemName',
+    label: '检查场所所属类别',
+    prop: 'venueCategoryName',
     align: 'left',
-    minWidth: '120px',
+    minWidth: '180px',
+    showOverflowTooltip: true,
   },
   {
-    label: '入库日期',
-    prop: 'warehouseDate',
+    label: '检查场所',
+    prop: 'checkVenue',
     align: 'left',
     minWidth: '120px',
+    showOverflowTooltip: true,
   },
   {
-    label: '物品数量',
-    prop: 'itemQuantity',
-    align: 'center',
-    minWidth: '120px',
+    label: '区域检查计划名称',
+    prop: 'planName',
+    align: 'left',
+    minWidth: '180px',
+    showOverflowTooltip: true,
   },
   {
-    label: '经办人',
-    prop: 'handler',
+    label: '主责部门',
+    prop: 'responsibleDeptName',
     align: 'left',
-    minWidth: '120px',
+    minWidth: '140px',
+    showOverflowTooltip: true,
   },
   {
-    label: '备注',
-    prop: 'remarks',
+    label: '主责部门责任人',
+    prop: 'primaryResponsibleDeptPersonName',
     align: 'left',
-    minWidth: '150px',
+    minWidth: '160px',
+    showOverflowTooltip: true,
   },
   {
-    label: '状态',
-    prop: 'status',
-    slot: 'status',
-    align: 'center',
-    minWidth: '100px',
+    label: '自查频次',
+    prop: 'selfCheckFrequency',
+    align: 'left',
+    minWidth: '140px',
+    showOverflowTooltip: true,
+  },
+  {
+    label: '检查单所属类别名称',
+    prop: 'categoryName',
+    align: 'left',
+    minWidth: '180px',
+    showOverflowTooltip: true,
+  },
+  {
+    label: '主责部门执行人所属分组名称',
+    prop: 'primaryResponsibleDeptExecGroupName',
+    align: 'left',
+    minWidth: '240px',
+    showOverflowTooltip: true,
+  },
+  {
+    label: '检查单模板',
+    prop: 'checklistTemplateName',
+    align: 'left',
+    minWidth: '180px',
+    showOverflowTooltip: true,
+  },
+  {
+    label: '计划开始时间',
+    prop: 'planStartTime',
+    minWidth: '240px',
+    slot: 'planStartTime',
+  },
+  {
+    label: '计划结束时间',
+    prop: 'planEndTime',
+    minWidth: '240px',
+    slot: 'planEndTime',
   },
   {
     label: '操作',
     prop: 'action',
     slot: 'action',
     fixed: 'right',
-    width: '180px',
+    width: '250px',
     align: 'left',
   },
 ];

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

@@ -2,7 +2,7 @@
  * @Author: liuJie
  * @Date: 2026-01-27 16:29:28
  * @LastEditors: liuJie
- * @LastEditTime: 2026-03-07 20:34:07
+ * @LastEditTime: 2026-03-30 10:16:11
  * @Describe: file describe
  */
 import type { TableColumnProps } from '@/types/basic-table';
@@ -52,6 +52,7 @@ export const TABLE_COLUMNS: TableColumnProps[] = [
     prop: 'jobResp',
     align: 'left',
     minWidth: '150px',
+    showOverflowTooltip: true,
   },
   {
     label: '添加时间',

+ 1 - 1
src/views/production-safety/productionSafetySystem/safetyOrganizationSystemManagement/safetyOrganizationSystemManagement.vue

@@ -38,7 +38,7 @@
         <OrgChart :treeData="treeData" @node-click="handleNodeClick" />
         <TeamDetailDrawer ref="teamDetailDrawerRef" :selected-team-id="selectedTeamId" />
         <div class="text-right mb-4">
-            <el-button type="primary" @click="toStaff"> 编辑 </el-button>
+            <el-button  @click="toStaff"> 编辑 </el-button>
         </div>
       </div>
     </main>

+ 6 - 0
src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/components/safetyOrganizationSystemManagementDetail.vue

@@ -29,6 +29,10 @@
         </el-tree-select>
       </el-form-item>
 
+      <el-form-item label="岗位名称:" prop="jobName" required>
+        <el-input v-model="form.jobName" placeholder="请输入岗位名称" :disabled="isViewMode" />
+      </el-form-item>
+
       <el-form-item label="岗位职责:" prop="jobResp" required>
         <el-input
           v-model="form.jobResp"
@@ -85,6 +89,7 @@
     employeeId: string;
     employeeName: string;
     jobResp: string;
+    jobName: string;
     status: string|number;
     selectedOrg?: any;
   }
@@ -94,6 +99,7 @@
     orgId: '',
     employeeId: '',
     employeeName: '',
+    jobName: '',
     jobResp: '',
     status: 1,
   });

+ 8 - 1
src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/configs/form.ts

@@ -2,7 +2,7 @@
  * @Author: liuJie
  * @Date: 2026-01-27 16:29:28
  * @LastEditors: liuJie
- * @LastEditTime: 2026-02-06 13:35:38
+ * @LastEditTime: 2026-03-30 11:32:06
  * @Describe: file describe
  */
 import { FormConfig } from '@/types/basic-form';
@@ -68,9 +68,16 @@ export const FORM_RULES = {
     { min: 1, max: 10, message: '长度在 1 到 10 个字符', trigger: 'blur' },
   ],
   orgId: [{ required: true, message: '请选择组织名称', trigger: 'change' }],
+  jobName: [{ required: true, message: '请输入岗位名称', trigger: 'blur' }],
   jobResp: [
     { required: true, message: '请填写岗位职责', trigger: 'blur' },
     { min: 1, max: 300, message: '最大字数300字', trigger: 'blur' },
   ],
   status: [{ required: true, message: '请选择状态', trigger: 'blur' }],
 };
+
+
+export const SafetyOrgUserRules = {
+    userNum: [{ required: true, message: '请输入组织人数', trigger: 'blur' }],
+    depResp: [{ required: true, message: '请填写组织职责', trigger: 'blur' }]
+}

+ 8 - 1
src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/configs/tables.ts

@@ -2,7 +2,7 @@
  * @Author: liuJie
  * @Date: 2026-01-27 16:29:28
  * @LastEditors: liuJie
- * @LastEditTime: 2026-03-29 21:52:01
+ * @LastEditTime: 2026-03-30 13:42:36
  * @Describe: file describe
  */
 import type { TableColumnProps } from '@/types/basic-table';
@@ -46,6 +46,13 @@ export const TABLE_COLUMNS: TableColumnProps[] = [
     prop: 'orgName',
     align: 'left',
     minWidth: '140px',
+  },
+    {
+    label: '岗位名称',
+    prop: 'jobName',
+    align: 'left',
+    minWidth: '150px',
+    showOverflowTooltip: true,
   },
   {
     label: '岗位职责',

+ 71 - 3
src/views/production-safety/productionSafetySystem/securityOrganizationalStructure/securityOrganizationalStructure.vue

@@ -3,7 +3,7 @@
     <header class="safety-platform-container__header">
       <div class="breadcrumb-title"> 安全组织体系架构 </div>
     </header>
-    <main class="safety-platform-container__main flex">
+    <main class="safety-platform-container__main flex platform-main">
       <div class="nav">
         <el-button type="primary" :icon="Plus" @click="addTeam('parent')"> 添加组织 </el-button>
         
@@ -34,7 +34,22 @@
         />
       </div>
       <div class="search-table-container table-content">
-        <div style="margin-bottom:20px">
+        <div>
+            <p class="label-title">组织信息</p>
+            <el-form :model="safetyOrgUser" ref="formRef" :rules="safetyOrgUserRules">
+                <el-form-item label="组织人数" prop="userNum">
+                    <el-input placeholder="请输入组织人数" type="number" v-model="safetyOrgUser.userNum" style="width:450px" />
+                </el-form-item>
+                <el-form-item label="组织职责" prop="depResp">
+                    <el-input placeholder="请填写组织职责" v-model="safetyOrgUser.depResp"  :autosize="{ minRows: 2, maxRows: 6 }" :maxlength="300" show-word-limit type="textarea" style="width:450px" />
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="handleSave"> 保存 </el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <div>
+            <p class="label-title">人员信息</p>
             <el-button type="primary" :icon="Plus"  @click="handleCreate"> 添加 </el-button>
             <el-button plain  @click="handleImport">导入</el-button>
         </div>
@@ -137,6 +152,8 @@
     deleteSafetySystem,
     fetchTableList,
     delEmployee,
+    safetyOrgUserSave,
+    safetyOrgUserDetail,
     exportSafetyOrganizationSystemManagement
   } from '@/api/safety-organization-management';
   import { downloadByData } from '@/utils/file/download';
@@ -144,6 +161,7 @@
   import { useGlobSetting } from '@/hooks/setting';
   import urlJoin from 'url-join';
   import AddSafetySystem from './components/addSafetySystem.vue';
+  import {SafetyOrgUserRules} from "./configs/form"
   import {
   Delete,
   Edit,
@@ -177,7 +195,41 @@ const position = ref('left')
       endTime: '',
     },
   });
-
+  const safetyOrgUser = reactive({
+    userNum: '',
+    depResp: ''
+  })
+  const formRef = ref()
+  const safetyOrgUserRules = ref(SafetyOrgUserRules)
+  // 校验员工数量和职责
+  const handleValidate = async () => {
+    if (!formRef.value) return;
+    const res = await formRef.value.validateField();
+    return res;
+  };
+  // 保存员工数量和职责
+  const handleSave = async ()=>{
+    const res = await handleValidate()
+    if (!res) return;
+    try {
+        await safetyOrgUserSave(safetyOrgUser)
+        ElMessage.success('保存成功');
+    } catch (error) {
+        ElMessage.error('保存失败');
+    }
+  }
+  // 查询组织详情
+  const safetyOrgDetail = async (id)=>{
+    try {
+        const res = await safetyOrgUserDetail(id)
+        Object.assign(safetyOrgUser, {
+            userNum: res.userNum,
+            depResp: res.depResp
+        })
+    } catch (error) {
+        ElMessage.error('获取详情失败');
+    }
+  }
   const handleSizeChange = (value: number) => {
     pagination.pageSize = value;
     tableQuery.pageSize = value;
@@ -330,8 +382,11 @@ const position = ref('left')
   const querySafetyTeamData = (value) => {
     // console.log('查询', value);
     tableQuery.queryParam.classifyName = value.orgId;
+    safetyOrgDetail(value.orgId)
     getTableData();
   };
+
+
   // 时间查询
   const onchangeDateRange = () => {
     if (dateRange.value && Array.isArray(dateRange.value) && dateRange.value.length === 2) {
@@ -436,6 +491,9 @@ const position = ref('left')
     const orgId = route.query.id as string;
     tableQuery.queryParam.classifyName = orgId || undefined
     getTableData();
+    if(orgId){
+        safetyOrgDetail(orgId)
+    }
   });
 </script>
 
@@ -444,13 +502,20 @@ const position = ref('left')
   @use '@/styles/page-main-layout.scss' as *;
   @use '@/styles/basic-table-action.scss' as *;
   @use '@/views/traffic/violation/style/act-search-table.scss' as *;
+  .platform-main {
+    width:100%;
+  }
   .table-content {
+    flex:1;
+    width: 0;
+    min-width: 0;
   }
   .nav {
     flex: 0 0 300px;
     margin-right: 15px;
     padding-right: 15px;
     border-right: 1px solid #eee;
+    overflow-y: auto;
     :deep(.collapse-title) {
         flex: 1 0 90%;
         order: 1;
@@ -497,4 +562,7 @@ const position = ref('left')
       }
     }
   }
+  .label-title{
+    margin-bottom:16px;
+  }
 </style>

+ 2 - 2
src/views/production-safety/risk-identification-and-control/labor-products-purchase-apply-manage-admin/components/detail.vue

@@ -171,10 +171,10 @@
             <template #default="{ row }">
               <!-- v-if="isViewMode || isAuditMode || isCreateMode" -->
               <!-- <span>{{ row.productNo || row.equipmentId || '-' }}</span> -->
-              <span v-if="isViewMode || isAuditMode">{{ row.equipmentId ?? '-' }}</span>
+              <span v-if="isViewMode || isAuditMode">{{ row.productNo ?? '-' }}</span>
               <el-input
                 v-else
-                v-model="row.equipmentId"
+                v-model="row.productNo"
                 placeholder="请输入..."
                 clearable
               />

+ 3 - 3
src/views/production-safety/risk-identification-and-control/labor-products-purchase-apply-manage/components/detail.vue

@@ -171,10 +171,10 @@
             <template #default="{ row }">
               <!-- v-if="isViewMode || isAuditMode || isCreateMode" -->
               <!-- <span>{{ row.productNo || row.equipmentId || '-' }}</span> -->
-              <span v-if="isViewMode || isAuditMode">{{ row.equipmentId ?? '-' }}</span>
+              <span v-if="isViewMode || isAuditMode">{{ row.productNo ?? '-' }}</span>
               <el-input
                 v-else
-                v-model="row.equipmentId"
+                v-model="row.productNo"
                 placeholder="请输入..."
                 clearable
               />
@@ -563,7 +563,7 @@
     if (found?.id) {
       row.ppeId = found.id;
       // row.equipmentId = found.id;
-      row.productNo = String(found.id);
+    //   row.productNo = String(found.id);
     }
   }