Kaynağa Gözat

fix: 编译打包错误

sunqijun 3 ay önce
ebeveyn
işleme
07382416bf
20 değiştirilmiş dosya ile 1286 ekleme ve 4333 silme
  1. 26 0
      src/api/production-safety/responsibility-implementation/index.ts
  2. 594 0
      src/router/routers/production-safety-router/responsibility-implementation.ts
  3. 172 0
      src/router/routers/production-safety-router/risk-identification-and-control.ts
  4. 8 1837
      src/router/routers/production-safety.ts
  5. 0 0
      src/views/production-safety/implement-safety-duty/hazard-manage/add.vue
  6. 0 0
      src/views/production-safety/implement-safety-duty/hazard-manage/create-plan.vue
  7. 0 0
      src/views/production-safety/implement-safety-duty/hazard-manage/edit.vue
  8. 0 291
      src/views/production-safety/implement-safety-duty/hazard-manage/list.vue
  9. 0 0
      src/views/production-safety/implement-safety-duty/hazard-manage/view.vue
  10. 0 432
      src/views/production-safety/implement-safety-duty/risk-manage/add.vue
  11. 0 533
      src/views/production-safety/implement-safety-duty/risk-manage/change.vue
  12. 0 436
      src/views/production-safety/implement-safety-duty/risk-manage/edit.vue
  13. 0 291
      src/views/production-safety/implement-safety-duty/risk-manage/list.vue
  14. 0 473
      src/views/production-safety/implement-safety-duty/risk-manage/view.vue
  15. 441 0
      src/views/production-safety/risk-identification-and-control/hazard-manage/add.vue
  16. 1 0
      src/views/production-safety/risk-identification-and-control/hazard-manage/create-plan.vue
  17. 1 0
      src/views/production-safety/risk-identification-and-control/hazard-manage/edit.vue
  18. 41 39
      src/views/production-safety/risk-identification-and-control/hazard-manage/list.vue
  19. 1 0
      src/views/production-safety/risk-identification-and-control/hazard-manage/view.vue
  20. 1 1
      tsconfig.json

+ 26 - 0
src/api/production-safety/responsibility-implementation/index.ts

@@ -576,4 +576,30 @@ export function safetyRiskListQueryDetail(id) {
     url: `/safetyRisk/list/queryDetail?id=${id}`,
     method: 'get',
   });
+}
+
+/**
+  * 分页查询安全危险源清单列表  
+  * @param params - 分页及查询条件
+  * @returns Promise<QueryPageResponse> 安全危险源清单分页结果
+  */
+export function safetyHazardInventoryQueryPage(params) {
+  return http.request({
+    url: '/safetyHazardInventory/queryPage',
+    method: 'post',
+    params
+  });
+}
+
+/**
+  * 删除安全危险源清单     
+  * @param id - 安全危险源清单 ID
+  * @returns Promise<void>
+  */
+
+export function safetyHazardInventoryDelete(id) {
+  return http.request({
+    url: `/safetyHazardInventory/delete?id=${id}`,
+    method: 'delete',
+  });
 }

+ 594 - 0
src/router/routers/production-safety-router/responsibility-implementation.ts

@@ -0,0 +1,594 @@
+ import { RouteComponent } from "vue-router";
+ 
+ const responsibilityImplementation: RouteComponent[] = [{
+      id: 9001,
+      parentId: 9000,
+      name: 'responsibilityImplementation',
+      path: 'responsibility-implementation',
+      redirect: '',
+      meta: {
+        title: '安全责任落实',
+        icon: 'OverviewIcon',
+        isRoot: false,
+        hidden: false,
+        noCache: false,
+      },
+      children: [{
+        id: 90000,
+        parentId: 9001,
+        name: 'responsibilityAgreeManage',
+        path: 'responsibility-agree-manage',
+        component: '/production-safety/implement-safety-duty/responsibility-agree-manage',
+        meta: {
+          title: '安全责任书管理',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+
+      },
+      {
+        id: 90001,
+        parentId: 9001,
+        name: 'createResponsibilityAgree',
+        path: 'create-responsibility-agree',
+        component: '/production-safety/implement-safety-duty/create-responsibility-agree',
+        meta: {
+          title: '创建安全责任书',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+
+      {
+        id: 90002,
+        parentId: 9001,
+        name: 'editResponsibilityAgree',
+        path: 'edit-responsibility-agree',
+        component: '/production-safety/implement-safety-duty/edit-responsibility-agree',
+        meta: {
+          title: '编辑安全责任书',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+        id: 90003,
+        parentId: 9001,
+        name: 'viewRecipients',
+        path: 'view-recipients',
+        component: '/production-safety/implement-safety-duty/view-recipients',
+        meta: {
+          title: '查看下发对象',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      // {
+      //   id: 90004,
+      //   parentId: 9001,
+      //   name: 'reviewResponsibilityAgree',
+      //   path: 'review-responsibility-agree',
+      //   component: '/production-safety/implement-safety-duty/review-responsibility-agree',
+      //   meta: {
+      //     title: '审核安全责任书',
+      //     icon: 'OverviewIcon',
+      //     isRoot: false,
+      //     hidden: false,
+      //     noCache: false,
+      //   }
+      // },
+      {
+        id: 90005,
+        parentId: 9001,
+        name: 'agreeDocumentReview',
+        path: 'agree-document-review',
+        component: '/production-safety/implement-safety-duty/agree-document-review',
+        meta: {
+          title: '安全责任书材料审核',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+        id: 90006,
+        parentId: 9001,
+        name: 'responsibilityAgreeManageDept',
+        path: 'responsibility-agree-manage-dept',
+        component: '/production-safety/implement-safety-duty/responsibility-agree-manage-dept',
+        meta: {
+          title: '安全责任书管理(部门端)',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+
+      },
+      {
+        id: 90007,
+        parentId: 9001,
+        name: 'signAgreeDept',
+        path: 'sign-agree-dept',
+        component: '/production-safety/implement-safety-duty/sign-agree-dept',
+        meta: {
+          title: '责任书签署',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+
+      },
+      // 责任清单
+      {
+        id: 90008,
+        parentId: 9001,
+        name: 'listResponsibilities:nonPublic',
+        path: 'non-public-list-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-list-responsibilities/list',
+        meta: {
+          title: '责任清单',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+
+      {
+        id: 90009,
+        parentId: 90008,
+        name: 'addResponsibilities:nonPublic',
+        path: 'non-public-add-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-list-responsibilities/add',
+        meta: {
+          title: '新增非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-list-responsibilities',
+          // icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+
+        id: 90010,
+        parentId: 90008,
+        name: 'editResponsibilities:nonPublic',
+        path: 'non-public-edit-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-list-responsibilities/edit',
+        meta: {
+          title: '编辑非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90011,
+        parentId: 90008,
+        name: 'changeResponsibilities:nonPublic',
+        path: 'non-public-change-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-list-responsibilities/change',
+        meta: {
+          title: '变更非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90012,
+        parentId: 90008,
+        name: 'viewResponsibilities:nonPublic',
+        path: 'non-public-view-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-list-responsibilities/view',
+        meta: {
+          title: '查看非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      // 责任区域
+      {
+        id: 90013,
+        parentId: 9001,
+        name: 'areaResponsibilities:nonPublic',
+        path: 'non-public-area-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-area-responsibilities/list',
+        meta: {
+          title: '责任区域',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+
+      {
+        id: 90014,
+        parentId: 90008,
+        name: 'areaAddResponsibilities:nonPublic',
+        path: 'non-public-area-add-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-area-responsibilities/add',
+        meta: {
+          title: '新增非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-area-responsibilities',
+          // icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+
+        id: 90015,
+        parentId: 90014,
+        name: 'areaEditResponsibilities:nonPublic',
+        path: 'non-public-area-edit-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-area-responsibilities/edit',
+        meta: {
+          title: '编辑非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90016,
+        parentId: 90014,
+        name: 'areaChangeResponsibilities:nonPublic',
+        path: 'non-public-area-change-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-area-responsibilities/change',
+        meta: {
+          title: '变更非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90017,
+        parentId: 90014,
+        name: 'areaViewResponsibilities:nonPublic',
+        path: 'non-public-area-view-responsibilities',
+        component: '/production-safety/implement-safety-duty/non-public-area-responsibilities/view',
+        meta: {
+          title: '查看非区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/non-public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      // 责任清单(公共区域)
+      {
+        id: 90020,
+        parentId: 9001,
+        name: 'listResponsibilities:public',
+        path: 'public-list-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-list-responsibilities/list',
+        meta: {
+          title: '责任清单',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+
+      {
+        id: 90021,
+        parentId: 90008,
+        name: 'addResponsibilities:public',
+        path: 'public-add-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-list-responsibilities/add',
+        meta: {
+          title: '新增区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-list-responsibilities',
+          // icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+
+        id: 90022,
+        parentId: 90008,
+        name: 'editResponsibilities:public',
+        path: 'public-edit-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-list-responsibilities/edit',
+        meta: {
+          title: '编辑区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90023,
+        parentId: 90008,
+        name: 'changeResponsibilities:public',
+        path: 'public-change-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-list-responsibilities/change',
+        meta: {
+          title: '变更区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90024,
+        parentId: 90008,
+        name: 'viewResponsibilities:public',
+        path: 'public-view-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-list-responsibilities/view',
+        meta: {
+          title: '查看区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-list-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      // 责任区域(公共区域)
+      {
+        id: 90030,
+        parentId: 9001,
+        name: 'areaResponsibilities:public',
+        path: 'public-area-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-area-responsibilities/list',
+        meta: {
+          title: '责任区域',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+
+      {
+        id: 90031,
+        parentId: 90008,
+        name: 'areaAddResponsibilities:public',
+        path: 'public-area-add-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-area-responsibilities/add',
+        meta: {
+          title: '新增区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-area-responsibilities',
+          // icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      },
+      {
+
+        id: 90032,
+        parentId: 90014,
+        name: 'areaEditResponsibilities:public',
+        path: 'public-area-edit-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-area-responsibilities/edit',
+        meta: {
+          title: '编辑区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90033,
+        parentId: 90014,
+        name: 'areaChangeResponsibilities:public',
+        path: 'public-area-change-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-area-responsibilities/change',
+        meta: {
+          title: '变更区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+
+        id: 90034,
+        parentId: 90014,
+        name: 'areaViewResponsibilities:public',
+        path: 'public-area-view-responsibilities',
+        component: '/production-safety/implement-safety-duty/public-area-responsibilities/view',
+        meta: {
+          title: '查看区域责任清单',
+          activeMenu: '/work-safety/responsibility-implementation/public-area-responsibilities',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      // 安全责任通知管理(部门侧)
+      {
+
+        id: 90040,
+        parentId: 90014,
+        name: 'responsibilityNoticeManage',
+        path: 'responsibility-notice-manage',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-dept/list',
+        meta: {
+          title: '安全责任通知管理(部门侧)',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 90041,
+        parentId: 90014,
+        name: 'responsibilityNoticeFeedback',
+        path: 'responsibility-notice-feedback',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-dept/feedback',
+        meta: {
+          title: '安全责任通知反馈(部门侧)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 90042,
+        parentId: 90014,
+        name: 'responsibilityNoticeView',
+        path: 'responsibility-notice-view',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-dept/view',
+        meta: {
+          title: '查看安全责任通知(部门侧)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      // 全部安全责任通知管理(管理侧)
+      {
+        id: 91000,
+        parentId: 90014,
+        name: 'responsibilityNoticeManage:admin',
+        path: 'admin-responsibility-notice-manage',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-admin/list',
+        meta: {
+          title: '安全责任通知管理(管理侧全部)',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 91001,
+        parentId: 90014,
+        name: 'responsibilityNoticeAdd:admin',
+        path: 'admin-responsibility-notice-add',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-admin/add',
+        meta: {
+          title: '创建责任通知(管理侧全部)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage-admin',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 91002,
+        parentId: 90014,
+        name: 'responsibilityNoticeEdit:admin',
+        path: 'admin-responsibility-notice-edit',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-admin/edit',
+        meta: {
+          title: '编辑责任通知(管理侧全部)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage-admin',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 91003,
+        parentId: 90014,
+        name: 'responsibilityNoticeReview:admin',
+        path: 'admin-responsibility-notice-review',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-admin/review',
+        meta: {
+          title: '安全责任通知材料审核(管理侧全部)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage-admin',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+
+        }
+      },
+      {
+        id: 91004,
+        parentId: 90014,
+        name: 'responsibilityNoticeView:admin',
+        path: 'admin-responsibility-notice-view',
+        component: '/production-safety/implement-safety-duty/responsibility-notice-manage-admin/notice-view',
+        meta: {
+          title: '查看通知对象(管理侧全部)',
+          activeMenu: '/work-safety/responsibility-implementation/responsibility-notice-manage-admin',
+          icon: 'OverviewIcon',
+          isRoot: false,
+          hidden: false,
+          noCache: false,
+        }
+      }]
+    }];
+
+export default responsibilityImplementation;

+ 172 - 0
src/router/routers/production-safety-router/risk-identification-and-control.ts

@@ -0,0 +1,172 @@
+    // 风险识别与管控
+     import { RouteComponent } from "vue-router";
+     
+     const riskIdentificationAndControl: RouteComponent[] = [{
+      id: 93000,
+      parentId: 9001,
+      name: 'riskIdentificationAndControl',
+      path: 'risk-identification-and-control',
+      redirect: '',
+      meta: {
+        title: '风险识别与管控',
+        icon: 'OverviewIcon',
+        isRoot: false,
+        hidden: false,
+        noCache: false,
+      },
+      
+      children: [
+        // 风险清单管理
+        {
+          id: 92000,
+          parentId: 90014,
+          name: 'riskManage',
+          path: 'risk-manage',
+          component: '/production-safety/risk-identification-and-control/risk-manage/list',
+          meta: {
+            title: '风险清单管理',
+            activeMenu: '/work-safety/risk-identification-and-control/risk-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 92001,
+          parentId: 90014,
+          name: 'riskManageAdd',
+          path: 'risk-manage-add',
+          component: '/production-safety/risk-identification-and-control/risk-manage/add',
+          meta: {
+            title: '新增风险清单',
+            activeMenu: '/work-safety/risk-identification-and-control/risk-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 92002,
+          parentId: 90014,
+          name: 'riskManageEdit',
+          path: 'risk-manage-edit',
+          component: '/production-safety/risk-identification-and-control/risk-manage/edit',
+          meta: {
+            title: '编辑风险清单',
+           activeMenu: '/work-safety/risk-identification-and-control/risk-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 92003,
+          parentId: 90014,
+          name: 'riskManageView',
+          path: 'risk-manage-view',
+          component: '/production-safety/risk-identification-and-control/risk-manage/view',
+          meta: {
+            title: '查看风险清单',
+            activeMenu: '/work-safety/risk-identification-and-control/risk-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 92004,
+          parentId: 90014,
+          name: 'riskManageChange',
+          path: 'risk-manage-change',
+          component: '/production-safety/risk-identification-and-control/risk-manage/change',
+          meta: {
+            title: '变更风险清单',
+            activeMenu: '/work-safety/risk-identification-and-control/risk-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        // 危险源清单管理
+        {
+          id: 93001,
+          parentId: 90014,
+          name: 'hazardManage',
+          path: 'hazard-manage',
+          component: '/production-safety/risk-identification-and-control/hazard-manage/list',
+          meta: {
+            title: '危险源清单管理',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 93002,
+          parentId: 90014,
+          name: 'hazardManageView',
+          path: 'hazard-manage-view',
+          component: '/production-safety/risk-identification-and-control/hazard-manage/view',
+          meta: {
+            title: '查看危险源清单',
+            activeMenu: '/work-safety/risk-identification-and-control/hazard-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 93003,
+          parentId: 90014,
+          name: 'hazardManageAdd',
+          path: 'hazard-manage-add',
+          component: '/production-safety/risk-identification-and-control/hazard-manage/add',
+          meta: {
+            title: '新增危险源清单',
+            activeMenu: '/work-safety/risk-identification-and-control/hazard-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 93004,
+          parentId: 90014,
+          name: 'hazardManageEdit',
+          path: 'hazard-manage-edit',
+          component: '/production-safety/risk-identification-and-control/hazard-manage/edit',
+          meta: {
+            title: '编辑危险源清单',
+            activeMenu: '/work-safety/risk-identification-and-control/hazard-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        },
+        {
+          id: 93006,
+          parentId: 90014,
+          name: 'hazardManageCreatePlan',
+          path: 'hazard-manage-create-plan',
+          component: '/production-safety/risk-identification-and-control/hazard-manage/create-plan',
+          meta: {
+            title: '创建计划与方案',
+            activeMenu: '/work-safety/risk-identification-and-control/hazard-manage',
+            icon: 'OverviewIcon',
+            isRoot: false,
+            hidden: false,
+            noCache: false,
+          }
+        }],
+    }];
+     
+     export default riskIdentificationAndControl; 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 8 - 1837
src/router/routers/production-safety.ts


+ 0 - 0
src/views/production-safety/implement-safety-duty/hazard-manage/add.vue


+ 0 - 0
src/views/production-safety/implement-safety-duty/hazard-manage/create-plan.vue


+ 0 - 0
src/views/production-safety/implement-safety-duty/hazard-manage/edit.vue


+ 0 - 291
src/views/production-safety/implement-safety-duty/hazard-manage/list.vue

@@ -1,291 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title"> 危险源清单管理 </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <div class="search-form">
-        <el-form :inline="true">
-          <el-form-item label="搜索">
-            <el-input
-              v-model="queryParams.queryParam.mergeFiled"
-              placeholder="搜索楼号/楼宇/楼层/房间"
-              style="width: 170px"
-            />
-          </el-form-item>
-          <el-form-item label="状态">
-            <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
-              <el-option :value="1" label="正常" />
-              <el-option :value="2" label="待确认" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="部门名称">
-            <el-cascader
-              v-model="queryParams.queryParam.responsibleDepartmentId"
-              style="width: 170px"
-              ref="cascaderRef"
-              :options="firstLevelDepts"
-              :props="cascaderProp"
-              :show-all-levels="false"
-              placeholder="部门名称"
-              filterable
-              @change="handleChangeDept"
-            />
-          </el-form-item>
-          <el-form-item label="风险类型">
-            <el-select
-              v-model="queryParams.queryParam.riskCategory"
-              clearable
-              placeholder="风险类型"
-              style="width: 170px"
-            >
-              <el-option :value="1" label="III级危险点" />
-              <el-option :value="2" label="II级危险点" />
-              <el-option :value="3" label="I级危险点" />
-              <el-option :value="4" label="UPS" />
-              <el-option :value="5" label="电力设施(强电)" />
-              <el-option :value="6" label="高低温气体液体、高压气体" />
-              <el-option :value="7" label="试验设施设备" />
-              <el-option :value="8" label="特种设备" />
-              <el-option :value="9" label="危化品、易燃易爆固液气体" />
-              <el-option :value="10" label="有限空间" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="风险级别">
-            <el-select v-model="queryParams.queryParam.riskLevel" clearable placeholder="风险类型" style="width: 170px">
-              <el-option :value="1" label="B" />
-              <el-option :value="2" label="C" />
-            </el-select>
-          </el-form-item>
-        </el-form>
-
-        <div>
-          <el-button type="primary" @click="$router.push({ name: 'riskManageAdd' })">添加 </el-button>
-          <el-button type="primary" @click="queryTableList">查询</el-button>
-          <el-button @click="handleRestParams">重置</el-button>
-        </div>
-      </div>
-
-      <div class="table-content">
-        <el-table :data="tableData.data">
-          <el-table-column type="index" label="序号" width="80" />
-          <el-table-column label="楼号/区域" prop="buildingArea" width="180" />
-          <el-table-column label="楼宇名称" prop="buildingName" width="180" />
-          <el-table-column label="楼层/位置" prop="floorLocation" width="180" />
-          <el-table-column label="房间号(名称)" prop="roomName" width="180" />
-          <el-table-column label="安全责任人" prop="roomSafetyResponsibleName" width="180" />
-          <el-table-column label="是否存在风险点" prop="hasRiskPointName" width="180" />
-          <el-table-column label="风险点类别" prop="riskCategoryName" width="180" />
-          <el-table-column label="变更原因" prop="changeReason" width="170" />
-          <el-table-column label="状态" prop="statusName" width="100" />
-          <el-table-column fixed="right" min-width="240" label="操作">
-            <template #default="scope">
-              <el-button
-                type="primary"
-                link
-                @click="$router.push({ name: 'riskManageEdit', query: { id: scope.row.id } })"
-                >编辑</el-button
-              >
-              <el-button type="primary" link @click="handleConfirmDeleteRow(scope)">删除</el-button>
-              <el-button type="primary" link>查看</el-button>
-              <el-button
-                type="primary"
-                link
-                @click="$router.push({ name: 'riskManageChange', query: { id: scope.row.id } })"
-                >变更</el-button
-              >
-              <el-button type="primary" link @click="handleApprove(scope, 1)">确认</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">拒绝</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">撤回</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <div class="pagination-container" v-if="tableData.total > 0">
-        <el-pagination
-          background
-          :current-page="queryParams.pageNumber"
-          :page-size="queryParams.pageSize"
-          :total="tableData.total"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
-      </div>
-    </main>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, reactive, ref } from 'vue';
-  import dayjs from 'dayjs';
-  import { ElMessage } from 'element-plus';
-  import { useRouter } from 'vue-router';
-  import {
-    safetyRiskListQueryPage,
-    safetyRiskListDelete,
-    safetyRiskListApprove,
-  } from '@/api/production-safety/responsibility-implementation';
-  import { omit } from 'lodash-es';
-  import { useUserInfoHook } from '@/hooks/useUserInfoHook';
-  import { unformatAttachment } from '@/components/UploadFiles/utils';
-  import { downloadFile } from '@/views/disaster/utils';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-  import { getAllDepartments } from '@/api/auth/dept';
-
-  const router = useRouter();
-  const { id } = useUserInfoHook();
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    // emitPath: false,
-    value: 'id',
-    label: 'deptName',
-  };
-  const queryParams = reactive<any>({
-    pageNumber: 1,
-    pageSize: 10,
-    queryParam: {
-      mergeFiled: '',
-      status: '',
-      responsibleDepartment: '',
-      riskCategory: '',
-      riskLevel: '',
-      userId: id,
-      responsibleDepartmentId: [],
-    },
-  });
-  const cascaderRef = ref();
-
-  const tableData = reactive({
-    data: [],
-    total: 0,
-  });
-
-  const handleSizeChange = (value) => {};
-  const handleCurrentChange = (value) => {
-    queryParams.pageNumber = value;
-    queryTableList();
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-  const handleChangeDept = () => {
-    const deptInfo = cascaderRef.value?.getCheckedNodes();
-    if (deptInfo?.[0]) {
-      queryParams.queryParam.responsibleDepartment = deptInfo[0].label;
-    }
-  };
-
-  const handleApprove = (scope, approveType) => {
-    safetyRiskListApprove({
-      id: scope.row.id,
-      approveType,
-    }).then(() => {
-      ElMessage.success('操作成功!');
-      queryTableList();
-    });
-  };
-
-  const handleDownloadLink = (scope) => {
-    const attachment = unformatAttachment(scope.row.attachment);
-    attachment?.forEach((item: any) => {
-      downloadFile(item.fileUrl, item.fileName);
-    });
-  };
-  const handleConfirmDeleteRow = (scope) => {
-    safetyRiskListDelete(scope.row.id).then(() => {
-      ElMessage.success('删除成功!');
-      queryTableList();
-    });
-  };
-
-  const queryTableList = () => {
-    safetyRiskListQueryPage({
-      ...queryParams,
-      queryParam: {
-        ...omit(queryParams.queryParam, 'responsibleDepartmentId'),
-      },
-    }).then((res) => {
-      tableData.data = res.records;
-      tableData.total = res.totalRow;
-    });
-  };
-  const handleRestParams = () => {
-    Object.assign(queryParams, {
-      pageNumber: 1,
-      pageSize: 10,
-      queryParam: {
-        ...queryParams.queryParam,
-        mergeFiled: '',
-        status: '',
-        responsibleDepartment: '',
-        riskCategory: '',
-        riskLevel: '',
-        responsibleDepartmentId: [],
-      },
-    });
-    queryTableList();
-  };
-
-  onMounted(async () => {
-    await getDeptData();
-    queryTableList();
-  });
-</script>
-
-<style lang="scss" scoped>
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-
-  :deep(.el-tabs__header) {
-    margin: 0;
-  }
-  :deep(.el-tabs__item) {
-    font-size: 14px !important;
-  }
-  :deep(.flexContent) {
-    display: flex;
-  }
-  :deep(.breadcrumb .title) {
-    margin-left: 0;
-  }
-
-  :deep(.el-form) {
-    flex: 1;
-    display: flex;
-    row-gap: 15px;
-    flex-wrap: wrap;
-  }
-  :deep(.el-form-item) {
-    margin-bottom: 0;
-  }
-  :deep(main) {
-    display: flex;
-    flex-direction: column;
-  }
-  .search-form {
-    min-width: 800px;
-    display: flex;
-
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20px;
-  }
-
-  .button-content {
-    margin-bottom: 20px;
-  }
-  .table-content {
-    flex: 1;
-    overflow: hidden;
-    overflow-y: auto;
-  }
-  .page-content {
-    display: flex;
-    justify-content: flex-end;
-  }
-</style>

+ 0 - 0
src/views/production-safety/implement-safety-duty/hazard-manage/view.vue


+ 0 - 432
src/views/production-safety/implement-safety-duty/risk-manage/add.vue

@@ -1,432 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title">
-        <BreadcrumbBack />
-        新增风险清单
-      </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules">
-        <el-form-item label="楼号/区域" prop="buildingArea">
-          <el-input v-model="formValue.buildingArea" size="large" placeholder="例如:A栋、东区" style="width: 330px" />
-        </el-form-item>
-        <el-form-item label="楼宇名称" prop="buildingName">
-          <el-input
-            v-model="formValue.buildingName"
-            size="large"
-            placeholder="例如:科研楼、实验中心"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleBuilding">
-          <el-select
-            v-model="formValue.safetyResponsibleBuilding"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼层/位置" prop="floorLocation">
-          <el-input
-            v-model="formValue.floorLocation"
-            size="large"
-            placeholder="例如:3层、地下一层、走廊东侧"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleFloor">
-          <!-- <el-input
-            v-model="formValue.safetyResponsibleFloor"
-            size="large"
-            placeholder="请输入楼层/位置安全责任人姓名"
-            style="width: 330px"
-          /> -->
-          <el-select
-            v-model="formValue.safetyResponsibleFloor"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="房间号(名称)" prop="roomName">
-          <el-input
-            v-model="formValue.roomName"
-            size="large"
-            placeholder="例如:301、高压配电室"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="责任部门" prop="responsibleDepartment">
-          <el-cascader
-            style="width: 330px"
-            v-model="formValue.responsibleDepartmentId"
-            size="large"
-            ref="cascaderRef"
-            :options="firstLevelDepts"
-            :props="cascaderProp"
-            :show-all-levels="false"
-            placeholder="请选择责任部门"
-            filterable
-            @change="handleChangeDept('responsibleDepartment')"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="roomSafetyResponsible">
-          <!-- <el-input
-            v-model="formValue.roomSafetyResponsible"
-            size="large"
-            placeholder="请输入房间安全责任人姓名"
-            style="width: 330px"
-          /> -->
-          <el-select
-            v-model="formValue.roomSafetyResponsible"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否存在风险点" prop="hasRiskPoint">
-          <el-select
-            v-model="formValue.hasRiskPoint"
-            size="large"
-            placeholder="请选择是否存有风险点"
-            style="width: 330px"
-          >
-            <el-option label="是" :value="1" />
-            <el-option label="否" :value="0" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点类别" prop="riskCategory">
-          <el-select v-model="formValue.riskCategory" size="large" placeholder="请选择风险点类别" style="width: 330px">
-            <el-option :value="1" label="III级危险点" />
-            <el-option :value="2" label="II级危险点" />
-            <el-option :value="3" label="I级危险点" />
-            <el-option :value="4" label="UPS" />
-            <el-option :value="5" label="电力设施(强电)" />
-            <el-option :value="6" label="高低温气体液体、高压气体" />
-            <el-option :value="7" label="试验设施设备" />
-            <el-option :value="8" label="特种设备" />
-            <el-option :value="9" label="危化品、易燃易爆固液气体" />
-            <el-option :value="10" label="有限空间" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点名称" prop="riskPointName">
-          <el-input
-            v-model="formValue.riskPointName"
-            size="large"
-            placeholder="例如:液氮储罐、高压开关柜"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点编号" prop="riskPointNumber">
-          <el-input
-            v-model="formValue.riskPointNumber"
-            size="large"
-            placeholder="请输入唯一风险点编号"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点规格" prop="riskPointSpec">
-          <el-input
-            v-model="formValue.riskPointSpec"
-            size="large"
-            placeholder="例如:容量500L、电压10kV"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="培训要求" prop="trainingRequirement">
-          <el-input
-            v-model="formValue.trainingRequirement"
-            size="large"
-            placeholder="例如:持证上岗、年度复训"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全风险" prop="safetyRisk">
-          <el-input
-            v-model="formValue.safetyRisk"
-            size="large"
-            placeholder="描述该风险点可能引发的安全问题"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="可能造成伤害" prop="possibleHarm">
-          <el-input
-            v-model="formValue.possibleHarm"
-            size="large"
-            placeholder="例如:爆炸、中毒、触电、窒息等"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="主要管控措施" prop="mainControlMeasures">
-          <el-input
-            v-model="formValue.mainControlMeasures"
-            size="large"
-            placeholder="例如:定期巡检、设置警示标识、配备防护装备"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="目前是否存在安全隐患" prop="currentHazard">
-          <el-input
-            v-model="formValue.currentHazard"
-            size="large"
-            placeholder="例如:设备老化、线路裸露、通风不良"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="隐患内容" prop="hazardContent">
-          <el-input
-            v-model="formValue.hazardContent"
-            size="large"
-            placeholder="详细描述当前存在的隐患情况"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案名称" prop="emergencyPlanName">
-          <el-input
-            v-model="formValue.emergencyPlanName"
-            size="large"
-            placeholder="例如:《危化品泄漏应急处置预案》"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案编号" prop="emergencyPlanNumber">
-          <el-input
-            v-model="formValue.emergencyPlanNumber"
-            size="large"
-            placeholder="例如:YJYA-2024-001"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="演练计划及实施情况" prop="rectificationPlan">
-          <el-input
-            v-model="formValue.rectificationPlan"
-            size="large"
-            placeholder="例如:每季度演练一次,最近一次于2025年12月完成"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险等级" prop="riskLevel">
-          <el-select v-model="formValue.riskLevel" size="large" placeholder="请选择风险等级" style="width: 330px">
-            <el-option :value="1" label="高" />
-            <el-option :value="2" label="中" />
-            <el-option :value="3" label="低" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <div style="width: 330px"></div>
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.remarks"
-            size="large"
-            :rows="7"
-            placeholder="可填写其他补充说明"
-          />
-        </el-form-item>
-      </el-form>
-    </main>
-    <footer class="safety-platform-container__footer">
-      <el-button @click="$router.push({ name: 'areaResponsibilities:public' })">返回</el-button>
-      <el-button type="primary" :loading="submiting" @click="handleSubmit">提交</el-button>
-    </footer>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, reactive, onMounted, nextTick } from 'vue';
-  import { useRouter } from 'vue-router';
-  import { ElMessage } from 'element-plus';
-  import { getAllDepartments } from '@/api/auth/dept';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-
-  import {
-    queryAvailableUserList,
-    safetyRiskListSaveRiskList,
-  } from '@/api/production-safety/responsibility-implementation';
-
-  const router = useRouter();
-  const formRef = ref<any>(null);
-  const submiting = ref(false);
-
-  const userOptions = ref<any[]>([]);
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    value: 'id',
-    label: 'deptName',
-  };
-  const cascaderRef = ref<any>();
-
-  const formValue = reactive({
-    buildingArea: '',
-    buildingName: '',
-    safetyResponsibleBuilding: '',
-    floorLocation: '',
-    safetyResponsibleFloor: '',
-    roomName: '',
-    responsibleDepartment: '',
-    roomSafetyResponsible: '',
-    hasRiskPoint: '',
-    riskCategory: '',
-    riskPointName: '',
-    riskPointNumber: '',
-    riskPointSpec: '',
-    trainingRequirement: '',
-    safetyRisk: '',
-    possibleHarm: '',
-    mainControlMeasures: '',
-    currentHazard: '',
-    hazardContent: '',
-    emergencyPlanName: '',
-    emergencyPlanNumber: '',
-    rectificationPlan: '',
-    riskLevel: '',
-    remarks: '',
-    responsibleDepartmentId: [],
-  });
-
-  const rules = reactive({
-    buildingArea: [{ required: true, message: '请输入楼号', trigger: 'blur' }],
-    buildingName: [{ required: true, message: '请输入楼宇/区域', trigger: 'blur' }],
-    safetyResponsibleBuilding: [{ required: true, message: '请输入楼层/房号', trigger: 'blur' }],
-    floorLocation: [{ required: true, message: '请输入名称/功能', trigger: 'blur' }],
-    safetyResponsibleFloor: [{ required: true, message: '请选择安全责任所/中心', trigger: 'change' }],
-    roomName: [{ required: true, message: '请选择安全责任所/中心负责人', trigger: 'change' }],
-    responsibleDepartment: [{ required: true, message: '请选择安全责任部门', trigger: 'change' }],
-    roomSafetyResponsible: [{ required: true, message: '请输入房间安全责任人', trigger: 'blur' }],
-    hasRiskPoint: [{ required: true, message: '请选择是否有风险点', trigger: 'change' }],
-    riskCategory: [{ required: true, message: '请选择风险类别', trigger: 'change' }],
-    riskPointName: [{ required: true, message: '请输入风险点名称', trigger: 'blur' }],
-    riskPointNumber: [{ required: true, message: '请输入风险点编号', trigger: 'blur' }],
-    riskPointSpec: [{ required: true, message: '请输入风险点规格/参数', trigger: 'blur' }],
-    trainingRequirement: [{ required: true, message: '请输入培训要求', trigger: 'blur' }],
-    safetyRisk: [{ required: true, message: '请输入安全风险描述', trigger: 'blur' }],
-    possibleHarm: [{ required: true, message: '请输入可能造成的伤害', trigger: 'blur' }],
-    mainControlMeasures: [{ required: true, message: '请输入主要控制措施', trigger: 'blur' }],
-    currentHazard: [{ required: true, message: '请选择当前隐患状态', trigger: 'change' }],
-    hazardContent: [{ required: true, message: '请输入隐患内容', trigger: 'blur' }],
-    emergencyPlanName: [{ required: true, message: '请输入应急预案名称', trigger: 'blur' }],
-    emergencyPlanNumber: [{ required: true, message: '请输入应急预案编号', trigger: 'blur' }],
-    rectificationPlan: [{ required: true, message: '请输入整改方案', trigger: 'blur' }],
-    riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
-    remarks: [],
-  });
-
-  const handleChangeDept = (prop) => {
-    const cascader = cascaderRef.value;
-    const deptInfo = cascader?.getCheckedNodes();
-    formValue[prop] = deptInfo[0].label;
-    formRef.value.validateField(prop);
-    nextTick(() => {
-      handleQueryAvailableUserList(deptInfo[0].label, prop);
-    });
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-
-  const handleQueryAvailableUserList = (deptName, realname = '') => {
-    queryAvailableUserList({
-      pageNumber: 1,
-      pageSize: 200,
-      queryParam: {
-        deptName,
-        realname,
-      },
-    }).then((res: any) => {
-      userOptions.value = (res.records || []).map((u: any) => ({
-        value: u.userId || u.id,
-        label: u.realname,
-      }));
-    });
-  };
-
-  // const getUserData = () => {
-  //   getUserList({ pageNumber: 1, pageSize: 200, queryParam: {} }).then((res: any) => {
-  //     userOptions.value = (res.records || []).map((u: any) => ({
-  //       id: u.userId || u.id,
-  //       name: u.realName || u.username,
-  //     }));
-  //   });
-  // };
-
-  onMounted(() => {
-    getDeptData();
-    handleQueryAvailableUserList('');
-    // getUserData();
-  });
-
-  const handleSubmit = () => {
-    formRef.value?.validate((valid: boolean) => {
-      if (valid) {
-        submiting.value = true;
-        safetyRiskListSaveRiskList({
-          ...formValue,
-          responsibleDepartmentId: formValue.responsibleDepartmentId.join(','),
-        })
-          .then(() => {
-            ElMessage.success('创建成功!');
-            router.push({ name: 'riskManage' });
-          })
-          .finally(() => {
-            submiting.value = false;
-          });
-      }
-    });
-  };
-</script>
-<style lang="scss" scoped>
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-  .editor-container {
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    margin-right: 20px;
-    overflow: hidden;
-
-    // :deep(.w-e-text-container) {
-    //   min-height: 400px;
-    //   overflow-y: auto;
-    // }
-  }
-  // :deep(.breadcrumb .title) {
-  //   margin-left: 0;
-  // }
-
-  // .main {
-  //   display: flex;
-  //   flex-direction: column;
-  //   padding: 20px;
-  //   flex: 1;
-  //   overflow: hidden;
-  //   background-color: #fff;
-  // }
-  // .button-content {
-  //   margin-bottom: 20px;
-  // }
-
-  // .page-content {
-  //   display: flex;
-  //   justify-content: flex-end;
-  // }
-  // // :deep(.el-form) {
-  // //   flex: 1;
-  // //   overflow: hidden;
-  // //   overflow-y: auto;
-  // // }
-</style>

+ 0 - 533
src/views/production-safety/implement-safety-duty/risk-manage/change.vue

@@ -1,533 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title">
-        <BreadcrumbBack />
-        变更风险清单
-      </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules">
-        <el-form-item label="楼号/区域" prop="buildingArea">
-          <el-input
-            disabled
-            v-model="formValue.buildingArea"
-            size="large"
-            placeholder="例如:A栋、东区"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="楼宇名称" prop="buildingName">
-          <el-input
-            v-model="formValue.buildingName"
-            size="large"
-            disabled
-            placeholder="例如:科研楼、实验中心"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleBuilding">
-          <el-select
-            disabled
-            v-model="formValue.safetyResponsibleBuilding"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼层/位置" prop="floorLocation">
-          <el-input
-            disabled
-            v-model="formValue.floorLocation"
-            size="large"
-            placeholder="例如:3层、地下一层、走廊东侧"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleFloor">
-          <el-select
-            disabled
-            v-model="formValue.safetyResponsibleFloor"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="房间号(名称)" prop="roomName">
-          <el-input
-            disabled
-            v-model="formValue.roomName"
-            size="large"
-            placeholder="例如:301、高压配电室"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="责任部门" prop="responsibleDepartment">
-          <el-cascader
-            disabled
-            style="width: 330px"
-            v-model="formValue.responsibleDepartmentId"
-            size="large"
-            ref="cascaderRef"
-            :options="firstLevelDepts"
-            :props="cascaderProp"
-            :show-all-levels="false"
-            placeholder="请选择责任部门"
-            filterable
-            @change="handleChangeDept('responsibleDepartment')"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="roomSafetyResponsible">
-          <el-select
-            disabled
-            v-model="formValue.roomSafetyResponsible"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否存在风险点" prop="hasRiskPoint">
-          <el-select
-            disabled
-            v-model="formValue.hasRiskPoint"
-            size="large"
-            placeholder="请选择是否存有风险点"
-            style="width: 330px"
-          >
-            <el-option label="是" :value="1" />
-            <el-option label="否" :value="0" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点类别" prop="riskCategory">
-          <el-select
-            disabled
-            v-model="formValue.riskCategory"
-            size="large"
-            placeholder="请选择风险点类别"
-            style="width: 330px"
-          >
-            <el-option :value="1" label="III级危险点" />
-            <el-option :value="2" label="II级危险点" />
-            <el-option :value="3" label="I级危险点" />
-            <el-option :value="4" label="UPS" />
-            <el-option :value="5" label="电力设施(强电)" />
-            <el-option :value="6" label="高低温气体液体、高压气体" />
-            <el-option :value="7" label="试验设施设备" />
-            <el-option :value="8" label="特种设备" />
-            <el-option :value="9" label="危化品、易燃易爆固液气体" />
-            <el-option :value="10" label="有限空间" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点名称" prop="riskPointName">
-          <el-input
-            disabled
-            v-model="formValue.riskPointName"
-            size="large"
-            placeholder="例如:液氮储罐、高压开关柜"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点编号" prop="riskPointNumber">
-          <el-input
-            disabled
-            v-model="formValue.riskPointNumber"
-            size="large"
-            placeholder="请输入唯一风险点编号"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点规格" prop="riskPointSpec">
-          <el-input
-            disabled
-            v-model="formValue.riskPointSpec"
-            size="large"
-            placeholder="例如:容量500L、电压10kV"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="培训要求" prop="trainingRequirement">
-          <el-input
-            disabled
-            v-model="formValue.trainingRequirement"
-            size="large"
-            placeholder="例如:持证上岗、年度复训"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全风险" prop="safetyRisk">
-          <el-input
-            disabled
-            v-model="formValue.safetyRisk"
-            size="large"
-            placeholder="描述该风险点可能引发的安全问题"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="可能造成伤害" prop="possibleHarm">
-          <el-input
-            disabled
-            v-model="formValue.possibleHarm"
-            size="large"
-            placeholder="例如:爆炸、中毒、触电、窒息等"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="主要管控措施" prop="mainControlMeasures">
-          <el-input
-            disabled
-            v-model="formValue.mainControlMeasures"
-            size="large"
-            placeholder="例如:定期巡检、设置警示标识、配备防护装备"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="目前是否存在安全隐患" prop="currentHazard">
-          <el-input
-            disabled
-            v-model="formValue.currentHazard"
-            size="large"
-            placeholder="例如:设备老化、线路裸露、通风不良"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="隐患内容" prop="hazardContent">
-          <el-input
-            disabled
-            v-model="formValue.hazardContent"
-            size="large"
-            placeholder="详细描述当前存在的隐患情况"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案名称" prop="emergencyPlanName">
-          <el-input
-            disabled
-            v-model="formValue.emergencyPlanName"
-            size="large"
-            placeholder="例如:《危化品泄漏应急处置预案》"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案编号" prop="emergencyPlanNumber">
-          <el-input
-            disabled
-            v-model="formValue.emergencyPlanNumber"
-            size="large"
-            placeholder="例如:YJYA-2024-001"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="演练计划及实施情况" prop="rectificationPlan">
-          <el-input
-            disabled
-            v-model="formValue.rectificationPlan"
-            size="large"
-            placeholder="例如:每季度演练一次,最近一次于2025年12月完成"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险等级" prop="riskLevel">
-          <el-select
-            disabled
-            v-model="formValue.riskLevel"
-            size="large"
-            placeholder="请选择风险等级"
-            style="width: 330px"
-          >
-            <el-option :value="1" label="高" />
-            <el-option :value="2" label="中" />
-            <el-option :value="3" label="低" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <div style="width: 330px"></div>
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks" style="width: 87.2%">
-          <el-input
-            disabled
-            type="textarea"
-            v-model="formValue.remarks"
-            size="large"
-            :rows="7"
-            placeholder="可填写其他补充说明"
-          />
-        </el-form-item>
-        <h4>信息变更</h4>
-        <el-form-item label="部门名称" prop="responsibleDepartmentTodo">
-          <el-cascader
-            style="width: 330px"
-            ref="cascaderTodoRef"
-            size="large"
-            :options="firstLevelDepts"
-            :props="cascaderProp"
-            :show-all-levels="false"
-            placeholder="请选择责任部门"
-            filterable
-            @change="() => handleChangeDept('responsibleDepartmentTodo')"
-          />
-        </el-form-item>
-        <el-form-item label="责任人姓名" prop="roomSafetyResponsibleTodo">
-          <el-select
-            v-model="formValue.roomSafetyResponsibleTodo"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option
-              v-for="item in roomSafetyResponsibleTodoOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <div style="width: 330px"></div>
-        </el-form-item>
-        <el-form-item label="变更原因" prop="changeReason" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.changeReason"
-            size="large"
-            :rows="7"
-            placeholder="请填写驳回审批原因"
-          />
-        </el-form-item>
-      </el-form>
-    </main>
-    <footer class="safety-platform-container__footer">
-      <el-button @click="$router.push({ name: 'areaResponsibilities:public' })">返回</el-button>
-      <el-button type="primary" :loading="submiting" @click="handleSubmit">提交</el-button>
-    </footer>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, reactive, onMounted, nextTick } from 'vue';
-  import { useRouter, useRoute } from 'vue-router';
-  import { ElMessage } from 'element-plus';
-  import { getAllDepartments } from '@/api/auth/dept';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-
-  import {
-    queryAvailableUserList,
-    safetyRiskListChange,
-    safetyRiskListQueryDetail,
-  } from '@/api/production-safety/responsibility-implementation';
-
-  const router = useRouter();
-  const route = useRoute();
-  const formRef = ref<any>(null);
-  const submiting = ref(false);
-
-  const userOptions = ref<any[]>([]);
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    value: 'id',
-    label: 'deptName',
-  };
-  const cascaderRef = ref<any>();
-  const cascaderTodoRef = ref<any>();
-  const roomSafetyResponsibleTodoOptions = ref<any[]>([]);
-  const formValue = reactive({
-    buildingArea: '',
-    buildingName: '',
-    safetyResponsibleBuilding: '',
-    floorLocation: '',
-    safetyResponsibleFloor: '',
-    roomName: '',
-    responsibleDepartment: '',
-    roomSafetyResponsible: '',
-    hasRiskPoint: '',
-    riskCategory: '',
-    riskPointName: '',
-    riskPointNumber: '',
-    riskPointSpec: '',
-    trainingRequirement: '',
-    safetyRisk: '',
-    possibleHarm: '',
-    mainControlMeasures: '',
-    currentHazard: '',
-    hazardContent: '',
-    emergencyPlanName: '',
-    emergencyPlanNumber: '',
-    rectificationPlan: '',
-    riskLevel: '',
-    remarks: '',
-    changeReason: '',
-    responsibleDepartmentTodo: '',
-    roomSafetyResponsibleTodo: '',
-    responsibleDepartmentId: [],
-  });
-
-  const rules = reactive({
-    buildingArea: [{ required: true, message: '请输入楼号', trigger: 'blur' }],
-    buildingName: [{ required: true, message: '请输入楼宇/区域', trigger: 'blur' }],
-    safetyResponsibleBuilding: [{ required: true, message: '请输入楼层/房号', trigger: 'blur' }],
-    floorLocation: [{ required: true, message: '请输入名称/功能', trigger: 'blur' }],
-    safetyResponsibleFloor: [{ required: true, message: '请选择安全责任所/中心', trigger: 'change' }],
-    roomName: [{ required: true, message: '请选择安全责任所/中心负责人', trigger: 'change' }],
-    responsibleDepartment: [{ required: true, message: '请选择安全责任部门', trigger: 'change' }],
-    roomSafetyResponsible: [{ required: true, message: '请输入房间安全责任人', trigger: 'blur' }],
-    hasRiskPoint: [{ required: true, message: '请选择是否有风险点', trigger: 'change' }],
-    riskCategory: [{ required: true, message: '请选择风险类别', trigger: 'change' }],
-    riskPointName: [{ required: true, message: '请输入风险点名称', trigger: 'blur' }],
-    riskPointNumber: [{ required: true, message: '请输入风险点编号', trigger: 'blur' }],
-    riskPointSpec: [{ required: true, message: '请输入风险点规格/参数', trigger: 'blur' }],
-    trainingRequirement: [{ required: true, message: '请输入培训要求', trigger: 'blur' }],
-    safetyRisk: [{ required: true, message: '请输入安全风险描述', trigger: 'blur' }],
-    possibleHarm: [{ required: true, message: '请输入可能造成的伤害', trigger: 'blur' }],
-    mainControlMeasures: [{ required: true, message: '请输入主要控制措施', trigger: 'blur' }],
-    currentHazard: [{ required: true, message: '请选择当前隐患状态', trigger: 'change' }],
-    hazardContent: [{ required: true, message: '请输入隐患内容', trigger: 'blur' }],
-    emergencyPlanName: [{ required: true, message: '请输入应急预案名称', trigger: 'blur' }],
-    emergencyPlanNumber: [{ required: true, message: '请输入应急预案编号', trigger: 'blur' }],
-    rectificationPlan: [{ required: true, message: '请输入整改方案', trigger: 'blur' }],
-    riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
-    responsibleDepartmentTodo: [{ required: true, message: '请选择变更后的责任部门', trigger: 'change' }],
-    roomSafetyResponsibleTodo: [{ required: true, message: '请选择变更后的责任人', trigger: 'change' }],
-    changeReason: [{ required: true, message: '请输入变更原因', trigger: 'blur' }],
-    remarks: [],
-  });
-
-  const handleChangeDept = (prop) => {
-    const cascader = cascaderTodoRef.value;
-    const deptInfo = cascader?.getCheckedNodes();
-    formValue[prop] = deptInfo[0].label;
-    formRef.value.validateField(prop);
-    nextTick(() => {
-      handleQueryAvailableUserList(deptInfo[0].label, prop);
-    });
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-
-  const handleQueryAvailableUserList = (deptName = '', prop = '', realname = '') => {
-    queryAvailableUserList({
-      pageNumber: 1,
-      pageSize: 200,
-      queryParam: {
-        deptName,
-        realname,
-      },
-    }).then((res: any) => {
-      switch (prop) {
-        case 'responsibleDepartmentTodo':
-          formValue.roomSafetyResponsibleTodo = '';
-          roomSafetyResponsibleTodoOptions.value = (res.records || []).map((u: any) => ({
-            value: u.userId || u.id,
-            label: u.realname,
-          }));
-          break;
-
-        default:
-          break;
-      }
-    });
-  };
-
-  const loadDetailData = (id: number) => {
-    safetyRiskListQueryDetail(id).then((res: any) => {
-      Object.keys(formValue).forEach((key) => {
-        if (res[key] !== undefined) {
-          formValue[key] = res[key];
-          formValue['responsibleDepartmentId'] = res['responsibleDepartmentId']
-            ? res['responsibleDepartmentId'].split(',').map((item: string) => Number(item))
-            : [];
-        }
-      });
-    });
-  };
-
-  // const getUserData = () => {
-  //   getUserList({ pageNumber: 1, pageSize: 200, queryParam: {} }).then((res: any) => {
-  //     userOptions.value = (res.records || []).map((u: any) => ({
-  //       id: u.userId || u.id,
-  //       name: u.realName || u.username,
-  //     }));
-  //   });
-  // };
-
-  onMounted(() => {
-    getDeptData();
-    loadDetailData(Number(route.query.id));
-    handleQueryAvailableUserList('');
-  });
-
-  const handleSubmit = () => {
-    formRef.value?.validate((valid: boolean) => {
-      if (valid) {
-        submiting.value = true;
-        safetyRiskListChange({
-          id: route.query.id,
-          responsibleDepartmentTodo: formValue.responsibleDepartmentTodo,
-          roomSafetyResponsibleTodo: formValue.roomSafetyResponsibleTodo,
-          changeReason: formValue.changeReason,
-        })
-          .then(() => {
-            ElMessage.success('变更成功!');
-            router.push({ name: 'riskManage' });
-          })
-          .finally(() => {
-            submiting.value = false;
-          });
-      }
-    });
-  };
-</script>
-<style lang="scss" scoped>
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-  .editor-container {
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    margin-right: 20px;
-    overflow: hidden;
-
-    // :deep(.w-e-text-container) {
-    //   min-height: 400px;
-    //   overflow-y: auto;
-    // }
-  }
-  // :deep(.breadcrumb .title) {
-  //   margin-left: 0;
-  // }
-
-  // .main {
-  //   display: flex;
-  //   flex-direction: column;
-  //   padding: 20px;
-  //   flex: 1;
-  //   overflow: hidden;
-  //   background-color: #fff;
-  // }
-  // .button-content {
-  //   margin-bottom: 20px;
-  // }
-
-  // .page-content {
-  //   display: flex;
-  //   justify-content: flex-end;
-  // }
-  // // :deep(.el-form) {
-  // //   flex: 1;
-  // //   overflow: hidden;
-  // //   overflow-y: auto;
-  // // }
-</style>

+ 0 - 436
src/views/production-safety/implement-safety-duty/risk-manage/edit.vue

@@ -1,436 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title">
-        <BreadcrumbBack />
-        编辑风险清单
-      </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules">
-        <el-form-item label="楼号/区域" prop="buildingArea">
-          <el-input v-model="formValue.buildingArea" size="large" placeholder="例如:A栋、东区" style="width: 330px" />
-        </el-form-item>
-        <el-form-item label="楼宇名称" prop="buildingName">
-          <el-input
-            v-model="formValue.buildingName"
-            size="large"
-            placeholder="例如:科研楼、实验中心"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleBuilding">
-          <el-select
-            v-model="formValue.safetyResponsibleBuilding"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼层/位置" prop="floorLocation">
-          <el-input
-            v-model="formValue.floorLocation"
-            size="large"
-            placeholder="例如:3层、地下一层、走廊东侧"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleFloor">
-          <el-select
-            v-model="formValue.safetyResponsibleFloor"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="房间号(名称)" prop="roomName">
-          <el-input
-            v-model="formValue.roomName"
-            size="large"
-            placeholder="例如:301、高压配电室"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="责任部门" prop="responsibleDepartment">
-          <el-cascader
-            style="width: 330px"
-            v-model="formValue.responsibleDepartmentId"
-            size="large"
-            ref="cascaderRef"
-            :options="firstLevelDepts"
-            :props="cascaderProp"
-            :show-all-levels="false"
-            placeholder="请选择责任部门"
-            filterable
-            @change="handleChangeDept('responsibleDepartment')"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="roomSafetyResponsible">
-          <el-select
-            v-model="formValue.roomSafetyResponsible"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否存在风险点" prop="hasRiskPoint">
-          <el-select
-            v-model="formValue.hasRiskPoint"
-            size="large"
-            placeholder="请选择是否存有风险点"
-            style="width: 330px"
-          >
-            <el-option label="是" :value="1" />
-            <el-option label="否" :value="0" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点类别" prop="riskCategory">
-          <el-select v-model="formValue.riskCategory" size="large" placeholder="请选择风险点类别" style="width: 330px">
-            <el-option :value="1" label="III级危险点" />
-            <el-option :value="2" label="II级危险点" />
-            <el-option :value="3" label="I级危险点" />
-            <el-option :value="4" label="UPS" />
-            <el-option :value="5" label="电力设施(强电)" />
-            <el-option :value="6" label="高低温气体液体、高压气体" />
-            <el-option :value="7" label="试验设施设备" />
-            <el-option :value="8" label="特种设备" />
-            <el-option :value="9" label="危化品、易燃易爆固液气体" />
-            <el-option :value="10" label="有限空间" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点名称" prop="riskPointName">
-          <el-input
-            v-model="formValue.riskPointName"
-            size="large"
-            placeholder="例如:液氮储罐、高压开关柜"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点编号" prop="riskPointNumber">
-          <el-input
-            v-model="formValue.riskPointNumber"
-            size="large"
-            placeholder="请输入唯一风险点编号"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险点规格" prop="riskPointSpec">
-          <el-input
-            v-model="formValue.riskPointSpec"
-            size="large"
-            placeholder="例如:容量500L、电压10kV"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="培训要求" prop="trainingRequirement">
-          <el-input
-            v-model="formValue.trainingRequirement"
-            size="large"
-            placeholder="例如:持证上岗、年度复训"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="安全风险" prop="safetyRisk">
-          <el-input
-            v-model="formValue.safetyRisk"
-            size="large"
-            placeholder="描述该风险点可能引发的安全问题"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="可能造成伤害" prop="possibleHarm">
-          <el-input
-            v-model="formValue.possibleHarm"
-            size="large"
-            placeholder="例如:爆炸、中毒、触电、窒息等"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="主要管控措施" prop="mainControlMeasures">
-          <el-input
-            v-model="formValue.mainControlMeasures"
-            size="large"
-            placeholder="例如:定期巡检、设置警示标识、配备防护装备"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="目前是否存在安全隐患" prop="currentHazard">
-          <el-input
-            v-model="formValue.currentHazard"
-            size="large"
-            placeholder="例如:设备老化、线路裸露、通风不良"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="隐患内容" prop="hazardContent">
-          <el-input
-            v-model="formValue.hazardContent"
-            size="large"
-            placeholder="详细描述当前存在的隐患情况"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案名称" prop="emergencyPlanName">
-          <el-input
-            v-model="formValue.emergencyPlanName"
-            size="large"
-            placeholder="例如:《危化品泄漏应急处置预案》"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="应急预案编号" prop="emergencyPlanNumber">
-          <el-input
-            v-model="formValue.emergencyPlanNumber"
-            size="large"
-            placeholder="例如:YJYA-2024-001"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="演练计划及实施情况" prop="rectificationPlan">
-          <el-input
-            v-model="formValue.rectificationPlan"
-            size="large"
-            placeholder="例如:每季度演练一次,最近一次于2025年12月完成"
-            style="width: 330px"
-          />
-        </el-form-item>
-        <el-form-item label="风险等级" prop="riskLevel">
-          <el-select v-model="formValue.riskLevel" size="large" placeholder="请选择风险等级" style="width: 330px">
-            <el-option :value="1" label="高" />
-            <el-option :value="2" label="中" />
-            <el-option :value="3" label="低" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <div style="width: 330px"></div>
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.remarks"
-            size="large"
-            :rows="7"
-            placeholder="可填写其他补充说明"
-          />
-        </el-form-item>
-      </el-form>
-    </main>
-    <footer class="safety-platform-container__footer">
-      <el-button @click="$router.push({ name: 'areaResponsibilities:public' })">返回</el-button>
-      <el-button type="primary" :loading="submiting" @click="handleSubmit">提交</el-button>
-    </footer>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, reactive, onMounted, nextTick } from 'vue';
-  import { useRouter, useRoute } from 'vue-router';
-  import { ElMessage } from 'element-plus';
-  import { getAllDepartments } from '@/api/auth/dept';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-
-  import {
-    queryAvailableUserList,
-    safetyRiskListUpdateRiskList,
-    safetyRiskListQueryDetail,
-  } from '@/api/production-safety/responsibility-implementation';
-
-  const router = useRouter();
-  const route = useRoute();
-  const formRef = ref<any>(null);
-  const submiting = ref(false);
-
-  const userOptions = ref<any[]>([]);
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    value: 'id',
-    label: 'deptName',
-  };
-  const cascaderRef = ref<any>();
-
-  const formValue = reactive({
-    buildingArea: '',
-    buildingName: '',
-    safetyResponsibleBuilding: '',
-    floorLocation: '',
-    safetyResponsibleFloor: '',
-    roomName: '',
-    responsibleDepartment: '',
-    roomSafetyResponsible: '',
-    hasRiskPoint: '',
-    riskCategory: '',
-    riskPointName: '',
-    riskPointNumber: '',
-    riskPointSpec: '',
-    trainingRequirement: '',
-    safetyRisk: '',
-    possibleHarm: '',
-    mainControlMeasures: '',
-    currentHazard: '',
-    hazardContent: '',
-    emergencyPlanName: '',
-    emergencyPlanNumber: '',
-    rectificationPlan: '',
-    riskLevel: '',
-    remarks: '',
-    responsibleDepartmentId: [],
-  });
-
-  const rules = reactive({
-    buildingArea: [{ required: true, message: '请输入楼号', trigger: 'blur' }],
-    buildingName: [{ required: true, message: '请输入楼宇/区域', trigger: 'blur' }],
-    safetyResponsibleBuilding: [{ required: true, message: '请输入楼层/房号', trigger: 'blur' }],
-    floorLocation: [{ required: true, message: '请输入名称/功能', trigger: 'blur' }],
-    safetyResponsibleFloor: [{ required: true, message: '请选择安全责任所/中心', trigger: 'change' }],
-    roomName: [{ required: true, message: '请选择安全责任所/中心负责人', trigger: 'change' }],
-    responsibleDepartment: [{ required: true, message: '请选择安全责任部门', trigger: 'change' }],
-    roomSafetyResponsible: [{ required: true, message: '请输入房间安全责任人', trigger: 'blur' }],
-    hasRiskPoint: [{ required: true, message: '请选择是否有风险点', trigger: 'change' }],
-    riskCategory: [{ required: true, message: '请选择风险类别', trigger: 'change' }],
-    riskPointName: [{ required: true, message: '请输入风险点名称', trigger: 'blur' }],
-    riskPointNumber: [{ required: true, message: '请输入风险点编号', trigger: 'blur' }],
-    riskPointSpec: [{ required: true, message: '请输入风险点规格/参数', trigger: 'blur' }],
-    trainingRequirement: [{ required: true, message: '请输入培训要求', trigger: 'blur' }],
-    safetyRisk: [{ required: true, message: '请输入安全风险描述', trigger: 'blur' }],
-    possibleHarm: [{ required: true, message: '请输入可能造成的伤害', trigger: 'blur' }],
-    mainControlMeasures: [{ required: true, message: '请输入主要控制措施', trigger: 'blur' }],
-    currentHazard: [{ required: true, message: '请选择当前隐患状态', trigger: 'change' }],
-    hazardContent: [{ required: true, message: '请输入隐患内容', trigger: 'blur' }],
-    emergencyPlanName: [{ required: true, message: '请输入应急预案名称', trigger: 'blur' }],
-    emergencyPlanNumber: [{ required: true, message: '请输入应急预案编号', trigger: 'blur' }],
-    rectificationPlan: [{ required: true, message: '请输入整改方案', trigger: 'blur' }],
-    riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
-    remarks: [],
-  });
-
-  const handleChangeDept = (prop) => {
-    const cascader = cascaderRef.value;
-    const deptInfo = cascader?.getCheckedNodes();
-    formValue[prop] = deptInfo[0].label;
-    formRef.value.validateField(prop);
-    nextTick(() => {
-      handleQueryAvailableUserList(deptInfo[0].label, prop);
-    });
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-
-  const handleQueryAvailableUserList = (deptName, realname = '') => {
-    queryAvailableUserList({
-      pageNumber: 1,
-      pageSize: 200,
-      queryParam: {
-        deptName,
-        realname,
-      },
-    }).then((res: any) => {
-      userOptions.value = (res.records || []).map((u: any) => ({
-        value: u.userId || u.id,
-        label: u.realname,
-      }));
-    });
-  };
-
-  const loadDetailData = (id: number) => {
-    safetyRiskListQueryDetail(id).then((res: any) => {
-      Object.keys(formValue).forEach((key) => {
-        if (res[key] !== undefined) {
-          formValue[key] = res[key];
-          formValue['responsibleDepartmentId'] = res['responsibleDepartmentId']
-            ? res['responsibleDepartmentId'].split(',').map((item: string) => Number(item))
-            : [];
-        }
-      });
-    });
-  };
-
-  // const getUserData = () => {
-  //   getUserList({ pageNumber: 1, pageSize: 200, queryParam: {} }).then((res: any) => {
-  //     userOptions.value = (res.records || []).map((u: any) => ({
-  //       id: u.userId || u.id,
-  //       name: u.realName || u.username,
-  //     }));
-  //   });
-  // };
-
-  onMounted(() => {
-    getDeptData();
-    loadDetailData(Number(route.query.id));
-    handleQueryAvailableUserList('');
-  });
-
-  const handleSubmit = () => {
-    formRef.value?.validate((valid: boolean) => {
-      if (valid) {
-        submiting.value = true;
-        safetyRiskListUpdateRiskList({
-          ...formValue,
-          id: route.query.id,
-          responsibleDepartmentId: formValue.responsibleDepartmentId.join(','),
-        })
-          .then(() => {
-            ElMessage.success('编辑成功!');
-            router.push({ name: 'riskManage' });
-          })
-          .finally(() => {
-            submiting.value = false;
-          });
-      }
-    });
-  };
-</script>
-<style lang="scss" scoped>
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-  .editor-container {
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    margin-right: 20px;
-    overflow: hidden;
-
-    // :deep(.w-e-text-container) {
-    //   min-height: 400px;
-    //   overflow-y: auto;
-    // }
-  }
-  // :deep(.breadcrumb .title) {
-  //   margin-left: 0;
-  // }
-
-  // .main {
-  //   display: flex;
-  //   flex-direction: column;
-  //   padding: 20px;
-  //   flex: 1;
-  //   overflow: hidden;
-  //   background-color: #fff;
-  // }
-  // .button-content {
-  //   margin-bottom: 20px;
-  // }
-
-  // .page-content {
-  //   display: flex;
-  //   justify-content: flex-end;
-  // }
-  // // :deep(.el-form) {
-  // //   flex: 1;
-  // //   overflow: hidden;
-  // //   overflow-y: auto;
-  // // }
-</style>

+ 0 - 291
src/views/production-safety/implement-safety-duty/risk-manage/list.vue

@@ -1,291 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title"> 风险清单管理 </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <div class="search-form">
-        <el-form :inline="true">
-          <el-form-item label="搜索">
-            <el-input
-              v-model="queryParams.queryParam.mergeFiled"
-              placeholder="搜索楼号/楼宇/楼层/房间"
-              style="width: 170px"
-            />
-          </el-form-item>
-          <el-form-item label="状态">
-            <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
-              <el-option :value="1" label="正常" />
-              <el-option :value="2" label="待确认" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="部门名称">
-            <el-cascader
-              v-model="queryParams.queryParam.responsibleDepartmentId"
-              style="width: 170px"
-              ref="cascaderRef"
-              :options="firstLevelDepts"
-              :props="cascaderProp"
-              :show-all-levels="false"
-              placeholder="部门名称"
-              filterable
-              @change="handleChangeDept"
-            />
-          </el-form-item>
-          <el-form-item label="风险类型">
-            <el-select
-              v-model="queryParams.queryParam.riskCategory"
-              clearable
-              placeholder="风险类型"
-              style="width: 170px"
-            >
-              <el-option :value="1" label="III级危险点" />
-              <el-option :value="2" label="II级危险点" />
-              <el-option :value="3" label="I级危险点" />
-              <el-option :value="4" label="UPS" />
-              <el-option :value="5" label="电力设施(强电)" />
-              <el-option :value="6" label="高低温气体液体、高压气体" />
-              <el-option :value="7" label="试验设施设备" />
-              <el-option :value="8" label="特种设备" />
-              <el-option :value="9" label="危化品、易燃易爆固液气体" />
-              <el-option :value="10" label="有限空间" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="风险级别">
-            <el-select v-model="queryParams.queryParam.riskLevel" clearable placeholder="风险类型" style="width: 170px">
-              <el-option :value="1" label="B" />
-              <el-option :value="2" label="C" />
-            </el-select>
-          </el-form-item>
-        </el-form>
-
-        <div>
-          <el-button type="primary" @click="$router.push({ name: 'riskManageAdd' })">添加 </el-button>
-          <el-button type="primary" @click="queryTableList">查询</el-button>
-          <el-button @click="handleRestParams">重置</el-button>
-        </div>
-      </div>
-
-      <div class="table-content">
-        <el-table :data="tableData.data">
-          <el-table-column type="index" label="序号" width="80" />
-          <el-table-column label="楼号/区域" prop="buildingArea" width="180" />
-          <el-table-column label="楼宇名称" prop="buildingName" width="180" />
-          <el-table-column label="楼层/位置" prop="floorLocation" width="180" />
-          <el-table-column label="房间号(名称)" prop="roomName" width="180" />
-          <el-table-column label="安全责任人" prop="roomSafetyResponsibleName" width="180" />
-          <el-table-column label="是否存在风险点" prop="hasRiskPointName" width="180" />
-          <el-table-column label="风险点类别" prop="riskCategoryName" width="180" />
-          <el-table-column label="变更原因" prop="changeReason" width="170" />
-          <el-table-column label="状态" prop="statusName" width="100" />
-          <el-table-column fixed="right" min-width="240" label="操作">
-            <template #default="scope">
-              <el-button
-                type="primary"
-                link
-                @click="$router.push({ name: 'riskManageEdit', query: { id: scope.row.id } })"
-                >编辑</el-button
-              >
-              <el-button type="primary" link @click="handleConfirmDeleteRow(scope)">删除</el-button>
-              <el-button type="primary" link>查看</el-button>
-              <el-button
-                type="primary"
-                link
-                @click="$router.push({ name: 'riskManageChange', query: { id: scope.row.id } })"
-                >变更</el-button
-              >
-              <el-button type="primary" link @click="handleApprove(scope, 1)">确认</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">拒绝</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">撤回</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <div class="pagination-container" v-if="tableData.total > 0">
-        <el-pagination
-          background
-          :current-page="queryParams.pageNumber"
-          :page-size="queryParams.pageSize"
-          :total="tableData.total"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
-      </div>
-    </main>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { onMounted, reactive, ref } from 'vue';
-  import dayjs from 'dayjs';
-  import { ElMessage } from 'element-plus';
-  import { useRouter } from 'vue-router';
-  import {
-    safetyRiskListQueryPage,
-    safetyRiskListDelete,
-    safetyRiskListApprove,
-  } from '@/api/production-safety/responsibility-implementation';
-  import { omit } from 'lodash-es';
-  import { useUserInfoHook } from '@/hooks/useUserInfoHook';
-  import { unformatAttachment } from '@/components/UploadFiles/utils';
-  import { downloadFile } from '@/views/disaster/utils';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-  import { getAllDepartments } from '@/api/auth/dept';
-
-  const router = useRouter();
-  const { id } = useUserInfoHook();
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    // emitPath: false,
-    value: 'id',
-    label: 'deptName',
-  };
-  const queryParams = reactive<any>({
-    pageNumber: 1,
-    pageSize: 10,
-    queryParam: {
-      mergeFiled: '',
-      status: '',
-      responsibleDepartment: '',
-      riskCategory: '',
-      riskLevel: '',
-      userId: id,
-      responsibleDepartmentId: [],
-    },
-  });
-  const cascaderRef = ref();
-
-  const tableData = reactive({
-    data: [],
-    total: 0,
-  });
-
-  const handleSizeChange = (value) => {};
-  const handleCurrentChange = (value) => {
-    queryParams.pageNumber = value;
-    queryTableList();
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-  const handleChangeDept = () => {
-    const deptInfo = cascaderRef.value?.getCheckedNodes();
-    if (deptInfo?.[0]) {
-      queryParams.queryParam.responsibleDepartment = deptInfo[0].label;
-    }
-  };
-
-  const handleApprove = (scope, approveType) => {
-    safetyRiskListApprove({
-      id: scope.row.id,
-      approveType,
-    }).then(() => {
-      ElMessage.success('操作成功!');
-      queryTableList();
-    });
-  };
-
-  const handleDownloadLink = (scope) => {
-    const attachment = unformatAttachment(scope.row.attachment);
-    attachment?.forEach((item: any) => {
-      downloadFile(item.fileUrl, item.fileName);
-    });
-  };
-  const handleConfirmDeleteRow = (scope) => {
-    safetyRiskListDelete(scope.row.id).then(() => {
-      ElMessage.success('删除成功!');
-      queryTableList();
-    });
-  };
-
-  const queryTableList = () => {
-    safetyRiskListQueryPage({
-      ...queryParams,
-      queryParam: {
-        ...omit(queryParams.queryParam, 'responsibleDepartmentId'),
-      },
-    }).then((res) => {
-      tableData.data = res.records;
-      tableData.total = res.totalRow;
-    });
-  };
-  const handleRestParams = () => {
-    Object.assign(queryParams, {
-      pageNumber: 1,
-      pageSize: 10,
-      queryParam: {
-        ...queryParams.queryParam,
-        mergeFiled: '',
-        status: '',
-        responsibleDepartment: '',
-        riskCategory: '',
-        riskLevel: '',
-        responsibleDepartmentId: [],
-      },
-    });
-    queryTableList();
-  };
-
-  onMounted(async () => {
-    await getDeptData();
-    queryTableList();
-  });
-</script>
-
-<style lang="scss" scoped>
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-
-  :deep(.el-tabs__header) {
-    margin: 0;
-  }
-  :deep(.el-tabs__item) {
-    font-size: 14px !important;
-  }
-  :deep(.flexContent) {
-    display: flex;
-  }
-  :deep(.breadcrumb .title) {
-    margin-left: 0;
-  }
-
-  :deep(.el-form) {
-    flex: 1;
-    display: flex;
-    row-gap: 15px;
-    flex-wrap: wrap;
-  }
-  :deep(.el-form-item) {
-    margin-bottom: 0;
-  }
-  :deep(main) {
-    display: flex;
-    flex-direction: column;
-  }
-  .search-form {
-    min-width: 800px;
-    display: flex;
-
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20px;
-  }
-
-  .button-content {
-    margin-bottom: 20px;
-  }
-  .table-content {
-    flex: 1;
-    overflow: hidden;
-    overflow-y: auto;
-  }
-  .page-content {
-    display: flex;
-    justify-content: flex-end;
-  }
-</style>

+ 0 - 473
src/views/production-safety/implement-safety-duty/risk-manage/view.vue

@@ -1,473 +0,0 @@
-<template>
-  <div class="safety-platform-container">
-    <header class="safety-platform-container__header">
-      <div class="breadcrumb-title">
-        <BreadcrumbBack />
-        查看风险清单
-      </div>
-    </header>
-    <main class="safety-platform-container__main">
-      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules">
-        <el-form-item label="楼号/区域" prop="buildingArea">
-          <el-input
-            v-model="formValue.buildingArea"
-            size="large"
-            placeholder="例如:A栋、东区"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="楼宇名称" prop="buildingName">
-          <el-input
-            v-model="formValue.buildingName"
-            size="large"
-            placeholder="例如:科研楼、实验中心"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleBuilding">
-          <el-select
-            v-model="formValue.safetyResponsibleBuilding"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-            disabled
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="楼层/位置" prop="floorLocation">
-          <el-input
-            v-model="formValue.floorLocation"
-            size="large"
-            placeholder="例如:3层、地下一层、走廊东侧"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="safetyResponsibleFloor">
-          <el-select
-            v-model="formValue.safetyResponsibleFloor"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-            disabled
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="房间号(名称)" prop="roomName">
-          <el-input
-            v-model="formValue.roomName"
-            size="large"
-            placeholder="例如:301、高压配电室"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="责任部门" prop="responsibleDepartment">
-          <el-cascader
-            style="width: 330px"
-            v-model="formValue.responsibleDepartmentId"
-            size="large"
-            ref="cascaderRef"
-            :options="firstLevelDepts"
-            :props="cascaderProp"
-            :show-all-levels="false"
-            placeholder="请选择责任部门"
-            filterable
-            disabled
-            @change="handleChangeDept('responsibleDepartment')"
-          />
-        </el-form-item>
-        <el-form-item label="安全责任人" prop="roomSafetyResponsible">
-          <el-select
-            v-model="formValue.roomSafetyResponsible"
-            placeholder="请选择"
-            size="large"
-            style="width: 330px"
-            filterable
-            disabled
-          >
-            <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否存在风险点" prop="hasRiskPoint">
-          <el-select
-            v-model="formValue.hasRiskPoint"
-            size="large"
-            placeholder="请选择是否存有风险点"
-            style="width: 330px"
-            disabled
-          >
-            <el-option label="是" :value="1" />
-            <el-option label="否" :value="0" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点类别" prop="riskCategory">
-          <el-select
-            v-model="formValue.riskCategory"
-            size="large"
-            placeholder="请选择风险点类别"
-            style="width: 330px"
-            disabled
-          >
-            <el-option :value="1" label="III级危险点" />
-            <el-option :value="2" label="II级危险点" />
-            <el-option :value="3" label="I级危险点" />
-            <el-option :value="4" label="UPS" />
-            <el-option :value="5" label="电力设施(强电)" />
-            <el-option :value="6" label="高低温气体液体、高压气体" />
-            <el-option :value="7" label="试验设施设备" />
-            <el-option :value="8" label="特种设备" />
-            <el-option :value="9" label="危化品、易燃易爆固液气体" />
-            <el-option :value="10" label="有限空间" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="风险点名称" prop="riskPointName">
-          <el-input
-            v-model="formValue.riskPointName"
-            size="large"
-            placeholder="例如:液氮储罐、高压开关柜"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="风险点编号" prop="riskPointNumber">
-          <el-input
-            v-model="formValue.riskPointNumber"
-            size="large"
-            placeholder="请输入唯一风险点编号"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="风险点规格" prop="riskPointSpec">
-          <el-input
-            v-model="formValue.riskPointSpec"
-            size="large"
-            placeholder="例如:容量500L、电压10kV"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="培训要求" prop="trainingRequirement">
-          <el-input
-            v-model="formValue.trainingRequirement"
-            size="large"
-            placeholder="例如:持证上岗、年度复训"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="安全风险" prop="safetyRisk">
-          <el-input
-            v-model="formValue.safetyRisk"
-            size="large"
-            placeholder="描述该风险点可能引发的安全问题"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="可能造成伤害" prop="possibleHarm">
-          <el-input
-            v-model="formValue.possibleHarm"
-            size="large"
-            placeholder="例如:爆炸、中毒、触电、窒息等"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="主要管控措施" prop="mainControlMeasures">
-          <el-input
-            v-model="formValue.mainControlMeasures"
-            size="large"
-            placeholder="例如:定期巡检、设置警示标识、配备防护装备"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="目前是否存在安全隐患" prop="currentHazard">
-          <el-input
-            v-model="formValue.currentHazard"
-            size="large"
-            placeholder="例如:设备老化、线路裸露、通风不良"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="隐患内容" prop="hazardContent">
-          <el-input
-            v-model="formValue.hazardContent"
-            size="large"
-            placeholder="详细描述当前存在的隐患情况"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="应急预案名称" prop="emergencyPlanName">
-          <el-input
-            v-model="formValue.emergencyPlanName"
-            size="large"
-            placeholder="例如:《危化品泄漏应急处置预案》"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="应急预案编号" prop="emergencyPlanNumber">
-          <el-input
-            v-model="formValue.emergencyPlanNumber"
-            size="large"
-            placeholder="例如:YJYA-2024-001"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="演练计划及实施情况" prop="rectificationPlan">
-          <el-input
-            v-model="formValue.rectificationPlan"
-            size="large"
-            placeholder="例如:每季度演练一次,最近一次于2025年12月完成"
-            style="width: 330px"
-            disabled
-          />
-        </el-form-item>
-        <el-form-item label="风险等级" prop="riskLevel">
-          <el-select
-            v-model="formValue.riskLevel"
-            size="large"
-            placeholder="请选择风险等级"
-            style="width: 330px"
-            disabled
-          >
-            <el-option :value="1" label="高" />
-            <el-option :value="2" label="中" />
-            <el-option :value="3" label="低" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <div style="width: 330px"></div>
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.remarks"
-            size="large"
-            :rows="7"
-            placeholder="可填写其他补充说明"
-            disabled
-          />
-        </el-form-item>
-      </el-form>
-    </main>
-    <footer class="safety-platform-container__footer">
-      <el-button @click="$router.push({ name: 'areaResponsibilities:public' })">返回</el-button>
-    </footer>
-  </div>
-</template>
-<script lang="ts" setup>
-  import { ref, reactive, onMounted, nextTick } from 'vue';
-  import { useRouter, useRoute } from 'vue-router';
-  import { ElMessage } from 'element-plus';
-  import { getAllDepartments } from '@/api/auth/dept';
-  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
-
-  import {
-    queryAvailableUserList,
-    safetyRiskListSaveRiskList,
-    safetyRiskListQueryDetail,
-  } from '@/api/production-safety/responsibility-implementation';
-
-  const router = useRouter();
-  const route = useRoute();
-  const formRef = ref<any>(null);
-  const submiting = ref(false);
-
-  const userOptions = ref<any[]>([]);
-  const firstLevelDepts = ref<any[]>([]);
-  const cascaderProp = {
-    expandTrigger: 'click',
-    checkStrictly: true,
-    value: 'id',
-    label: 'deptName',
-  };
-  const cascaderRef = ref<any>();
-
-  const formValue = reactive({
-    buildingArea: '',
-    buildingName: '',
-    safetyResponsibleBuilding: '',
-    floorLocation: '',
-    safetyResponsibleFloor: '',
-    roomName: '',
-    responsibleDepartment: '',
-    roomSafetyResponsible: '',
-    hasRiskPoint: '',
-    riskCategory: '',
-    riskPointName: '',
-    riskPointNumber: '',
-    riskPointSpec: '',
-    trainingRequirement: '',
-    safetyRisk: '',
-    possibleHarm: '',
-    mainControlMeasures: '',
-    currentHazard: '',
-    hazardContent: '',
-    emergencyPlanName: '',
-    emergencyPlanNumber: '',
-    rectificationPlan: '',
-    riskLevel: '',
-    remarks: '',
-    responsibleDepartmentId: [],
-  });
-
-  const rules = reactive({
-    buildingArea: [{ required: true, message: '请输入楼号', trigger: 'blur' }],
-    buildingName: [{ required: true, message: '请输入楼宇/区域', trigger: 'blur' }],
-    safetyResponsibleBuilding: [{ required: true, message: '请输入楼层/房号', trigger: 'blur' }],
-    floorLocation: [{ required: true, message: '请输入名称/功能', trigger: 'blur' }],
-    safetyResponsibleFloor: [{ required: true, message: '请选择安全责任所/中心', trigger: 'change' }],
-    roomName: [{ required: true, message: '请选择安全责任所/中心负责人', trigger: 'change' }],
-    responsibleDepartment: [{ required: true, message: '请选择安全责任部门', trigger: 'change' }],
-    roomSafetyResponsible: [{ required: true, message: '请输入房间安全责任人', trigger: 'blur' }],
-    hasRiskPoint: [{ required: true, message: '请选择是否有风险点', trigger: 'change' }],
-    riskCategory: [{ required: true, message: '请选择风险类别', trigger: 'change' }],
-    riskPointName: [{ required: true, message: '请输入风险点名称', trigger: 'blur' }],
-    riskPointNumber: [{ required: true, message: '请输入风险点编号', trigger: 'blur' }],
-    riskPointSpec: [{ required: true, message: '请输入风险点规格/参数', trigger: 'blur' }],
-    trainingRequirement: [{ required: true, message: '请输入培训要求', trigger: 'blur' }],
-    safetyRisk: [{ required: true, message: '请输入安全风险描述', trigger: 'blur' }],
-    possibleHarm: [{ required: true, message: '请输入可能造成的伤害', trigger: 'blur' }],
-    mainControlMeasures: [{ required: true, message: '请输入主要控制措施', trigger: 'blur' }],
-    currentHazard: [{ required: true, message: '请选择当前隐患状态', trigger: 'change' }],
-    hazardContent: [{ required: true, message: '请输入隐患内容', trigger: 'blur' }],
-    emergencyPlanName: [{ required: true, message: '请输入应急预案名称', trigger: 'blur' }],
-    emergencyPlanNumber: [{ required: true, message: '请输入应急预案编号', trigger: 'blur' }],
-    rectificationPlan: [{ required: true, message: '请输入整改方案', trigger: 'blur' }],
-    riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
-    remarks: [],
-  });
-
-  const handleChangeDept = (prop) => {
-    const cascader = cascaderRef.value;
-    const deptInfo = cascader?.getCheckedNodes();
-    formValue[prop] = deptInfo[0].label;
-    formRef.value.validateField(prop);
-    nextTick(() => {
-      handleQueryAvailableUserList(deptInfo[0].label, prop);
-    });
-  };
-
-  const getDeptData = () => {
-    getAllDepartments().then((res) => {
-      firstLevelDepts.value = formatDeptTree(res);
-    });
-  };
-
-  const handleQueryAvailableUserList = (deptName, realname = '') => {
-    queryAvailableUserList({
-      pageNumber: 1,
-      pageSize: 200,
-      queryParam: {
-        deptName,
-        realname,
-      },
-    }).then((res: any) => {
-      userOptions.value = (res.records || []).map((u: any) => ({
-        value: u.userId || u.id,
-        label: u.realname,
-      }));
-    });
-  };
-
-  const loadDetailData = (id: number) => {
-    safetyRiskListQueryDetail(id).then((res: any) => {
-      Object.keys(formValue).forEach((key) => {
-        if (res[key] !== undefined) {
-          formValue[key] = res[key];
-          formValue['responsibleDepartmentId'] = res['responsibleDepartmentId']
-            ? res['responsibleDepartmentId'].split(',').map((item: string) => Number(item))
-            : [];
-        }
-      });
-    });
-  };
-
-  // const getUserData = () => {
-  //   getUserList({ pageNumber: 1, pageSize: 200, queryParam: {} }).then((res: any) => {
-  //     userOptions.value = (res.records || []).map((u: any) => ({
-  //       id: u.userId || u.id,
-  //       name: u.realName || u.username,
-  //     }));
-  //   });
-  // };
-
-  onMounted(() => {
-    getDeptData();
-    loadDetailData(Number(route.query.id));
-    handleQueryAvailableUserList('');
-    // getUserData();
-  });
-
-  const handleSubmit = () => {
-    formRef.value?.validate((valid: boolean) => {
-      if (valid) {
-        submiting.value = true;
-        safetyRiskListSaveRiskList({
-          ...formValue,
-        })
-          .then(() => {
-            ElMessage.success('创建成功!');
-            router.push({ name: 'riskManage' });
-          })
-          .finally(() => {
-            submiting.value = false;
-          });
-      }
-    });
-  };
-</script>
-<style lang="scss" scoped>
-  @use '@/styles/page-main-layout.scss' as *;
-  @use '@/styles/page-details-layout.scss' as *;
-  @use '@/styles/basic-table-action.scss' as *;
-  .editor-container {
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    margin-right: 20px;
-    overflow: hidden;
-
-    // :deep(.w-e-text-container) {
-    //   min-height: 400px;
-    //   overflow-y: auto;
-    // }
-  }
-  // :deep(.breadcrumb .title) {
-  //   margin-left: 0;
-  // }
-
-  // .main {
-  //   display: flex;
-  //   flex-direction: column;
-  //   padding: 20px;
-  //   flex: 1;
-  //   overflow: hidden;
-  //   background-color: #fff;
-  // }
-  // .button-content {
-  //   margin-bottom: 20px;
-  // }
-
-  // .page-content {
-  //   display: flex;
-  //   justify-content: flex-end;
-  // }
-  // // :deep(.el-form) {
-  // //   flex: 1;
-  // //   overflow: hidden;
-  // //   overflow-y: auto;
-  // // }
-</style>

+ 441 - 0
src/views/production-safety/risk-identification-and-control/hazard-manage/add.vue

@@ -0,0 +1,441 @@
+<template>
+  <div class="safety-platform-container">
+    <header class="safety-platform-container__header">
+      <div class="breadcrumb-title">
+        <BreadcrumbBack />
+        新增危险源清单
+      </div>
+    </header>
+    <main class="safety-platform-container__main">
+      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules">
+        <!-- 基础信息 -->
+        <el-divider content-position="left">基础信息</el-divider>
+        <el-form-item label="危险源编号" prop="hazardCode">
+          <el-input
+            v-model="formValue.hazardCode"
+            size="large"
+            placeholder="例如:RD-202311-042"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="关键过程/作业单元" prop="keyProcessUnit">
+          <el-input
+            v-model="formValue.keyProcessUnit"
+            size="large"
+            placeholder="例如:张江快堆实验室(10号楼)"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="危险源名称" prop="hazardName">
+          <el-input
+            v-model="formValue.hazardName"
+            size="large"
+            placeholder="例如:高温熔融金属操作"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="是否重大危险源" prop="isMajorHazard">
+          <el-select v-model="formValue.isMajorHazard" size="large" placeholder="请选择" style="width: 330px">
+            <el-option :value="1" label="是" />
+            <el-option :value="0" label="否" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="危险源来源" prop="hazardSource">
+          <el-input
+            v-model="formValue.hazardSource"
+            size="large"
+            placeholder="例如:作业单元划分"
+            style="width: 330px"
+          />
+        </el-form-item>
+
+        <!-- 部门责任 -->
+        <el-form-item label="涉及部门" prop="involvedDepartment">
+          <el-input
+            v-model="formValue.involvedDepartment"
+            size="large"
+            placeholder="例如:核材料研究部/设备管理部(支持手动输入多部门)"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="风险管理部门" prop="riskManagementDept">
+          <el-cascader
+            v-model="formValue.riskManagementDeptId"
+            size="large"
+            style="width: 330px"
+            :options="firstLevelDepts"
+            :props="cascaderProp"
+            :show-all-levels="false"
+            placeholder="请选择"
+            filterable
+            @change="handleDeptChange('riskManagementDept')"
+          />
+        </el-form-item>
+        <el-form-item label="协作部门" prop="cooperationDept">
+          <el-cascader
+            v-model="formValue.cooperationDeptId"
+            size="large"
+            style="width: 330px"
+            :options="firstLevelDepts"
+            :props="cascaderProp"
+            :show-all-levels="false"
+            placeholder="请选择"
+            filterable
+            @change="handleDeptChange('cooperationDept')"
+          />
+        </el-form-item>
+
+        <!-- 风险评估 -->
+        <el-form-item label="可能后果" prop="possibleConsequences">
+          <el-input
+            v-model="formValue.possibleConsequences"
+            size="large"
+            placeholder="例如:灼伤、火灾"
+            style="width: 330px"
+          />
+        </el-form-item>
+
+        <el-divider content-position="left">固有风险评估</el-divider>
+        <el-form-item label="可能性(M)" prop="inherentRiskM">
+          <el-select v-model="formValue.inherentRiskM" size="large" placeholder="1-5" style="width: 330px">
+            <el-option v-for="n in 5" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="暴露频率(E)" prop="inherentRiskE">
+          <el-select v-model="formValue.inherentRiskE" size="large" placeholder="1-6" style="width: 330px">
+            <el-option v-for="n in 6" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="严重度(S)" prop="inherentRiskS">
+          <el-select v-model="formValue.inherentRiskS" size="large" placeholder="1-5" style="width: 330px">
+            <el-option v-for="n in 5" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="风险值(R)" prop="inherentRiskR">
+          <el-input
+            v-model="formValue.inherentRiskR"
+            size="large"
+            disabled
+            placeholder="自动计算: M×E×S"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="风险等级" prop="inherentRiskLevel">
+          <el-select v-model="formValue.inherentRiskLevel" size="large" placeholder="请选择" style="width: 330px">
+            <el-option label="A" value="A" />
+            <el-option label="B" value="B" />
+            <el-option label="C" value="C" />
+            <el-option label="D" value="D" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="升级等级" prop="inherentRiskUpgrade">
+          <el-input v-model="formValue.inherentRiskUpgrade" size="large" placeholder="例如:2级" style="width: 330px" />
+        </el-form-item>
+
+        <!-- 管控措施 -->
+        <el-divider content-position="left">管控措施</el-divider>
+        <el-form-item label="主要管控措施" prop="controlMeasures">
+          <el-input
+            type="textarea"
+            :rows="3"
+            v-model="formValue.controlMeasures"
+            size="large"
+            placeholder="每条措施用分号分隔,例如:1.穿戴防护服;2.设置隔离区;3.定期检查冷却系统"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="主责部门" prop="controlMainDept">
+          <el-cascader
+            v-model="formValue.controlMainDeptId"
+            size="large"
+            style="width: 330px"
+            :options="firstLevelDepts"
+            :props="cascaderProp"
+            :show-all-levels="false"
+            placeholder="请选择"
+            filterable
+            @change="handleDeptChange('controlMainDept')"
+          />
+        </el-form-item>
+        <el-form-item label="协作部门" prop="controlCoopDept">
+          <el-cascader
+            v-model="formValue.controlCoopDeptId"
+            size="large"
+            style="width: 330px"
+            :options="firstLevelDepts"
+            :props="cascaderProp"
+            :show-all-levels="false"
+            placeholder="请选择"
+            filterable
+            @change="handleDeptChange('controlCoopDept')"
+          />
+        </el-form-item>
+        <el-form-item label="完成期限" prop="completionDeadline">
+          <el-date-picker
+            v-model="formValue.completionDeadline"
+            type="date"
+            size="large"
+            placeholder="选择日期"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="完成状态" prop="completionStatus">
+          <el-input
+            v-model="formValue.completionStatus"
+            size="large"
+            placeholder="例如:措施1,2已完成"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="验证状态" prop="verificationStatus">
+          <el-input
+            v-model="formValue.verificationStatus"
+            size="large"
+            placeholder="例如:措施1已验证"
+            style="width: 330px"
+          />
+        </el-form-item>
+
+        <!-- 剩余风险 -->
+        <el-divider content-position="left">剩余风险评估</el-divider>
+        <el-form-item label="可能性(M)" prop="controlRiskM">
+          <el-select v-model="formValue.controlRiskM" size="large" placeholder="1-5" style="width: 330px">
+            <el-option v-for="n in 5" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="暴露频率(E)" prop="controlRiskE">
+          <el-select v-model="formValue.controlRiskE" size="large" placeholder="1-6" style="width: 330px">
+            <el-option v-for="n in 6" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="严重度(S)" prop="controlRiskS">
+          <el-select v-model="formValue.controlRiskS" size="large" placeholder="1-5" style="width: 330px">
+            <el-option v-for="n in 5" :key="n" :label="n" :value="n" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="风险值(R)" prop="controlRiskR">
+          <el-input
+            v-model="formValue.controlRiskR"
+            size="large"
+            disabled
+            placeholder="自动计算: M×E×S"
+            style="width: 330px"
+          />
+        </el-form-item>
+        <el-form-item label="风险等级" prop="controlRiskLevel">
+          <el-select v-model="formValue.controlRiskLevel" size="large" placeholder="请选择" style="width: 330px">
+            <el-option label="A" value="A" />
+            <el-option label="B" value="B" />
+            <el-option label="C" value="C" />
+            <el-option label="D" value="D" />
+          </el-select>
+        </el-form-item>
+
+        <!-- 备注 -->
+        <el-form-item label="备注" prop="remarks" style="width: 87.2%">
+          <el-input
+            type="textarea"
+            v-model="formValue.remarks"
+            size="large"
+            :rows="3"
+            placeholder="例如:需每月提交检查报告"
+          />
+        </el-form-item>
+      </el-form>
+    </main>
+    <footer class="safety-platform-container__footer">
+      <el-button @click="$router.push({ name: 'areaResponsibilities:public' })">返回</el-button>
+      <el-button type="primary" :loading="submiting" @click="handleSubmit">提交</el-button>
+    </footer>
+  </div>
+</template>
+<script lang="ts" setup>
+  import { ref, reactive, onMounted, nextTick } from 'vue';
+  import { useRouter } from 'vue-router';
+  import { ElMessage } from 'element-plus';
+  import { getAllDepartments } from '@/api/auth/dept';
+  import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
+
+  import {
+    queryAvailableUserList,
+    safetyRiskListSaveRiskList,
+  } from '@/api/production-safety/responsibility-implementation';
+
+  const router = useRouter();
+  const formRef = ref<any>(null);
+  const submiting = ref(false);
+
+  const userOptions = ref<any[]>([]);
+  const firstLevelDepts = ref<any[]>([]);
+  const cascaderProp = {
+    expandTrigger: 'click',
+    checkStrictly: true,
+    value: 'id',
+    label: 'deptName',
+  };
+  const cascaderRef = ref<any>();
+
+  const formValue = reactive({
+    hazardCode: '',
+    keyProcessUnit: '',
+    hazardName: '',
+    isMajorHazard: undefined as number | undefined,
+    hazardSource: '',
+    involvedDepartment: '',
+    riskManagementDept: '',
+    riskManagementDeptId: [] as number[],
+    cooperationDept: '',
+    cooperationDeptId: [] as number[],
+    possibleConsequences: '',
+    inherentRiskM: undefined as number | undefined,
+    inherentRiskE: undefined as number | undefined,
+    inherentRiskS: undefined as number | undefined,
+    inherentRiskR: 0, // 自动计算
+    inherentRiskLevel: '',
+    inherentRiskUpgrade: '',
+    controlMeasures: '',
+    controlMainDept: '',
+    controlMainDeptId: [] as number[],
+    controlCoopDept: '',
+    controlCoopDeptId: [] as number[],
+    completionDeadline: '',
+    completionStatus: '',
+    verificationStatus: '',
+    controlRiskM: undefined as number | undefined,
+    controlRiskE: undefined as number | undefined,
+    controlRiskS: undefined as number | undefined,
+    controlRiskR: 0,
+    controlRiskLevel: '',
+    remarks: '',
+  });
+
+  const rules = reactive({
+    hazardCode: [{ required: true, message: '请输入危险源编号', trigger: 'blur' }],
+    keyProcessUnit: [{ required: true, message: '请输入关键工艺单元', trigger: 'blur' }],
+    hazardName: [{ required: true, message: '请输入危险源名称', trigger: 'blur' }],
+    isMajorHazard: [{ required: true, message: '请选择是否重大危险源', trigger: 'change' }],
+    hazardSource: [{ required: true, message: '请输入危险源来源', trigger: 'blur' }],
+    involvedDepartment: [{ required: true, message: '请输入涉及部门', trigger: 'blur' }],
+    riskManagementDept: [{ required: true, message: '请选择风险管理部门', trigger: 'change' }],
+    cooperationDept: [{ required: true, message: '请选择协作部门', trigger: 'change' }],
+    possibleConsequences: [{ required: true, message: '请输入可能后果', trigger: 'blur' }],
+    inherentRiskM: [{ required: true, message: '请选择可能性', trigger: 'change' }],
+    inherentRiskE: [{ required: true, message: '请选择暴露频率', trigger: 'change' }],
+    inherentRiskS: [{ required: true, message: '请选择严重度', trigger: 'change' }],
+    inherentRiskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
+    controlMeasures: [{ required: true, message: '请输入管控措施', trigger: 'blur' }],
+    controlMainDept: [{ required: true, message: '请选择主责部门', trigger: 'change' }],
+    controlRiskM: [{ required: true, message: '请选择剩余风险可能性', trigger: 'change' }],
+    controlRiskE: [{ required: true, message: '请选择剩余风险暴露频率', trigger: 'change' }],
+    controlRiskS: [{ required: true, message: '请选择剩余风险严重度', trigger: 'change' }],
+    controlRiskLevel: [{ required: true, message: '请选择剩余风险等级', trigger: 'change' }],
+  });
+
+  const handleChangeDept = (prop) => {
+    const cascader = cascaderRef.value;
+    const deptInfo = cascader?.getCheckedNodes();
+    formValue[prop] = deptInfo[0].label;
+    formRef.value.validateField(prop);
+    nextTick(() => {
+      handleQueryAvailableUserList(deptInfo[0].label, prop);
+    });
+  };
+
+  const getDeptData = () => {
+    getAllDepartments().then((res) => {
+      firstLevelDepts.value = formatDeptTree(res);
+    });
+  };
+
+  const handleQueryAvailableUserList = (deptName, realname = '') => {
+    queryAvailableUserList({
+      pageNumber: 1,
+      pageSize: 200,
+      queryParam: {
+        deptName,
+        realname,
+      },
+    }).then((res: any) => {
+      userOptions.value = (res.records || []).map((u: any) => ({
+        value: u.userId || u.id,
+        label: u.realname,
+      }));
+    });
+  };
+
+  // const getUserData = () => {
+  //   getUserList({ pageNumber: 1, pageSize: 200, queryParam: {} }).then((res: any) => {
+  //     userOptions.value = (res.records || []).map((u: any) => ({
+  //       id: u.userId || u.id,
+  //       name: u.realName || u.username,
+  //     }));
+  //   });
+  // };
+
+  onMounted(() => {
+    getDeptData();
+    handleQueryAvailableUserList('');
+    // getUserData();
+  });
+
+  const handleSubmit = () => {
+    formRef.value?.validate((valid: boolean) => {
+      if (valid) {
+        submiting.value = true;
+        safetyRiskListSaveRiskList({
+          ...formValue,
+        })
+          .then(() => {
+            ElMessage.success('创建成功!');
+            router.push({ name: 'riskManage' });
+          })
+          .finally(() => {
+            submiting.value = false;
+          });
+      }
+    });
+  };
+</script>
+<style lang="scss" scoped>
+  @use '@/styles/page-main-layout.scss' as *;
+  @use '@/styles/page-details-layout.scss' as *;
+  @use '@/styles/basic-table-action.scss' as *;
+  .editor-container {
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    margin-right: 20px;
+    overflow: hidden;
+
+    // :deep(.w-e-text-container) {
+    //   min-height: 400px;
+    //   overflow-y: auto;
+    // }
+  }
+  // :deep(.breadcrumb .title) {
+  //   margin-left: 0;
+  // }
+
+  // .main {
+  //   display: flex;
+  //   flex-direction: column;
+  //   padding: 20px;
+  //   flex: 1;
+  //   overflow: hidden;
+  //   background-color: #fff;
+  // }
+  // .button-content {
+  //   margin-bottom: 20px;
+  // }
+
+  // .page-content {
+  //   display: flex;
+  //   justify-content: flex-end;
+  // }
+  // // :deep(.el-form) {
+  // //   flex: 1;
+  // //   overflow: hidden;
+  // //   overflow-y: auto;
+  // // }
+</style>

+ 1 - 0
src/views/production-safety/risk-identification-and-control/hazard-manage/create-plan.vue

@@ -0,0 +1 @@
+<template>list</template>

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

@@ -0,0 +1 @@
+<template>sdfsdf</template>

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

@@ -8,13 +8,14 @@
         <el-form :inline="true">
           <el-form-item label="搜索">
             <el-input
-              v-model="queryParams.queryParam.mergeFiled"
-              placeholder="搜索楼号/楼宇/楼层/房间"
+              v-model="queryParams.queryParam.keyProcessUnit"
+              placeholder="搜索关键过程/作业单元"
               style="width: 170px"
             />
           </el-form-item>
           <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
+              <el-option value="" label="全部" />
               <el-option :value="1" label="正常" />
               <el-option :value="2" label="待确认" />
             </el-select>
@@ -32,35 +33,32 @@
               @change="handleChangeDept"
             />
           </el-form-item>
-          <el-form-item label="风险类型">
+
+          <el-form-item label="固有风险等级">
             <el-select
-              v-model="queryParams.queryParam.riskCategory"
+              v-model="queryParams.queryParam.inherentRiskLevel"
               clearable
-              placeholder="风险类型"
+              placeholder="固有风险等级"
               style="width: 170px"
             >
-              <el-option :value="1" label="III级危险点" />
-              <el-option :value="2" label="II级危险点" />
-              <el-option :value="3" label="I级危险点" />
-              <el-option :value="4" label="UPS" />
-              <el-option :value="5" label="电力设施(强电)" />
-              <el-option :value="6" label="高低温气体液体、高压气体" />
-              <el-option :value="7" label="试验设施设备" />
-              <el-option :value="8" label="特种设备" />
-              <el-option :value="9" label="危化品、易燃易爆固液气体" />
-              <el-option :value="10" label="有限空间" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="风险级别">
-            <el-select v-model="queryParams.queryParam.riskLevel" clearable placeholder="风险类型" style="width: 170px">
               <el-option :value="1" label="B" />
               <el-option :value="2" label="C" />
             </el-select>
           </el-form-item>
+          <el-form-item label="控制风险等级">
+            <el-select
+              v-model="queryParams.queryParam.controlRiskLevel"
+              clearable
+              placeholder="控制风险等级"
+              style="width: 170px"
+            >
+              <el-option value="D" label="D" />
+            </el-select>
+          </el-form-item>
         </el-form>
 
         <div>
-          <el-button type="primary" @click="$router.push({ name: 'riskManageAdd' })">添加 </el-button>
+          <el-button type="primary" @click="$router.push({ name: 'hazardManageAdd' })">添加 </el-button>
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -83,20 +81,23 @@
               <el-button
                 type="primary"
                 link
-                @click="$router.push({ name: 'riskManageEdit', query: { id: scope.row.id } })"
+                @click="$router.push({ name: 'hazardManageEdit', query: { id: scope.row.id } })"
                 >编辑</el-button
               >
+
               <el-button type="primary" link @click="handleConfirmDeleteRow(scope)">删除</el-button>
-              <el-button type="primary" link>查看</el-button>
               <el-button
                 type="primary"
                 link
-                @click="$router.push({ name: 'riskManageChange', query: { id: scope.row.id } })"
-                >变更</el-button
+                @click="$router.push({ name: 'hazardManageView', query: { id: scope.row.id } })"
+                >查看</el-button
+              >
+              <el-button
+                type="primary"
+                link
+                @click="$router.push({ name: 'hazardManageCreatePlan', query: { id: scope.row.id } })"
+                >创建计划和方案</el-button
               >
-              <el-button type="primary" link @click="handleApprove(scope, 1)">确认</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">拒绝</el-button>
-              <el-button type="primary" link @click="handleApprove(scope, 0)">撤回</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -120,8 +121,8 @@
   import { ElMessage } from 'element-plus';
   import { useRouter } from 'vue-router';
   import {
-    safetyRiskListQueryPage,
-    safetyRiskListDelete,
+    safetyHazardInventoryQueryPage,
+    safetyHazardInventoryDelete,
     safetyRiskListApprove,
   } from '@/api/production-safety/responsibility-implementation';
   import { omit } from 'lodash-es';
@@ -145,11 +146,11 @@
     pageNumber: 1,
     pageSize: 10,
     queryParam: {
-      mergeFiled: '',
+      keyProcessUnit: '',
       status: '',
-      responsibleDepartment: '',
-      riskCategory: '',
-      riskLevel: '',
+      inherentRiskLevel: '',
+      controlRiskLevel: '',
+      riskManagementDept: '',
       userId: id,
       responsibleDepartmentId: [],
     },
@@ -196,14 +197,14 @@
     });
   };
   const handleConfirmDeleteRow = (scope) => {
-    safetyRiskListDelete(scope.row.id).then(() => {
+    safetyHazardInventoryDelete(scope.row.id).then(() => {
       ElMessage.success('删除成功!');
       queryTableList();
     });
   };
 
   const queryTableList = () => {
-    safetyRiskListQueryPage({
+    safetyHazardInventoryQueryPage({
       ...queryParams,
       queryParam: {
         ...omit(queryParams.queryParam, 'responsibleDepartmentId'),
@@ -219,11 +220,12 @@
       pageSize: 10,
       queryParam: {
         ...queryParams.queryParam,
-        mergeFiled: '',
+        keyProcessUnit: '',
         status: '',
-        responsibleDepartment: '',
-        riskCategory: '',
-        riskLevel: '',
+        inherentRiskLevel: '',
+        controlRiskLevel: '',
+        riskManagementDept: '',
+        userId: id,
         responsibleDepartmentId: [],
       },
     });

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

@@ -0,0 +1 @@
+<template>sfsdf</template>

+ 1 - 1
tsconfig.json

@@ -44,7 +44,7 @@
     "types/**/*.d.ts",
     "types/**/*.ts",
     "utils/**/*.ts"
-  ],
+, "src/router/routers/production-safety-router"  ],
   "references": [
     {
       "path": "./tsconfig.node.json"