dedsudiyu 7 hónapja
szülő
commit
9a585f9c27
100 módosított fájl, 20079 hozzáadás és 591 törlés
  1. 1 1
      src/api/commonality/noPermission.js
  2. 32 1
      src/api/commonality/permission.js
  3. 49 0
      src/api/integratedManagement/index.js
  4. 653 0
      src/api/safetyCheck/indexDemoOne.js
  5. 1 0
      src/api/safetyCheck/indexDemoTwo.js
  6. BIN
      src/assets/ZDimages/basicsModules/icon_fcrzy_wxz@1x.png
  7. BIN
      src/assets/ZDimages/basicsModules/icon_fcrzy_xz@1x.png
  8. BIN
      src/assets/ZDimages/safetyCheck/icom_xjjc_jcjc@1x.png
  9. BIN
      src/assets/ZDimages/safetyCheck/icon_aqjc_xx@1x.png
  10. BIN
      src/assets/ZDimages/safetyCheck/icon_jcjh_xy@1x.png
  11. BIN
      src/assets/ZDimages/safetyCheck/icon_jcsz_gb@1x.png
  12. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_jcxms@1x.png
  13. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_sjtj@1x.png
  14. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_ssp@1x.png
  15. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_xfzgtzs@1x.png
  16. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_xyxc@1x.png
  17. BIN
      src/assets/ZDimages/securityCheck/icon_gzzl_zgtz@1x.png
  18. BIN
      src/assets/ZDimages/securityCheck/icon_sjtj_ss@1x.png
  19. BIN
      src/assets/ZDimages/securityCheck/icon_wzgyh_sjsys@1x.png
  20. BIN
      src/assets/ZDimages/securityCheck/icon_yhfb_wxz@1x.png
  21. BIN
      src/assets/ZDimages/securityCheck/icon_yhfb_xz@1x.png
  22. BIN
      src/assets/ZDimages/securityCheck/icon_yhtj_wxz@1x.png
  23. BIN
      src/assets/ZDimages/securityCheck/icon_yhtj_zc@1x.png
  24. BIN
      src/assets/ZDimages/securityCheck/icon_yzgyh_dn@1x.png
  25. BIN
      src/assets/ZDimages/securityCheck/icon_yzgyh_dy@1x.png
  26. BIN
      src/assets/ZDimages/securityCheck/icon_yzgyh_dz@1x.png
  27. BIN
      src/assets/ZDimages/securityCheck/icon_yzgyh_gj@1x.png
  28. BIN
      src/assets/ZDimages/securityCheck/icon_yzgyh_sy@1x.png
  29. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_7.png
  30. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_8.png
  31. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_9.png
  32. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_scdzqm_sl.png
  33. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_wtzg_jcjlxl.png
  34. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_btg.png
  35. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_fh.png
  36. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_wwc.png
  37. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_ywc.png
  38. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_yzg.png
  39. 0 0
      src/assets/ZDimages/securityCheckDemo/icon_zg_zgwwc.png
  40. 31 0
      src/assets/styles/button.scss
  41. 16 0
      src/assets/styles/commonality.scss
  42. 261 0
      src/components/audioPlayer/audioPlayer.vue
  43. 29 12
      src/components/exportComponent/exportComponent.vue
  44. 4 3
      src/components/lookDocumentDialog/components/noticeDom.vue
  45. 2 1
      src/main.js
  46. 3 0
      src/store/modules/permission.js
  47. 11 0
      src/utils/ruoyi.js
  48. 19 2
      src/views/chemicalManage/earlyWarningEvent/infoPage.vue
  49. 1 1
      src/views/chemicalManage/inventoryManagement/inventoryStatistics/inventoryList.vue
  50. 1 1
      src/views/chemicalManage/inventoryManagement/takeStockRecord/index.vue
  51. 355 48
      src/views/demo.vue
  52. 430 0
      src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/addSafetyInfoConfig.vue
  53. 2 2
      src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/safetyInfoCategory.vue
  54. 137 230
      src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/safetyInfoConfig.vue
  55. 467 158
      src/views/integratedManagement/laboratoryManagement/subject/addSubject.vue
  56. 12 5
      src/views/integratedManagement/laboratoryManagement/subject/index.vue
  57. 1 35
      src/views/integratedManagement/laboratoryManagement/subject/infoPage.vue
  58. 18 3
      src/views/integratedManagement/messageNotice/warningNotice/infoPage.vue
  59. 1 1
      src/views/iotDevice/monitoringWarning/receiver/index.vue
  60. 503 0
      src/views/safetyCheck/collegeInspect/hiddenDangersReview/index.vue
  61. 540 0
      src/views/safetyCheck/collegeInspect/selfInspectionManage/index.vue
  62. 316 0
      src/views/safetyCheck/collegeInspect/selfInspectionProject/index.vue
  63. 165 0
      src/views/safetyCheck/collegeWorktable/coverageRateEcharts.vue
  64. 155 0
      src/views/safetyCheck/collegeWorktable/dataScreening.vue
  65. 155 0
      src/views/safetyCheck/collegeWorktable/dataScreeningChart.vue
  66. 108 0
      src/views/safetyCheck/collegeWorktable/hiddenDangerStatisticsEcharts.vue
  67. 396 0
      src/views/safetyCheck/collegeWorktable/index.vue
  68. 264 0
      src/views/safetyCheck/collegeWorktable/inspectionStatisticsEcharts.vue
  69. 142 0
      src/views/safetyCheck/collegeWorktable/rectificationFinish.vue
  70. 423 0
      src/views/safetyCheck/components/checkItem.vue
  71. 225 0
      src/views/safetyCheck/components/initiateInspect/historyRecordsComponent.vue
  72. 1035 0
      src/views/safetyCheck/components/initiateInspect/initiateInspect.vue
  73. 327 0
      src/views/safetyCheck/components/initiateInspect/recheckComponent.vue
  74. 449 0
      src/views/safetyCheck/components/initiateInspect/rectificationComponent.vue
  75. 405 0
      src/views/safetyCheck/components/inspectStatistics.vue
  76. 823 0
      src/views/safetyCheck/components/inspectionItemsStatistics.vue
  77. 422 0
      src/views/safetyCheck/components/noticeDom.vue
  78. 1228 0
      src/views/safetyCheck/components/projectAddPage.vue
  79. 360 0
      src/views/safetyCheck/components/rectificationReportDom.vue
  80. 829 0
      src/views/safetyCheck/components/snapshotInfo.vue
  81. 563 0
      src/views/safetyCheck/components/subDialog.vue
  82. 687 0
      src/views/safetyCheck/dataStatistics/hiddenDangerStatistics.vue
  83. 340 87
      src/views/safetyCheck/dataStatistics/index.vue
  84. 289 0
      src/views/safetyCheck/inspectJob/index.vue
  85. 203 0
      src/views/safetyCheck/inspectProject/inspectProjectAccording/addPage.vue
  86. 242 0
      src/views/safetyCheck/inspectProject/inspectProjectAccording/index.vue
  87. 700 0
      src/views/safetyCheck/inspectProject/inspectProjectAccording/itemCheckComponent.vue
  88. 755 0
      src/views/safetyCheck/inspectProject/inspectProjectTable/index.vue
  89. 290 0
      src/views/safetyCheck/inspectReport/index.vue
  90. 340 0
      src/views/safetyCheck/inspectSupervisorGroup/addPage.vue
  91. 264 0
      src/views/safetyCheck/inspectSupervisorGroup/index.vue
  92. 457 0
      src/views/safetyCheck/inspectSupervisorGroup/userCheckComponent.vue
  93. 471 0
      src/views/safetyCheck/safetyHazard/inspectHazard/index.vue
  94. 426 0
      src/views/safetyCheck/safetyHazard/rectificationNotice/index.vue
  95. 386 0
      src/views/safetyCheck/safetyHazard/rectificationNotice/listPage.vue
  96. 406 0
      src/views/safetyCheck/safetyHazard/rectificationReport/index.vue
  97. 471 0
      src/views/safetyCheck/safetyHazard/selfInspectionHazard/index.vue
  98. 419 0
      src/views/safetyCheck/safetyHazard/snapshotHazard/index.vue
  99. 563 0
      src/views/safetyCheck/schoolInspect/inspectManage/index.vue
  100. 0 0
      src/views/safetyCheck/schoolInspect/inspectProject/index.vue

+ 1 - 1
src/api/commonality/noPermission.js

@@ -188,7 +188,7 @@ export function laboratorySubRelInfoList(data) {
     data: data
   })
 }
-//根据学院id查询实验室下拉列表
+//根据学院id/实验室名称查询实验室下拉列表
 export function laboratorySubRelInfoGetRelList(data) {
   return request({
     url: '/laboratory/subRelInfo/getRelList',

+ 32 - 1
src/api/commonality/permission.js

@@ -637,5 +637,36 @@ export function systemUserEditUser(data) {
     data: data
   })
 }
-
+//实验室危险源类型下拉列表
+export function laboratorySubRelInfoGetHazardTypeList(query) {
+  return request({
+    url: '/laboratory/subRelInfo/getHazardTypeList',
+    method: 'get',
+    params: query
+  })
+}
+// 根据当前登录人获取校级及以下 或 当前与院级下拉列表(如果是校级会获取当前校级和校级下院级下拉列表/如果是院级则获取当前院级下拉列表)
+export function systemDeptGetLoginUserByDeptList(data) {
+  return request({
+    url: '/system/dept/getLoginUserByDeptList',
+    method: 'post',
+    data: data
+  })
+}
+// 分类下拉列表
+export function laboratoryTypeConfigGetList(data) {
+  return request({
+    url: '/laboratory/typeConfig/getList',
+    method: 'post',
+    data: data
+  })
+}
+// 分级下拉列表
+export function laboratoryLevelConfigGetLevelTitleList(data) {
+  return request({
+    url: '/laboratory/levelConfig/getLevelTitleList',
+    method: 'post',
+    data: data
+  })
+}
 

+ 49 - 0
src/api/integratedManagement/index.js

@@ -359,6 +359,14 @@ export function laboratorySubRelInfoGetDetailDelete(data) {
     data: data
   })
 }
+//实验室-门禁开启/关闭
+export function laboratorySubRelInfoUpdateByControl(data) {
+  return request({
+    url: '/laboratory/subRelInfo/updateByControl',
+    method: 'post',
+    data: data
+  })
+}
 //实验室-排序修改
 export function laboratorySubRelInfoUpdateBySort(data) {
   return request({
@@ -391,6 +399,31 @@ export function laboratoryUserAuthAuthTypeList(query) {
     params: query
   })
 }
+//分级配置-列表
+export function laboratoryLevelConfigGetList(data) {
+  return request({
+    url: '/laboratory/levelConfig/getList',
+    method: 'post',
+    data: data
+  })
+}
+//分类配置-计算
+export function laboratoryLevelConfigGetCalculateByData(data) {
+  return request({
+    url: '/laboratory/levelConfig/getCalculateByData',
+    method: 'post',
+    data: data
+  })
+}
+//分类配置-列表
+export function laboratoryTypeConfigGetList(data) {
+  return request({
+    url: '/laboratory/typeConfig/getList',
+    method: 'post',
+    data: data
+  })
+}
+
 
 
 /******************* 安全信息类目 *********************/
@@ -467,6 +500,22 @@ export function laboratoryInfoBrandGetClassifyBySubId(query) {
     params: query
   })
 }
+//安全信息配置-详情
+export function laboratoryBrandDetailDetail(query) {
+  return request({
+    url: '/laboratory/brandDetail/detail',
+    method: 'get',
+    params: query
+  })
+}
+// 安全信息类目-信息配置-危险源列表
+export function laboratoryBrandDetailGetDetailHazardConfig(query) {
+  return request({
+    url: '/laboratory/brandDetail/getDetailHazardConfig',
+    method: 'get',
+    params: query
+  })
+}
 /******************* 布局管理 *********************/
 
 //根据楼层获取房间列表

+ 653 - 0
src/api/safetyCheck/indexDemoOne.js

@@ -0,0 +1,653 @@
+import request from '@/utils/request'
+
+/**************************** 检查项相关 ****************************/
+//检查项目表-列表
+export function securityCheckOptionList(data) {
+  return request({
+    url: '/security/checkOption/list',
+    method: 'post',
+    data: data
+  })
+}
+//检查项目表-修改
+export function securityCheckOptionUpdate(data) {
+  return request({
+    url: '/security/checkOption/update',
+    method: 'post',
+    data: data
+  })
+}
+//检查项目表-新增
+export function securityCheckOptionAdd(data) {
+  return request({
+    url: '/security/checkOption/add',
+    method: 'post',
+    data: data
+  })
+}
+//检查项目表-删除
+export function securityCheckOptionDelete(data) {
+  return request({
+    url: '/security/checkOption/delete',
+    method: 'post',
+    data: data
+  })
+}
+//检查项目表-批量删除
+export function securityCheckOptionBatchDelete(data) {
+  return request({
+    url: '/security/checkOption/batchDelete',
+    method: 'post',
+    data: data
+  })
+}
+
+/**************************** 督导组相关 ****************************/
+
+/* 通用接口-人员查询(过滤已选/未选)
+   deptId:学院ID
+   searchValue:姓名/工号
+   filtType:1,//1.过滤 2.不过滤
+   selectedUserIds:[],//过滤用户IDS
+   userIds:[],//不过滤用户IDS
+   page:1,
+   pageSize:2,
+*/
+export function findUserList(data) {
+  return request({
+    url: '/system/user/findUserList',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-列表
+export function securityCheckGroupList(data) {
+  return request({
+    url: '/security/checkGroup/list',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-详情
+export function securityCheckGroupDetail(query) {
+  return request({
+    url: '/security/checkGroup/detail',
+    method: 'get',
+    params: query
+  })
+}
+//督导组-删除
+export function securityCheckGroupDelete(data) {
+  return request({
+    url: '/security/checkGroup/delete',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-启用/停用
+export function securityCheckGroupEnable(data) {
+  return request({
+    url: '/security/checkGroup/enable',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-人员-启用/停用
+export function securityCheckGroupUserEnable(data) {
+  return request({
+    url: '/security/checkGroup/userEnable',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-新增
+export function securityCheckGroupAdd(data) {
+  return request({
+    url: '/security/checkGroup/add',
+    method: 'post',
+    data: data
+  })
+}
+//督导组-修改
+export function securityCheckGroupUpdate(data) {
+  return request({
+    url: '/security/checkGroup/update',
+    method: 'post',
+    data: data
+  })
+}
+
+/**************************** 随手拍 ****************************/
+
+//随手拍-列表
+export function securityCheckPhotoMyList(data) {
+  return request({
+    url: '/security/checkPhoto/myList',
+    method: 'post',
+    data: data
+  })
+}
+//随手拍-详情
+export function securityCheckPhotoDetail(query) {
+  return request({
+    url: '/security/checkPhoto/detail',
+    method: 'get',
+    params: query
+  })
+}
+//随手拍-新增
+export function securityCheckPhotoMyAdd(data) {
+  return request({
+    url: '/security/checkPhoto/myAdd',
+    method: 'post',
+    data: data
+  })
+}
+//随手拍-删除
+export function securityCheckPhotoDelete(data) {
+  return request({
+    url: '/security/checkPhoto/delete',
+    method: 'post',
+    data: data
+  })
+}
+//随手拍-隐患列表
+export function securityCheckPhotoList(data) {
+  return request({
+    url: '/security/checkPhoto/list',
+    method: 'post',
+    data: data
+  })
+}
+//随手拍-隐患整改
+export function securityCheckPhotoUpdate(data) {
+  return request({
+    url: '/security/checkPhoto/update',
+    method: 'post',
+    data: data
+  })
+}
+
+/**************************** 检查依据 ****************************/
+
+//检查依据-列表
+export function securityCheckBasisList(data) {
+  return request({
+    url: '/security/checkBasis/list',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-新增
+export function securityCheckBasisAdd(data) {
+  return request({
+    url: '/security/checkBasis/add',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-编辑
+export function securityCheckBasisUpdate(data) {
+  return request({
+    url: '/security/checkBasis/update',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-详情
+export function securityCheckBasisDetail(query) {
+  return request({
+    url: '/security/checkBasis/detail',
+    method: 'get',
+    params: query
+  })
+}
+//检查依据-删除
+export function securityCheckBasisDelete(data) {
+  return request({
+    url: '/security/checkBasis/delete',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-检查指标下拉列表 level级别123 parentId父类ID
+export function securityCheckOptionSelList(data) {
+  return request({
+    url: '/security/checkOption/selList',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-查询穿梭框数据 id父级ID 一级与二级 notIds未选中的
+export function securityCheckOptionShuttleList(data) {
+  return request({
+    url: '/security/checkOption/shuttleList',
+    method: 'post',
+    data: data
+  })
+}
+//检查依据-查询穿梭框数据 id父级ID 一级与二级 ids选中的
+export function securityCheckOptionShuttleRightList(data) {
+  return request({
+    url: '/security/checkOption/shuttleRightList',
+    method: 'post',
+    data: data
+  })
+}
+
+/**************************** 检查计划 ****************************/
+//检查计划-列表
+export function securityCheckPlanList(data) {
+  return request({
+    url: '/security/checkPlan/list',
+    method: 'post',
+    data: data
+  })
+}
+//检查计划-新增
+export function securityCheckPlanAdd(data) {
+  return request({
+    url: '/security/checkPlan/add',
+    method: 'post',
+    data: data
+  })
+}
+//检查计划-编辑
+export function securityCheckPlanUpdate(data) {
+  return request({
+    url: '/security/checkPlan/update',
+    method: 'post',
+    data: data
+  })
+}
+//检查计划-详情
+export function securityCheckPlanFindCheckPlan(query) {
+  return request({
+    url: '/security/checkPlan/findCheckPlan',
+    method: 'get',
+    params: query
+  })
+}
+//检查计划-查询全校实验室数量
+export function laboratorySubRelInfoGetAllSubNum(query) {
+  return request({
+    url: '/laboratory/subRelInfo/getAllSubNum',
+    method: 'get',
+    params: query
+  })
+}
+//检查计划-实验室查询穿梭框
+export function laboratorySubRelInfoConditionSubjectInfo(data) {
+  return request({
+    url: '/laboratory/subRelInfo/conditionSubjectInfo',
+    method: 'post',
+    data: data
+  })
+}
+//检查计划-历史标题列表
+export function checkPlanGetHistoryPlanTitles(query) {
+  return request({
+    url: '/security/checkPlan/getHistoryPlanTitles',
+    method: 'get',
+    params: query
+  })
+}
+//检查计划-删除历史标题 checkPlanId
+export function checkPlanHideHistoryPlanTitle(query) {
+  return request({
+    url: '/security/checkPlan/hideHistoryPlanTitle',
+    method: 'get',
+    params: query
+  })
+}
+/**************************** 检查管理/自查管理 ****************************/
+//检查管理/自查管理-计划列表
+export function securityCheckPlanTitleList(data) {
+  return request({
+    url: '/security/checkPlan/titleList',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-计划下实验室列表
+export function securityCheckManageList(data) {
+  return request({
+    url: '/security/checkManage/list',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-计划下-实验室下-检查项列表
+export function securityCheckSetOptionList(data) {
+  return request({
+    url: '/security/checkSetOption/list',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-开始检查计划详情
+export function securityCheckPlanCheckInfo(data) {
+  return request({
+    url: '/security/checkPlan/checkInfo',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-查询计划内实验室下未检查的检查项
+export function securityCheckSetOptionUnCheckList(data) {
+  return request({
+    url: '/security/checkSetOption/unCheckList',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-开始检查第一次提交
+export function securityRecordCheckCommit(data) {
+  return request({
+    url: '/security/record/checkCommit',
+    method: 'post',
+    data: data
+  })
+}
+//检查管理/自查管理-流程详情
+export function securityCheckDangerDetailList(query) {
+  return request({
+    url: '/security/checkDanger/getDangerId/'+query.managerId+'/'+query.setOptionId,
+    method: 'get',
+  })
+}
+
+/**************************** 安全检查-数据统计 ****************************/
+// 数据统计列表
+export function securityDataStatisticsList(data) {
+  return request({
+    url: '/security/dataStatistics/list',
+    method: 'post',
+    data: data
+  })
+}
+// 检查计划-计划明细列表
+export function securityCheckStatisticsCheckList(data) {
+  return request({
+    url: '/security/checkStatistics/checkList',
+    method: 'post',
+    data: data
+  })
+}
+// 隐患统计柱状图
+export function securityHazardReportColumnPicture (data) {
+  return request({
+    url: '/security/hazardReport/columnPicture',
+    method: 'post',
+    data: data
+  })
+}
+// 各单位隐患整改统计-表头部参数
+export function reportHazardReportOneHazardGaugeOutfit (query) {
+  return request({
+    url: '/report/hazardReport/oneHazardGaugeOutfit',
+    method: 'get',
+    params: query
+  })
+}
+// 各单位隐患整改统计-列表-校级
+export function reportHazardReportDeptList (data) {
+  return request({
+    url: '/report/hazardReport/deptList',
+    method: 'post',
+    data: data
+  })
+}
+// 各单位隐患整改统计-头部数据-校级
+export function reportHazardReportDeptTop (data) {
+  return request({
+    url: '/report/hazardReport/deptTop',
+    method: 'post',
+    data: data
+  })
+}
+// 各单位隐患整改统计-查询是否有更新数据-校级
+export function securityCheckDangerTodayDangerList (query) {
+  return request({
+    url: '/security/checkDanger/todayDangerList',
+    method: 'get',
+    params: query
+  })
+}
+// 各单位隐患整改统计-更细数据-校级
+export function reportHazardReportItemsDeptRefresh (query) {
+  return request({
+    url: '/report/hazardReport/itemsDeptRefresh',
+    method: 'get',
+    params: query
+  })
+}
+// 一级检查项隐患分布-列表-校级
+export function reportHazardReportOneItemsScatter (data) {
+  return request({
+    url: '/report/hazardReport/oneItemsScatter',
+    method: 'post',
+    data: data
+  })
+}
+// 一级检查项隐患分布-头部数据-校级
+export function reportHazardReportOneItemsScatterTop (data) {
+  return request({
+    url: '/report/hazardReport/oneItemsScatterTop',
+    method: 'post',
+    data: data
+  })
+}
+
+// 检查项统计-一级指标隐患分布 饼图
+export function reportHazardItemsOneReportPie (data) {
+  return request({
+    url: '/report/hazardItems/oneReportPie',
+    method: 'post',
+    data: data
+  })
+}
+// 检查项统计-一级隐患列表
+export function reportHazardItemsOneReportList (data) {
+  return request({
+    url: '/report/hazardItems/oneReportList',
+    method: 'post',
+    data: data
+  })
+}
+// 检查项统计-一级隐患数据刷新
+export function reportHazardItemsOneReportRefresh (query) {
+  return request({
+    url: '/report/hazardItems/oneReportRefresh',
+    method: 'get',
+    params: query
+  })
+}
+// 检查项统计-二级隐患数据刷新
+export function securityHazardReportTwoReportRefresh (query) {
+  return request({
+    url: '/security/hazardReport/twoReportRefresh',
+    method: 'get',
+    params: query
+  })
+}
+// 检查项统计-三级隐患数据刷新
+export function reportHazardItemsThreeReportRefresh (query) {
+  return request({
+    url: '/report/hazardItems/threeReportRefresh',
+    method: 'get',
+    params: query
+  })
+}
+
+// 检查项统计-二级指标隐患分布 饼图
+export function reportHazardItemsTwoReportPie (data) {
+  return request({
+    url: '/report/hazardItems/twoReportPie',
+    method: 'post',
+    data: data
+  })
+}
+// 检查项统计-二级隐患列表
+export function reportHazardItemsTwoReportList (data) {
+  return request({
+    url: '/report/hazardItems/twoReportList',
+    method: 'post',
+    data: data
+  })
+}
+// 检查项统计-三级指标隐患分布 饼图
+export function reportHazardItemsThreeReportPie (data) {
+  return request({
+    url: '/report/hazardItems/threeReportPie',
+    method: 'post',
+    data: data
+  })
+}
+// 检查项统计-三级隐患列表
+export function reportHazardItemsThreeReportList (data) {
+  return request({
+    url: '/report/hazardItems/threeReportList',
+    method: 'post',
+    data: data
+  })
+}
+// 一级检查项隐患分布-列表-院级
+export function reportHazardItemsOneReportListCollege (data) {
+  return request({
+    url: '/report/hazardItems/oneReportListCollege',
+    method: 'post',
+    data: data
+  })
+}
+// 一级检查项隐患分布-头部数据-院级
+export function reportHazardItemsOneReportPieCollege (data) {
+  return request({
+    url: '/report/hazardItems/oneReportPieCollege',
+    method: 'post',
+    data: data
+  })
+}
+// 二级检查项隐患分布-列表-院级
+export function reportHazardItemsTwoReportListCollege (data) {
+  return request({
+    url: '/report/hazardItems/twoReportListCollege',
+    method: 'post',
+    data: data
+  })
+}
+// 二级检查项隐患分布-头部数据-院级
+export function reportHazardItemsTwoReportPieCollege (data) {
+  return request({
+    url: '/report/hazardItems/twoReportPieCollege',
+    method: 'post',
+    data: data
+  })
+}
+// 三级检查项隐患分布-列表-院级
+export function reportHazardItemsThreeReportListCollege (data) {
+  return request({
+    url: '/report/hazardItems/threeReportListCollege',
+    method: 'post',
+    data: data
+  })
+}
+// 三级检查项隐患分布-头部数据-院级
+export function reportHazardItemsThreeReportPieCollege (data) {
+  return request({
+    url: '/report/hazardItems/threeReportPieCollege',
+    method: 'post',
+    data: data
+  })
+}
+//隐患统计-隐患统计-列表-院级
+export function reportHazardReportDeptListCollege  (data) {
+  return request({
+    url: '/report/hazardReport/deptListCollege ',
+    method: 'post',
+    data: data
+  })
+}
+//隐患统计-隐患统计-头部-院级
+export function reportHazardReportDeptTopCollege (data) {
+  return request({
+    url: '/report/hazardReport/deptTopCollege',
+    method: 'post',
+    data: data
+  })
+}
+//隐患统计-一级检查项分布-列表-院级
+export function reportHazardReportOneItemsScatterCollege (data) {
+  return request({
+    url: '/report/hazardReport/oneItemsScatterCollege',
+    method: 'post',
+    data: data
+  })
+}
+//隐患统计-一级检查项分布-头部-院级
+export function reportHazardReportOneItemsScatterCollegeTop (data) {
+  return request({
+    url: '/report/hazardReport/oneItemsScatterCollegeTop',
+    method: 'post',
+    data: data
+  })
+}
+/**************************** 安全隐患 ****************************/
+// 检查隐患/自查隐患-列表
+export function securityCheckDangerList (data) {
+  return request({
+    url: '/security/checkDanger/list',
+    method: 'post',
+    data: data
+  })
+}
+/**************************** 安全检查-公共部分 ****************************/
+// 查询用户身份-校级管理员/院级管理员/督导组成员
+export function securityDataStatisticsGetUserIdentity(query) {
+  return request({
+    url: '/security/dataStatistics/getUserIdentity',
+    method: 'get',
+    params: query
+  })
+}
+// 根据检查项与实验室 查询触发次数 subId实验室ID hazardCheckId检查项ID
+export function securityCheckPhotoGetCheckNumBySub(query) {
+  return request({
+    url: '/security/checkPhoto/getCheckNumBySub',
+    method: 'get',
+    params: query
+  })
+}
+// 检查依据-下拉列表
+export function securityCheckBasisGetList(data) {
+  return request({
+    url: '/security/checkBasis/getList',
+    method: 'post',
+    data: data
+  })
+}
+// 督导组模糊查询下拉列表
+export function securityCheckGroupFindGroupList(data) {
+  return request({
+    url: '/security/checkGroup/findGroupList',
+    method: 'post',
+    data: data
+  })
+}
+//督导组成员查询
+export function securityCheckGroupMemberGroupMemberList(data) {
+  return request({
+    url: '/security/checkGroupMember/groupMemberList',
+    method: 'post',
+    data: data
+  })
+}
+
+//计划内督导组成员查询
+export function securityMemberPlanMemberList(data) {
+  return request({
+    url: '/security/member/planMemberList',
+    method: 'post',
+    data: data
+  })
+}

+ 1 - 0
src/api/safetyCheck/indexDemoTwo.js

@@ -0,0 +1 @@
+import request from '@/utils/request'

BIN
src/assets/ZDimages/basicsModules/icon_fcrzy_wxz@1x.png


BIN
src/assets/ZDimages/basicsModules/icon_fcrzy_xz@1x.png


BIN
src/assets/ZDimages/safetyCheck/icom_xjjc_jcjc@1x.png


BIN
src/assets/ZDimages/safetyCheck/icon_aqjc_xx@1x.png


BIN
src/assets/ZDimages/safetyCheck/icon_jcjh_xy@1x.png


BIN
src/assets/ZDimages/safetyCheck/icon_jcsz_gb@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_jcxms@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_sjtj@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_ssp@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_xfzgtzs@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_xyxc@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_gzzl_zgtz@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_sjtj_ss@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_wzgyh_sjsys@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yhfb_wxz@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yhfb_xz@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yhtj_wxz@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yhtj_zc@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yzgyh_dn@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yzgyh_dy@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yzgyh_dz@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yzgyh_gj@1x.png


BIN
src/assets/ZDimages/securityCheck/icon_yzgyh_sy@1x.png


src/assets/ZDimages/securityCheck/icon_7.png → src/assets/ZDimages/securityCheckDemo/icon_7.png


src/assets/ZDimages/securityCheck/icon_8.png → src/assets/ZDimages/securityCheckDemo/icon_8.png


src/assets/ZDimages/securityCheck/icon_9.png → src/assets/ZDimages/securityCheckDemo/icon_9.png


src/assets/ZDimages/securityCheck/icon_scdzqm_sl.png → src/assets/ZDimages/securityCheckDemo/icon_scdzqm_sl.png


src/assets/ZDimages/securityCheck/icon_wtzg_jcjlxl.png → src/assets/ZDimages/securityCheckDemo/icon_wtzg_jcjlxl.png


src/assets/ZDimages/securityCheck/icon_zg_btg.png → src/assets/ZDimages/securityCheckDemo/icon_zg_btg.png


src/assets/ZDimages/securityCheck/icon_zg_fh.png → src/assets/ZDimages/securityCheckDemo/icon_zg_fh.png


src/assets/ZDimages/securityCheck/icon_zg_wwc.png → src/assets/ZDimages/securityCheckDemo/icon_zg_wwc.png


src/assets/ZDimages/securityCheck/icon_zg_ywc.png → src/assets/ZDimages/securityCheckDemo/icon_zg_ywc.png


src/assets/ZDimages/securityCheck/icon_zg_yzg.png → src/assets/ZDimages/securityCheckDemo/icon_zg_yzg.png


src/assets/ZDimages/securityCheck/icon_zg_zgwwc.png → src/assets/ZDimages/securityCheckDemo/icon_zg_zgwwc.png


+ 31 - 0
src/assets/styles/button.scss

@@ -70,6 +70,13 @@
     background:$buttonColorI;
   }
 }
+//表格内部分样式
+.el-progress{
+  margin-top: 6px;
+  .el-progress__text{
+    margin-left:15px;
+  }
+}
 //===========================表格内按钮===========================
 .table-button-box{
   font-weight:500;
@@ -347,6 +354,30 @@
     background-color:$buttonColorI;
     border: 1px solid $buttonColorI;
   }
+  .page-top-title-edit-p{
+    font-weight:500;
+    cursor:pointer;
+    display: inline-block;
+    text-align: center;
+    width: 90px;
+    height: 40px;
+    line-height:40px;
+    border-radius: 6px;
+    border: 1px solid $buttonColorC;
+    color:$buttonColorC;
+    font-size: 14px;
+    background-color:$buttonColorA;
+    overflow: hidden;
+    margin-left:20px;
+    i{
+      margin:0 5px 0 0;
+    }
+  }
+  .page-top-title-edit-p:hover{
+    color:$buttonColorA;
+    background-color:$buttonColorI;
+    border: 1px solid $buttonColorI;
+  }
   .page-top-title-button-p{
     font-weight:500;
     cursor:pointer;

+ 16 - 0
src/assets/styles/commonality.scss

@@ -19,11 +19,17 @@
   }
 }
 //===========================右侧内容窗口页面公共样式===========================
+//普通查询条件
 .page-form-title-box{
   height:80px;
   border-bottom:1px solid #dedede;
   padding:20px 20px 0 20px;
 }
+//高级查询条件
+.page-advanced-form-title-box{
+  height:140px;
+  padding:20px 10px 0 20px;
+}
 .page-content-box{
   flex: 1;
   display: flex;
@@ -400,6 +406,16 @@
     margin-left:-20px;
   }
 }
+.table-null-img-10{
+  .el-table__empty-text{
+    background-size: 10%!important;
+  }
+}
+.table-null-img-15{
+  .el-table__empty-text{
+    background-size: 15%!important;
+  }
+}
 .table-null-img-20{
   .el-table__empty-text{
     background-size: 20%!important;

+ 261 - 0
src/components/audioPlayer/audioPlayer.vue

@@ -0,0 +1,261 @@
+<template>
+  <div>
+    <audio @timeupdate="updateProgress" controls :ref="refId" style="display: none">
+      <source :src="fileurl" type="audio/mpeg" />
+      您的浏览器不支持音频播放
+    </audio>
+    <div class="audio-right">
+      <i :class="audioStatus !== 'pause' ? 'iconfont el-icon-video-play' : 'iconfont el-icon-video-pause'"
+         @click="playAudio" class="dialogAudioPlay"></i>
+      <div class="progress-bar-bg" :id="refId" v-dragto="setAudioIcon">
+        <div class="progress-bar" :id="refId+'bar'"></div>
+      </div>
+      <div class="audio-time" style="min-height: 10px">
+        <span class="audio-length-current" id="audioCurTime">{{ audioStart }}</span
+        >
+        <span style="padding:0 4px;">/</span>
+        <span class="audio-length-total">{{ duration }}</span>
+      </div>
+      <div class="volume">
+        <div
+          @click.stop="
+            () => {
+              return false
+            }
+          "
+          class="volume-progress"
+          v-show="audioHuds"
+        >
+          <div class="volume-bar-bg" id="volumeBarBg" v-adjuster="handleShowMuteIcon">
+            <div class="volume-bar" id="volumeBar"></div>
+          </div>
+        </div>
+        <i class="iconfont pl-1" :class="audioIcon" @click.stop="audioHuds = !audioHuds"> </i>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      fileurl: {
+        trpe: String
+      },
+      refId: {
+        trpe: String
+      }
+    },
+    data() {
+      return {
+        audioStatus: 'play',
+        audioStart: '0:00',
+        duration: '0:00',
+        audioVolume: 0.5,
+        audioHuds: false
+      }
+    },
+
+    directives: {
+      dragto: {
+        inserted: function (el, binding, vnode) {
+          el.addEventListener(
+            'click',
+            (e) => {
+              let wdiv = document.getElementById(this.refId).clientWidth
+              let audio = vnode.context.$refs[this.refId]
+              // 只有音乐开始播放后才可以调节,已经播放过但暂停了的也可以
+              let ratemin = e.offsetX / wdiv
+              let rate = ratemin * 100
+              document.getElementById(this.refId+'bar').style.width = rate + '%'
+              audio.currentTime = audio.duration * ratemin
+              audio.play()
+              binding.value()
+            },
+            false
+          )
+        }
+      },
+      adjuster: {
+        inserted: function (el, binding, vnode) {
+          el.addEventListener(
+            'click',
+            (e) => {
+              let hdiv = document.getElementById('volumeBarBg').clientHeight
+              let audio = vnode.context.$refs[this.refId]
+              // 只有音乐开始播放后才可以调节,已经播放过但暂停了的也可以
+              let ratemin = e.offsetY / hdiv
+              let rate = ratemin * 100
+              document.getElementById('volumeBar').style.height = rate + '%'
+              audio.volume = ratemin
+              binding.value(rate / 100)
+            },
+            false
+          )
+        }
+      }
+    },
+    computed: {
+      audioIcon() {
+        if (this.audioHuds) {
+          return this.audioVolume < 0.01 ? 'checked icon-jingyin' : 'checked icon-shengyin'
+        } else {
+          return 'icon-shengyin'
+        }
+      }
+    },
+    mounted() {
+      this.fetch()
+    },
+    methods: {
+      fetch() {
+        let that = this
+        var myVid = this.$refs[this.refId]
+        myVid.loop = false
+        // 监听音频播放完毕
+        myVid.addEventListener(
+          'ended',
+          function () {
+            that.audioStatus = 'play' // 显示播放icon
+            document.getElementById(this.refId+'bar').style.width = '0%' // 进度条初始化
+          },
+          false
+        )
+        if (myVid != null) {
+          myVid.oncanplay = function () {
+            that.duration = that.transTime(myVid.duration) // 计算音频时长
+          }
+          myVid.volume = 1 // 设置音量100%
+        }
+      },
+      // 播放暂停控制
+      playAudio() {
+        let recordAudio = this.$refs[this.refId] // 获取audio元素
+        if (recordAudio.paused) {
+          recordAudio.play()
+          this.audioStatus = 'pause'
+        } else {
+          recordAudio.pause()
+          this.audioStatus = 'play'
+        }
+      },
+      // 更新进度条与当前播放时间
+      updateProgress(e) {
+        var value = e.target.currentTime / e.target.duration
+        if (document.getElementById(this.refId+'bar')) {
+          document.getElementById(this.refId+'bar').style.width = value * 100 + '%'
+          if (e.target.currentTime === e.target.duration) {
+            this.audioStatus = 'pause'
+          }
+        } else {
+          this.audioStatus = 'pause'
+        }
+
+        this.audioStart = this.transTime(this.$refs[this.refId].currentTime)
+      },
+      /**
+       * 音频播放时间换算
+       * @param {number} value - 音频当前播放时间,单位秒
+       */
+      transTime(time) {
+        var duration = parseInt(time)
+        var minute = parseInt(duration / 60)
+        var sec = (duration % 60) + ''
+        var isM0 = ':'
+        if (minute === 0) {
+          minute = '00'
+        } else if (minute < 10) {
+          minute = '0' + minute
+        }
+        if (sec.length === 1) {
+          sec = '0' + sec
+        }
+        return minute + isM0 + sec
+      },
+      setAudioIcon() {
+        this.audioStatus = 'pause'
+      },
+      handleShowMuteIcon(val) {
+        this.audioVolume = val
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .volume {
+    position: relative;
+    .volume-progress {
+      position: absolute;
+      top: -150px;
+      width: 32px;
+      height: 140px;
+      background: #f6f6f6;
+      border-radius: 4px;
+      padding-top: 10px;
+    }
+    .volume-bar-bg {
+      margin: 0 auto;
+      width: 6px;
+      height: 120px;
+      background: #dcdcdc;
+      border-radius: 100px;
+      flex: 1;
+      position: relative;
+      transform: rotate(180deg);
+      cursor: pointer;
+      .volume-bar {
+        width: 6px;
+        height: 50%;
+        background: #585959;
+        border-radius: 100px;
+      }
+    }
+    .checked {
+      color: #585959;
+    }
+  }
+  .audio-right {
+    width: 100%;
+    height: 49px;
+    line-height: 49px;
+    background: #dcdcdc;
+    border-radius: 30px;
+    display: flex;
+    padding: 0 15px;
+    .dialogAudioPlay {
+      cursor: pointer;
+      color: #5c5e66;
+      font-size: 24px;
+      line-height:49px;
+    }
+    .progress-bar-bg {
+      background-color: #fff;
+      flex: 1;
+      position: relative;
+      height: 4px;
+      top: 50%;
+      transform: translateY(-50%);
+      margin-top: -1px;
+      cursor: pointer;
+      margin: 0 10px;
+    }
+    .progress-bar {
+      background-color: #585959;
+      width: 0%;
+      height: 4px;
+      border-radius: 5px;
+    }
+
+    .audio-time {
+      overflow: hidden;
+      font-size: 14px;
+      .audio-length-total {
+        float: right;
+      }
+      .audio-length-current {
+        float: left;
+      }
+    }
+  }
+</style>

+ 29 - 12
src/components/exportComponent/exportComponent.vue

@@ -22,6 +22,7 @@
     fileName:'导出文件名',                         //导出文件的命名
     customKey:null,                                //自定义参数KEY(非必填)
     customValue:null                               //自定义参数VALUE(非必填)
+    screenData:{}                                  //导出筛选数据(非必要-如有该参数组件会显示导出筛选数据按钮)
   },
 
 -->
@@ -34,6 +35,7 @@
     </div>
     <el-dropdown-menu slot="dropdown">
       <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;color:#333;" :command="{command:1}">导出全部数据</el-dropdown-item>
+      <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;color:#333;" :command="{command:3}" v-if="exportConfig.screenData">导出筛选数据</el-dropdown-item>
       <el-dropdown-item style="margin:0 10px;color:#333;" :command="{command:2}">导出选中数据</el-dropdown-item>
     </el-dropdown-menu>
   </el-dropdown>
@@ -73,12 +75,12 @@
               obj[self.exportConfig.customKey] = self.exportConfig.customValue
             }
             self.download(self.exportConfig.api,obj, self.exportConfig.fileName+currentDate+'.xlsx')
-            if(this.$parent.$refs['table-box']){
-              this.$parent.$refs['table-box'].clearSelection();
-            }else if(this.$parent.$parent.$refs['table-box']){
-              this.$parent.$parent.$refs['table-box'].clearSelection();
-            }else if(this.$parent.$parent.$parent.$refs['table-box']){
-              this.$parent.$parent.$parent.$refs['table-box'].clearSelection();
+            if(self.$parent.$refs['table-box']){
+              self.$parent.$refs['table-box'].clearSelection();
+            }else if(self.$parent.$parent.$refs['table-box']){
+              self.$parent.$parent.$refs['table-box'].clearSelection();
+            }else if(self.$parent.$parent.$parent.$refs['table-box']){
+              self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
             }
           }).catch(() => {})
         }else if(item.command == 2){
@@ -96,17 +98,32 @@
                 obj[self.exportConfig.customKey] = self.exportConfig.customValue
               }
               self.download(self.exportConfig.api,obj, self.exportConfig.fileName+currentDate+'.xlsx')
-              if(this.$parent.$refs['table-box']){
-                this.$parent.$refs['table-box'].clearSelection();
-              }else if(this.$parent.$parent.$refs['table-box']){
-                this.$parent.$parent.$refs['table-box'].clearSelection();
-              }else if(this.$parent.$parent.$parent.$refs['table-box']){
-                this.$parent.$parent.$parent.$refs['table-box'].clearSelection();
+              if(self.$parent.$refs['table-box']){
+                self.$parent.$refs['table-box'].clearSelection();
+              }else if(self.$parent.$parent.$refs['table-box']){
+                self.$parent.$parent.$refs['table-box'].clearSelection();
+              }else if(self.$parent.$parent.$parent.$refs['table-box']){
+                self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
               }
             }).catch(() => {})
           }else{
             this.msgError('请勾选数据')
           }
+        }else if(item.command == 3){
+          self.$confirm(`确认导出当前筛选条件查出的数据?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(async () => {
+            self.download(self.exportConfig.api,self.exportConfig.screenData, self.exportConfig.fileName+currentDate+'.xlsx')
+            if(self.$parent.$refs['table-box']){
+              self.$parent.$refs['table-box'].clearSelection();
+            }else if(self.$parent.$parent.$refs['table-box']){
+              self.$parent.$parent.$refs['table-box'].clearSelection();
+            }else if(self.$parent.$parent.$parent.$refs['table-box']){
+              self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
+            }
+          }).catch(() => {})
         }
       },
       /** 当前时间 */

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 4 - 3
src/components/lookDocumentDialog/components/noticeDom.vue


+ 2 - 1
src/main.js

@@ -16,7 +16,7 @@ import './assets/icons'
 import './permission'
 import cal from '@/utils/calculation';
 import { getConfigKey,getDicts } from "@/api/commonality/noPermission";
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels,
+import { parseTime, timeToTimestamp, resetForm, addDateRange, selectDictLabel, selectDictLabels,
         handleTree, spaceJudgment, spaceJudgmentHTML, isNum, urlJudge, uploadUrl,
         judgmentNetworkReturnAddress,versionField, clickCopy } from "@/utils/ruoyi";
 import Pagination from "@/components/Pagination";
@@ -52,6 +52,7 @@ Vue.prototype.cal = cal
 Vue.prototype.getDicts = getDicts
 Vue.prototype.getConfigKey = getConfigKey
 Vue.prototype.parseTime = parseTime
+Vue.prototype.timeToTimestamp = timeToTimestamp
 Vue.prototype.resetForm = resetForm
 Vue.prototype.addDateRange = addDateRange
 Vue.prototype.selectDictLabel = selectDictLabel

+ 3 - 0
src/store/modules/permission.js

@@ -227,6 +227,9 @@ export const loadView = (view) => { // 路由懒加载
   }else if(pathName === 'safetyCheck'){
     //安全检查
     return (resolve) => require([`@/views/safetyCheck${pathUrl}`], resolve)
+  }else if(pathName === 'safetyCheckDemo'){
+    //安全检查
+    return (resolve) => require([`@/views/safetyCheckDemo${pathUrl}`], resolve)
   }
 }
 

+ 11 - 0
src/utils/ruoyi.js

@@ -101,6 +101,17 @@ export function parseTime(time, pattern) {
 	return time_str
 }
 
+// YYYY-MM-dd 转时间戳
+export function timeToTimestamp(time) {
+  let timestamp = Date.parse(new Date(time).toString());
+  // 在JavaScript中,new Date().getTime()得到的是13位的时间戳;
+  // 若要获取10位的时间戳需除以1000,获取13位的时间戳不需要除以1000;
+  timestamp = timestamp / 1000
+  // console.log(time + "的时间戳为:" + timestamp);
+  return timestamp;
+  // 2023-12-24 22:14:29的时间戳为:1703427269000
+}
+
 // 表单重置
 export function resetForm(refName) {
 	if (this.$refs[refName]) {

+ 19 - 2
src/views/chemicalManage/earlyWarningEvent/infoPage.vue

@@ -18,7 +18,7 @@
           </div>
           <div class="text-right-box">
             <p>实验室负责人:</p>
-            <p v-for="(item,index) in infoData.adminInfoList">{{item.userName}}-{{item.mobile}}</p>
+            <p>{{infoData.adminInfo}}</p>
           </div>
         </div>
         <div class="text-max-box">
@@ -32,7 +32,7 @@
           </div>
           <div class="text-right-box">
             <p>安全员:</p>
-            <p v-for="(item,index) in infoData.safeInfoList">{{item.userName}}-{{item.mobile}}</p>
+            <p>{{infoData.safeInfo}}</p>
           </div>
         </div>
         <div class="text-max-box" v-if="infoData.chemicalWarnType==6">
@@ -100,6 +100,7 @@
         <div class="table-max-big-box" v-if="infoData.chemicalWarnType==3 || infoData.chemicalWarnType==4">
           <el-table class="table-box" v-loading="loading" border :data="infoData.chemicalExpireList">
             <el-table-column label="化学品名称" prop="chemicalName" show-overflow-tooltip/>
+            <el-table-column label="编码" prop="tagCode" fixed show-overflow-tooltip/>
             <el-table-column label="规格" prop="normsNum" width="180"  show-overflow-tooltip/>
             <el-table-column label="余量" prop="surplus" width="180"  show-overflow-tooltip/>
             <el-table-column label="归属人" prop="belongName" width="220"  show-overflow-tooltip/>
@@ -115,6 +116,7 @@
         <div class="table-max-big-box" v-if="infoData.chemicalWarnType==5">
           <el-table class="table-box" v-loading="loading" border :data="infoData.chemicalOverdueStockList">
             <el-table-column label="化学品名称" prop="chemicalName"  show-overflow-tooltip/>
+            <el-table-column label="编码" prop="tagCode" fixed show-overflow-tooltip/>
             <el-table-column label="CAS" prop="casNum" width="180"  show-overflow-tooltip/>
             <el-table-column label="类别" prop="chemicalCategory" width="180" show-overflow-tooltip/>
             <el-table-column label="纯度" prop="chemicalPurity" width="180"  show-overflow-tooltip/>
@@ -281,6 +283,21 @@
       //初始化
       initialize(){
         this.$set(this,'infoData',this.propsData);
+        if (this.infoData.adminInfoList[0]){
+          let list=[];
+          this.infoData.adminInfoList.forEach(function(item) {
+            list.push(item.userName+'-'+item.mobile)
+          })
+          this.infoData.adminInfo=list.join(',')
+        }
+        if (this.infoData.safeInfoList[0]){
+          let list=[];
+          this.infoData.safeInfoList.forEach(function(item) {
+            list.push(item.userName+'-'+item.mobile)
+          })
+          this.infoData.safeInfo=list.join(',')
+        }
+
         this.$set(this.infoDataForm,'noticeId',this.propsData.noticeId);
       },
       // 返回按钮

+ 1 - 1
src/views/chemicalManage/inventoryManagement/inventoryStatistics/inventoryList.vue

@@ -154,7 +154,7 @@
   //import { getDicts } from "@/api/commonality/noPermission";
   //import { systemUserSelect } from "@/api/commonality/permission";
   //import { getInfo } from "@/api/basicsModules/index";
-  //import addPage from "./addPage.vue";
+  //import addPage from "./addSafetyInfoConfig.vue";
   import infoPage from "./infoPage.vue"
   import exportComponent from "@/components/exportComponent/exportComponent.vue";
   import { getDeptDropList,systemBuildingGetTreeList,} from "@/api/commonality/permission";

+ 1 - 1
src/views/chemicalManage/inventoryManagement/takeStockRecord/index.vue

@@ -87,7 +87,7 @@
   //import { getDicts } from "@/api/commonality/noPermission";
   //import { systemUserSelect } from "@/api/commonality/permission";
   //import { getInfo } from "@/api/basicsModules/index";
-  //import addPage from "./addPage.vue";
+  //import addPage from "./addSafetyInfoConfig.vue";
   import { getDeptDropList,systemBuildingGetTreeList,} from "@/api/commonality/permission";
   export default {
     name: 'index',

+ 355 - 48
src/views/demo.vue

@@ -2,73 +2,380 @@
   <div class="app-container demo">
     <div class="page-top-title-box">
       <p class="page-top-title-name-p">测试页面</p>
-      <p class="page-top-title-add-p">测试</p>
+      <p class="page-top-title-add-p" @click="leftSetCheckedKeys">勾选</p>
+      <p class="page-top-title-add-p" @click="leftGetCheckedKeys">获取当前选中</p>
+      <p class="page-top-title-add-p" @click="leftDelCheckedKeys">清空</p>
     </div>
-    <div class="scrollbar-box" v-if="pageType">
-      <H5PlayerVideo v-for="(item,index) in videoList" :key="index" :videoProps="item"></H5PlayerVideo>
+    <div class="tree-max-big-box">
+      <div class="tree-title-box">
+        <div class="tree-title-check-box">
+          <p class="check-p el-icon-check" v-if="leftTreeCheckType"></p>
+          <p class="no-check-p" v-if="!leftTreeCheckType"></p>
+          <p class="tree-title-p">序号</p>
+        </div>
+        <p class="tree-title-name-p">检查项目</p>
+      </div>
+      <el-tree
+        class="tree-check-box"
+        :data="leftTreeData"
+        show-checkbox
+        ref="leftTree"
+        node-key="id"
+        :render-content="renderContent"
+        :props="defaultProps">
+      </el-tree>
     </div>
   </div>
 </template>
 <script>
-  import { iotCameraFindByCondition } from "@/api/basicsModules/index";
-  import H5PlayerVideo from '@/components/H5PlayerVideo/H5PlayerVideo.vue';
+  import { iotCameraFindByCondition } from '@/api/basicsModules/index'
+  import H5PlayerVideo from '@/components/H5PlayerVideo/H5PlayerVideo.vue'
+
   export default {
-    name: 'demo',
+    label: 'demo',
     components: {
       H5PlayerVideo
     },
-    data () {
+    data() {
       return {
-        pageType:true,
-        videoList:[],
+        pageType: true,
+        defaultProps: {
+          children: 'children',
+          label: 'code'
+        },
+        leftTreeCheckType:false,
+        leftTreeData: [
+          {
+          "id": "1824338606101749761",
+          "name": "一级检查项",
+          "mainPoint": "",
+          "hazardLevel": null,
+          "hazardLevelName": null,
+          "code": "1",
+          "parentId": "0",
+          "type": 1,
+          "level": 1,
+          "hazardReid": null,
+          "children": [{
+            "id": "1824338656248848386",
+            "name": "二级检查项",
+            "mainPoint": "",
+            "hazardLevel": null,
+            "hazardLevelName": null,
+            "code": "1.1",
+            "parentId": "1824338606101749761",
+            "type": 1,
+            "level": 2,
+            "hazardReid": null,
+            "children": [{
+              "id": "1824338716034457602",
+              "name": "三级检查项",
+              "mainPoint": "一般印花",
+              "hazardLevel": null,
+              "hazardLevelName": null,
+              "code": "1.1.1",
+              "parentId": "1824338656248848386",
+              "type": 1,
+              "level": 3,
+              "hazardReid": null,
+              "children": []
+            },{
+              "id": "1824338716034457602",
+              "name": "三级检查项",
+              "mainPoint": "一般印花",
+              "hazardLevel": null,
+              "hazardLevelName": null,
+              "code": "1.1.1",
+              "parentId": "1824338656248848386",
+              "type": 1,
+              "level": 3,
+              "hazardReid": null,
+              "children": []
+            }]
+          }]
+        },{
+          "id": "1824338606101749761",
+          "name": "一级检查项",
+          "mainPoint": "",
+          "hazardLevel": null,
+          "hazardLevelName": null,
+          "code": "1",
+          "parentId": "0",
+          "type": 1,
+          "level": 1,
+          "hazardReid": null,
+          "children": [{
+            "id": "1824338656248848386",
+            "name": "二级检查项",
+            "mainPoint": "",
+            "hazardLevel": null,
+            "hazardLevelName": null,
+            "code": "1.1",
+            "parentId": "1824338606101749761",
+            "type": 1,
+            "level": 2,
+            "hazardReid": null,
+            "children": [{
+              "id": "1824338716034457602",
+              "name": "三级检查项",
+              "mainPoint": "一般印花",
+              "hazardLevel": null,
+              "hazardLevelName": null,
+              "code": "1.1.1",
+              "parentId": "1824338656248848386",
+              "type": 1,
+              "level": 3,
+              "hazardReid": null,
+              "children": []
+            }]
+          }]
+        },{
+          "id": "1824338606101749761",
+          "name": "一级检查项",
+          "mainPoint": "",
+          "hazardLevel": null,
+          "hazardLevelName": null,
+          "code": "1",
+          "parentId": "0",
+          "type": 1,
+          "level": 1,
+          "hazardReid": null,
+          "children": [{
+            "id": "1824338656248848386",
+            "name": "二级检查项",
+            "mainPoint": "",
+            "hazardLevel": null,
+            "hazardLevelName": null,
+            "code": "1.1",
+            "parentId": "1824338606101749761",
+            "type": 1,
+            "level": 2,
+            "hazardReid": null,
+            "children": [{
+              "id": "1824338716034457602",
+              "name": "三级检查项",
+              "mainPoint": "一般印花",
+              "hazardLevel": null,
+              "hazardLevelName": null,
+              "code": "1.1.1",
+              "parentId": "1824338656248848386",
+              "type": 1,
+              "level": 3,
+              "hazardReid": null,
+              "children": []
+            }]
+          }]
+        },{
+          "id": "1824338606101749761",
+          "name": "一级检查项",
+          "mainPoint": "",
+          "hazardLevel": null,
+          "hazardLevelName": null,
+          "code": "1",
+          "parentId": "0",
+          "type": 1,
+          "level": 1,
+          "hazardReid": null,
+          "children": [{
+            "id": "1824338656248848386",
+            "name": "二级检查项",
+            "mainPoint": "",
+            "hazardLevel": null,
+            "hazardLevelName": null,
+            "code": "1.1",
+            "parentId": "1824338606101749761",
+            "type": 1,
+            "level": 2,
+            "hazardReid": null,
+            "children": [{
+              "id": "1824338716034457602",
+              "name": "三级检查项",
+              "mainPoint": "一般印花",
+              "hazardLevel": null,
+              "hazardLevelName": null,
+              "code": "1.1.1",
+              "parentId": "1824338656248848386",
+              "type": 1,
+              "level": 3,
+              "hazardReid": null,
+              "children": []
+            }]
+          }]
+        }
+
+
+        ]
       }
     },
-    created(){
+    created() {
 
     },
-    mounted(){
-      this.getUrl();
+    mounted() {
+
     },
-    methods:{
-      getUrl() {
-        let self = this;
-        // type 1.楼栋 2.楼层 3.楼道 4.实验室
-        let obj = {
-          page:'1',
-          pageSize:'4',
-          buildId:'',
-          floorId:'',
-          passageway:'',
-          subIds:['1793100035379396609'],
-        };
-        iotCameraFindByCondition(obj).then(response => {
-          if (!response.data.records[0]){
-            this.msgError('视频异常,请联系管理员')
-          }else{
-            let list = [];
-            for(let i=0;i<response.data.records.length;i++){
-              list.push(
-                {
-                  width: this.width, //(宽度:非必传-默认600)
-                  height: this.height, //(高度:非必传-默认338)
-                  url: response.data.records[i].streamUrl,
-                }
-              )
-            }
-            this.$set(this,'videoList',list)
-            this.$nextTick(()=>{
-              setTimeout(function(){
-                self.$set(self, 'pageType', true);
-              },1000);
-            })
-          }
-        });
+    methods: {
+      //左侧获取选中
+      leftGetCheckedKeys(){
+        const checkedNodes = this.$refs.leftTree.getCheckedKeys();
+        console.log(checkedNodes);
       },
-    },
+      //左侧勾选
+      leftSetCheckedKeys(){
+        this.$refs.leftTree.setCheckedKeys([5,7,5]);
+      },
+      leftDelCheckedKeys(){
+        this.$refs.leftTree.setCheckedKeys([]);
+      },
+      renderContent(h, { node, data, store }) {
+        console.log('node',node)
+        console.log('data',data)
+        console.log('store',store)
+        return (
+          <span class="custom-tree-node">
+            <span class='custom-tree-node-code'>{data.code}</span>
+            <span class='custom-tree-node-name'>{data.name}</span>
+          </span>
+        )
+      }
+    }
   }
 </script>
 <style scoped lang="scss">
-  .demo{
+  .demo {
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    .tree-max-big-box{
+      width:610px;
+      margin:40px;
+
+
 
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .tree-title-box{
+        height:40px;
+        display: flex;
+        flex-direction: row;
+        border:1px solid #E0E0E0;
+        background-color: #f5f5f5;
+        .tree-title-check-box{
+          width:190px;
+          display: flex;
+          border-right:1px solid #E0E0E0;
+          .check-p{
+            background-color: #0183FA;
+            border-radius:2px;
+            color:#fff;
+            text-align: center;
+            line-height:14px;
+            width:14px;
+            height:14px;
+            font-size:12px;
+            margin:13px 15px 13px 13px;
+            cursor: pointer;
+          }
+          .no-check-p{
+            border:1px solid #E0E0E0;
+            border-radius:2px;
+            background-color: #fff;
+            color:#fff;
+            text-align: center;
+            line-height:14px;
+            width:14px;
+            height:14px;
+            margin:13px 15px 13px 13px;
+            cursor: pointer;
+          }
+          .no-check-p:hover{
+            border:1px solid #0183FA;
+          }
+          .tree-title-p{
+            font-size:16px;
+            color: #333;
+            line-height:40px;
+          }
+        }
+        .tree-title-name-p{
+          width:420px;
+          text-align: center;
+          font-size:16px;
+          color: #333;
+          line-height:40px;
+        }
+      }
+      //表格滚动条样式
+      .tree-check-box::-webkit-scrollbar{
+        width: 6px;     /*高宽分别对应横竖滚动条的尺寸*/
+        height: 6px;
+      }
+      .tree-check-box::-webkit-scrollbar-thumb{
+        border-radius: 5px;
+        background: #D3D7D4;
+      }
+      .tree-check-box::-webkit-scrollbar-track{
+        -webkit-box-shadow: inset 0 0 5px #FFFFFF;
+        border-radius: 0;
+        background: #FFFFFF;
+      }
+      .tree-check-box{
+        height:400px;
+        overflow-y: scroll;
+        border:1px solid #E0E0E0;
+        border-top:none;
+        ::v-deep .el-tree-node__content{
+          border-bottom:1px solid #E0E0E0;
+          height:40px;
+          .el-tree-node__label{
+            display: inline-block;
+            height:40px;
+            line-height:40px;
+            border-left:1px solid #E0E0E0;
+            padding-left:24px;
+          }
+          .el-tree-node__expand-icon{
+            margin-left:18px;
+          }
+          .el-tree-node__label{
+            margin-left:40px;
+          }
+          .custom-tree-node-code{
+            display: inline-block;
+            width:125px;
+            height:40px;
+            line-height:40px;
+            border-right:1px solid #E0E0E0;
+          }
+          .custom-tree-node-name{
+            padding-left:24px;
+          }
+        }
+        ::v-deep .el-tree-node__children{
+          .el-tree-node__content{
+            .custom-tree-node-code{
+              display: inline-block;
+              width:107px;
+              height:40px;
+              line-height:40px;
+              border-right:1px solid #E0E0E0;
+            }
+          }
+          .el-tree-node__children{
+            .el-tree-node__content{
+              .custom-tree-node-code{
+                display: inline-block;
+                width:89px;
+                height:40px;
+                line-height:40px;
+                border-right:1px solid #E0E0E0;
+              }
+            }
+          }
+        }
+      }
+    }
   }
 </style>

+ 430 - 0
src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/addSafetyInfoConfig.vue

@@ -0,0 +1,430 @@
+<!--新增信息配置-->
+<template>
+  <div class="page-container notice-addPage">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p">{{form.id?'编辑':'新增'}}</p>
+      <p class="page-top-title-out-p" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" @click="submitForm">提交</p>
+    </div>
+    <div class="content-box">
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px" >
+        <el-form-item label="信息名称:" prop="infoName">
+          <el-input v-model="form.infoName" maxlength="100" placeholder="请输入名称" style="width:600px;"/>
+        </el-form-item>
+        <el-form-item label="信息类目:"  prop="brandId" class="form-item">
+          <el-select placeholder="请选择类目" v-model="form.brandId" style="width:600px;" @change="categoryClick()">
+            <el-option
+              v-for="dict in categoryList"
+              :key="dict.brandId"
+              :label="dict.brandName"
+              :value="dict.brandId"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="信息类型:">
+          <el-input v-model="form.infoType==1?'文字':'图片'"   placeholder="" disabled style="width:600px;"/>
+        </el-form-item>
+        <el-form-item label="信息内容:" prop="infoContent" v-if="form.infoType==1">
+          <el-input type="textarea" v-model="form.infoContent"  maxlength="200" placeholder="请输入内容" style="width:600px;"/>
+        </el-form-item>
+        <el-form-item label="信息内容:" prop="infoContent" v-if="form.infoType==2">
+          <el-upload
+            class="certificate-avatar-uploader"
+            :action="uploadImgUrl"
+            :show-file-list="false"
+            :on-success="handleAvatarSuccess"
+            :headers="headers"
+            :before-upload="beforeAvatarUpload">
+            <div style="display: flex;">
+              <img v-if="form.infoContent" :src="form.infoContent" style="width: 80px;height: 80px;margin-right: 10px">
+              <i v-if="!form.infoContent" class="el-icon-plus avatar-uploader-icon"></i>
+            </div>
+          </el-upload>
+        </el-form-item>
+        <P v-if="form.infoType==2" style="margin-left: 120px">图片最大上传630*78,建议尺寸58*78</P>
+        <el-form-item label="危险源:">
+          <p class="danger-tip">实验室危险源满足以下分类配置,会在信息牌中自动显示此安全信息。</p>
+        </el-form-item>
+        <div class="danger-table">
+          <el-table class="table-box" v-loading="loading" border :data="form.listHazardModel"  ref="table-box">
+            <el-table-column label="序号" type="index" align="center" width="50"/>
+            <el-table-column label="危险源主分类"  align="left" prop="hazardName" show-overflow-tooltip/>
+            <el-table-column label="危险源子分类"  align="left" prop="hazardCodeName" show-overflow-tooltip/>
+            <el-table-column label="操作" width="120" align="left">
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                   @click="delHazard(scope.row)"
+                  >删除</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="danger-add" @click="dangerAdd">+ 新增危险源</div>
+      </el-form>
+    </div>
+    <el-dialog title="新增危险源分类" :visible.sync="dialogVisible" width="970px" append-to-body>
+      <div class="classify-name"><i>*</i>选择危险源分类:</div>
+      <div class="classify">
+        <div class="classify-li" v-for="(item,index) in conditionList">
+          <div class="classify-li-l">{{item.hazardName}}</div>
+          <div class="classify-li-r">
+            <p><el-checkbox v-model="item.checkAll" @change="handleCheckAllChange($event,item)">{{item.allName}}</el-checkbox></p>
+            <p>
+              <el-checkbox-group v-model="item.checkedCities" @change="handleCheckedCitiesChange($event,item)">
+                <el-checkbox v-for="item2 in item.dictItemModels" :label="item2.label" :key="item2.value">{{item2.label}}</el-checkbox>
+              </el-checkbox-group>
+            </p>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="cancel">取消</p>
+        <p class="dialog-footer-button-primary" @click="conditionSubmitForm">保存</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  laboratoryBrandDetailAdd, laboratoryBrandDetailGetDetailHazardConfig,
+  laboratoryBrandDetailUpdate,
+  laboratoryInfoBrandList
+} from '@/api/integratedManagement'
+  import { getToken } from '@/utils/auth'
+  export default {
+    name: 'addPage',
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        loading:false,
+        headers: {
+          Authorization: getToken()
+        },
+        tabsList:[],
+        categoryList:[],
+        infoType:null,
+        form: {
+          brandId:'',
+          infoName:'',
+          infoType:'',
+          infoContent:'',
+          isCollective:'',
+          listHazardModel:[],
+        },
+        dataList:[],
+        dialogVisible:false,
+        conditionList:[],
+
+        // 表单校验
+        rules: {
+          infoName: [
+            { required: true, message: "请输入名称", trigger: "blur" },
+          ],
+          brandId: [
+            { required: true, message: "请选择类目", trigger: "blur" },
+          ],
+          infoContent: [
+            { required: true, message: "请添加信息内容", trigger: "blur" },
+          ],
+        }
+      }
+    },
+    created(){
+      this.form = this.propsData;
+
+    },
+    mounted(){
+      this.getCategoryList();
+      this.laboratoryBrandDetailGetDetailHazardConfig();
+    },
+    methods:{
+      dangerAdd(){
+        this.dialogVisible=true;
+      },
+      //全选按钮
+      handleCheckAllChange(val,item) {
+        let name=[];
+        for (let i=0;i<item.dictItemModels.length;i++){
+          name.push(item.dictItemModels[i].label)
+        }
+        item.checkedCities = val ? name : [];
+      },
+      //单个选择按钮
+      handleCheckedCitiesChange(value,item) {
+        let checkedCount = value.length;
+        item.checkAll = checkedCount === item.dictItemModels.length;
+      },
+      // 取消按钮
+      cancel() {
+        this.dialogVisible = false;
+      },
+      categoryClick(){
+        let self=this;
+        this.form.infoContent='';
+        this.categoryList.forEach(function(item) {
+          if(item.brandId==self.form.brandId){
+            self.$set(self.form,'infoType',item.brandType);
+          }
+        })
+
+      },
+      //获取危险源列表
+      laboratoryBrandDetailGetDetailHazardConfig(){
+        let self=this;
+        laboratoryBrandDetailGetDetailHazardConfig({dictCode:'lab_dangerous_source'}).then( response => {
+
+          if (this.propsData.detailId){//编辑
+            response.data.forEach(function(item){
+              item.allName='全选';
+              item.checkAll=false;
+              item.checkedCities=[];
+            })
+
+            response.data.forEach(function(item){
+              let list=[];
+              //详情返回的数组
+              self.form.listHazardModel.forEach(function(item2) {
+                let hazardCodeName=item2.hazardCodeName.split(',')
+                if (item.hazardKey==item2.hazardKey){
+                  if (item.dictItemModels.length ==hazardCodeName.length){
+                    item.checkAll=true;
+                  }
+                  item.checkedCities=hazardCodeName;
+                }
+              })
+
+            })
+          }else{//新增
+            response.data.forEach(function(item){
+              item.allName='全选';
+              item.checkAll=false;
+              item.checkedCities=[];
+            })
+          }
+          this.$set(this,'conditionList',response.data)
+
+        });
+      },
+      //删除危险源
+      delHazard(row){
+        this.form.listHazardModel = this.form.listHazardModel.filter(item => item !== row);
+      },
+      //危险源保存
+      conditionSubmitForm(){
+        //分类认定条件数据筛选
+        console.log(this.conditionList)
+        let list=[];
+        this.conditionList.forEach(function(item) {
+          let list2=[];
+          let list3=[];
+          if (item.checkedCities.length>0){
+            item.dictItemModels.forEach(function(item2) {
+              item.checkedCities.forEach(function(item3) {
+                if (item3==item2.label){
+                  list2.push(item2.value)
+                  list3.push(item2.label)
+                }
+              })
+            })
+            list.push({hazardKey:item.hazardKey,hazardName:item.hazardName,hazardCode:list2.join(','),hazardCodeName:list3.join(',')})
+          }
+        })
+        if(!list[0]){
+          this.msgError('请勾选危险源分类')
+          return
+        }
+        this.$set(this.form, 'listHazardModel',list)
+        this.$set(this, 'dialogVisible',false)
+
+
+      },
+      //查询信息类目列表
+      getCategoryList(){
+        let obj={
+          page: 1,
+          pageSize:100,
+          isShow:1,
+        }
+        laboratoryInfoBrandList(obj).then( response => {
+          this.$set(this,'tabsList',response.data.records);
+          this.$set(this,'categoryList',response.data.records);
+          this.$set(this,'infoType',response.data.records[0]?response.data.records[0].brandType+'':'');
+
+        });
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.handleClick('','','back');
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.detailId) {
+              laboratoryBrandDetailUpdate(this.form).then( response => {
+                this.msgSuccess(response.message);
+                this.open = false;
+                this.$parent.handleClick('','','back');
+              });
+            } else {
+              laboratoryBrandDetailAdd(this.form).then( response => {
+                this.msgSuccess(response.message);
+                this.open = false;
+                this.$parent.handleClick('','','back');
+              });
+            }
+          }
+        });
+      },
+      //上传
+      handleAvatarSuccess(res, file) {
+        this.form.infoContent = res.data.url;
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file) {
+        return new Promise((resolve, reject) => {
+          if (file.type == 'image/png') {
+            let reader = new FileReader()
+            reader.readAsDataURL(file) // 必须用file.raw
+            reader.onload = e => { // 让页面中的img标签的src指向读取的路径
+              let img = e.target.result;
+              const image = new Image()
+              image.src=img
+              image.onload = _=>{
+                if(image.width <= 630 && image.height <= 78){
+                  resolve()
+                }else{
+                  this.msgError('尺寸限制为最大630*78px,支持PNG格式')
+                  reject();
+                }
+              }
+            }
+          }else{
+            this.msgError('请上传PNG格式');
+            reject();
+          }
+        })
+      },
+
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .notice-addPage{
+    .content-box{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      padding:20px;
+    }
+    .danger-tip{
+      font-weight: 400;
+      font-size: 16px;
+      color: #FF0000;
+      line-height: 24px;
+      text-align: left;
+      margin-top: 8px;
+    }
+    .danger-table{
+      width: 600px;
+      margin-left: 120px;
+    }
+    .danger-add{
+      width: 500px;
+      height: 40px;
+      border-radius: 4px 4px 4px 4px;
+      border: 1px dashed #0183FA;
+      margin-left: 170px;
+      font-weight: 400;
+      font-size: 14px;
+      color: #0183FA;
+      line-height: 40px;
+      text-align: center;
+      margin-top: 20px;
+      cursor: pointer;
+    }
+    .certificate-avatar-uploader{
+      i{
+        width:80px;
+        height:80px;
+        line-height:80px;
+        text-align: center;
+        border:1px solid #e0e0e0;
+        border-radius:4px;
+      }
+      img{
+        width:240px;
+        height:240px;
+      }
+    }
+
+  }
+  .classify-name{
+    margin-bottom: 20px;
+    margin-left: 34px;
+    >i{
+      color: #ff4949;
+      margin-right: 4px;
+    }
+    color: #333;
+    font-size: 14px;
+    font-weight: 500;
+  }
+  .classify{
+    width: 820px;
+    height: 236px;
+    overflow-y: auto;
+    margin-left: 38px;
+    .classify-li{
+      min-height: 80px;
+      display: flex;
+      justify-content: flex-start;
+      border: 1px solid #E0E0E0;
+      border-top: 0;
+      .classify-li-l{
+        width: 150px;
+        min-height: 80px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        border-right: 1px solid #E0E0E0;
+        background: #F5F5F5;
+      }
+      .classify-li-r{
+        .el-checkbox{
+          margin:4px 30px 4px 0;
+        }
+        flex: 1;
+        >p{
+          display: flex;
+          align-items: center;
+          padding-left: 14px;
+          box-sizing: border-box;
+        }
+        >p:nth-of-type(1){
+          min-height: 40px;
+          border-bottom:1px solid #E0E0E0;
+          background: #F5F5F5;
+        }
+        >p:nth-of-type(2){
+          min-height: 40px;
+        }
+      }
+    }
+    .classify-li:first-child{
+      border-top: 1px solid #E0E0E0;
+    }
+  }
+</style>

+ 2 - 2
src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/safetyInfoCategory.vue

@@ -1,6 +1,6 @@
 <!--安全信息类目-->
 <template>
-  <div class="safetyInfoCategory">
+  <div class="safetyInfoCategory ">
     <div class="title-box">
       <div>
         <p class="top-p-color">安全类目</p>
@@ -11,7 +11,7 @@
         <p></p>
       </div>
     </div>
-    <div class="approval_handle-page" v-if="pageType == 1">
+    <div class="approval_handle-page scrollbar-box" v-if="pageType == 1">
       <el-form :model="queryParams" ref="queryForm" style="margin-top:20px;" :inline="true">
         <el-form-item label="" prop="name">
           <el-input

+ 137 - 230
src/views/integratedManagement/laboratoryManagement/safetyInfoCategory/safetyInfoConfig.vue

@@ -1,162 +1,131 @@
 <!--安全信息配置-->
 <template>
   <div class="safetyInfoConfig">
-    <div class="title-box">
-      <div @click="titleClick(1)">
-        <p>安全类目</p>
-        <p></p>
-      </div>
-      <div @click="titleClick(2)">
-        <p>信息配置</p>
-        <p class="bottom-p-color"></p>
-      </div>
-    </div>
-    <div class="config_main">
-      <div class="config_main_l scrollbar-box">
-        <div class="config_main_l_title">
-          <img  src="@/assets/ZDimages/integratedManagement/icon_xxpz_aqxxlm.png">
-          安全信息类目
+    <div class="approval_handle-page scrollbar-box" v-if="pageType==1">
+      <div class="title-box">
+        <div @click="titleClick(1)">
+          <p>安全类目</p>
+          <p></p>
         </div>
-        <div :class='currentIndex==index?"active":""' class="config_main_l_li"
-             v-for="(item,index) in tabsList" :key="index" @click="handleTabClick(item,index)">
-          {{item.brandName}}
+        <div @click="titleClick(2)">
+          <p>信息配置</p>
+          <p class="bottom-p-color"></p>
         </div>
       </div>
-      <p class="config_main_border"></p>
-      <div class="approval_handle-page">
-        <div>
-          <p class="page-submit-common-style-button"
-             style="float: right;margin-bottom:20px;"
-             @click="handleClick('','','add')"
-             v-hasPermiRouter="['lab:infoBrand:add']"
-          >新增</p>
+      <div class="config_main">
+        <div class="config_main_l">
+          <div class="config_main_l_title">
+            <img  src="@/assets/ZDimages/integratedManagement/icon_xxpz_aqxxlm.png">
+            安全信息类目
+          </div>
+          <div :class='currentIndex==index?"active":""' class="config_main_l_li"
+               v-for="(item,index) in tabsList" :key="index" @click="handleTabClick(item,index)">
+            {{item.brandName}}
+          </div>
         </div>
-        <el-table class="table-box" border v-loading="loading" :data="tableData">
-          <el-table-column label="排序" align="left" class-name="small-padding fixed-width" width="80">
-            <template slot-scope="scope">
-              <el-input
-                onkeyup="value=value.replace(/[^\d]/g,'')"
-                class="serial"
-                v-model="scope.row.orderNum"
-                @change="categorySort(scope.row)"
-                maxLength="3"
-                placeholder="序号">
-              </el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="信息名称" align="left" prop="infoName"/>
-          <el-table-column label="公共信息" align="left">
-            <template slot-scope="scope">
-              <el-switch
-                @click.native="categoryShow(scope.row)"
-                class="switch captcha-img"
-                :active-value="true"
-                :inactive-value="false"
-                active-color="#FF9900"
-                inactive-color="#999"
-                v-model="scope.row.isCollective"
-                active-text="是"
-                inactive-text="否"
-                disabled
-              ></el-switch>
-            </template>
-          </el-table-column>
-          <el-table-column label="添加人" align="left" prop="createName"/>
-          <el-table-column label="添加时间" align="left" prop="createTime">
-            <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
-            <template slot-scope="scope">
-              <div class="table-button-box">
-                <p class="table-button-null"></p>
-                <p class="table-button-p"
-                   v-hasPermiRouter="['lab:infoBrand:edit']"
-                   @click="handleClick('',scope.row,'edit')"
-                >编辑</p>
-                <p class="table-button-p"
-                   v-hasPermiRouter="['lab:infoBrand:del']"
-                   @click="handleClick('',scope.row,'delete')"
-                >删除</p>
-                <p class="table-button-null"></p>
-              </div>
-            </template>
-          </el-table-column>
-        </el-table>
-        <pagination :page-sizes="[20, 30, 40, 50]"
-                    :total="total"
-                    layout="total, prev, pager, next, sizes, jumper"
-                    :page.sync="queryParams.page"
-                    :limit.sync="queryParams.pageSize"
-                    @pagination="getList"
-        />
-      </div>
-    </div>
+        <p class="config_main_border"></p>
+        <div class="approval_handle-page scrollbar-box">
+          <div>
+            <p class="page-submit-common-style-button"
+               style="float: right;margin-bottom:20px;"
+               @click="handleClick('','','add')"
+               v-hasPermiRouter="['lab:infoBrand:add']"
+            >新增</p>
+          </div>
+          <el-table class="table-box" border v-loading="loading" :data="tableData">
+            <el-table-column label="排序" align="left" class-name="small-padding fixed-width" width="80">
+              <template slot-scope="scope">
+                <el-input
+                  onkeyup="value=value.replace(/[^\d]/g,'')"
+                  class="serial"
+                  v-model="scope.row.orderNum"
+                  @change="categorySort(scope.row)"
+                  maxLength="3"
+                  placeholder="序号">
+                </el-input>
+              </template>
+            </el-table-column>
+            <el-table-column label="信息名称" align="left" prop="infoName"/>
+            <el-table-column label="公共信息" align="left">
+              <template slot-scope="scope">
+                <el-switch
+                  @click.native="categoryShow(scope.row)"
+                  class="switch captcha-img"
+                  :active-value="true"
+                  :inactive-value="false"
+                  active-color="#FF9900"
+                  inactive-color="#999"
+                  v-model="scope.row.isCollective"
+                  active-text="是"
+                  inactive-text="否"
+                  disabled
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column label="危险源" align="left" prop="isConfigHazard" width="100">
+              <template slot-scope="scope">
+                <span v-if="scope.row.isConfigHazard">已配置</span>
+                <span v-if="!scope.row.isConfigHazard" style="color: #FF0000;">未配置</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="添加人" align="left" prop="createName"/>
+            <el-table-column label="添加时间" align="left" prop="createTime">
+              <template slot-scope="scope">
+                <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+              </template>
+            </el-table-column>
 
-
-    <!-- 添加或修改安全分级对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body :before-close="closeDialog" :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px" >
-        <el-form-item label="信息名称" prop="infoName">
-          <el-input v-model="form.infoName" maxlength="100" placeholder="请输入名称" style="width:320px;"/>
-        </el-form-item>
-        <el-form-item label="信息类目"  prop="brandId" class="form-item">
-          <el-select placeholder="请选择类目" v-model="form.brandId" style="width:320px;" @change="categoryClick()">
-            <el-option
-              v-for="dict in categoryList"
-              :key="dict.brandId"
-              :label="dict.brandName"
-              :value="dict.brandId"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="信息类型">
-          <el-input v-model="form.infoType==1?'文字':'图片'"   placeholder="" disabled style="width:320px;"/>
-        </el-form-item>
-        <el-form-item label="信息内容" prop="infoContent" v-if="form.infoType==1">
-          <el-input type="textarea" v-model="form.infoContent"  maxlength="200" placeholder="请输入内容" style="width:320px;"/>
-        </el-form-item>
-        <el-form-item label="信息内容" prop="infoContent" v-if="form.infoType==2">
-          <el-upload
-            class="certificate-avatar-uploader"
-            :action="uploadImgUrl"
-            :show-file-list="false"
-            :on-success="handleAvatarSuccess"
-            :headers="headers"
-            :before-upload="beforeAvatarUpload">
-            <div style="display: flex;">
-              <img v-if="form.infoContent" :src="form.infoContent" style="width: 80px;height: 80px;margin-right: 10px">
-              <i v-if="!form.infoContent" class="el-icon-plus avatar-uploader-icon"></i>
-            </div>
-          </el-upload>
-        </el-form-item>
-        <P v-if="form.infoType==2" style="margin-left: 80px">图片最大上传630*78,建议尺寸58*78</P>
-      </el-form>
-      <div slot="footer" class="dialog-footer dialog-footer-box">
-        <p class="dialog-footer-button-null"></p>
-        <p class="dialog-footer-button-info" @click="cancel">取消</p>
-        <p class="dialog-footer-button-primary" @click="submitForm">提交</p>
-        <p class="dialog-footer-button-null"></p>
+            <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="120" v-if="tableButtonType">
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     v-hasPermiRouter="['lab:infoBrand:edit']"
+                     @click="handleClick('',scope.row,'edit')"
+                  >编辑</p>
+                  <p class="table-button-p"
+                     v-hasPermiRouter="['lab:infoBrand:del']"
+                     @click="handleClick('',scope.row,'delete')"
+                  >删除</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      :total="total"
+                      layout="total, prev, pager, next, sizes, jumper"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
       </div>
-    </el-dialog>
+    </div>
+    <add-safety-info-config :propsData="propsData" v-if="pageType==2"></add-safety-info-config>
   </div>
 </template>
 
 <script>
+import addSafetyInfoConfig from "./addSafetyInfoConfig";
 import { getToken } from "@/utils/auth";
-import { laboratoryInfoBrandList , laboratoryBrandDetailAdd, laboratoryBrandDetailList, laboratoryBrandDetailUpdate, laboratoryBrandDetailDelete } from '@/api/integratedManagement/index'
+import {
+  laboratoryInfoBrandList,
+  laboratoryBrandDetailAdd,
+  laboratoryBrandDetailList,
+  laboratoryBrandDetailUpdate,
+  laboratoryBrandDetailDelete,
+  laboratoryBrandDetailDetail, laboratoryClassTypeUpdate
+} from '@/api/integratedManagement/index'
 export default {
   name: "Approval",
+  components: {
+    addSafetyInfoConfig,
+  },
   data() {
     return {
       tableButtonType:this.hasPermiDom(['lab:infoBrand:edit','lab:infoBrand:del',]),
       uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
-      activeName: '',
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
       //页面状态
       pageType:1,
       loading:false,
@@ -175,28 +144,13 @@ export default {
       pageData2:{},
       tabsList:[],
       categoryList:[],
+      //组件传参
+      propsData:{},
       // 表单参数
       infoType:null,
-      form: {
-        brandId:'',
-        infoName:'',
-        infoType:'',
-        infoContent:'',
-        isCollective:'',
-      },
+
       currentIndex:0,
-      // 表单校验
-      rules: {
-        infoName: [
-          { required: true, message: "请输入名称", trigger: "blur" },
-        ],
-        brandId: [
-          { required: true, message: "请选择类目", trigger: "blur" },
-        ],
-        infoContent: [
-          { required: true, message: "请添加信息内容", trigger: "blur" },
-        ],
-      }
+
     };
 
 
@@ -205,11 +159,6 @@ export default {
       titleClick(type){
         this.$parent.titleClick(type);
       },
-
-      closeDialog(){
-        this.$refs['form'].clearValidate()
-        this.open=false
-      },
       handleTabClick(item,index){
         this.currentIndex = index
         this.queryParams.brandId=item.brandId;
@@ -219,28 +168,34 @@ export default {
       handleClick(index,row,doType){
         let self=this;
         if(doType=='add'){//添加
-          this.title='新增安全信息';
-          this.$set(this,'form',{
+          let obj={
             brandId:this.queryParams.brandId,
             infoType:this.infoType,
-            infoName:'',
-            infoContent:'',
-          });
-          this.open = true;
+            listHazardModel:[],
+          }
+          this.$set(this,'propsData',obj)
+          this.$set(this,'pageType',2)
         }else if(doType=='edit'){//编辑
-          this.title='编辑安全信息';
-          this.$set(this,'form',{
-            detailId:row.detailId,
-            brandId:row.brandId,
-            infoName:row.infoName,
-            infoType:row.infoType,
-            infoContent:row.infoContent,
-            isCollective:row.isCollective,
-            orderNum:row.orderNum,
+
+          laboratoryBrandDetailDetail({detailId:row.detailId}).then( response => {
+             if (response.code==200){
+               let obj={
+                 detailId:response.data.detailId,
+                 brandId:response.data.brandId,
+                 infoName:response.data.infoName,
+                 infoType:response.data.infoType,
+                 infoContent:response.data.infoContent,
+                 isCollective:response.data.isCollective,
+                 orderNum:response.data.orderNum,
+                 listHazardModel:response.data.listHazardModel,
+               }
+               this.$set(this,'propsData',obj)
+               this.$set(this,'pageType',2)
+             }
           });
-          this.open = true;
+
         }else if(doType=='deploy'){//信息牌配置
-          self.pageType=2;
+          //self.pageType=2;
         }else if(doType=='delete'){//删除
           this.$confirm('确认要删除吗?', "警告", {
             confirmButtonText: "确定",
@@ -254,7 +209,8 @@ export default {
             });
           }).catch(function() {});
         }else if(doType=='back'){//返回
-          self.pageType=1;
+          this.$set(this,'pageType',1)
+          self.getList();
         }
       },
       categorySort(row){
@@ -322,55 +278,6 @@ export default {
         this.$refs['form'].clearValidate()
         this.open = false;
       },
-      /** 提交按钮 */
-      submitForm() {
-        this.$refs["form"].validate(valid => {
-          if (valid) {
-            if (this.form.detailId) {
-              laboratoryBrandDetailUpdate(this.form).then( response => {
-                this.msgSuccess(response.message);
-                this.open = false;
-                this.getList();
-              });
-            } else {
-              laboratoryBrandDetailAdd(this.form).then( response => {
-                this.msgSuccess(response.message);
-                this.open = false;
-                this.getList();
-              });
-            }
-          }
-        });
-      },
-      //上传
-      handleAvatarSuccess(res, file) {
-        this.form.infoContent = res.data.url;
-        this.$forceUpdate()
-      },
-      beforeAvatarUpload(file) {
-        return new Promise((resolve, reject) => {
-          if (file.type == 'image/png') {
-            let reader = new FileReader()
-            reader.readAsDataURL(file) // 必须用file.raw
-            reader.onload = e => { // 让页面中的img标签的src指向读取的路径
-              let img = e.target.result;
-              const image = new Image()
-              image.src=img
-              image.onload = _=>{
-                if(image.width <= 630 && image.height <= 78){
-                  resolve()
-                }else{
-                  this.msgError('尺寸限制为最大630*78px,支持PNG格式')
-                  reject();
-                }
-              }
-            }
-          }else{
-            this.msgError('请上传PNG格式');
-            reject();
-          }
-        })
-      },
       //查询信息类目列表
       getCategoryList(){
         let obj={

+ 467 - 158
src/views/integratedManagement/laboratoryManagement/subject/addSubject.vue

@@ -40,28 +40,44 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="安全分类"  prop="typeId" class="form-item" v-if="!form.dynamicLeveling">
-          <el-select v-model="form.typeId" multiple collapse-tags placeholder="请选择安全分类" style="width: 320px">
-            <el-option
-              v-for="dict in typeList"
-              :key="dict.typeId"
-              :label="dict.typeName"
-              :value="dict.typeId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="安全分级"  prop="levelId" class="form-item" v-if="!form.dynamicLeveling">
-          <el-select v-model="form.levelId" placeholder="请选择安全分级"
-                     :disabled="form.dynamicLeveling" clearable style="width:320px;">
-            <el-option
-              v-for="dict in levelList"
-              :key="dict.levelId"
-              :label="dict.levelName"
-              :value="dict.levelId"
-            ></el-option>
-          </el-select>
+        <div style="display: inline-block;">
+          <el-form-item label="安全分级"  prop="levelId" class="form-item" v-if="!form.dynamicLeveling">
+            <el-input
+              disabled
+              style="width:220px;"
+              v-model="form.titleName"
+              placeholder="请选择安全分级"
+              clearable
+              size="small"
+            />
+          </el-form-item>
+          <p class="page-reset-common-style-button" @click="LevelClick()" style="margin-left:12px;margin-bottom:20px;width:90px;">分级配置</p>
+        </div>
+        <div style="display: inline-block;">
+          <el-form-item label="安全分类"  prop="typeId" class="form-item" v-if="!form.dynamicLeveling">
+            <el-input
+              disabled
+              style="width:220px;"
+              v-model="form.subType"
+              placeholder="请选择安全分类"
+              clearable
+              size="small"
+            />
+          </el-form-item>
+          <p class="page-reset-common-style-button" @click="classifyClick()" style="margin-left:12px;margin-bottom:20px;width:90px;">分类配置</p>
+        </div>
+        <el-form-item label="实验室面积" prop="subArea" class="form-item">
+          <el-input
+            style="width:320px;"
+            v-model="form.subArea"
+            placeholder="请输入面积"
+            oninput="value=value.replace(/[^0-9.]/g,'')"
+            maxlength="4"
+            size="small">
+            <template slot="append">M²</template>
+          </el-input>
         </el-form-item>
-        <el-form-item label="动态评级" class="form-item" style="width:440px;">
+<!--        <el-form-item label="动态评级" class="form-item" style="width:440px;">
           <div class="tableListPaginationSwitch">
             <el-switch
               class="switch captcha-img"
@@ -74,7 +90,7 @@
             <i class="el-icon-warning tip-img"></i>
             <i class="tip-content">如需人工评定,请关闭动态评级</i>
           </div>
-        </el-form-item>
+        </el-form-item>-->
         <el-form-item label="楼栋"  prop="buildId" class="form-item">
           <el-select v-model="form.buildId" placeholder="请选择楼栋"
                      @change="changeBuild" style="width:320px;">
@@ -107,17 +123,7 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="实验室面积" prop="subArea" class="form-item">
-          <el-input
-            style="width:320px;"
-            v-model="form.subArea"
-            placeholder="请输入面积"
-            oninput="value=value.replace(/[^0-9.]/g,'')"
-            maxlength="4"
-            size="small">
-            <template slot="append">M²</template>
-          </el-input>
-        </el-form-item>
+
         <el-form-item label="准入设备"  class="form-item">
           <el-select v-model="form.hardwareType" placeholder="请选择整改类型" style="width:320px;" @change="hardwareTypeFun()" >
             <el-option label="无"  :value="0" />
@@ -127,11 +133,7 @@
         </el-form-item>
         <div class="bottom-form-max-box">
           <div class="title-button-box">
-            <div class="title-min-button-box" :class="checkButtonType == 1?'checkButtonBox':''">
-              <p @click="clickButtonType(1)">管控一体机</p>
-              <p></p>
-            </div>
-            <div class="title-min-button-box" :class="checkButtonType == 2?'checkButtonBox':''">
+            <div class="title-min-button-box checkButtonBox">
               <p @click="clickButtonType(2)">安全信息牌</p>
               <p></p>
             </div>
@@ -140,96 +142,8 @@
               <p></p>
             </div>
           </div>
-          <!--管控一体机-->
-          <div class="bottom-form-box-one" v-if="checkButtonType == 1">
-            <div class="left-form-box">
-              <el-form-item label="实验室负责人" prop="adminId" class="form-item" label-width="150px">
-                <el-select
-                  style="width:500px;"
-                  v-model="form.adminId"
-                  filterable
-                  remote
-                  clearable
-                  reserve-keyword
-                  placeholder="请输入至少2个字符搜索相关人员"
-                  :remote-method="userSelectList"
-                  :loading="loading">
-                  <el-option
-                    v-for="item in optionsUser"
-                    :key="item.userId"
-                    :label="item.userName"
-                    :value="item.userId">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="安全警示标识" prop="safeSigns" class="form-item" label-width="150px">
-                <el-select v-model="form.safeSigns" multiple collapse-tags placeholder="请选择安全警示标识" style="width:500px;">
-                  <el-option
-                    v-for="dict in safetyWarning"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="风控防控措施" prop="riskMeasure" class="form-item" label-width="150px">
-                <el-select v-model="form.riskMeasure" multiple collapse-tags placeholder="请选择风险防控措施" style="width:500px;">
-                  <el-option
-                    v-for="dict in riskMeasure"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-            <div class="right-form-box">
-              <el-form-item label="安全员" prop="safeUserId" class="form-item" label-width="150px">
-                <el-select
-                  style="width:500px;"
-                  v-model="form.safeUserId"
-                  :multiple-limit="2"
-                  multiple
-                  filterable
-                  remote
-                  clearable
-                  reserve-keyword
-                  placeholder="请输入至少2个字符搜索相关人员"
-                  :remote-method="userSelectListOne"
-                  :loading="loading">
-                  <el-option
-                    v-for="item in optionsUserOne"
-                    :key="item.userId"
-                    :label="item.userName"
-                    :value="item.userId">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="主要危险类别" prop="hazardCategory" class="form-item" label-width="150px">
-                <el-select v-model="form.hazardCategory"
-                           multiple collapse-tags placeholder="请选择主要危险类别" style="width:500px;">
-                  <el-option
-                    v-for="dict in hazardCategory"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="灭火要点" prop="outFire" class="form-item" label-width="150px">
-                <el-select v-model="form.outFire" multiple collapse-tags placeholder="请选择灭火要点" style="width:500px;">
-                  <el-option
-                    v-for="dict in extinguishingKeyPoints"
-                    :key="dict.value"
-                    :label="dict.label"
-                    :value="dict.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-          </div>
           <!--安全信息牌-->
-          <div class="bottom-form-box" v-if="checkButtonType == 2">
+          <div class="bottom-form-box">
             <div class="top-form-box">
               <el-form-item label="实验室负责人" prop="adminId" class="form-item" label-width="150px">
                 <el-select
@@ -275,7 +189,7 @@
             <div class="bottom-form-box">
               <el-form-item v-if="item.publicList.length>0" :label="item.brandName" prop="safeSigns" class="form-item"
                             v-for="(item,index) in  safetyInfoList" label-width="150px">
-                <el-select v-if="item.publicList.length>0" v-model="item.privateList"
+                <el-select v-if="item.publicList.length>0" v-model="item.privateList" filterable
                            multiple collapse-tags placeholder="请选择" style="width:500px;">
                   <el-option
                     v-for="dict in item.publicList"
@@ -296,16 +210,81 @@
         </div>
       </el-form>
     </div>
+    <el-dialog title="分级配置" :visible.sync="dialogLevelVisible" width="970px" append-to-body>
+      <div class="tabs">
+        <div class="tabs-li" v-for="(item,index) in tabsList" @click="tabsClick(index)" :class="tabsIndex==index?'color-B':'color-A'">{{item}}</div>
+      </div>
+
+      <div class="level" style="height: 500px;overflow-y: auto;">
+        <!-- 分类依据-->
+        <div class="level-box" v-for="(item,index) in levelBasisList" :key="index" v-if="tabsIndex==0">
+          <div class="level-title" :style="'background:'+item.color">{{item.name}}</div>
+          <div class="level-thead">
+            <i>选择</i>
+            <i>序号</i>
+            <i>内容</i>
+          </div>
+          <div class="level-li" v-for="(item2,index2) in item.list" :key="index2">
+            <i><el-checkbox v-model="item2.selected"></el-checkbox></i>
+            <i>{{index2+1}}</i>
+            <i>{{item2.content}}</i>
+          </div>
+          <div class="level-li2">{{item.remark}}</div>
+        </div>
+        <!-- 风险评价-->
+        <div class="level-box" v-for="(item,index) in levelEvaluateList" :key="index" v-if="tabsIndex==1">
+          <div class="level-title">{{item.name}}</div>
+          <div class="level-thead">
+            <i>选择</i>
+            <i>序号</i>
+            <i>内容</i>
+          </div>
+          <div class="level-li" v-for="(item2,index2) in item.list" :key="index2">
+            <i><el-checkbox v-model="item2.selected"></el-checkbox></i>
+            <i>{{index2+1}}</i>
+            <i>{{item2.content}}</i>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-primary" @click="levelSubmitForm">确认</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+    <el-dialog title="分类配置" :visible.sync="dialogClassifyVisible" width="970px" append-to-body>
+      <div class="classify">
+        <div class="classify-thead">
+          <i>选择</i>
+          <i>实验室分类</i>
+          <i>分类参考依据</i>
+        </div>
+        <div class="classify-li" v-for="(item,index) in classifyList">
+          <i @click="radioClick(item,index)"><el-radio v-model="item.selected" :label="true" ><span></span></el-radio></i>
+          <i>{{item.subType}}</i>
+          <i>{{item.typeBasis}}</i>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-primary" @click="classifySubmitForm">确认</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import {
   getDeptDropList, systemBuildingGetOptList, laboratoryClassMoldGetList,
-  laboratoryClassLevelGetList, laboratoryClassTypeGetList, systemRoomInfoGetList,
-  systemUserSelectUser, systemUserDropAuthList
+   systemRoomInfoGetList,systemUserDropAuthList
 } from '@/api/commonality/permission'
-    import { laboratoryInfoBrandGetClassifyBySubId,laboratorySubRelInfoAdd,laboratorySubRelInfoUpdate,laboratorySubRelInfoGetDetailInfo } from "@/api/integratedManagement/index";
+import {
+  laboratoryInfoBrandGetClassifyBySubId, laboratoryLevelConfigGetCalculateByData, laboratoryLevelConfigGetList,
+  laboratorySubRelInfoAdd,
+  laboratorySubRelInfoUpdate, laboratoryTypeConfigGetList
+} from '@/api/integratedManagement/index'
+import { chemicalMsdsEdit } from '@/api/chemicalManage'
     export default {
       name: "addSubject",
       props:{
@@ -314,8 +293,6 @@ import {
       data() {
         return {
           loading:false,
-          levelList:[],
-          typeList:[],
           deptOptions:[],
           buildings:[],
           floors:[],
@@ -379,6 +356,14 @@ import {
           labMoldList:[],
           //一体机/电子信息牌状态切换
           checkButtonType:1,
+          tabsList:['分级依据','风险评级'],
+          tabsIndex:0,
+          dialogLevelVisible:false,
+          dialogClassifyVisible:false,
+          levelBasisList:[],
+          levelEvaluateList:[],
+          classifyList:[],
+
         }
       },
       created() {
@@ -393,12 +378,10 @@ import {
           this.$set(this.form,'subId',this.subjectData.subId)
           this.$set(this.form,'subName',this.subjectData.subName)
           this.$set(this.form,'moldId',this.subjectData.moldId)
-          if(this.subjectData.typeId){
-            this.$set(this.form,'typeId',this.subjectData.typeId.split(','))
-          }else{
-            this.$set(this.form,'typeId',[])
-          }
+          this.$set(this.form,'typeId',this.subjectData.typeId)
+          this.$set(this.form,'subType',this.subjectData.typeName)
           this.$set(this.form,'levelId',this.subjectData.levelId)
+          this.$set(this.form,'titleName',this.subjectData.levelName)
           this.$set(this.form,'deptId',this.subjectData.deptId)
           this.$set(this.form,'buildId',this.subjectData.buildId)
           this.$set(this.form,'floorId',this.subjectData.floorId)
@@ -470,16 +453,27 @@ import {
         }
       },
       methods:{
+        LevelClick(){
+          this.$set(this,'dialogLevelVisible',true);
+        },
+        classifyClick(){
+          this.$set(this,'dialogClassifyVisible',true);
+        },
+        tabsClick(index){
+          this.tabsIndex=index;
+        },
+        radioClick(row,index){
+          this.classifyList.forEach(function(item) {
+            item.selected=false;
+          })
+          this.classifyList[index].selected=true;
+        },
         //初始化数据查询
         getInitializeData(){
           //学院
           this.getDeptDropList();
           //楼栋
           this.systemBuildingGetOptList(2);
-          //分类
-          this.laboratoryClassTypeGetList();
-          //分级
-          this.laboratoryClassLevelGetList();
           //类型
           this.laboratoryClassMoldGetList();
           //安全标识字典
@@ -498,6 +492,11 @@ import {
           this.getDicts("sys_extinguishing_key_points").then(response => {
             this.$set(this,'extinguishingKeyPoints',response.data);
           });
+          //分级配置列表
+          this.laboratoryLevelConfigGetList();
+          this.laboratoryLevelConfigGetListTow();
+          //分类配置列表
+          this.laboratoryTypeConfigGetList();
         },
         //查询学院下拉列表
         getDeptDropList(){
@@ -521,18 +520,6 @@ import {
             this.$set(this,'rooms',response.data);
           });
         },
-        //查询安全分类下拉列表
-        laboratoryClassTypeGetList(){
-          laboratoryClassTypeGetList({}).then(response => {
-            this.$set(this,'typeList',response.data);
-          });
-        },
-        //查询安全分级列表
-        laboratoryClassLevelGetList(){
-          laboratoryClassLevelGetList({}).then(response => {
-            this.$set(this,'levelList',response.data);
-          });
-        },
         //查询实验室类型下拉列表
         laboratoryClassMoldGetList(){
           laboratoryClassMoldGetList({}).then(response => {
@@ -557,7 +544,6 @@ import {
           }
         },
         upData(){
-          console.log(this.form)
           let self = this;
           this.$set(this.form,'details',this.$refs.UEditor.text);
           this.$refs["form"].validate(valid => {
@@ -582,9 +568,6 @@ import {
                 if(self.form.safeUserId) {
                   self.form.safeUserId = self.form.safeUserId.join() ;
                 }
-                if(self.form.typeId) {
-                  self.form.typeId = self.form.typeId.join() ;
-                }
                 //循环取安全信息牌信息
 
                 let list=[]
@@ -601,6 +584,7 @@ import {
                 if(self.form.infoId){
                   self.laboratorySubRelInfoUpdate();
                 }else{
+
                   self.laboratorySubRelInfoAdd();
                 }
               }).then(() => {}).catch(() => {});
@@ -626,6 +610,87 @@ import {
         backPage(){
           this.$parent.clickPage(1,'');
         },
+        //分级配置列表
+        laboratoryLevelConfigGetList(){
+          let obj={
+            levelType:'1', //1分级依据 2风险评价
+          }
+          laboratoryLevelConfigGetList(obj).then(response => {
+            if (this.subjectData.levelRecord){
+              let list = this.subjectData.levelRecord.split(',');
+              response.data.forEach(function(item) {
+                item.list.forEach(function(item2) {
+                  item2.selected=false;
+                  list.forEach(function(item3) {
+                    if (item2.configId==item3){
+                      item2.selected=true;
+                    }
+                  })
+                })
+              })
+            }else{
+              response.data.forEach(function(item) {
+                item.list.forEach(function(item2) {
+                  item2.selected=false;
+                })
+              })
+            }
+
+            this.$set(this, 'levelBasisList',response.data)
+          });
+        },
+        //分级配置列表
+        laboratoryLevelConfigGetListTow(){
+          let obj={
+            levelType:'2', //1分级依据 2风险评价
+          }
+          laboratoryLevelConfigGetList(obj).then(response => {
+              if (this.subjectData.levelRecord){
+                let list = this.subjectData.levelRecord.split(',');
+                response.data.forEach(function(item) {
+                  item.list.forEach(function(item2) {
+                    item2.selected=false;
+                    list.forEach(function(item3) {
+                      if (item2.configId==item3){
+                        item2.selected=true;
+                      }
+                    })
+                  })
+                })
+              }else{
+                response.data.forEach(function(item) {
+                  item.list.forEach(function(item2) {
+                    item2.selected=false;
+                  })
+                })
+              }
+
+            this.$set(this, 'levelEvaluateList',response.data)
+          });
+        },
+        //分类配置列表
+        laboratoryTypeConfigGetList(){
+          let self=this;
+          laboratoryTypeConfigGetList().then(response => {
+            if (this.subjectData.typeId){
+              response.data.forEach(function(item) {
+                item.selected=false;
+              })
+              response.data.forEach(function(item) {
+                if (item.typeId==self.subjectData.typeId){
+                  item.selected=true;
+                }
+              })
+            }else{
+              response.data.forEach(function(item) {
+                item.selected=false;
+              })
+            }
+
+            this.$set(this, 'classifyList',response.data)
+          });
+        },
+
         /** 查询楼栋列表  */
         getBuildings(id) {
           if(id) {
@@ -677,6 +742,65 @@ import {
             this.$set(this,'optionsUserOne',[]);
           }
         },
+        //分级确定
+        levelSubmitForm(){
+          let self=this;
+          let list=[]
+          let listId=[]
+          let list2=[]
+          let listId2=[]
+
+          this.levelBasisList.forEach(function(item) {
+            item.list.forEach(function(item2) {
+              if (item2.selected){
+                list.push(item2)
+                listId.push(item2.configId)
+              }
+            })
+          })
+          this.levelEvaluateList.forEach(function(item) {
+            item.list.forEach(function(item2) {
+              if (item2.selected){
+                list2.push(item2)
+                listId2.push(item2.configId)
+              }
+            })
+          })
+
+          if (this.tabsIndex==0 && !list[0]){
+            self.msgError("请选择分级评定依据!");
+            return
+          }
+          if (this.tabsIndex==1 && !list2[0]){
+            self.msgError("请选择风险评价!");
+            return
+          }
+          list = list.concat(list2);
+          listId = listId.concat(listId2);
+          this.$set(this.form, 'levelRecord',listId.join(','))
+          laboratoryLevelConfigGetCalculateByData(list).then( response => {
+              this.$set(this.form, 'levelId',response.data.levelId)
+              this.$set(this.form, 'titleName',response.data.titleName)
+              this.$set(this, 'dialogLevelVisible',false)
+
+          });
+
+        },
+        //分类确定
+        classifySubmitForm(){
+          let self=this;
+
+          this.classifyList.forEach(function(item) {
+            if (item.selected){
+              self.$set(self.form, 'typeId',item.typeId)
+              self.$set(self.form, 'subType',item.subType)
+              self.$set(self, 'dialogClassifyVisible',false)
+            }
+          })
+          if (!self.form.typeId){
+            self.msgError("请选择实验室分类!");
+          }
+        },
       }
     }
 </script>
@@ -790,6 +914,191 @@ import {
       }
     }
   }
+  .tabs{
+    display: flex;
+    justify-content: flex-start;
+    margin-left: 42px;
+    .tabs-li{
+      font-weight: 400;
+      font-size: 16px;
+      color: #333333;
+      padding-bottom: 20px;
+      box-sizing: border-box;
+      margin-right: 40px;
+      cursor: pointer;
+    }
+    .color-A{
+      color: #333333;
+    }
+    .color-B{
+      color: #043581;
+      border-bottom: 4px solid #043581;
+    }
+  }
+  .level{
+    border: 1px solid #E0E0E0;
+    width: 820px;
+    margin-left: 40px;
+    .level-box{
+      .level-title{
+        background: #E0E0E0;
+        font-weight: 400;
+        font-size: 16px;
+        color: #FFFFFF;
+        line-height: 40px;
+        height: 40px;
+        padding-left: 14px;
+
+      }
+      .level-thead{
+        background: #F5F5F5;
+        border-bottom: 1px solid #E0E0E0;
+        height: 40px;
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        >i{
+          font-style: normal;
+          display: inline-block;
+          text-align: center;
+          font-weight: 400;
+          font-size: 16px;
+          line-height: 40px;
+          color: #333333;
+        }
+        >i:nth-of-type(1){
+          width: 50px;
+          border-right: 1px solid #E0E0E0;
+        }
+        >i:nth-of-type(2){
+          width: 132px;
+          border-right: 1px solid #E0E0E0;
+        }
+        >i:nth-of-type(3){
+          width: 636px;
+        }
+      }
+      .level-li{
+        display: flex;
+        justify-content: flex-start;
+        height: auto;
+        border-bottom: 1px solid #E0E0E0;
+        >i{
+          font-style: normal;
+          text-align: center;
+          font-weight: 400;
+          font-size: 16px;
+          color: #333333;
+          height: auto;
+          padding:8px 16px;
+          box-sizing: border-box;
+          display: flex;
+          justify-content: center;
+          align-items: center;
+        }
+        >i:nth-of-type(1){
+          width: 50px;
+          border-right: 1px solid #E0E0E0;
+        }
+        >i:nth-of-type(2){
+          width: 132px;
+
+          border-right: 1px solid #E0E0E0;
+        }
+        >i:nth-of-type(3){
+          width: 636px;
+          text-align: left;
+          display: flex;
+          justify-content: flex-start;
+        }
+      }
+      .level-li:nth-child(2n){
+        background: #F5F5F5;
+      }
+      .level-li:last-child{
+        border:none;
+      }
+      .level-li2{
+        font-weight: 400;
+        font-size: 14px;
+        color: #333333;
+        line-height: 40px;
+        text-align: center;
+      }
+    }
+
+  }
+  .classify{
+    border: 1px solid #E0E0E0;
+    width: 820px;
+    margin-left: 40px;
+    .classify-thead{
+      background: #F5F5F5;
+      border-bottom: 1px solid #E0E0E0;
+      height: 40px;
+      display: flex;
+      justify-content: flex-start;
+      align-items: center;
+      >i{
+        font-style: normal;
+        display: inline-block;
+        text-align: center;
+        font-weight: 400;
+        font-size: 16px;
+        line-height: 40px;
+        color: #333333;
+      }
+      >i:nth-of-type(1){
+        width: 50px;
+        border-right: 1px solid #E0E0E0;
+      }
+      >i:nth-of-type(2){
+        width: 132px;
+        border-right: 1px solid #E0E0E0;
+      }
+      >i:nth-of-type(3){
+        width: 636px;
+      }
+    }
+    .classify-li{
+      display: flex;
+      justify-content: flex-start;
+      height: auto;
+      border-bottom: 1px solid #E0E0E0;
+      >i{
+        font-style: normal;
+        text-align: center;
+        font-weight: 400;
+        font-size: 16px;
+        color: #333333;
+        height: auto;
+        padding:8px 16px;
+        box-sizing: border-box;
+        display: flex;
+        align-items: center;
+      }
+      >i:nth-of-type(1){
+        width: 50px;
+        border-right: 1px solid #E0E0E0;
+      }
+      >i:nth-of-type(2){
+        width: 132px;
+        border-right: 1px solid #E0E0E0;
+        display: flex;
+        justify-content: center;
+      }
+      >i:nth-of-type(3){
+        width: 636px;
+        text-align: left;
+      }
+    }
+    .classify-li:nth-child(2n+1){
+      background: #F5F5F5;
+    }
+    .classify-li:last-child{
+      border:none;
+    }
+  }
   ::v-deep .tableListPaginationSwitch{
     height: 40px;
     display: flex;

+ 12 - 5
src/views/integratedManagement/laboratoryManagement/subject/index.vue

@@ -121,6 +121,9 @@
                       <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="3"
                                         v-hasPermiRouter="['system:subject:edit']">编辑
                       </el-dropdown-item>
+                      <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="4"
+                                        v-hasPermiRouter="['system:subject:edit']">{{scope.row.accessControl?'关闭准入':'开启准入'}}
+                      </el-dropdown-item>
                     </el-dropdown-menu>
                   </el-dropdown>
                   <p class="table-button-null"></p>
@@ -165,9 +168,9 @@
   import {
     laboratorySubRelInfoList,
     laboratorySubRelInfoGetDetailInfo,
-    laboratorySubRelInfoGetDetailDelete,
     laboratorySubRelInfoGetHazardSubRelInfo,
-    laboratorySubRelInfoUpdateBySort
+    laboratorySubRelInfoUpdateBySort,
+    laboratorySubRelInfoUpdateByControl,
   } from '@/api/integratedManagement/index'
   import indexRightPage from './indexRightPage/indexRightPage.vue'
   import addSubject from './addSubject.vue'
@@ -310,13 +313,17 @@
             this.getSubInfo(row,2)
             break
           case '4':
-            //删除
-            self.$confirm('是否确认删除?', '', {
+            let text = row.accessControl?'关闭':'开启'
+            //开启/关闭门禁权限
+            self.$confirm('是否确认'+text+'实验室准入?', '', {
               confirmButtonText: '确定',
               cancelButtonText: '取消',
               type: 'warning'
             }).then(function() {
-              laboratorySubRelInfoGetDetailDelete({ infoId: row.infoId }).then(response => {
+              laboratorySubRelInfoUpdateByControl({
+                infoId: row.infoId,
+                accessControl:!row.accessControl
+              }).then(response => {
                 self.msgSuccess(response.message)
                 self.getList()
               })

+ 1 - 35
src/views/integratedManagement/laboratoryManagement/subject/infoPage.vue

@@ -36,41 +36,7 @@
             </div>
           </div>
         </div>
-        <p class="info-max-title-p">管控一体机信息</p>
-        <div class="info-max-box">
-          <div class="left-box">
-            <div class="for-text-box">
-              <p class="info-title">主要危险类别:{{!subjectData.hazardCategory?'未配置':''}}</p>
-              <div class="for-box" v-for="(item,index1) in subjectData.hazardCategory" :key="index1">
-                <p class="for-info-p" v-for="(minItem,index2) in hazardCategory" :key="index2" v-if="minItem.value == item">● {{minItem.label}}</p>
-              </div>
-            </div>
-            <div class="for-text-box">
-              <p class="info-title">灭火要点:{{!subjectData.outFire?'未配置':''}}</p>
-              <div class="for-box" v-for="(item,index1) in subjectData.outFire" :key="index1">
-                <p class="for-info-p" v-for="(minItem,index2) in extinguishingKeyPoints" :key="index2" v-if="minItem.value == item">● {{minItem.label}}</p>
-              </div>
-            </div>
-          </div>
-          <div class="right-box">
-            <div class="for-text-box">
-              <p class="info-title">风险防控措施:{{!subjectData.riskMeasure?'未配置':''}}</p>
-              <div class="for-box" v-for="(item,index1) in subjectData.riskMeasure" :key="index1">
-                <p class="for-info-p" v-for="(minItem,index2) in riskMeasure" :key="index2" v-if="minItem.value == item">● {{minItem.label}}</p>
-              </div>
-            </div>
-            <div class="for-img-box">
-              <p class="info-title" style="margin-bottom:7px;">安全警示标识:{{!subjectData.safeSigns?'未配置':''}}</p>
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_jzxy.png" v-if="item == 'xiyan'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_jzys.png" v-if="item == 'yinshi'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_dxaq.png" v-if="item == 'anquan'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_gzf.png" v-if="item == 'gongzuofu'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_gbmc.png" v-if="item == 'menchuang'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-              <img src="@/assets/ZDimages/integratedManagement/icon_aqxxp_gbsd.png" v-if="item == 'shuidian'" v-for="(item,index) in subjectData.safeSigns" :key="index">
-            </div>
-          </div>
-        </div>
-        <p class="info-max-title-p">电子信息牌信息</p>
+        <p class="info-max-title-p">安全信息牌</p>
         <div class="info-max-box">
           <p class="null-text-p" v-if="!subjectData.classifyList[0]">电子信息牌未配置</p>
           <div class="for-text-box" v-if="item.privateList.length>0 && item.brandType==1" v-for="(item,index) in  subjectData.classifyList">

+ 18 - 3
src/views/integratedManagement/messageNotice/warningNotice/infoPage.vue

@@ -18,7 +18,7 @@
           </div>
           <div class="text-right-box">
             <p>实验室负责人:</p>
-            <p v-for="(item,index) in infoData.adminInfoList">{{item.userName}}-{{item.mobile}}</p>
+            <p>{{infoData.adminInfo}}</p>
           </div>
         </div>
         <div class="text-max-box">
@@ -32,7 +32,7 @@
           </div>
           <div class="text-right-box">
             <p>安全员:</p>
-            <p v-for="(item,index) in infoData.safeInfoList">{{item.userName}}-{{item.mobile}}</p>
+            <p>{{infoData.safeInfo}}</p>
           </div>
         </div>
         <div class="text-max-box" v-if="infoData.chemicalWarnType==6">
@@ -100,6 +100,7 @@
         <div class="table-max-big-box" v-if="infoData.chemicalWarnType==3 || infoData.chemicalWarnType==4">
           <el-table class="table-box" v-loading="loading" border :data="infoData.chemicalExpireList">
             <el-table-column label="化学品名称" prop="chemicalName" fixed show-overflow-tooltip/>
+            <el-table-column label="编码" prop="tagCode" fixed show-overflow-tooltip/>
             <el-table-column label="规格" prop="normsNum" width="180" fixed show-overflow-tooltip/>
             <el-table-column label="余量" prop="surplus" width="180" fixed show-overflow-tooltip/>
             <el-table-column label="归属人" prop="belongName" width="220" fixed show-overflow-tooltip/>
@@ -115,6 +116,7 @@
         <div class="table-max-big-box" v-if="infoData.chemicalWarnType==5">
           <el-table class="table-box" v-loading="loading" border :data="infoData.chemicalOverdueStockList">
             <el-table-column label="化学品名称" prop="chemicalName" fixed show-overflow-tooltip/>
+            <el-table-column label="编码" prop="tagCode" fixed show-overflow-tooltip/>
             <el-table-column label="CAS" prop="casNum" fixed show-overflow-tooltip/>
             <el-table-column label="类别" prop="chemicalCategory" fixed show-overflow-tooltip/>
             <el-table-column label="纯度" prop="chemicalPurity" fixed show-overflow-tooltip/>
@@ -281,7 +283,20 @@ export default {
     //初始化
     initialize(){
       this.infoData=this.propsData;
-      console.log(this.infoData)
+      if (this.infoData.adminInfoList[0]){
+        let list=[];
+        this.infoData.adminInfoList.forEach(function(item) {
+          list.push(item.userName+'-'+item.mobile)
+        })
+        this.infoData.adminInfo=list.join(',')
+      }
+      if (this.infoData.safeInfoList[0]){
+        let list=[];
+        this.infoData.safeInfoList.forEach(function(item) {
+          list.push(item.userName+'-'+item.mobile)
+        })
+        this.infoData.safeInfo=list.join(',')
+      }
       this.$set(this.infoDataForm,'noticeId',this.propsData.noticeId);
     },
     // 返回按钮

+ 1 - 1
src/views/iotDevice/monitoringWarning/receiver/index.vue

@@ -130,7 +130,7 @@
 </template>
 <script>
   import { iotAlarmReceiveList,iotAlarmReceiveAdd,iotAlarmReceiveUpdate,iotAlarmReceiveDelete } from "@/api/iotDevice/index";
-  //import addPage from "./addPage.vue";
+  //import addPage from "./addSafetyInfoConfig.vue";
   export default {
     name: 'index',
     //components: {

+ 503 - 0
src/views/safetyCheck/collegeInspect/hiddenDangersReview/index.vue

@@ -0,0 +1,503 @@
+<!-- 隐患复查 -->
+<template>
+  <div class="app-container hiddenDangersReview">
+    <div class="page-container hiddenDangersReviewPage" v-if="pageType === 1">
+      <div class="page-form-title-box" :class="advancedType?'page-advanced-form-title-box':''">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-school-college-toggle-box">
+            <p :class="tableButtonCheckType==1?'p-check':''" @click="tableCheck(1)">全部</p>
+            <p :class="tableButtonCheckType==2?'p-check':''" @click="tableCheck(2)">待复查</p>
+            <p :class="tableButtonCheckType==3?'p-check':''" @click="tableCheck(3)">已复查</p>
+          </div>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="检查类型" style="width:170px;">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="楼栋" style="width:190px;">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2" v-if="advancedType">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分类" style="width:170px;">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2" v-if="advancedType">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分级" style="width:170px;">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="实验室/房间号"
+              style="width:170px;"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="计划标题"
+              style="width:170px;"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="检查人"
+              style="width:170px;"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state" v-if="advancedType">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <!--与我相关-->
+          <div class="form-button-max-big-box-me">
+            <div class="form-button-big-box-me">
+              <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                <p class="text-p-me">与我相关</p>
+                <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+              </div>
+            </div>
+          </div>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="name"  show-overflow-tooltip/>
+          <el-table-column label="检查类型" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="检查名称" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="检查项目" prop="content" width="260" show-overflow-tooltip/>
+          <el-table-column label="实验室" prop="content" width="165" show-overflow-tooltip/>
+          <el-table-column label="检查人" prop="content" width="80" show-overflow-tooltip/>
+          <el-table-column label="复查人" prop="content" width="80" show-overflow-tooltip/>
+          <el-table-column label="复查状态" prop="state" width="80" show-overflow-tooltip>
+            <template slot-scope="scope">
+            </template>
+          </el-table-column>
+          <el-table-column label="复查结果" prop="state" width="80" show-overflow-tooltip>
+            <template slot-scope="scope">
+            </template>
+          </el-table-column>
+          <el-table-column label="复查时间" prop="createTime" width="160" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="130" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >复查</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >转移</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <el-dialog class="hiddenDangersReview-dialog" title='复查人转移' width="745px" append-to-body
+               :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <div class="hiddenDangersReview-dialog-max-box">
+        <p class="hiddenDangersReview-dialog-name">督导组名称</p>
+        <div class="hiddenDangersReview-dialog-box">
+          <img src="@/assets/ZDimages/safetyCheck/icon_xyxc_cy.png">
+          <p>成员列表</p>
+        </div>
+        <el-table class="table-box table-null-img-20" border :data="dialogData.dialogList1">
+          <el-table-column label="" align="center" width="150">
+            <template scope="scope">
+              <div class="check-img-box" @click="tableColumnCheck(scope.row.dialogDataId)">
+                <img src="@/assets/ZDimages/basicsModules/icon_fcrzy_wxz@1x.png" v-if="scope.row.dialogDataId != tableColumnType">
+                <img src="@/assets/ZDimages/basicsModules/icon_fcrzy_xz@1x.png" v-if="scope.row.dialogDataId == tableColumnType">
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="姓名" prop="name" show-overflow-tooltip/>
+          <el-table-column label="工号" prop="name" width="130" show-overflow-tooltip/>
+          <el-table-column label="所在部门" prop="content" width="188" show-overflow-tooltip/>
+        </el-table>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
+        <p class="dialog-footer-button-primary" @click="dialogSubmit">确认</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //复查状态选项卡
+        tableButtonCheckType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //搜索模式切换
+        advancedType:false,
+        //列表数据
+        dataList:[{}],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        //复查转移
+        dialogData:{
+          dialogData1:'督导组名称',
+          dialogList1:[
+            {
+              dialogDataId:1,
+              dialogDataType:false,
+              dialogDataName:'名称',
+              dialogDataNum:'工号',
+              dialogDataDept:'部门',
+            },
+            {
+              dialogDataId:2,
+              dialogDataType:false,
+              dialogDataName:'名称',
+              dialogDataNum:'工号',
+              dialogDataDept:'部门',
+            },
+          ],
+        },
+        dialogType:false,
+        tableColumnType:null
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //复查状态选项卡切换
+      tableCheck(type){
+        if (this.tableButtonCheckType !== type){
+          this.$set(this,'tableButtonCheckType',type);
+          this.resetQuery();
+        }
+      },
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        // getListFunction(obj).then(response => {
+        //   this.$set(this,'loading',false);
+        //   this.$set(this,'dataList',response.data.records);
+        //   this.$set(this,'total',response.data.total);
+        // });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //转移
+          this.dialogOpen();
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /******** 转移弹窗 ********/
+      //弹层关闭
+      dialogOff(){
+        this.$set(this,'dialogType',false);
+      },
+      //弹层开启
+      dialogOpen(){
+        this.$set(this,'tableColumnType',null);
+        this.$set(this,'dialogType',true);
+      },
+      //弹层确定
+      dialogSubmit(){
+        if(!this.tableColumnType){
+          this.msgError('请选择复查转移人')
+          return
+        }
+        this.$set(this,'dialogType',false);
+      },
+      tableColumnCheck(row) {
+        if(this.tableColumnType != row){
+          this.$set(this,'tableColumnType',row);
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .hiddenDangersReview{
+    .hiddenDangersReviewPage{
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>
+<style lang="scss">
+  .hiddenDangersReview-dialog{
+    .el-dialog__body{
+      padding-top: 0;
+    }
+    .hiddenDangersReview-dialog-max-box{
+      height:500px;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      flex:1;
+      .hiddenDangersReview-dialog-name{
+        line-height:70px;
+        height:70px;
+        font-size:16px;
+      }
+      .hiddenDangersReview-dialog-box{
+        display: flex;
+        border:1px solid #dedede;
+        border-bottom:none;
+        height:40px;
+        img{
+          width:14px;
+          height:14px;
+          display: inline-block;
+          margin:13px 15px;
+        }
+        p:nth-child(2){
+          flex:1;
+          font-size:14px;
+          line-height:40px;
+          color:#333;
+        }
+      }
+      .check-img-box{
+        cursor: pointer;
+        height:27px;
+        width:130px;
+        margin:0 auto;
+        overflow: hidden;
+        img{
+          overflow: hidden;
+          height:20px;
+          width:20px;
+          display: inline-block;
+          margin:3px 55px;
+        }
+      }
+    }
+  }
+</style>

+ 540 - 0
src/views/safetyCheck/collegeInspect/selfInspectionManage/index.vue

@@ -0,0 +1,540 @@
+<!-- 自查管理 -->
+<template>
+  <div class="app-container selfInspectionManage">
+    <div class="page-container selfInspectionManagePage" v-if="pageType === 1">
+      <!--左侧计划栏-->
+      <div class="page-content-left-box">
+        <!--计划栏搜索框-->
+        <div>
+          <el-form :model="leftQueryParams" class="form-box" ref="leftQueryForm"
+                   :inline="true" style="width:100%;">
+            <el-form-item label="" prop="leftQueryParamsData1">
+              <el-input
+                maxLength="30"
+                v-model="leftQueryParams.leftQueryParamsData1"
+                placeholder="计划标题"
+                clearable
+                @clear="leftClear"
+                style="width: 390px"
+              />
+            </el-form-item>
+            <p class="page-save-common-style-button" style="width:80px;display: inline-block" @click="leftHandleQuery">查询</p>
+          </el-form>
+        </div>
+        <!--计划栏列表-->
+        <div class="left-list-box">
+          <div class="left-list-for-max-big-box" v-for="(bigItem,bigIndex) in leftListData" :key="bigIndex">
+            <div class="left-list-title-box" @click="leftBigCheckButton(bigIndex)">
+              <p :class="bigIndex == leftBigCheckType?'el-icon-caret-bottom':'el-icon-caret-right'"></p>
+              <p>{{bigItem.leftData1}}</p>
+              <p>{{bigItem.leftData2}}</p>
+            </div>
+            <div class="left-list-box">
+              <div class="left-list-for-box" v-if="bigIndex == leftBigCheckType"
+                   @click="leftCheckButton(index)"
+                   :class="index == leftCheckType ? 'check-left-list-for-box':''"
+                   v-for="(item,index) in bigItem.leftDataList" :key="index">
+                <div class="left-list-text-box">
+                  <p>{{item.leftDataListData1}}</p>
+                  <p>检查开始时间:{{parseTime(item.leftDataListData2,"{y}-{m}-{d}")}}</p>
+                </div>
+                <div class="left-list-progress-box">
+                  <el-progress :stroke-width="14" :percentage="item.leftDataListData4"></el-progress>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="page-content-center-box"></div>
+      <!--右侧数据表格-->
+      <div class="page-content-right-box">
+        <div class="page-form-title-box" style="border:none;" :class="advancedType?'page-advanced-form-title-box':''">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <div class="table-school-college-toggle-box">
+              <p :class="tableButtonCheckType==1?'p-check':''" @click="tableCheck(1)">全部</p>
+              <p :class="tableButtonCheckType==2?'p-check':''" @click="tableCheck(2)">待检查</p>
+              <p :class="tableButtonCheckType==3?'p-check':''" @click="tableCheck(3)">检查中</p>
+              <p :class="tableButtonCheckType==4?'p-check':''" @click="tableCheck(4)">已检查</p>
+            </div>
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="楼栋" style="width:150px;">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData1">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.queryParamsData1"
+                placeholder="实验室/房间号"
+                style="width:155px;"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2" v-if="advancedType">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="安全分类" style="width:175px;">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2" v-if="advancedType">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="安全分级" style="width:175px;">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <!--与我相关-->
+            <div class="form-button-max-big-box-me">
+              <div class="form-button-big-box-me">
+                <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                  <p class="text-p-me">与我相关</p>
+                  <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+                </div>
+              </div>
+            </div>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+          </el-form>
+        </div>
+        <div class="page-conten-box page-content-right-bottom-box">
+          <el-table class="table-box" v-loading="loading" border :data="dataList">
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="实验室" prop="name"  show-overflow-tooltip/>
+            <el-table-column label="检查状态" prop="state" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+
+              </template>
+            </el-table-column>
+            <el-table-column label="检查人" prop="content" width="230" show-overflow-tooltip/>
+            <el-table-column label="操作" width="180" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >检查项</p>
+                  <p class="table-button-p"
+                     @click="tableButton(3,scope.row)"
+
+                  >开始检查</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+    <checkItem :propsData="propsData" v-if="pageType === 2"></checkItem>
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  import checkItem from "@/views/safetyCheck/components/checkItem.vue";
+  export default {
+    name: 'index',
+    components: {
+     checkItem
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:2,
+        //复查状态选项卡
+        tableButtonCheckType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //计划查询条件
+        leftQueryParams:{
+          leftQueryParamsData1:'',
+        },
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //搜索模式切换
+        advancedType:false,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        leftBigCheckType:"0",
+        leftCheckType:"0",
+        leftListData:[
+          {
+            leftData1:'计划名称计划名称计划名称计划名称',
+            leftData2:'检查类型',
+            leftData3:'1',
+            leftDataList:[
+              {
+                leftDataListData1:'第一次检查',
+                leftDataListData2:'2024-08-06T11:06:57',
+                leftDataListData3:'11',
+                leftDataListData4:50,
+              },
+              {
+                leftDataListData1:'第二次检查',
+                leftDataListData2:'2024-08-06T11:06:57',
+                leftDataListData3:'12',
+                leftDataListData4:60,
+              },
+            ],
+          },
+          {
+            leftData1:'计划名称计划名称计划名称计划名称',
+            leftData2:'检查类型',
+            leftData3:'2',
+            leftDataList:[
+              {
+                leftDataListData1:'第一次检查',
+                leftDataListData2:'2024-08-06T11:06:57',
+                leftDataListData3:'21',
+                leftDataListData4:50,
+              },
+              {
+                leftDataListData1:'第二次检查',
+                leftDataListData2:'2024-08-06T11:06:57',
+                leftDataListData3:'22',
+                leftDataListData4:60,
+              },
+            ],
+          }
+        ],
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //左侧清除查询按钮
+      leftClear(){
+        this.$set(this.leftQueryParams,'leftQueryParamsData1','');
+        this.$set(this,'leftBigCheckType',0);
+        this.$set(this,'leftCheckType',0);
+      },
+      //左侧查询按钮
+      leftHandleQuery(){
+        this.$set(this,'leftBigCheckType',0);
+        this.$set(this,'leftCheckType',0);
+      },
+      //左侧计划切换
+      leftBigCheckButton(index){
+        if(this.leftBigCheckType !== index){
+          this.$set(this,'leftBigCheckType',index);
+          this.$set(this,'leftCheckType',0);
+          this.resetQuery();
+        }
+      },
+      //左侧计划子级切换
+      leftCheckButton(index){
+        if(this.leftCheckType !== index){
+          this.$set(this,'leftCheckType',index);
+          this.resetQuery();
+        }
+      },
+      //复查状态选项卡切换
+      tableCheck(type){
+        if (this.tableButtonCheckType !== type){
+          this.$set(this,'tableButtonCheckType',type);
+          this.resetQuery();
+        }
+      },
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .selfInspectionManage{
+    .selfInspectionManagePage{
+      overflow: hidden;
+      display: flex;
+      flex-direction: row;
+      flex:1;
+
+      .page-content-left-box{
+        width: 480px;
+        margin:20px;
+        .left-list-box{
+          .left-list-for-max-big-box{
+            .left-list-title-box{
+              cursor: pointer;
+              display: flex;
+              p{
+                height:30px;
+                line-height:30px;
+                margin:15px 0;
+              }
+              p:nth-child(1){
+                font-size:16px;
+                width:30px;
+              }
+              p:nth-child(2){
+                font-size:16px;
+                flex:1;
+                /*单行省略号*/
+                display:block;
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space:nowrap;
+              }
+              p:nth-child(3){
+                font-size:14px;
+                width:80px;
+                height:30px;
+                text-align: center;
+                color:#fff;
+                background-color: #0183FA;
+                border-radius:4px;
+              }
+            }
+            .left-list-box{
+              .left-list-for-box{
+                cursor: pointer;
+                display: flex;
+                height:70px;
+                background-color: #F5F5F5;
+                padding:5px 23px;
+                .left-list-text-box{
+                  width:240px;
+                  p{
+                    height:30px;
+                    line-height: 30px;
+                    font-size:16px;
+                  }
+                  p:nth-child(2){
+                    color:#666666;
+                  }
+                }
+                .left-list-progress-box{
+                  flex:1;
+                  padding-top:15px;
+                }
+              }
+              .check-left-list-for-box{
+                background: rgba(1,131,250,0.1);
+              }
+            }
+          }
+        }
+      }
+      .page-content-center-box{
+        margin:20px 0;
+        border-right:1px dashed #dedede;
+      }
+      .page-content-right-box{
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        flex:1;
+        .page-content-right-bottom-box{
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          flex:1;
+          padding:0 20px 20px;
+        }
+      }
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 316 - 0
src/views/safetyCheck/collegeInspect/selfInspectionProject/index.vue

@@ -0,0 +1,316 @@
+<!-- 学院自查 -->
+<template>
+  <div class="app-container selfInspectionProject">
+    <div class="page-container selfInspectionProjectPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-college-college-toggle-box">
+            <p :class="planStatus===''?'p-check':''" @click="tableCheck('')">全部</p>
+            <p :class="planStatus===0?'p-check':''" @click="tableCheck(0)">未开始</p>
+            <p :class="planStatus===1?'p-check':''" @click="tableCheck(1)">进行中</p>
+            <p :class="planStatus===2?'p-check':''" @click="tableCheck(2)">已结束</p>
+          </div>
+          <el-form-item label="" prop="checkTypeValue">
+            <el-select v-model="queryParams.checkTypeValue" placeholder="检查类型" style="width: 150px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="计划标题"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="createName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.createName"
+              placeholder="创建人"
+              style="width: 150px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-submit-common-style-button"
+             style="float: right;"
+             @click="tableButton(1)"
+          >创建计划</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="planTitle"  show-overflow-tooltip/>
+          <el-table-column label="检查类型" prop="checkTypeName" width="100" show-overflow-tooltip/>
+          <el-table-column label="计划周期" prop="cycleStartTime" width="250" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.cycleStartTime,"{y}-{m}-{d}") }}</span>
+              至
+              <span>{{ parseTime(scope.row.cycleEndTime,"{y}-{m}-{d}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="检查进度" prop="checkProgress" width="175" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <el-progress :percentage="scope.row.checkProgress"></el-progress>
+            </template>
+          </el-table-column>
+          <!--<el-table-column label="整改进度" prop="content" width="175" show-overflow-tooltip>-->
+          <!--<template slot-scope="scope">-->
+          <!--<el-progress :percentage="50"></el-progress>-->
+          <!--</template>-->
+          <!--</el-table-column>-->
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{scope.row.planStatus==0?'未开始':(scope.row.planStatus==1?'进行中':(scope.row.planStatus==2?'已结束':''))}}
+            </template>
+          </el-table-column>
+          <el-table-column label="创建人" prop="createName" width="100" show-overflow-tooltip/>
+          <el-table-column label="创建时间" prop="createTime" width="180" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="130" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   v-if="scope.row.planStatus!=0"
+                   @click="tableButton(2,scope.row)"
+                >详情</p>
+                <p class="table-button-p"
+                   v-if="scope.row.planStatus==0"
+                   @click="tableButton(3,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <projectAddPage :propsData="propsData" v-if="pageType === 2"></projectAddPage>
+  </div>
+</template>
+<script>
+  import {
+    securityCheckPlanList,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import projectAddPage from "@/views/safetyCheck/components/projectAddPage.vue";
+  export default {
+    name: 'index',
+    components: {
+      projectAddPage
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //计划状态选项卡
+        planStatus:'',
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          checkCategory:2,
+          checkTypeValue:"",
+          searchValue :"",
+          createName :"",
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      //检查类型字典
+      this.getDicts("check_type").then(response => {
+        this.$set(this,'optionList',response.data);
+      });
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //整改状态选项卡切换
+      tableCheck(type){
+        if (this.planStatus !== type){
+          this.$set(this,'planStatus',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          checkCategory:2,
+          checkTypeValue:"",
+          searchValue :"",
+          createName :"",
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        obj.planStatus = this.planStatus;
+        securityCheckPlanList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{
+            rank:'college'
+          });
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          obj.rank = 'college';
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.rank = 'college';
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .selfInspectionProject{
+    .selfInspectionProjectPage{
+      .table-college-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 165 - 0
src/views/safetyCheck/collegeWorktable/coverageRateEcharts.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="coverageRateEcharts" id="coverageRateEcharts-box">
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+  export default {
+    name: 'coverageRateEcharts',
+    data(){
+      return{
+
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.eCharts();
+    },
+    methods:{
+      //eCharts方法
+      eCharts(){
+        let myChart = this.$echarts.init(document.getElementById('coverageRateEcharts-box'));
+        const datalist= [
+          { value: 504, name: '未检查' },
+          { value: 735, name: '已检查' },
+        ]
+        let option = {
+
+          legend:[
+            {
+              data: ['未检查'],
+              orient: 'vertical',
+              itemWidth: 12,
+              itemHeight: 12,
+              right: '10%',
+              icon: 'circle',
+              top: "38%",
+              formatter: (name) => {
+                var total = 0;
+                var target;
+                var rate;
+                for (var i = 0; i < datalist.length; i++) {
+                  total += datalist[i].value;
+                  if (datalist[i].name == name) {
+                    target = datalist[i].value;
+                  }
+                  rate = (total / target).toFixed(2)
+                }
+                return `{one|${name}} {two|${rate}%}`;
+              },
+              textStyle: {
+                color: '#000',
+                rich: {
+                  one: {
+                    color: '#333333',
+                    fontSize: 12,
+                    padding: [0, 5, 0, 0],
+                  },
+                  two: {
+                    color: '#FFA200',
+                    fontSize: 14,
+                  },
+                },
+              },
+            },
+            {
+              data: ['已检查'],
+              orient: 'vertical',
+              itemWidth: 12,
+              itemHeight: 12,
+              right: '10%',
+              icon: 'circle',
+              top: "54%",
+              formatter: (name) => {
+                var total = 0;
+                var target;
+                var rate;
+                for (var i = 0; i < datalist.length; i++) {
+                  total += datalist[i].value;
+                  if (datalist[i].name == name) {
+                    target = datalist[i].value;
+                  }
+                  rate = (total / target).toFixed(2)
+                }
+                return `{one|${name}} {two|${rate}%}`;
+              },
+              textStyle: {
+                color: '#000',
+                rich: {
+                  one: {
+                    color: '#333333',
+                    fontSize: 12,
+                    padding: [0, 5, 0, 0],
+                  },
+                  two: {
+                    color: '#0183FA',
+                    fontSize: 14,
+                  },
+                },
+              },
+            }
+          ],
+          title: [
+            {
+              text: '实验室',
+              subtext: '2023间',
+              textStyle: {
+                fontSize: 12,
+                color: "#333333"
+              },
+              subtextStyle: {
+                fontSize: 16,
+                color: '#333333'
+              },
+              textAlign: "center",
+              x: '24%',
+              y: '38%',
+            }
+          ],
+          color:[ '#FFA200','#0183FA'],
+          series: [
+            {
+              name: '检查覆盖率',
+              type: 'pie',
+              radius: ['48%', '80%'],
+              center: ['26%', '50%'],
+              avoidLabelOverlap: false,
+              padAngle: 10,
+              itemStyle: {
+                borderColor: '#FFF',
+                borderWidth: 3,
+              },
+              label: {
+                show: false,
+                position: 'center'
+              },
+              emphasis: {
+                label: {
+                  show: false,
+                  fontSize: 40,
+                  fontWeight: 'bold'
+                }
+              },
+              labelLine: {
+                show: false
+              },
+              data:datalist
+            }
+          ]
+        };
+
+        myChart.setOption(option);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .coverageRateEcharts{
+    width: 366px;
+    height: 175px;
+  }
+</style>

+ 155 - 0
src/views/safetyCheck/collegeWorktable/dataScreening.vue

@@ -0,0 +1,155 @@
+<template>
+  <!-- 数据总览 -->
+  <div class="dataScreening">
+    <div class="top-l-l">
+      <div class="top-l-l-t">
+        <i>9</i>
+        <i>9</i>
+        <i>9</i>
+        <b>次</b>
+      </div>
+      <div class="top-l-l-m">2024年</div>
+      <div class="top-l-l-b">校院巡查</div>
+    </div>
+    <div class="line"></div>
+    <div class="top-l-r">
+      <div class="top-l-r-li">
+        <img class="top-l-r-li-t" src="@/assets/ZDimages/securityCheck/icon_gzzl_jcxms@1x.png"/>
+        <div class="top-l-r-li-m"><i>6524</i><i>项</i></div>
+        <div class="top-l-r-li-b">检查项目数</div>
+      </div>
+      <div class="top-l-r-li">
+        <img class="top-l-r-li-t" src="@/assets/ZDimages/securityCheck/icon_gzzl_xfzgtzs@1x.png"/>
+        <div class="top-l-r-li-m"><i>2546</i><i>项</i></div>
+        <div class="top-l-r-li-b">下发整改通知书</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    name: 'dataScreening',
+    components: {
+    },
+    data(){
+      return{
+
+
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods: {
+
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .dataScreening{
+    height: 138px;
+    display: flex;
+    justify-content: flex-start;
+    width: 366px;
+    height: 138px;
+    background: #FFFFFF;
+    box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+    border-radius: 10px 10px 10px 10px;
+    .top-l-l{
+      overflow: hidden;
+      .top-l-l-t{
+        display: flex;
+        justify-content: flex-start;
+        margin: 24px 0 0 20px;
+        >i{
+          font-style: normal;
+          width: 20px;
+          height: 26px;
+          background: url("../../../assets/ZDimages/securityCheck/icon_gzzl_xyxc@1x.png");
+          background-size: 100%;
+          margin-right: 5px;
+          font-weight: 700;
+          font-size: 20px;
+          color: #0183FA;
+          line-height: 26px;
+          text-align: center;
+        }
+        >b{
+          font-weight: 400;
+          font-size: 16px;
+          color: #333333;
+          line-height: 24px;
+          text-align: center;
+        }
+      }
+      .top-l-l-m{
+        font-weight: 400;
+        font-size: 16px;
+        color: #333333;
+        line-height: 24px;
+        margin: 22px 0 0 28px;
+      }
+      .top-l-l-b{
+        font-weight: 400;
+        font-size: 14px;
+        color: #333333;
+        line-height: 24px;
+        margin: 2px 0 0 28px;
+      }
+    }
+    .line{
+      width: 1px;
+      height:110px;
+      border: 1px dashed #D8D8D8;
+      margin-top: 14px;
+      margin-left: 10px;
+    }
+    .top-l-r{
+      display: flex;
+      justify-content: flex-start;
+      margin-top: 22px;
+      .top-l-r-li{
+        width: 102px;
+        text-align: center;
+        margin-right: 5px;
+        .top-l-r-li-t{
+          width: 34px;
+          height: 34px;
+        }
+        .top-l-r-li-m{
+          margin-top: 6px;
+          >i:nth-of-type(1){
+            font-style: normal;
+            font-weight: 700;
+            font-size: 18px;
+            color: #FFA60C;
+            line-height: 24px;
+            margin-right: 6px;
+          }
+          >i:nth-of-type(2){
+            font-style: normal;
+            font-weight: 400;
+            font-size: 16px;
+            color: #333333;
+            line-height: 24px;
+          }
+        }
+        .top-l-r-li-b{
+          font-weight: 400;
+          font-size: 14px;
+          color: #333333;
+          line-height: 24px;
+          text-align: center;
+          margin-top: 6px;
+        }
+      }
+    }
+  }
+
+</style>

+ 155 - 0
src/views/safetyCheck/collegeWorktable/dataScreeningChart.vue

@@ -0,0 +1,155 @@
+<template>
+  <!-- 数据总览图表 -->
+  <div class="dataScreeningChart" id="dataScreeningChart-box">
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+  export default {
+    name: 'dataScreeningChart',
+    components: {
+    },
+    data(){
+      return{
+
+
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.eCharts();
+    },
+    methods: {
+      eCharts(){
+        let myChart = this.$echarts.init(document.getElementById('dataScreeningChart-box'));
+        let data = [
+          {
+            name: "隐患数8724 个",
+            value: 54,
+          },
+          {
+            name: "已整改8724 个",
+            value: 44,
+          },
+          {
+            name: "暂无法整改4 个",
+            value: 35,
+          },
+          {
+            name: "多次整改未完成4 个",
+            value: 30,
+          },
+          {
+            name: "复查通过8400 个",
+            value: 20,
+          },
+        ];
+
+        let titleArr = [],
+          seriesArr = [];
+        let colors = [
+          ["#FFA60C","#FF7B00", "#F5F5F5"],
+          ["#0183FA","#00E4F4", "#F5F5F5"],
+          ["#FFA60C","#FF7B00", "#F5F5F5"],
+          ["#FD0000","#FFB2B2", "#F5F5F5"],
+          ["#A0F1A2","#02BC34", "#F5F5F5"],
+        ];
+        data.forEach(function (item, index) {
+          titleArr.push({
+            text: item.name,
+            left: index * 20 + 10 + "%",
+            top: "75%",
+            textAlign: "center",
+            textStyle: {
+              fontWeight: "normal",
+              fontSize: "12",
+              color: '#333333',
+              textAlign: "center",
+            },
+          });
+          seriesArr.push({
+            name: item.name,
+            type: "pie",
+            clockWise: false,
+            radius: [24, 32],
+
+            itemStyle: {
+
+              normal: {
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                  {
+                    offset: 0,
+                    color: colors[index][0],
+                  },
+                  {
+                    offset: 1,
+                    color: colors[index][1],
+                  },
+                ]),
+                shadowColor: colors[index][0],
+                shadowBlur: 0,
+                label: {
+                  show: false,
+                },
+                labelLine: {
+                  show: false,
+                },
+              },
+            },
+            hoverAnimation: false,
+            center: [index * 20 + 10 + "%", "40%"],
+            data: [
+              {
+                value: item.value,
+                label: {
+                  normal: {
+                    formatter: function (params) {
+                      return params.value + "%";
+                    },
+                    position: "center",
+                    show: true,
+                    textStyle: {
+                      fontSize: "14",
+                      fontWeight: "500",
+                      color:"#333333",
+                    },
+                  },
+                },
+              },
+              {
+                value: 100 - item.value,
+                name: "invisible",
+                itemStyle: {
+                  normal: {
+                    color: colors[index][2],
+                  },
+                  emphasis: {
+                    color: colors[index][2],
+                  },
+                },
+              },
+            ],
+          });
+        });
+        let option =  {
+          title: titleArr,
+          series: seriesArr,
+        };
+        myChart.setOption(option);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .dataScreeningChart{
+    width: 581px;
+    height: 138px;
+
+  }
+
+</style>

+ 108 - 0
src/views/safetyCheck/collegeWorktable/hiddenDangerStatisticsEcharts.vue

@@ -0,0 +1,108 @@
+<template>
+  <div class="hiddenDangerStatisticsEcharts" id="hiddenDangerStatisticsEcharts-box"></div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+  import { hiddenCountByType, collegCheckHiddenCountByType,isSCollege } from '@/api/safetyCheck/index'
+  export default {
+    name: 'hiddenDangerStatisticsEcharts',
+    data(){
+      return{
+        hdLevel:1,
+        userFlg:true,
+        nullType:false,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+        this.schoolEcharts()
+    },
+    methods:{
+      schoolEcharts(){
+        let myChart = this.$echarts.init(document.getElementById('hiddenDangerStatisticsEcharts-box'));
+        let data = [{
+          name: "1.基础安全",
+          value: 1,
+        },
+          {
+            name: "10.生物安全",
+            value: 2,
+          },
+          {
+            name: "11.机电安全",
+            value: 3,
+          },
+          {
+            name: "9.特种设备与常规\n冷热设备",
+            value: 4,
+          },];
+       /*  for(let i=0;i<response.rows.length;i++){
+          // substring
+          let obj = {
+            name:response.rows[i].collegeName.length>8?response.rows[i].collegeName.substring(0,8)+'..':response.rows[i].collegeName,
+            nameText:response.rows[i].collegeName,
+            value:response.rows[i].sumTotal,
+          }
+          data.push(obj);
+        } */
+        let option = {
+          legend: {
+            show:false,
+          },
+          tooltip: {
+            confine: true,
+            trigger: 'item',
+             formatter: '{b} : {c}'
+          },
+          series: [
+            {
+              avoidLabelOverlap: false,
+              type: 'pie',
+              left:20,
+              right:20,
+              roseType: 'area', // 玫瑰图
+              center: ['50%', '50%'],
+              radius: ['0%', '40%'],
+              label: {
+                normal: {
+                  formatter: '{b} {d}%',
+                  textStyle: {
+                    fontSize: 12,
+                    color:'#333'
+                  },
+                  padding: [0, -110, 26, -110],
+                }
+              },
+              labelLine: {
+                normal: {
+                  length: 30,
+                  length2: 110,
+                }
+              },
+              data: data,
+              itemStyle: {
+                normal: {
+                  color: function (colors) {
+                    var colorList = ['#0183FA', '#FF5E86', '#FFE019', '#2758E0', '#41BE26', '#009DFF', '#FF2A00', '#39DBED', '#FFA200', '#7DD947', '#A069FF'];
+                    return colorList[colors.dataIndex];
+                  }
+                },
+              }
+            }
+          ]
+        };
+        myChart.setOption(option);
+      },
+
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .hiddenDangerStatisticsEcharts{
+    height:420px;
+  }
+</style>

+ 396 - 0
src/views/safetyCheck/collegeWorktable/index.vue

@@ -0,0 +1,396 @@
+<template>
+  <div class="app-container worktable scrollbar-box">
+      <div class="main">
+        <div class="top">
+          <!-- 数据总览 -->
+          <data-screening></data-screening>
+          <!-- 数据总览图表 -->
+          <div class="top-c">
+            <data-screening-chart></data-screening-chart>
+          </div>
+          <!-- 整改完成率 -->
+          <div class="top-r">
+            <rectification-finish></rectification-finish>
+          </div>
+        </div>
+        <div class="center">
+          <div class="center-l">
+            <!-- 未整改隐患 -->
+            <div class="center-l-t">
+              <div class="min-title-box">
+                <p></p>
+                <p>未整改隐患</p>
+              </div>
+              <div class="center-l-t-b">
+                <div class="center-l-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_yzgyh_gj@1x.png"/>
+                  <p>共计2333项</p>
+                </div>
+                <div class="center-l-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_wzgyh_sjsys@1x.png"/>
+                  <p>涉及333个实验室</p>
+                </div>
+              </div>
+            </div>
+            <!-- 检查覆盖率 -->
+            <div class="center-l-b">
+              <div class="min-title-box">
+                <p></p>
+                <p>检查覆盖率</p>
+              </div>
+              <coverage-rate-echarts></coverage-rate-echarts>
+            </div>
+          </div>
+          <div class="center-c">
+            <div class="center-c-t">
+              <div class="min-title-box">
+                <p></p>
+                <p>已整改隐患</p>
+              </div>
+              <div class="center-c-t-b">
+                <div class="center-c-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_yzgyh_dz@1x.png"/>
+                  <p>当周1项</p>
+                </div>
+                <div class="center-c-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_yzgyh_dy@1x.png"/>
+                  <p>当月1项</p>
+                </div>
+                <div class="center-c-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_yzgyh_sy@1x.png"/>
+                  <p>上月1项</p>
+                </div>
+                <div class="center-c-t-b-li">
+                  <img  src="@/assets/ZDimages/securityCheck/icon_yzgyh_dn@1x.png"/>
+                  <p>当年111项</p>
+                </div>
+              </div>
+            </div>
+            <div class="center-c-b">
+              <div class="min-title-box">
+                <p></p>
+                <p>检查结果统计</p>
+              </div>
+              <inspection-statistics-echarts></inspection-statistics-echarts>
+            </div>
+          </div>
+          <div class="center-c2">
+            <div class="min-title-box">
+              <p></p>
+              <p>全年指标隐患分布</p>
+            </div>
+            <hidden-danger-statistics-echarts></hidden-danger-statistics-echarts>
+          </div>
+          <div class="center-r">
+            <div class="center-r-li">
+              <img  src="@/assets/ZDimages/securityCheck/icon_gzzl_ssp@1x.png"/>
+              <p>随手拍</p>
+            </div>
+            <div class="line"></div>
+            <div class="center-r-li">
+              <img  src="@/assets/ZDimages/securityCheck/icon_gzzl_zgtz@1x.png"/>
+              <p>整改通知</p>
+            </div>
+            <div class="line"></div>
+            <div class="center-r-li">
+              <img  src="@/assets/ZDimages/securityCheck/icon_gzzl_sjtj@1x.png"/>
+              <p>数据统计</p>
+            </div>
+          </div>
+        </div>
+        <div class="bottom">
+          <div class="bottom-l">
+            <div class="min-title-box">
+              <p></p>
+              <p>2024年学院名称实验室自查统计</p>
+              <p>查看全部</p>
+            </div>
+            <div class="bottom-l-b">
+              <el-table class="table-box" border :data="tableList" ref="multipleTable">
+                <el-table-column label="序号" align="center"  type="index" width="60" fixed/>
+                <el-table-column label="检查名称" align="center" prop="title" show-overflow-tooltip  fixed/>
+                <el-table-column label="检查时间" align="center" prop="title" show-overflow-tooltip width="226" fixed/>
+                <el-table-column label="检查数" align="center" prop="title" show-overflow-tooltip width="80" fixed/>
+                <el-table-column label="隐患数" align="center" prop="title" show-overflow-tooltip width="80" fixed/>
+                <el-table-column label="整改数" align="center" prop="title" show-overflow-tooltip width="80" fixed/>
+                <el-table-column label="多次整改未完成" align="center" prop="title" show-overflow-tooltip width="130" fixed/>
+                <el-table-column label="整改完成率" align="center" prop="title" show-overflow-tooltip width="90" fixed/>
+              </el-table>
+            </div>
+          </div>
+          <div class="bottom-r">
+            <div class="min-title-box">
+              <p></p>
+              <p>实验室全年指标隐患分布</p>
+              <p>查看全部</p>
+            </div>
+            <div class="bottom-r-b">
+              <el-table class="table-box" border :data="tableList" ref="multipleTable">
+                <el-table-column label="序号" align="center"  type="index" width="60" fixed/>
+                <el-table-column label="实验室" align="center" prop="title" show-overflow-tooltip  fixed/>
+                <el-table-column label="隐患总数" align="center" prop="title" show-overflow-tooltip width="50" fixed/>
+                <el-table-column label="化学安全" align="center" prop="title" show-overflow-tooltip width="50" fixed/>
+                <el-table-column label="安全 设施" align="center" prop="title" show-overflow-tooltip width="50" fixed/>
+                <el-table-column label="基础 安全" align="center" prop="title" show-overflow-tooltip width="50" fixed/>
+                <el-table-column label="生物安全" align="center" prop="title" show-overflow-tooltip width="50" fixed/>
+                <el-table-column label="特种与冷热设备" align="center" prop="title" show-overflow-tooltip width="74" fixed/>
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </div>
+  </div>
+</template>
+
+<script>
+  import {  } from '@/api/safetyCheck/index'
+  import dataScreening from './dataScreening.vue'
+  import dataScreeningChart from './dataScreeningChart.vue'
+  import rectificationFinish from './rectificationFinish.vue'
+  import coverageRateEcharts from './coverageRateEcharts.vue'
+  import inspectionStatisticsEcharts from './inspectionStatisticsEcharts.vue'
+  import hiddenDangerStatisticsEcharts from './hiddenDangerStatisticsEcharts.vue'
+  export default {
+    name: 'index',
+    components: {
+      dataScreening,
+      dataScreeningChart,
+      rectificationFinish,
+      coverageRateEcharts,
+      inspectionStatisticsEcharts,
+      hiddenDangerStatisticsEcharts,
+    },
+    data(){
+      return{
+        //用户身份 校级/院级
+        userType:"",
+        tableList:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      renderheader(h, { column, $index }) {
+        return h('span', {}, [
+          h('span', {}, column.label.split('/')[0]),
+          h('br'),
+          h('span', {}, column.label.split('/')[1])
+        ]);
+        [h('span')]
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .worktable{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    padding:10px!important;
+    font-weight: 400;
+    overflow-y: auto;
+    .min-title-box{
+      display: flex;
+      height:45px;
+      p:nth-child(1){
+        background-color: #0183FA;
+        height:18px;
+        width:4px;
+        margin:24px 10px 0 20px;
+      }
+      p:nth-child(2){
+        font-size:16px;
+        color:#333;
+        line-height:24px;
+        margin-top:21px;
+        flex:1;
+      }
+      p:nth-child(3){
+        font-size:14px;
+        color:#0183fa;
+        line-height:24px;
+        margin-top:21px;
+        margin-right:20px;
+        cursor: pointer;
+      }
+    }
+    .top{
+      display: flex;
+      justify-content: flex-start;
+      .top-c{
+        width: 581px;
+        height: 138px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+        border-radius: 10px 10px 10px 10px;
+        margin-left: 20px;
+      }
+      .top-r{
+        width: 548px;
+        height: 138px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+        border-radius: 10px 10px 10px 10px;
+        margin-left: 20px;
+      }
+    }
+    .center{
+      margin-top: 20px;
+      display: flex;
+      justify-content: flex-start;
+      .center-l{
+        .center-l-t{
+          width: 366px;
+          height: 145px;
+          background: #FFFFFF;
+          box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+          border-radius: 10px 10px 10px 10px;
+          .center-l-t-b{
+            display: flex;
+            justify-content: space-between;
+            margin-top: 10px;
+            .center-l-t-b-li{
+              width: 156px;
+              text-align: center;
+              >img{
+                width: 46px;
+                height: 46px;
+              }
+              >p{
+                font-weight: 400;
+                font-size: 14px;
+                color: #333333;
+                line-height: 24px;
+              }
+            }
+            .center-l-t-b-li:nth-of-type(2){
+              width: 190px;
+              text-align: center;
+            }
+          }
+
+        }
+        .center-l-b{
+          width: 366px;
+          height: 215px;
+          background: #FFFFFF;
+          box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+          border-radius: 10px 10px 10px 10px;
+          margin-top: 20px;
+        }
+      }
+      .center-c{
+        margin-left: 20px;
+        .center-c-t{
+          width: 581px;
+          height: 145px;
+          background: #FFFFFF;
+          box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+          border-radius: 10px 10px 10px 10px;
+          .center-c-t-b{
+            padding: 10px 58px 0 50px;
+            box-sizing: border-box;
+            display: flex;
+            justify-content: space-between;
+            .center-c-t-b-li{
+              text-align: center;
+              >img{
+                width: 46px;
+                height: 46px;
+              }
+              >p{
+                font-weight: 400;
+                font-size: 14px;
+                color: #333333;
+                line-height: 24px;
+                margin-top: 6px;
+              }
+            }
+          }
+        }
+        .center-c-b{
+          width: 581px;
+          height: 216px;
+          background: #FFFFFF;
+          box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+          border-radius: 10px 10px 10px 10px;
+          margin-top: 20px;
+        }
+      }
+      .center-c2{
+        width: 448px;
+        height: 381px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+        border-radius: 10px 10px 10px 10px;
+        margin-left: 20px;
+      }
+      .center-r{
+        width: 89px;
+        height: 381px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+        border-radius: 10px 10px 10px 10px;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+        margin-left: 10px;
+        .center-r-li{
+          text-align: center;
+          cursor: pointer;
+          >img{
+            width: 40px;
+            height: 40px;
+          }
+          >p{
+            font-weight: 400;
+            font-size: 12px;
+            color: #3D3D3D;
+            line-height: 8px;
+            text-align: center;
+            margin-top: 14px;
+          }
+        }
+        .line{
+          width: 30px;
+          height: 0px;
+          border: 2px solid #E0E0E0;
+          margin: 36px 0 30px 0;
+        }
+      }
+    }
+    .bottom{
+      margin-top: 20px;
+      display: flex;
+      justify-content: flex-start;
+      .bottom-l{
+        width: 967px;
+        height: 301px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 14px 0px rgba(0,0,0,0.2);
+        border-radius: 20px 20px 20px 20px;
+        .bottom-l-b{
+          margin: 14px 20px 0;
+        }
+      }
+      .bottom-r{
+        width: 548px;
+        height: 301px;
+        background: #FFFFFF;
+        box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
+        border-radius: 10px 10px 10px 10px;
+        margin-left: 20px;
+        .bottom-r-b{
+          margin: 14px 20px 0;
+        }
+      }
+    }
+  }
+</style>

+ 264 - 0
src/views/safetyCheck/collegeWorktable/inspectionStatisticsEcharts.vue

@@ -0,0 +1,264 @@
+<template>
+  <div class="inspectionStatisticsEcharts" id="inspectionStatisticsEcharts-box"></div>
+</template>
+
+<script>
+  import { checkStatistics } from '@/api/safetyCheck/index'
+  export default {
+    name: 'inspectionStatisticsEcharts',
+    data(){
+      return{
+
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.eCharts();
+    },
+    methods:{
+      //eCharts方法
+      eCharts(){
+        let data = {
+          name : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月',],
+          standards : [0,0,10,20,30,40,50,40,30,20,10,0,0],
+          notStandards : [0,0,5,10,10,20,25,30,20,20,20,20,20],
+        }
+        /* for(let i=0;i<response.rows.length;i++){
+          data.name.push(response.rows[i].yearMonth)
+          if(response.rows[i].notStandards.indexOf('%') != -1){
+            response.rows[i].notStandards = response.rows[i].notStandards.split('%')[0]
+            data.notStandards.push(response.rows[i].notStandards)
+          }else{
+            data.notStandards.push(response.rows[i].notStandards)
+          }
+          if(response.rows[i].standards.indexOf('%') != -1){
+            response.rows[i].standards = response.rows[i].standards.split('%')[0]
+            data.standards.push(response.rows[i].standards)
+          }else{
+            data.standards.push(response.rows[i].standards)
+          }
+        } */
+        let myChart = this.$echarts.init(document.getElementById('inspectionStatisticsEcharts-box'));
+        let option = {
+          //你的代码
+          tooltip: {
+            show:true,
+            trigger: 'axis',
+            formatter: function(params) {
+              let html = '<div>';
+              html += '<p>'+params[0].name+'</p>'
+              for(let i=0;i<params.length;i++){
+                html += '<p>'+params[i].marker+'&nbsp'+params[i].seriesName+'&nbsp:&nbsp'+params[i].data+'%<p>'
+              }
+              return html;
+            },
+            axisPointer: {
+              lineStyle: {
+                color: 'rgb(126,199,255)',
+              },
+            },
+          },
+          legend: {
+            show: true,
+            icon: 'rect',
+            itemWidth: 12,
+            itemHeight: 12,
+            right:20,
+            textStyle: {
+              color: 'rgba(0, 0, 0, 1)',
+              fontSize: 14,
+              padding: [0, 8, 0, 8]
+            }
+          },
+          grid: {
+            top: '20%',
+            left: '10%',
+            right: '7%',
+            bottom: '15%',
+          },
+          xAxis: [
+            {
+              type: 'category',
+              boundaryGap: false,
+              axisLine: {
+                show: true,
+                lineStyle: {
+                  color: '#D8D8D8',
+                },
+              },
+              axisLabel: {
+                textStyle: {
+                  color: '#999999',
+                  fontSize: 12,
+                },
+              },
+              splitLine: {
+                show: false,
+              },
+              axisTick: {
+                show: false,
+              },
+              data: data.name,
+            },
+          ],
+          yAxis: [
+            {
+              name: "",
+              nameTextStyle: {
+                color: "#fff",
+                fontSize: 12,
+                padding: [0, 60, 0, 0]
+              },
+              // minInterval: 1,
+              type: 'value',
+              splitLine :{    //网格线
+                lineStyle:{
+                  type:'dashed'    //设置网格线类型 dotted:虚线   solid:实线
+                },
+                show:true //隐藏或显示
+              },
+              axisLine: {
+                show: true,
+                lineStyle: {
+                  color: '#D8D8D8',
+                },
+              },
+              axisLabel: {
+                show: true,
+                textStyle: {
+                  color: '#999999',
+                  fontSize: 14
+                }
+              },
+              axisTick: {
+                show: false,
+              },
+            },
+          ],
+          series: [
+            {
+              name: '符合',
+              type: 'line',
+              symbol: 'circle',
+              smooth: true,
+              lineStyle: {
+                normal: {
+                  width: 1,
+                  color: '#0183FA', // 线条颜色
+                },
+              },
+              showSymbol: false,
+              itemStyle: {
+                normal: {
+                  color: '#0183FA',//拐点颜色
+                  label: {
+                    show: false, //开启显示
+                    color: '#fff',
+                    position: 'top', //在上方显示
+                    formatter: function (res) {
+                      console.log('res',res)
+                      if (res.value) {
+                        return res.value
+                      } else {
+                        return 0
+                      }
+                    },
+                  },
+                },
+              },
+              areaStyle: {
+                color: {
+                  type: 'linear',
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [  // 渐变颜色
+                    {
+                      offset: 0,
+                      color: 'rgba(0,174,255,1)',
+                    },
+                    {
+                      offset: 0.5,
+                      color: 'rgba(0,174,255,0.38)',
+                    },
+                    {
+                      offset: 1,
+                      color: 'rgba(0,174,255,0)',
+                    },
+                  ],
+                  global: false,
+                },
+              },
+              data: data.standards,
+            },
+            {
+              name: '不符合',
+              type: 'line',
+              symbol: 'circle', // 默认是空心圆(中间是白色的),改成实心圆
+              smooth: true,
+              lineStyle: {
+                normal: {
+                  width: 1,
+                  color: '#F66F00', // 线条颜色
+                },
+              },
+              showSymbol: false,
+              itemStyle: {
+                normal: {
+                  color: '#F66F00',//拐点颜色
+                  label: {
+                    show: true, //开启显示
+                    color: '#fff',
+                    position: 'top', //在上方显示
+                    formatter: function (res) {
+                      if (res.value) {
+                        return res.value
+                      } else {
+                        return 0
+                      }
+                    },
+                  },
+                },
+              },
+              areaStyle: {
+                color: {
+                  type: 'linear',
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [  // 渐变颜色
+                    {
+                      offset: 0,
+                      color: 'rgba(246,111,0,1)',
+                    },
+                    {
+                      offset: 0.5,
+                      color: 'rgba(246,111,0,0.38)',
+                    },
+                    {
+                      offset: 1,
+                      color: 'rgba(246,111,0,0)',
+                    },
+                  ],
+                  global: false,
+                },
+              },
+              data: data.notStandards,
+            }
+          ]
+        };
+        myChart.setOption(option);
+      },
+    }
+  }
+</script>
+
+<style scoped>
+  .inspectionStatisticsEcharts{
+    height:170px;
+  }
+</style>

+ 142 - 0
src/views/safetyCheck/collegeWorktable/rectificationFinish.vue

@@ -0,0 +1,142 @@
+<template>
+  <!-- 整改完成率(%) -->
+  <div class="rectificationFinish" id="rectificationFinish-box">
+
+  </div>
+</template>
+
+<script>
+  import echarts from 'echarts'
+  export default {
+    name: 'rectificationFinish',
+    components: {
+    },
+    data(){
+      return{
+
+
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.eCharts();
+    },
+    methods: {
+      eCharts(){
+        let myChart = this.$echarts.init(document.getElementById('rectificationFinish-box'));
+
+        let option = {
+          color: ['#3398DB'],
+          tooltip : {
+            trigger: 'axis',
+            axisPointer : {            // 坐标轴指示器,坐标轴触发有效
+              type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+            }
+          },
+          legend: {
+            itemWidth:16,
+            itemHeigth:16,
+
+            textStyle:{
+              color:'#333333',
+            }
+          },
+          grid: {
+            top:'24%',
+            left: '3%',
+            right: '4%',
+            bottom: '6%',
+            containLabel: true
+          },
+          xAxis : [
+            {
+              type : 'category',
+              data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
+              axisLabel: {
+                textStyle: {//改变X轴字体颜色
+                  color: '#999999',
+
+                },
+              },
+              axisTick:{//去掉X轴刻度
+                show:false,
+              },
+              axisLine:{
+                lineStyle:{
+                  color:'#D8D8D8',//改变X轴颜色
+
+                }
+              },
+            }
+          ],
+          yAxis : [
+            {
+              type : 'value',
+
+              nameTextStyle:{
+                color:'#fff',
+                align:'left',
+              },
+              splitLine: {           // 分隔线
+                show: true,        // 默认显示,属性show控制显示与否
+                lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
+                  color: ['#171f2d'],
+                  width: 1,
+                  type: 'solid',
+                  opacity:0.2
+                },
+
+              },
+              axisLabel: {
+                textStyle: {//改变X轴字体颜色
+                  color: '#999999',
+
+                },
+              },
+              axisTick:{//去掉X轴刻度
+                show:false,
+              },
+              axisLine:{
+                show:false,
+              },
+
+            },
+          ],
+          series : [
+            {
+              name:'整改完成率(%)',
+
+              itemStyle: {
+                normal: {
+                  color: new echarts.graphic.LinearGradient(
+                    0, 0, 0, 1,
+                    [
+                      {offset: 0, color: '#0183FA'},
+                      {offset: 1, color: '#AED8FF'}
+                    ]
+                  )
+                },
+
+              },
+              type:'bar',
+              barWidth: '10',
+              data:[10, 52, 200, 334, 390, 330, 220,234,316,123,442,234]
+            }
+          ]
+        };
+        myChart.setOption(option);
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .rectificationFinish{
+    width: 548px;
+    height: 138px;
+
+  }
+
+</style>

+ 423 - 0
src/views/safetyCheck/components/checkItem.vue

@@ -0,0 +1,423 @@
+<!--检查项--->
+<template>
+  <div class="page-container checkItem">
+    <div class="page-container checkItem" v-if="pageType == 1">
+      <div class="page-top-title-box">
+        <p class="page-top-title-name-p">{{propsData.subName}}</p>
+        <p class="page-top-title-out-p" @click="backPage">返回</p>
+      </div>
+      <div class="content-box scrollbar-box">
+        <div class="page-form-title-box" style="border:none;">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <div class="table-school-college-toggle-box">
+              <p :class="checkStatus==null?'p-check':''" @click="tableCheck(null)">全部</p>
+              <p :class="checkStatus==0?'p-check':''" @click="tableCheck(0)">待检查</p>
+              <p :class="checkStatus==2?'p-check':''" @click="tableCheck(2)">检查中</p>
+              <p :class="checkStatus==1?'p-check':''" @click="tableCheck(1)">已检查</p>
+            </div>
+            <el-form-item label="" prop="hazardCheckPro">
+              <el-cascader
+                placeholder="请选择检查项目"
+                style="width:200px;"
+                v-model="queryParams.hazardCheckPro"
+                filterable
+                :show-all-levels="false"
+                :options="cascaderData"
+                :props="{ value: 'id', label: 'labelName',emitPath:false }"
+                ></el-cascader>
+            </el-form-item>
+            <el-form-item label="" prop="checkFlag">
+              <el-select v-model="queryParams.checkFlag" placeholder="检查结果" style="width: 200px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="createName">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.createName"
+                placeholder="检查人"
+                style="width: 200px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="state">
+              <el-date-picker
+                :clearable="false"
+                v-model="dateRange"
+                size="small"
+                style="width: 240px"
+                value-format="yyyy-MM-dd"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+              ></el-date-picker>
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          </el-form>
+        </div>
+        <div class="page-content-box" style="padding-top:0;">
+          <el-table class="table-box" v-loading="loading" border :data="dataList">
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="检查项目" prop="name"  show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{scope.row.hazardCheckCode}} {{scope.row.hazardCheckName}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="隐患描述" prop="hazardDescribe" width="400" show-overflow-tooltip/>
+            <el-table-column label="检查结果" prop="checkFlag" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{scope.row.checkStatus!=1?'-':(scope.row.checkFlag?'符合':'不符合')}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="检查人" prop="createName" width="150" show-overflow-tooltip/>
+            <el-table-column label="检查时间" prop="createTime" width="180" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="状态" prop="checkStatus" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{scope.row.checkStatus == '0'?'未开始':(scope.row.checkStatus == '1'?'已完成':(scope.row.checkStatus == '2'?'检查中':''))}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     v-if="scope.row.checkStatus == 0"
+                     @click="tableButton(1,scope.row)"
+
+                  >开始检查</p>
+                  <p class="table-button-p"
+                     v-if="scope.row.checkStatus == 1"
+                     @click="tableButton(2,scope.row)"
+
+                  >详情</p>
+                  <p class="table-button-p"
+                     v-if="scope.row.checkStatus == 2"
+                     @click="tableButton(3,scope.row)"
+
+                  >编辑</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+    <initiateInspect v-if="pageType == 2" :initiateInspectData="initiateInspectData"></initiateInspect>
+  </div>
+</template>
+
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  import {
+    securityCheckOptionList,
+    securityCheckSetOptionList,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import initiateInspect from "@/views/safetyCheck/components/initiateInspect/initiateInspect.vue";
+  export default {
+    name: 'checkItem',
+    components: {
+      initiateInspect
+    },
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //状态选项卡
+        checkStatus:null,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[
+          {value:1,label:'符合'},
+          {value:0,label:'不符合'},
+        ],
+        cascaderData:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          hazardCheckPro:null,
+          checkFlag :null,
+          createName :'',
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        initiateInspectData:{},
+      }
+    },
+    created(){
+      this.securityCheckOptionList();
+      this.getList();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //选项卡切换
+      tableCheck(type){
+        if (this.checkStatus !== type){
+          this.$set(this,'checkStatus',type);
+          this.resetQuery();
+        }
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(6);
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          hazardCheckPro:null,
+          checkFlag :null,
+          createName :'',
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        obj.manageId = this.propsData.manageId
+        obj.checkStatus = this.checkStatus
+        securityCheckSetOptionList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //检查项列表
+      securityCheckOptionList(){
+        securityCheckOptionList({}).then(response => {
+          let list = this.getCascaderData(response.data);
+          this.$set(this,'cascaderData',list);
+        });
+      },
+      getCascaderData(list){
+        let self = this;
+        for(let i=0;i<list.length;i++){
+          list[i].labelName = list[i].code? list[i].code +' '+ list[i].name:list[i].name
+          if(list[i].children){
+            if(list[i].children[0]){
+              list[i].children = self.getCascaderData(list[i].children);
+            }else{
+              if(list[i].level != 3){
+                list.splice(i,1);
+                i--
+              }else{
+                delete list[i].children
+              }
+            }
+          }else{
+            if(list[i].level != 3){
+              list.splice(i,1);
+              i--
+            }else{
+              delete list[i].children
+            }
+          }
+        }
+        for(let i=0;i<list.length;i++){
+          list[i].labelName = list[i].code? list[i].code +' '+ list[i].name:list[i].name
+          if(list[i].children){
+            if(list[i].children[0]){
+              list[i].children = self.getCascaderData(list[i].children);
+            }else{
+              if(list[i].level != 3){
+                list.splice(i,1);
+                i--
+              }else{
+                delete list[i].children
+              }
+            }
+          }else{
+            if(list[i].level != 3){
+              list.splice(i,1);
+              i--
+            }else{
+              delete list[i].children
+            }
+          }
+        }
+        for(let i=0;i<list.length;i++){
+          list[i].labelName = list[i].code? list[i].code +' '+ list[i].name:list[i].name
+          if(list[i].children){
+            if(list[i].children[0]){
+              list[i].children = self.getCascaderData(list[i].children);
+            }else{
+              if(list[i].level != 3){
+                list.splice(i,1);
+                i--
+              }else{
+                delete list[i].children
+              }
+            }
+          }else{
+            if(list[i].level != 3){
+              list.splice(i,1);
+              i--
+            }else{
+              delete list[i].children
+            }
+          }
+        }
+        return list
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //开始检查
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.manageId = this.propsData.manageId;
+          obj.processType = 'inspect';
+          obj.showType = false;
+          this.$set(this,'initiateInspectData',obj);
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.manageId = this.propsData.manageId;
+          obj.showType = true;
+          this.$set(this,'initiateInspectData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.manageId = this.propsData.manageId;
+          obj.processType = 'inspect';
+          obj.showType = false;
+          this.$set(this,'initiateInspectData',obj);
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .checkItem{
+    .content-box{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 225 - 0
src/views/safetyCheck/components/initiateInspect/historyRecordsComponent.vue

@@ -0,0 +1,225 @@
+<!--历史记录-->
+<template>
+  <div class="page-container initiateInspect-historyRecordsComponent">
+    <!--详情/整改展示/复核展示-->
+    <div v-for="(item,index) in dataList" :key="index">
+      <p class="content-right-title-min-p">
+        {{item.dataList1Data1 == 1?'隐患信息':(item.dataList1Data1 == 2?'隐患整改':(item.dataList1Data1 == 3?'复查验证':''))}}
+        <span :class="item.itemShowType?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton(index)"></span>
+      </p>
+      <div v-if="item.itemShowType" style="margin-top:20px;">
+        <div class="right-text-box" v-if="item.dataList1Data1 == 2 || item.dataList1Data1 == 3">
+          <p class="right-text-name-p">{{item.dataList1Data1 == 2?'整改结果':(item.dataList1Data1 == 3?'复查结果':'')}}</p>
+          <div class="right-check-box">
+            <div class="right-min-check-title-box">
+              <p></p>
+            </div>
+            <p class="right-check-title-p" v-if="item.dataList1Data1 == 2">{{newData.rectifyStatus == 1?'已整改':'暂无法整改'}}</p>
+            <p class="right-check-title-p" v-if="item.dataList1Data1 == 3">{{newData.rectifyStatus == 1?'复查完毕':'退回整改'}}</p>
+          </div>
+        </div>
+        <div class="right-text-box">
+          <p class="right-text-name-p">{{item.dataList1Data1 == 1?'隐患描述':(item.dataList1Data1 == 2?'整改措施':(item.dataList1Data1 == 3?'验证情况':''))}}</p>
+          <div class="right-text-text-box" style="width:704px;">
+            <p style="min-height:80px;">{{item.dataList1Data2}}</p>
+          </div>
+        </div>
+        <div class="right-text-box">
+          <p class="right-text-name-p">现场照片</p>
+          <img :src="imgItem" @click="fullScreenViewClick(item.dataList1Data3,imgIndex)"
+               v-for="(imgItem,imgIndex) in item.dataList1Data3" :key="imgIndex">
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'historyRecordsComponent',
+    props:{
+      historyRecordsComponentPropsData:{},
+    },
+    data(){
+      return{
+        newData:{
+          rectifyStatus:1,
+        },
+        dataList:[
+          {
+            dataList1Data1:'1',
+            dataList1Data2:'现场隐患信息描述内容',
+            dataList1Data3:[
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+            ],
+            itemShowType:true,
+          },
+          {
+            dataList1Data1:'2',
+            dataList1Data2:'整改措施整改措施整改措施整改措施',
+            dataList1Data3:[
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+            ],
+            itemShowType:true,
+          },
+          {
+            dataList1Data1:'3',
+            dataList1Data2:'验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况验证情况',
+            dataList1Data3:[
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+              'https://inews.gtimg.com/news_bt/ObxBXJWswEC7oTRhEqLPmyZOq_o2q_HYFD0L4tt-vzEFYAA/641',
+            ],
+            itemShowType:true,
+          },
+        ],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      //子项展开隐藏按钮
+      itemShowButton(index){
+        this.$set(this.dataList[index],'itemShowType',!this.dataList[index].itemShowType);
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .initiateInspect-historyRecordsComponent{
+    border:1px solid #E0E0E0;
+    border-top:none;
+    .content-right-title-min-p{
+      line-height:40px;
+      background: #F5F5F5;
+      padding-left:23px;
+      border-top:1px solid #E0E0E0;
+      border-bottom:1px solid #E0E0E0;
+      span{
+        float: right;
+        font-size:20px;
+        line-height:40px;
+        margin-right:20px;
+        cursor: pointer;
+      }
+    }
+    .right-text-box{
+      display: flex;
+      margin-bottom:20px;
+      .right-text-name-p{
+        width:90px;
+        line-height:40px;
+        text-align: right;
+        margin-right:14px;
+        font-size:16px;
+      }
+      .right-text-title-box{
+        font-size:14px;
+        width:300px;
+        padding:10px 20px;
+        background-color: #f5f5f5;
+        border: 1px solid #E0E0E0;
+        border-radius: 4px 4px 4px 4px;
+        p{
+          line-height:20px;
+          /*单行省略号*/
+          display:block;
+          overflow:hidden;
+          text-overflow:ellipsis;
+          white-space:nowrap;
+        }
+      }
+      .right-text-text-box{
+        font-size:14px;
+        width:300px;
+        padding:10px 20px;
+        background-color: #f5f5f5;
+        border: 1px solid #E0E0E0;
+        border-radius: 4px 4px 4px 4px;
+        p{
+          line-height:20px;
+        }
+      }
+      .right-no-check-box{
+        height:40px;
+        margin-right:20px;
+        overflow: hidden;
+        display: flex;
+        cursor: pointer;
+        div{
+          margin:13px 0 0;
+          width:16px;
+          height:16px;
+          border:1px solid #999;
+          border-radius:50%;
+          p{
+            height:10px;
+            width:10px;
+            margin:2px;
+            border-radius:50%;
+          }
+        }
+        .right-no-check-title-p{
+          margin-left:8px;
+          height:40px;
+          line-height:40px;
+          color:#333;
+          font-size:16px;
+        }
+      }
+      .right-check-box{
+        height:40px;
+        margin-right:20px;
+        overflow: hidden;
+        display: flex;
+        cursor: pointer;
+        div{
+          margin:13px 0 0;
+          width:16px;
+          height:16px;
+          border:1px solid #0183FA;
+          border-radius:50%;
+          p{
+            height:10px;
+            width:10px;
+            margin:2px;
+            border-radius:50%;
+            background-color: #0183FA;
+          }
+        }
+        .right-check-title-p{
+          margin-left:8px;
+          height:40px;
+          line-height:40px;
+          color:#0183FA;
+          font-size:16px;
+        }
+      }
+      img{
+        cursor: pointer;
+        display: block;
+        width:100px;
+        height:100px;
+        margin-right:20px;
+      }
+    }
+  }
+</style>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1035 - 0
src/views/safetyCheck/components/initiateInspect/initiateInspect.vue


+ 327 - 0
src/views/safetyCheck/components/initiateInspect/recheckComponent.vue

@@ -0,0 +1,327 @@
+<!--复核-->
+<template>
+  <div class="page-container initiateInspect-recheckComponent">
+    <!--当前审核-->
+    <el-form class="add-form-box" :model="addForm" ref="addForm" :rules="rules" label-width="110px">
+      <p class="content-right-title-min-p">
+        复查验证
+        <span :class="itemShowType?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton()"></span>
+      </p>
+      <div v-if="itemShowType" style="margin-top:20px;">
+        <div class="right-text-box">
+          <p class="right-text-name-p">复查结果</p>
+          <div :class="addForm.formData7 == 1?'right-check-box':'right-no-check-box'">
+            <div>
+              <p></p>
+            </div>
+            <p class="right-no-check-title-p">复查完毕</p>
+          </div>
+          <div :class="addForm.formData7 == 2?'right-check-box':'right-no-check-box'">
+            <div>
+              <p></p>
+            </div>
+            <p class="right-no-check-title-p">退回整改</p>
+          </div>
+        </div>
+        <el-form-item label="验证情况" prop="formData5">
+          <el-input placeholder="请输入验证情况" maxLength='200' type="textarea" style="width:704px;"
+                    resize="none" v-model="addForm.formData5" show-word-limit :rows="3"></el-input>
+        </el-form-item>
+        <el-form-item label="现场照片" prop="imgDtoList">
+          <div class="snapshotManagement-for-img-box" v-for="(img,imgIndex) in addForm.imgDtoList" :key="imgIndex">
+            <img class="for-img" :src="img.fileUrl" @click="fullScreenViewClick(addForm.imgDtoList,imgIndex)">
+            <p class="for-del-button el-icon-circle-close" @click="delImg(imgIndex)"></p>
+          </div>
+          <el-upload
+            v-if="addForm.imgDtoList.length<6"
+            style="display: inline-block;overflow: hidden"
+            class="avatar-uploader"
+            :action="uploadImgUrl"
+            :show-file-list="false"
+            :on-success="(res)=>handleAvatarSuccess(res)"
+            :headers="headers"
+            :before-upload="(res)=>beforeAvatarUpload(res)">
+            <p class="el-icon-plus up-img-p" style="display: inline-block"></p>
+          </el-upload>
+          <p class="up-img-text">支持jpg/png/bmp/gif格式,且不超过2M,最多上传6张</p>
+        </el-form-item>
+      </div>
+    </el-form>
+    <fullScreenView :fullScreenViewProps="fullScreenViewProps" ref="fullScreenView"></fullScreenView>
+  </div>
+</template>
+
+<script>
+  import { getToken } from "@/utils/auth";
+  import fullScreenView from "@/components/fullScreenView/fullScreenView.vue";
+  export default {
+    name: 'recheckComponent',
+    components: {
+      fullScreenView,
+    },
+    props:{
+      recheckComponentPropsData:{},
+    },
+    data(){
+      return{
+        //上传相关
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        headers: {
+          Authorization:getToken(),
+        },
+        //图片组件数据
+        fullScreenViewProps:[],
+        itemShowType:true,
+        addForm:{
+          imgDtoList:[],
+        },
+        rules:{
+          formData1: [
+            { required: true, message: "请选择检查项目", trigger: "blur" },
+            { required: true, message: "请选择检查项目", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          formData4: [
+            { required: true, message: "请选择检查结果", trigger: "blur" },
+            { required: true, message: "请选择检查结果", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          formData5: [
+            { required: true, message: "请输入隐患描述", trigger: "blur" },
+            { required: true, message: "请输入隐患描述", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          imgDtoList: [
+            { required: true, message: "请上传现场照片", trigger: "blur" },
+          ],
+        },
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      //子项展开隐藏按钮
+      itemShowButton(){
+        this.$set(this,'itemShowType',!this.itemShowType);
+      },
+      /*==========上传相关==========*/
+      handleAvatarSuccess(res) {
+        this.$set(this,'loading',false);
+        if(this.addForm.imgDtoList.length>5){
+          this.msgError('最多只可上传6张')
+          return
+        }
+        let suffixName= this.upDataName.split('.')[this.upDataName.split('.').length - 2]
+        //判断文件名中是否有逗号和分号
+        if(suffixName.indexOf(',')==-1 && suffixName.indexOf(';')==-1){
+        }else{
+          this.msgError('文件名里包含逗号或分号,请修改后重新上传!')
+          return
+        }
+        let obj ={
+          fileName:this.upDataName,
+          fileUrl:res.data.url,
+        };
+        this.addForm.imgDtoList.push(obj);
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file) {
+        if(this.addForm.imgDtoList.length>5){
+          this.msgError('最多只可上传6张')
+          return false
+        }
+        let type = false;
+        if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/jpg' || file.type == 'image/gif' || file.type == 'image/bmp') {
+          if(file.size> 2100000){
+            this.msgError('上传图片大小不能超过2M')
+            return false
+          }
+          this.$set(this,'loading',true);
+          this.upDataName = file.name;
+          type = true;
+        }else{
+          this.msgError('仅支持jpeg/jpg/png/bmp/gif格式')
+          type = false;
+        }
+        return type;
+      },
+      //删除照片
+      delImg(imgIndex){
+        this.addForm.imgDtoList.splice(imgIndex,1);
+      },
+      //照片预览
+      fullScreenViewClick(list,index){
+        this.$set(this,'fullScreenViewProps',list);
+        this.$refs['fullScreenView'].initialize(index);
+      },
+
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .initiateInspect-recheckComponent{
+    .add-form-box{
+      border:1px solid #E0E0E0;
+      border-top:none;
+      .content-right-title-min-p{
+        line-height:40px;
+        background: #F5F5F5;
+        padding-left:23px;
+        border-top:1px solid #E0E0E0;
+        border-bottom:1px solid #E0E0E0;
+        span{
+          float: right;
+          font-size:20px;
+          line-height:40px;
+          margin-right:20px;
+          cursor: pointer;
+        }
+      }
+      .right-text-box{
+        display: flex;
+        margin-bottom:20px;
+        .right-text-name-p{
+          width:90px;
+          line-height:40px;
+          text-align: right;
+          margin-right:14px;
+          font-size:16px;
+        }
+        .right-text-title-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 20px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+            /*单行省略号*/
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+          }
+        }
+        .right-text-text-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 20px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+          }
+        }
+        .right-no-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #999;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+            }
+          }
+          .right-no-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#333;
+            font-size:16px;
+          }
+        }
+        .right-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #0183FA;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+              background-color: #0183FA;
+            }
+          }
+          .right-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#0183FA;
+            font-size:16px;
+          }
+        }
+        img{
+          cursor: pointer;
+          display: block;
+          width:100px;
+          height:100px;
+          margin-right:20px;
+        }
+      }
+      ::v-deep .snapshotManagement-for-img-box{
+        width:80px;
+        height:80px;
+        border-radius:4px;
+        display: inline-block;
+        overflow: hidden;
+        margin-right:20px;
+        position: relative;
+        .for-img{
+          width:80px;
+          height:80px;
+          display: inline-block;
+          overflow: hidden;
+        }
+        .for-del-button{
+          background: rgba(0,0,0,0.7);
+          width:20px;
+          height:20px;
+          line-height: 20px;
+          text-align: center;
+          color:#fff;
+          border-bottom-left-radius:4px;
+          cursor: pointer;
+          position: absolute;
+          top:0;
+          right:0;
+        }
+      }
+      ::v-deep .up-img-p{
+        height:80px;
+        width:80px;
+        line-height:80px;
+        text-align: center;
+        font-size:16px;
+        border-radius:4px;
+        border:1px dashed #E0E0E0;
+      }
+      .up-img-text{
+        line-height:40px;
+        margin-bottom:20px;
+        font-size:14px;
+        color:#999;
+      }
+    }
+  }
+</style>

+ 449 - 0
src/views/safetyCheck/components/initiateInspect/rectificationComponent.vue

@@ -0,0 +1,449 @@
+<!--整改-->
+<template>
+  <div class="page-container initiateInspect-rectificationComponent">
+    <!--当前整改-->
+    <el-form class="add-form-box" :model="addForm" ref="addForm" :rules="rules" label-width="110px">
+      <p class="content-right-title-min-p">
+        隐患整改
+        <span :class="itemShowType?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton()"></span>
+      </p>
+      <div v-if="itemShowType" style="margin-top:20px;">
+        <el-form-item label="整改结果" prop="rectifyStatus">
+          <div class="right-text-box">
+            <div :class="addForm.rectifyStatus == 1?'right-check-box':'right-no-check-box'" @click="checkButton(1)">
+              <div>
+                <p></p>
+              </div>
+              <p class="right-check-title-p">已整改</p>
+            </div>
+            <div :class="addForm.rectifyStatus == 2?'right-check-box':'right-no-check-box'" @click="checkButton(2)">
+              <div>
+                <p></p>
+              </div>
+              <p class="right-check-title-p">暂无法整改</p>
+            </div>
+          </div>
+        </el-form-item>
+        <el-form-item label="整改措施" prop="rectifyDescribe">
+          <el-input placeholder="请输入整改措施" maxLength='200' type="textarea" style="width:704px;"
+                    resize="none" v-model="addForm.rectifyDescribe" show-word-limit :rows="3"></el-input>
+        </el-form-item>
+        <el-form-item label="现场照片" prop="imgDtoList">
+          <div class="snapshotManagement-for-img-box" v-for="(img,imgIndex) in addForm.imgDtoList" :key="imgIndex">
+            <img class="for-img" :src="img.fileUrl" @click="lookImg(addForm.imgDtoList,imgIndex)">
+            <p class="for-del-button el-icon-circle-close" @click="delImg(imgIndex)"></p>
+          </div>
+          <el-upload
+            v-if="addForm.imgDtoList.length<6"
+            style="display: inline-block;overflow: hidden"
+            class="avatar-uploader"
+            :action="uploadImgUrl"
+            :show-file-list="false"
+            :on-success="(res)=>handleAvatarSuccess('img',res)"
+            :headers="headers"
+            :before-upload="(res)=>beforeAvatarUpload('img',res)">
+            <p class="el-icon-plus up-img-p" style="display: inline-block"></p>
+          </el-upload>
+          <p class="up-img-text">支持jpg/png/bmp/gif格式,且不超过2M,最多上传6张</p>
+        </el-form-item>
+        <div v-if="addForm.rectifyStatus == 2">
+          <el-form-item label="整改方案" prop="rectifyProjectUrl">
+            <div class="up-file-button" v-if="!addForm.rectifyProjectUrl">
+              <el-upload
+                v-if="addForm.imgDtoList.length<6"
+                style="display: inline-block;overflow: hidden"
+                class="avatar-uploader"
+                :action="uploadImgUrl"
+                :show-file-list="false"
+                :on-success="(res)=>handleAvatarSuccess('file',res)"
+                :headers="headers"
+                :before-upload="(res)=>beforeAvatarUpload('file',res)">
+                <p class="up-file-min-button">+ 上传文件</p>
+              </el-upload>
+              <p class="up-file-text">支持docx/xlsx/pdf格式文件</p>
+            </div>
+            <div class="up-file-box" v-if="addForm.rectifyProjectUrl">
+              <img src="@/assets/ZDimages/safetyCheck/icon_dr_wj.png">
+              <p>{{addForm.rectifyProjectName}}</p>
+              <p class="el-icon-close" @click="delFileButton"></p>
+            </div>
+          </el-form-item>
+        </div>
+      </div>
+    </el-form>
+  </div>
+</template>
+
+<script>
+  import { getToken } from "@/utils/auth";
+  export default {
+    name: 'rectificationComponent',
+    props:{
+      rectificationComponentPropsData:{},
+    },
+    data(){
+      return{
+        loading:false,
+        //上传相关
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        headers: {
+          Authorization:getToken(),
+        },
+        //图片组件数据
+        fullScreenViewProps:[],
+        itemShowType:true,
+        addForm:{
+          rectifyStatus:null,
+          rectifyDescribe:'',
+          imgDtoList:[],
+          rectifyProjectUrl:'',
+        },
+        rules:{
+          rectifyStatus: [
+            { required: true, message: "请选择整改结果", trigger: "blur" },
+          ],
+          rectifyDescribe: [
+            { required: true, message: "请输入整改措施", trigger: "blur" },
+            { required: true, message: "请输入整改措施", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          imgDtoList: [
+            { required: true, message: "请上传现场照片", trigger: "blur" },
+          ],
+          rectifyProjectUrl: [
+            { required: true, message: "请上传整改方案", trigger: "blur" },
+          ],
+        },
+        upDataName:'',
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      submitData(){
+        return new Promise(resolve=>{
+          this.$refs["addForm"].validate(valid => {
+            if (valid) {
+              resolve(this.addForm)
+            }
+          })
+        })
+      },
+      //子项展开隐藏按钮
+      itemShowButton(){
+        this.$set(this,'itemShowType',!this.itemShowType);
+      },
+      //整改选择按钮
+      checkButton(type){
+        if(this.addForm.rectifyStatus != type){
+          this.$set(this.addForm,'rectifyStatus',type);
+        }
+      },
+      /*==========上传相关==========*/
+      handleAvatarSuccess(srt,res) {
+        this.$set(this,'loading',false);
+        if(srt == 'img'){
+          if(this.addForm.imgDtoList.length>5){
+            this.msgError('最多只可上传6张')
+            return
+          }
+          let suffixName= this.upDataName.split('.')[this.upDataName.split('.').length - 2]
+          //判断文件名中是否有逗号和分号
+          if(suffixName.indexOf(',')==-1 && suffixName.indexOf(';')==-1){
+          }else{
+            this.msgError('文件名里包含逗号或分号,请修改后重新上传!')
+            return
+          }
+          let obj ={
+            fileName:this.upDataName,
+            fileUrl:res.data.url,
+          };
+          this.addForm.imgDtoList.push(obj);
+        } else if(srt == 'file'){
+          this.$set(this,'loading',false);
+          let suffixName= this.upDataName.split('.')[this.upDataName.split('.').length - 2]
+          //判断文件名中是否有逗号和分号
+          if(suffixName.indexOf(',')==-1 && suffixName.indexOf(';')==-1){
+          }else{
+            this.msgError('文件名里包含逗号或分号,请修改后重新上传!')
+            return
+          }
+          this.$set(this.addForm,'rectifyProjectUrl',res.data.url);
+          this.$set(this.addForm,'rectifyProjectName',suffixName);
+        }
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(srt,file) {
+        if(srt == 'img'){
+          if(this.addForm.imgDtoList.length>5){
+            this.msgError('最多只可上传6张')
+            return false
+          }
+          let type = false;
+          if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/jpg' || file.type == 'image/gif' || file.type == 'image/bmp') {
+            if(file.size> 2100000){
+              this.msgError('上传图片大小不能超过2M')
+              return false
+            }
+            this.$set(this,'loading',true);
+            this.upDataName = file.name;
+            type = true;
+          }else{
+            this.msgError('仅支持jpeg/jpg/png/bmp/gif格式')
+            type = false;
+          }
+          return type;
+        }else if(srt == 'file'){
+          let type = false;
+          let num = 0;
+          for(let i=0;i<file.name.length;i++){
+            if(file.name[i] == '.'){
+              num++
+            }
+          }
+          if(num != 1){
+            this.msgError('文件名称不能包含 " . "')
+            return false
+          }
+          if (file.type == 'application/pdf' || file.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
+            if(file.size> 5250000){
+              this.msgError('上传大小不能超过5M')
+              return false
+            }
+            this.$set(this,'loading',true);
+            this.upDataName = file.name;
+            type = true;
+          }else{
+            this.msgError('只能上传docx/xlsx/pdf格式');
+            type = false;
+          }
+          return type;
+        }
+      },
+      //删除文件
+      delFileButton(){
+        this.$set(this.addForm,'rectifyProjectUrl','');
+        this.$set(this.addForm,'rectifyProjectName','');
+      },
+      //删除照片
+      delImg(imgIndex){
+        this.addForm.imgDtoList.splice(imgIndex,1);
+      },
+      //照片预览
+      lookImg(list,index){
+        console.log('this.$parent.$parent',this.$parent.$parent)
+        this.$parent.$parent.fullScreenViewClick(list,index);
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .initiateInspect-rectificationComponent{
+    .add-form-box{
+      border:1px solid #E0E0E0;
+      border-top:none;
+      .content-right-title-min-p{
+        line-height:40px;
+        background: #F5F5F5;
+        padding-left:23px;
+        border-top:1px solid #E0E0E0;
+        border-bottom:1px solid #E0E0E0;
+        span{
+          float: right;
+          font-size:20px;
+          line-height:40px;
+          margin-right:20px;
+          cursor: pointer;
+        }
+      }
+      .right-text-box{
+        display: flex;
+        .right-text-name-p{
+          width:90px;
+          line-height:40px;
+          text-align: right;
+          margin-right:14px;
+          font-size:16px;
+        }
+        .right-text-title-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 20px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+            /*单行省略号*/
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+          }
+        }
+        .right-text-text-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 20px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+          }
+        }
+        .right-no-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #999;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+            }
+          }
+          .right-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#333;
+            font-size:16px;
+          }
+        }
+        .right-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #0183FA;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+              background-color: #0183FA;
+            }
+          }
+          .right-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#0183FA;
+            font-size:16px;
+          }
+        }
+        img{
+          cursor: pointer;
+          display: block;
+          width:100px;
+          height:100px;
+          margin-right:20px;
+        }
+      }
+      ::v-deep .snapshotManagement-for-img-box{
+        width:80px;
+        height:80px;
+        border-radius:4px;
+        display: inline-block;
+        overflow: hidden;
+        margin-right:20px;
+        position: relative;
+        .for-img{
+          width:80px;
+          height:80px;
+          display: inline-block;
+          overflow: hidden;
+        }
+        .for-del-button{
+          background: rgba(0,0,0,0.7);
+          width:20px;
+          height:20px;
+          line-height: 20px;
+          text-align: center;
+          color:#fff;
+          border-bottom-left-radius:4px;
+          cursor: pointer;
+          position: absolute;
+          top:0;
+          right:0;
+        }
+      }
+      ::v-deep .up-img-p{
+        height:80px;
+        width:80px;
+        line-height:80px;
+        text-align: center;
+        font-size:16px;
+        border-radius:4px;
+        border:1px dashed #E0E0E0;
+      }
+      .up-img-text{
+        line-height:40px;
+        font-size:14px;
+        color:#999;
+      }
+      .up-file-button{
+        display: flex;
+      }
+      .up-file-min-button{
+        border:1px solid #0183FA;
+        color:#0183FA;
+        border-radius:4px;
+        height:30px;
+        line-height:30px;
+        width:100px;
+        text-align: center;
+        margin:5px 20px 0 0;
+      }
+      .up-file-text{
+        color:#999;
+        height:40px;
+        line-height:40px;
+      }
+      .up-file-box{
+        display: flex;
+        height:40px;
+        img{
+          margin-top:12px;
+          width:16px;
+          height:16px;
+          display: block;
+        }
+        p:nth-child(2){
+          line-height:40px;
+          font-size:14px;
+          margin:0 30px 0 15px;
+        }
+        p:nth-child(3){
+          cursor: pointer;
+          color:red;
+          font-size:16px;
+          height:16px;
+          width:16px;
+          line-height:16px;
+          margin-top:12px;
+          text-align: center
+        }
+      }
+    }
+  }
+</style>

+ 405 - 0
src/views/safetyCheck/components/inspectStatistics.vue

@@ -0,0 +1,405 @@
+<!--检查明细--->
+<template>
+  <div class="page-container checkItem">
+    <div class="page-container checkItem" v-if="pageType == 1">
+      <div class="page-top-title-box">
+        <p class="page-top-title-name-p">计划标题</p>
+        <p class="page-top-title-out-p" @click="backPage">返回</p>
+      </div>
+      <div class="content-box scrollbar-box">
+        <div class="page-form-title-box" style="border:none;">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <div class="table-school-college-toggle-box">
+              <p :class="manageStatus==null?'p-check':''" @click="tableCheck(null)">全部</p>
+              <p :class="manageStatus==0?'p-check':''" @click="tableCheck(0)">待检查</p>
+              <p :class="manageStatus==1?'p-check':''" @click="tableCheck(1)">检查中</p>
+              <p :class="manageStatus==2?'p-check':''" @click="tableCheck(2)">已检查</p>
+            </div>
+            <el-form-item label="" prop="hazardCheckPro">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.hazardCheckPro"
+                placeholder="模糊搜索检查项"
+                style="width: 140px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="deptId">
+              <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 120px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.deptId"
+                  :label="dict.deptName"
+                  :value="dict.deptId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="subName">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.subName"
+                placeholder="实验室/房间号"
+                style="width: 120px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="personnel">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.personnel"
+                placeholder="检查人/整改人"
+                style="width: 120px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="planTitle">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.planTitle"
+                placeholder="计划标题"
+                style="width: 150px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="state">
+              <el-date-picker
+                :clearable="false"
+                v-model="dateRange"
+                size="small"
+                style="width: 240px"
+                value-format="yyyy-MM-dd"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+              ></el-date-picker>
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <el-form-item style="float: right;">
+              <export-component :exportConfig="exportConfig"></export-component>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="page-content-box" style="padding-top:0;">
+          <el-table class="table-box" v-loading="loading" border :data="dataList" @selection-change="handleSelectionChange" :row-key="getRowKeys">
+            <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="实验室" prop="name"  width="180" show-overflow-tooltip/>
+            <el-table-column label="检查项" prop="content" width="200" show-overflow-tooltip/>
+            <el-table-column label="检查状态" prop="state" width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+              </template>
+            </el-table-column>
+            <el-table-column label="检查人" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="检查结果" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="检查时间" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="整改状态" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="整改人" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="整改时间" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="复查状态" prop="state" width="100" show-overflow-tooltip>
+              <template slot-scope="scope">
+              </template>
+            </el-table-column>
+            <el-table-column label="复查人" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="复查结果" prop="content" width="120" show-overflow-tooltip/>
+            <el-table-column label="操作" width="80" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >详情</p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+    <initiateInspect v-if="pageType == 2"></initiateInspect>
+  </div>
+</template>
+
+<script>
+  import {
+    getDeptDropList,
+  } from '@/api/commonality/permission'
+//import { getDicts } from "@/api/commonality/noPermission";
+//import { systemUserSelect } from "@/api/commonality/permission";
+import { securityCheckStatisticsCheckList } from "@/api/safetyCheck/indexDemoOne";
+import initiateInspect from "@/views/safetyCheck/components/initiateInspect/initiateInspect.vue";
+import exportComponent from '@/components/exportComponent/exportComponent'
+export default {
+  name: 'checkItem',
+  components: {
+    initiateInspect,
+    exportComponent,
+  },
+  props:{
+    propsData:{},
+  },
+  data(){
+    return{
+      tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+      //导出配置
+      exportConfig:{
+        api:'/chemical/chemical/export',             //导出接口地址
+        ids:'',                                       //勾选导出,勾选的IDS
+        fileName:'化学品信息',                         //导出文件的命名
+        screenData:{},
+      },
+      //页面状态
+      pageType:1,
+      //状态选项卡
+      manageStatus:1,
+      //页面遮罩
+      loading:false,
+      //下拉列表数据
+      optionList:[],
+      //查询条件
+      queryParams:{
+        page:1,
+        pageSize:20,
+        myRelated:1,
+        hazardCheckPro:"",
+        deptId :null,
+        subName :"",
+        personnel :"",
+        planTitle :"",
+      },
+      //时间数据
+      dateRange:[],
+      //列表数据
+      dataList:[],
+      //数据数量
+      total:0,
+    }
+  },
+  created(){
+    this.getDeptDropList();
+  },
+  mounted(){
+    this.getList();
+  },
+  methods:{
+    //选项卡切换
+    tableCheck(type){
+      if (this.manageStatus !== type){
+        this.$set(this,'manageStatus',type);
+        this.resetQuery();
+      }
+    },
+    //与我相关按钮
+    topRightClickType(){
+      this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+      this.handleQuery();
+    },
+    // 返回按钮
+    backPage(){
+      this.$parent.tableButton(6);
+    },
+    //查询按钮
+    handleQuery(){
+      this.$set(this.queryParams,'page',1);
+      this.getList();
+    },
+    //重置按钮
+    resetQuery(){
+      this.$set(this,'dateRange',[])
+      this.$set(this,'queryParams',{
+        page:1,
+        pageSize:20,
+        myRelated:1,
+        hazardCheckPro:"",
+        deptId :null,
+        subName :"",
+        personnel :"",
+        planTitle :"",
+      });
+      this.getList();
+    },
+    getRowKeys(row) {
+      return row.id
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    //获取数据列表
+    getList(){
+      this.$set(this,'loading',true);
+      let obj = JSON.parse(JSON.stringify(this.queryParams))
+      if(this.dateRange[0]){
+        obj.startTime = this.dateRange[0]+'T00:00:00'
+        obj.endTime = this.dateRange[1]+'T23:59:59'
+      }else{
+        obj.startTime = "";
+        obj.endTime = "";
+      }
+      obj.planId = this.propsData.planId
+      obj.manageStatus = this.manageStatus
+      securityCheckStatisticsCheckList(obj).then(response => {
+        this.$set(this,'loading',false);
+        this.$set(this,'dataList',response.data.records);
+        this.$set(this,'total',response.data.total);
+      });
+    },
+    //操作按钮
+    tableButton(type,row){
+      let self = this;
+      if(type == 1){
+        //新增
+        this.$set(this,'pageType',2);
+        this.$set(this,'propsData',{});
+      }else if(type == 2){
+        //详情
+        this.$set(this,'pageType',2);
+        let obj = JSON.parse(JSON.stringify(row))
+        obj.showType = true;
+        this.$set(this,'propsData',obj);
+      }else if(type == 3){
+        //编辑
+        this.$set(this,'pageType',2);
+        let obj = JSON.parse(JSON.stringify(row))
+        obj.showType = false;
+        this.$set(this,'propsData',obj);
+      }else if(type == 4){
+        //删除
+        this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          deleteFunction({id:row.id}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          });
+        }).catch(() => {});
+      }else if(type == 5){
+        //启用&停用
+        let text = row.state  ? "停用" : "启用";
+        this.$confirm('是否确认' + text + '?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          stateFunction({id:row.id,state:!row.state,}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          });
+        }).catch(() => {});
+      }else if(type == 6){
+        //返回并刷新
+        this.$set(this,'pageType',1);
+        this.getList();
+      }
+    },
+    //学院列表
+    getDeptDropList() {
+      getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+        this.$set(this, 'optionList', response.data)
+      })
+    },
+  },
+}
+</script>
+
+<style scoped lang="scss">
+.checkItem{
+  .content-box{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    .table-school-college-toggle-box{
+      overflow: hidden;
+      display: inline-block;
+      margin-right:10px;
+      p{
+        display: inline-block;
+        text-align: center;
+        width:80px;
+        line-height:40px;
+        height:40px;
+        color:#333;
+        background-color: #fff;
+        border:1px solid #E0E0E0;
+        font-size:14px;
+        cursor: pointer;
+      }
+      p:nth-child(1){
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+        /*border-right:none;*/
+      }
+      p:nth-child(4){
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        /*border-left:none;*/
+      }
+      .p-check{
+        border:1px solid #0183FA;
+        background-color: #0183FA;
+        color:#fff;
+      }
+    }
+    .form-button-max-big-box-me{
+      display: inline-block;
+      overflow: hidden;
+      margin-right:10px;
+      .form-button-big-box-me{
+        display: flex;
+        div{
+          position: relative;
+          height:40px;
+          width:100px;
+          line-height: 40px;
+          text-align: center;
+          color:#999;
+          font-size:14px;
+          border:1px solid #999;
+          border-radius:4px;
+          font-weight:500;
+          cursor: pointer;
+          .icon-p-me{
+            width:15px;
+            height:15px;
+            line-height:15px;
+            text-align: center;
+            position: absolute;
+            right:0;
+            bottom:0;
+            color:#fff;
+            background: #0183fa;
+            border-top-left-radius:4px;
+          }
+        }
+        .checkDiv-me{
+          color:#0183FA!important;
+          border:1px solid #0183FA!important;
+        }
+      }
+    }
+  }
+}
+.num-data-box{
+  background: rgba(1,131,250,0.2);
+  color:#0183FA;
+  font-size:14px;
+  line-height:40px;
+  padding:0 20px;
+  border-radius:4px;
+  margin:0px 20px 20px 20px;
+  width: 330px;
+}
+</style>

+ 823 - 0
src/views/safetyCheck/components/inspectionItemsStatistics.vue

@@ -0,0 +1,823 @@
+<!--检查项统计--->
+<template>
+  <div class="page-container checkItem">
+    <div class="page-container checkItem" v-if="pageType == 1">
+      <div class="page-top-title-box">
+        <p class="page-top-title-name-p">{{propsData.planTitle}}</p>
+        <p class="page-top-title-out-p" @click="backPage">返回</p>
+      </div>
+      <div class="tabs">
+        <div class="tabs-li" :class="tabsIndex==index?'color-B':'color-A'" @click="tabsClick(index)"
+             v-for="(item,index) in tabsList">
+          <p>{{index+1}}</p>
+          <p>{{item}}</p>
+        </div>
+      </div>
+      <div class="content-box scrollbar-box">
+        <div class="page-form-title-box" style="border:none;">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <div class="table-school-college-toggle-box">
+              <p :class="rectifyStatus==null?'p-check':''" @click="tableCheck(null)">全部</p>
+              <p :class="rectifyStatus==1?'p-check':''" @click="tableCheck(1)">已整改</p>
+              <p :class="rectifyStatus==0?'p-check':''" @click="tableCheck(0)">未整改</p>
+            </div>
+            <el-form-item label="" prop="deptId" v-if="propsData.checkCategory == 1">
+              <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 120px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.deptId"
+                  :label="dict.deptName"
+                  :value="dict.deptId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="subName" v-if="propsData.checkCategory == 2">
+              <el-input
+                maxLength="20"
+                v-model="queryParams.subName"
+                placeholder="实验室/房间号"
+                style="width: 120px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="hazardCheckPro2" v-if="tabsIndex==1">
+              <el-cascader
+                style="width: 150px"
+                placeholder="检查指标"
+                v-model="queryParams.hazardCheckPro2"
+                filterable
+                :show-all-levels="false"
+                :options="cascaderDataTwo"
+                :props="{ value: 'id', label: 'labelName',emitPath:false }"
+              ></el-cascader>
+            </el-form-item>
+            <el-form-item label="" prop="hazardCheckPro" v-if="tabsIndex==2">
+              <el-cascader
+                style="width: 150px"
+                placeholder="检查指标"
+                v-model="queryParams.hazardCheckPro"
+                filterable
+                :show-all-levels="false"
+                :options="cascaderData"
+                :props="{ value: 'id', label: 'labelName',emitPath:false }"
+              ></el-cascader>
+            </el-form-item>
+            <el-form-item label="" prop="searchValue" v-if="tabsIndex != 0">
+              <el-input
+                maxLength="20"
+                v-model="queryParams.searchValue"
+                placeholder="模糊搜索检查指标项"
+                style="width: 160px"
+              />
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <div class="num-data-box">
+              {{formTitleData}}
+            </div>
+            <p class="page-submit-common-style-button"
+               style="float: right;"
+               @click="tableButton(1)"
+
+            >数据刷新</p>
+            <el-form-item style="float: right;">
+              <export-component :exportConfig="exportConfig"></export-component>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="main">
+          <div class="main-l" v-if="tabsIndex==0">
+            <div class="main-title">隐患分布图</div>
+            <div class="hiddenDanger" id="hiddenDanger-box" v-if="eChartsList[0]"></div>
+            <p v-if="!eChartsList[0]" style="color:#999;text-align: center;line-height:200px;">暂无数据</p>
+          </div>
+          <div class="main-r">
+            <div class="main-title">隐患统计表</div>
+            <div class="page-content-box" style="padding-top:0;" v-if="tabsIndex==0">
+              <el-table class="table-box" v-loading="loading" border ref="table-box" :data="dataList"
+                        @selection-change="handleSelectionChange" :row-key="getRowKeysOne"
+                        @sort-change="sortChange">
+                <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+                <el-table-column label="序号" type="index" width="60"/>
+                <el-table-column label="一级检查项" prop="oneLevelName" show-overflow-tooltip/>
+                <el-table-column label="隐患数" sortable="custom" prop="hazardNum" width="160" show-overflow-tooltip/>
+                <el-table-column label="占比" prop="ratio" width="160" show-overflow-tooltip>
+                  <template slot-scope="scope">
+                    {{scope.row.ratio?scope.row.ratio+'%':''}}
+                  </template>
+                </el-table-column>
+                <el-table-column label="二级检查项数量" prop="twoLevelNum" width="160" show-overflow-tooltip/>
+                <el-table-column label="三级检查项数量" prop="threeLeveNum" width="160" show-overflow-tooltip/>
+              </el-table>
+              <pagination :page-sizes="[20, 30, 40, 50]"
+                          v-show="total>0"
+                          :total="total"
+                          :page.sync="queryParams.page"
+                          :limit.sync="queryParams.pageSize"
+                          @pagination="getList"
+              />
+            </div>
+            <div class="page-content-box" style="padding-top:0;" v-if="tabsIndex==1">
+              <el-table class="table-box" v-loading="loading" border ref="table-box" :data="dataList"
+                        @selection-change="handleSelectionChange" :row-key="getRowKeysTwo"
+                        @sort-change="sortChange">
+                <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+                <el-table-column label="序号" type="index" width="60"/>
+                <el-table-column label="二级检查项" prop="twoLevelName" show-overflow-tooltip/>
+                <el-table-column label="隐患数" sortable="custom" prop="hazardNum" width="160" show-overflow-tooltip/>
+                <el-table-column label="占比" prop="ratio" width="160" show-overflow-tooltip/>
+              </el-table>
+              <pagination :page-sizes="[20, 30, 40, 50]"
+                          v-show="total>0"
+                          :total="total"
+                          :page.sync="queryParams.page"
+                          :limit.sync="queryParams.pageSize"
+                          @pagination="getList"
+              />
+            </div>
+            <div class="page-content-box" style="padding-top:0;" v-if="tabsIndex==2">
+              <el-table class="table-box" v-loading="loading" border ref="table-box" :data="dataList"
+                        @selection-change="handleSelectionChange" :row-key="getRowKeysThree"
+                        @sort-change="sortChange">
+                <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+                <el-table-column label="序号" type="index" width="60"/>
+                <el-table-column label="三级检查项" prop="threeLevelName" show-overflow-tooltip/>
+                <el-table-column label="隐患数" sortable="custom" prop="hazardNum" width="160" show-overflow-tooltip/>
+                <el-table-column label="占比" prop="ratio" width="160" show-overflow-tooltip/>
+              </el-table>
+              <pagination :page-sizes="[20, 30, 40, 50]"
+                          v-show="total>0"
+                          :total="total"
+                          :page.sync="queryParams.page"
+                          :limit.sync="queryParams.pageSize"
+                          @pagination="getList"
+              />
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  import {
+    getDeptDropList,
+  } from '@/api/commonality/permission'
+  import {
+    securityCheckOptionList,
+    securityCheckDangerTodayDangerList,
+    reportHazardItemsOneReportRefresh,
+    securityHazardReportTwoReportRefresh,
+    reportHazardItemsThreeReportRefresh,
+    reportHazardItemsOneReportPie,
+    reportHazardItemsOneReportList,
+    reportHazardItemsTwoReportPie,
+    reportHazardItemsTwoReportList,
+    reportHazardItemsThreeReportPie,
+    reportHazardItemsThreeReportList,
+    reportHazardItemsOneReportListCollege,
+    reportHazardItemsOneReportPieCollege,
+    reportHazardItemsTwoReportListCollege,
+    reportHazardItemsTwoReportPieCollege,
+    reportHazardItemsThreeReportListCollege,
+    reportHazardItemsThreeReportPieCollege,
+  } from "@/api/safetyCheck/indexDemoOne";
+  import echarts from 'echarts'
+  import exportComponent from '@/components/exportComponent/exportComponent'
+
+  export default {
+    name: 'checkItem',
+    components: {
+      exportComponent
+    },
+    props: {
+      propsData: {}
+    },
+    data() {
+      return {
+        tableButtonType: this.hasPermiDom(['demo:demo:detail', 'demo:demo:edit', 'demo:demo:del']),
+        //导出配置
+        exportConfig: {
+          api:'',             //导出接口地址
+          ids:'',                                       //勾选导出,勾选的IDS
+          fileName:'',                         //导出文件的命名
+          screenData:{},
+        },
+        //页面状态
+        pageType: 1,
+        //状态选项卡
+        rectifyStatus: null,
+        //页面遮罩
+        loading: false,
+        //学院列表
+        optionList: [],
+        //检查指标列表
+        cascaderData:[],
+        cascaderDataTwo:[],
+        //查询条件
+        queryParams: {
+          page: 1,
+          pageSize: 20,
+          deptId: null,
+          sort:'',
+          hazardCheckPro2:null,
+          hazardCheckPro:null,
+          searchValue:'',
+          subName:'',
+        },
+        //查询头部数据
+        formTitleData:'',
+        tabsList: ['一级指标隐患分布', '二级指标隐患分布', '三级指标隐患分布'],
+        tabsIndex: 0,
+        //列表数据
+        dataList: [],
+        //图标数据
+        eChartsList:[],
+        //数据数量
+        total: 0
+      }
+    },
+    created() {
+      this.securityCheckOptionList();
+      this.getDeptDropList();
+    },
+    mounted() {
+      this.getList()
+    },
+    methods: {
+      tabsClick(index) {
+        if (this.tabsIndex !== index) {
+          this.$set(this, 'tabsIndex', index)
+          this.$set(this, 'rectifyStatus', null)
+          this.resetQuery()
+        }
+      },
+      //选项卡切换
+      tableCheck(type) {
+        if (this.rectifyStatus !== type) {
+          this.$set(this, 'rectifyStatus', type)
+          this.resetQuery()
+        }
+      },
+      // 返回按钮
+      backPage() {
+        this.$parent.tableButton(6)
+      },
+      //查询按钮
+      handleQuery() {
+        this.$set(this.queryParams, 'page', 1)
+        this.getList()
+      },
+      //重置按钮
+      resetQuery() {
+        this.$refs['table-box'].clearSelection();
+        this.$set(this.exportConfig,'ids','');
+        this.$set(this, 'queryParams', {
+          page: 1,
+          pageSize: 20,
+          deptId: null,
+          sort:'',
+          hazardCheckPro2:null,
+          hazardCheckPro:null,
+          searchValue:'',
+          subName:'',
+        })
+        this.getList()
+      },
+      getRowKeysOne(row) {
+        return row.oneLevelId
+      },
+      getRowKeysTwo(row) {
+        return row.twoLevelId
+      },
+      getRowKeysThree(row) {
+        return row.threeLevelId
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        if(this.tabsIndex == 0){
+          this.$set(this.exportConfig,'ids',selection.map(item => item.oneLevelId));
+        } else if(this.tabsIndex == 1){
+          this.$set(this.exportConfig,'ids',selection.map(item => item.twoLevelId));
+        } else if(this.tabsIndex == 2){
+          this.$set(this.exportConfig,'ids',selection.map(item => item.threeLevelId));
+        }
+      },
+      //时间排序方法
+      sortChange(val){
+        if(val.prop == 'hazardNum'){
+          this.$set(this.queryParams,'sort',val.order=='ascending'?'asc':(val.order=='descending'?'desc':''));
+          this.handleQuery();
+        }
+      },
+      //获取数据列表
+      getList() {
+        //列表请求数据
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        obj.planId = this.propsData.planId;
+        obj.rectifyStatus = this.rectifyStatus;
+        //饼图请求数据
+        let eChartsData = {
+          planId:this.propsData.planId,
+          rectifyStatus:this.rectifyStatus,
+          deptId:this.queryParams.deptId,
+        }
+        this.$set(this.exportConfig,'customKey','planId');
+        this.$set(this.exportConfig,'customValue',obj.planId);
+        this.$set(this.exportConfig,'screenData',obj);
+        if(this.propsData.checkCategory == 1){
+          //校级数据
+          if(this.tabsIndex == 0){
+            //一级隐患列表
+            reportHazardItemsOneReportList(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //一级指标隐患分布 饼图/头部数据
+            reportHazardItemsOneReportPie(eChartsData).then(response => {
+              let list = [];
+              for(let i=0;i<response.data.pie.length;i++){
+                list.push({
+                  name:response.data.pie[i].oneLevelCode+' '+response.data.pie[i].oneLevelName,
+                  value:response.data.pie[i].hazardNum
+                })
+              }
+              this.$set(this,'eChartsList',list[0]?list:[]);
+              this.$nextTick(()=>{
+                this.eCharts(this.eChartsList);
+              })
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/oneExport');
+            this.$set(this.exportConfig,'fileName','一级指标隐患分布');
+          }else if(this.tabsIndex == 1){
+            //二级隐患列表
+            reportHazardItemsTwoReportList(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //二级指标隐患分布 饼图/头部数据
+            reportHazardItemsTwoReportPie(eChartsData).then(response => {
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/twoExport');
+            this.$set(this.exportConfig,'fileName','二级指标隐患分布');
+          }else if(this.tabsIndex == 2){
+            //三级隐患列表
+            reportHazardItemsThreeReportList(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //三级指标隐患分布 饼图/头部数据
+            reportHazardItemsThreeReportPie(eChartsData).then(response => {
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/threeExport');
+            this.$set(this.exportConfig,'fileName','三级指标隐患分布');
+          }
+        }else if(this.propsData.checkCategory == 2){
+          //院级数据
+          if(this.tabsIndex == 0){
+            //一级隐患列表
+            reportHazardItemsOneReportListCollege(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //一级指标隐患分布 饼图/头部数据
+            reportHazardItemsOneReportPieCollege(eChartsData).then(response => {
+              let list = [];
+              for(let i=0;i<response.data.pie.length;i++){
+                list.push({
+                  name:response.data.pie[i].oneLevelCode+' '+response.data.pie[i].oneLevelName,
+                  value:response.data.pie[i].hazardNum
+                })
+              }
+              this.$set(this,'eChartsList',list[0]?list:[]);
+              this.$nextTick(()=>{
+                this.eCharts(this.eChartsList);
+              })
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/oneExportCollege');
+            this.$set(this.exportConfig,'fileName','一级指标隐患分布');
+          }else if(this.tabsIndex == 1){
+            //二级隐患列表
+            reportHazardItemsTwoReportListCollege(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //二级指标隐患分布 饼图/头部数据
+            reportHazardItemsTwoReportPieCollege(eChartsData).then(response => {
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/twoExportCollege');
+            this.$set(this.exportConfig,'fileName','二级指标隐患分布');
+          }else if(this.tabsIndex == 2){
+            //三级隐患列表
+            reportHazardItemsThreeReportListCollege(obj).then(response => {
+              this.$set(this, 'dataList', response.data.records)
+              this.$set(this, 'total', response.data.total)
+            })
+            //三级指标隐患分布 饼图/头部数据
+            reportHazardItemsThreeReportPieCollege(eChartsData).then(response => {
+              this.$set(this,'formTitleData',response.data.topMsg);
+            })
+            this.$set(this.exportConfig,'api','/report/hazardItems/threeExportCollege');
+            this.$set(this.exportConfig,'fileName','三级指标隐患分布');
+          }
+        }
+      },
+      eCharts(list) {
+        let myChart = this.$echarts.init(document.getElementById('hiddenDanger-box'))
+        let option = {
+          legend: {
+            show: false
+          },
+          tooltip: {
+            confine: true,
+            trigger: 'item',
+            formatter: '{b} : {c}'
+          },
+          series: [
+            {
+              // avoidLabelOverlap: false,
+              type: 'pie',
+              left: 20,
+              right: 20,
+              roseType: 'area', // 玫瑰图
+              center: ['50%', '50%'],
+              radius: ['0%', '40%'],
+              label: {
+                normal: {
+                  // formatter: '{b}\n{d}%',
+                  formatter: function(params) {
+                    let name = params.name;
+                    let percent = params.percent+'%';
+                    if (name.length > 10) {
+                      name = name.substring(0, 10) + '...';
+                    }
+                    return name+'\n'+percent;
+                  },
+                  textStyle: {
+                    fontSize: 12,
+                    color: '#333'
+                  },
+                }
+              },
+              data: list,
+              noData: {
+                // 自定义缺省样式
+                // 文本,支持使用 `\n` 换行
+                text: '暂无数据',
+                // 文本样式
+                textStyle: {
+                  color: '#333',
+                  fontSize: 14
+                },
+              },
+              itemStyle: {
+                normal: {
+                  color: function(colors) {
+                    var colorList = ['#0183FA', '#FF5E86', '#FFE019', '#2758E0', '#41BE26', '#009DFF', '#FF2A00', '#39DBED', '#FFA200', '#7DD947', '#A069FF']
+                    return colorList[colors.dataIndex]
+                  }
+                }
+              }
+            }
+          ]
+        }
+        myChart.setOption(option)
+      },
+      //操作按钮
+      tableButton(type, row) {
+        let self = this
+        if (type == 1) {
+          //查询数据并刷新
+          securityCheckDangerTodayDangerList().then(response => {
+            //数据刷新
+            if(response.data>0){
+              if(this.tabsIndex == 0){
+                reportHazardItemsOneReportRefresh().then(response => {
+                  this.msgSuccess(response.message)
+                  this.getList();
+                });
+              }else if(this.tabsIndex == 1){
+                securityHazardReportTwoReportRefresh().then(response => {
+                  this.msgSuccess(response.message)
+                  this.getList();
+                });
+              }else if(this.tabsIndex == 2){
+                reportHazardItemsThreeReportRefresh().then(response => {
+                  this.msgSuccess(response.message)
+                  this.getList();
+                });
+              }
+            }else{
+              this.msgSuccess('已是最新数据,无需更新.')
+            }
+          });
+        } else if (type == 2) {
+          //详情
+          this.$set(this, 'pageType', 2)
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true
+          this.$set(this, 'propsData', obj)
+        } else if (type == 3) {
+          //编辑
+          this.$set(this, 'pageType', 2)
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false
+          this.$set(this, 'propsData', obj)
+        } else if (type == 4) {
+          //删除
+          this.$confirm('是否确认删除?', '警告', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({ id: row.id }).then(response => {
+              self.msgSuccess(response.message)
+              self.getList()
+            })
+          }).catch(() => {
+          })
+        } else if (type == 5) {
+          //启用&停用
+          let text = row.state ? '停用' : '启用'
+          this.$confirm('是否确认' + text + '?', '警告', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(function() {
+          }).then(() => {
+            stateFunction({ id: row.id, state: !row.state }).then(response => {
+              self.msgSuccess(response.message)
+              self.getList()
+            })
+          }).catch(() => {
+          })
+        } else if (type == 6) {
+          //返回并刷新
+          this.$set(this, 'pageType', 1)
+          this.getList()
+        }
+      },
+      //学院列表
+      getDeptDropList() {
+        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+          this.$set(this, 'optionList', response.data)
+        })
+      },
+      //检查项列表
+      securityCheckOptionList() {
+        securityCheckOptionList({}).then(response => {
+          let listTwo = this.getCascaderData(JSON.parse(JSON.stringify(response.data)),2)
+          let list = this.getCascaderData(JSON.parse(JSON.stringify(response.data)),3)
+          this.$nextTick(()=>{
+            this.$set(this, 'cascaderDataTwo', listTwo)
+            this.$set(this, 'cascaderData', list)
+          })
+        })
+      },
+      //检查项格式处理
+      getCascaderData(list,type) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        return list
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .hiddenDanger {
+    height: 400px;
+  }
+
+  .tabs {
+    width: 100%;
+    height: 50px;
+    background: #F5F5F5;
+    border-radius: 0px 0px 0px 0px;
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    .tabs-li {
+      display: flex;
+      justify-content: flex-start;
+      align-items: center;
+      width: 256px;
+      cursor: pointer;
+      padding-left: 20px;
+      box-sizing: border-box;
+      > p:nth-of-type(1) {
+        width: 20px;
+        height: 20px;
+        margin-right: 10px;
+        background: #A2A2A2;
+        font-weight: 400;
+        font-size: 16px;
+        color: #FFFFFF;
+        line-height: 20px;
+        text-align: center;
+        border-radius: 10px;
+      }
+      > p:nth-of-type(2) {
+        font-weight: 400;
+        font-size: 16px;
+        color: #333333;
+        line-height: 16px;
+      }
+    }
+    .color-A {
+      > p:nth-of-type(1) {
+        background: #A2A2A2;
+      }
+      > p:nth-of-type(2) {
+        color: #333333;
+      }
+    }
+    .color-B {
+      > p:nth-of-type(1) {
+        background: #0183FA;
+      }
+      > p:nth-of-type(2) {
+        color: #0183FA;
+      }
+    }
+  }
+
+  .num-data-box {
+    display: inline-block;
+    vertical-align: top;
+    background: rgba(1, 131, 250, 0.2);
+    color: #0183FA;
+    font-size: 14px;
+    line-height: 40px;
+    padding: 0 20px;
+    border-radius: 4px;
+    margin: 0px 15px 0px 15px;
+    width: 455px;
+  }
+
+  .main {
+    flex: 1;
+    display: flex;
+    justify-content: flex-start;
+    border-top: 1px solid #D8D8D8;
+    .main-title {
+      width: 159px;
+      height: 40px;
+      background: rgba(1, 131, 250, 0.2);
+      border-radius: 0px 4px 4px 0px;
+      font-weight: 400;
+      font-size: 16px;
+      color: #0183FA;
+      line-height: 40px;
+      letter-spacing: 2px;
+      text-align: center;
+      margin-bottom: 20px;
+    }
+    .main-l {
+      width: 492px;
+      border-right: 1px dashed #D8D8D8;
+    }
+    .main-r {
+      width: 1086px;
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+    }
+  }
+
+  .checkItem {
+    .content-box {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .table-school-college-toggle-box {
+        overflow: hidden;
+        display: inline-block;
+        margin-right: 10px;
+        p {
+          display: inline-block;
+          text-align: center;
+          width: 80px;
+          line-height: 40px;
+          height: 40px;
+          color: #333;
+          background-color: #fff;
+          border: 1px solid #E0E0E0;
+          font-size: 14px;
+          cursor: pointer;
+        }
+        p:nth-child(1) {
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4) {
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check {
+          border: 1px solid #0183FA;
+          background-color: #0183FA;
+          color: #fff;
+        }
+      }
+      .form-button-max-big-box-me {
+        display: inline-block;
+        overflow: hidden;
+        margin-right: 10px;
+        .form-button-big-box-me {
+          display: flex;
+          div {
+            position: relative;
+            height: 40px;
+            width: 100px;
+            line-height: 40px;
+            text-align: center;
+            color: #999;
+            font-size: 14px;
+            border: 1px solid #999;
+            border-radius: 4px;
+            font-weight: 500;
+            cursor: pointer;
+            .icon-p-me {
+              width: 15px;
+              height: 15px;
+              line-height: 15px;
+              text-align: center;
+              position: absolute;
+              right: 0;
+              bottom: 0;
+              color: #fff;
+              background: #0183fa;
+              border-top-left-radius: 4px;
+            }
+          }
+          .checkDiv-me {
+            color: #0183FA !important;
+            border: 1px solid #0183FA !important;
+          }
+        }
+      }
+    }
+  }
+</style>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 422 - 0
src/views/safetyCheck/components/noticeDom.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1228 - 0
src/views/safetyCheck/components/projectAddPage.vue


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 360 - 0
src/views/safetyCheck/components/rectificationReportDom.vue


+ 829 - 0
src/views/safetyCheck/components/snapshotInfo.vue

@@ -0,0 +1,829 @@
+<!--随手拍详情-->
+<template>
+  <div class="page-container snapshot-snapshotInfo">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p">{{lookInfoType?'详情':(addForm.photoId?'编辑':'新增')}}</p>
+      <p class="page-top-title-out-p" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" v-if="!lookInfoType" @click="submitForm">提交</p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="add-form-box" :model="addForm" ref="form" :rules="lookInfoType||propsData.rectify?noRules:rules" label-width="104px">
+        <p class="content-right-title-p">
+          基本信息
+          <span :class="itemShowType_1?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton(1)"></span>
+        </p>
+        <div v-if="itemShowType_1" class="show-box">
+          <div class="content-flex-box">
+            <el-form-item label="实验室" prop="subId">
+              <el-select
+                :disabled="lookInfoType||propsData.rectify"
+                style="width:300px;"
+                v-model="addForm.subId"
+                filterable
+                remote
+                clearable
+                reserve-keyword
+                @change="selectChange"
+                @clear="selectClear"
+                placeholder="搜索选择实验室"
+                :remote-method="laboratorySubRelInfoGetRelList">
+                <el-option
+                  v-for="item in subOptions"
+                  :key="item.subId"
+                  :label="item.subName"
+                  :value="item.subId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <div class="right-text-box">
+              <p class="right-text-name-p" style="width:138px;">分级分类</p>
+              <div class="right-text-title-box">
+                <p v-if="addForm.classLevelName||addForm.classTypeNames" style="color:#333;">
+                  {{addForm.classLevelName}}{{addForm.classLevelName&&addForm.classTypeNames?' | ':''}}{{addForm.classTypeNames}}
+                </p>
+                <p v-else="addForm.classLevelName||addForm.classTypeNames" style="color:#999;">搜索选择实验室</p>
+              </div>
+            </div>
+            <div class="right-text-box">
+              <p class="right-text-name-p" style="width:138px;">学院单位</p>
+              <div class="right-text-title-box">
+                <p :style="!addForm.deptName?'color:#999;':'color:#333;'">{{addForm.deptName?addForm.deptName:'搜索选择实验室'}}</p>
+              </div>
+            </div>
+          </div>
+          <div class="content-flex-box">
+            <div class="right-text-box">
+              <p class="right-text-name-p">楼栋楼层</p>
+              <div class="right-text-title-box">
+                <p v-if="addForm.buildName||addForm.floorName" style="color:#333;">
+                  {{addForm.buildName}}{{addForm.buildName&&addForm.floorName?'-':''}}{{addForm.floorName}}
+                </p>
+                <p v-else="addForm.buildName||addForm.floorName" style="color:#999;">搜索选择实验室</p>
+              </div>
+            </div>
+            <div class="right-text-box" v-if="lookInfoType||propsData.rectify">
+              <p class="right-text-name-p" style="width:138px;">上报人</p>
+              <div class="right-text-title-box">
+                <p :style="!addForm.deptName?'color:#999;':'color:#333;'">{{addForm.createName}}</p>
+              </div>
+            </div>
+            <div class="right-text-box" v-if="lookInfoType||propsData.rectify">
+              <p class="right-text-name-p" style="width:138px;">上报时间</p>
+              <div class="right-text-title-box">
+                <p :style="!addForm.deptName?'color:#999;':'color:#333;'">{{parseTime(addForm.createTime,"{y}-{m}-{d} {h}:{i}")}}</p>
+              </div>
+            </div>
+          </div>
+        </div>
+        <p class="content-right-title-p">
+          检查内容
+          <span :class="itemShowType_2?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton(2)"></span>
+        </p>
+        <div v-if="itemShowType_2" class="show-box">
+          <el-form-item label="检查项目" prop="hazardCheckId" v-if="!propsData.rectify||(propsData.rectify&&addForm.hazardCheckId)">
+            <el-cascader
+              :disabled="lookInfoType||propsData.rectify"
+              clearable
+              placeholder="请选择检查项目"
+              style="width:704px;"
+              v-model="addForm.hazardCheckId"
+              filterable
+              :options="options"
+              :props="{ value: 'id', label: 'labelName',emitPath:false }"
+              @change="handleChange"></el-cascader>
+          </el-form-item>
+          <div class="right-text-box">
+            <p class="right-text-name-p">检查要点</p>
+            <div class="right-text-title-box" style="min-height: 80px;width:704px;">
+              <p :style="!addForm.hazardCheckPoint?'color:#999;':'color:#333;'">{{addForm.hazardCheckPoint?addForm.hazardCheckPoint:'请选择检查项目'}}</p>
+            </div>
+          </div>
+          <div class="right-text-box">
+            <p class="right-text-name-p">隐患等级</p>
+            <div class="right-text-title-box" style="width:301px;">
+              <p :style="!addForm.hazardLevel?'color:#999;':'color:#333;'">
+                {{addForm.hazardLevel==1?'轻微隐患':(addForm.hazardLevel==2?'一般隐患':(addForm.hazardLevel==3?'重大隐患':'请选择检查项目'))}}
+              </p>
+            </div>
+          </div>
+        </div>
+        <p class="content-right-title-p">
+          隐患信息
+          <span :class="itemShowType_3?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton(3)"></span>
+        </p>
+        <div v-if="itemShowType_3" class="show-box">
+          <el-form-item label="隐患描述" prop="hazardDescribe">
+            <el-input placeholder="请输入隐患描述" maxLength='200' type="textarea" style="width:704px;"
+                      :disabled="lookInfoType||propsData.rectify"
+                      resize="none" v-model="addForm.hazardDescribe" show-word-limit :rows="3"></el-input>
+          </el-form-item>
+          <el-form-item label="现场照片" prop="imgDtoList">
+            <div class="snapshotManagement-for-img-box" v-for="(img,imgIndex) in addForm.imgDtoList" :key="imgIndex">
+              <img class="for-img" :src="img.fileUrl" @click="fullScreenViewClick(addForm.imgDtoList,imgIndex)">
+              <p class="for-del-button el-icon-circle-close" v-if="!lookInfoType&&!propsData.rectify" @click="delImg(imgIndex)"></p>
+            </div>
+            <el-upload
+              v-if="(addForm.imgDtoList.length<6&&!lookInfoType)&&!propsData.rectify"
+              style="display: inline-block;overflow: hidden"
+              class="avatar-uploader"
+              :action="uploadImgUrl"
+              :show-file-list="false"
+              :on-success="(res)=>handleAvatarSuccess(res)"
+              :headers="headers"
+              :before-upload="(res)=>beforeAvatarUpload(res)">
+              <p class="el-icon-plus up-img-p" style="display: inline-block"></p>
+            </el-upload>
+            <p class="up-img-text" v-if="!lookInfoType&&!propsData.rectify">支持jpg/png/bmp/gif格式,且不超过2M,最多上传6张</p>
+          </el-form-item>
+        </div>
+        <div v-if="lookInfoType&&addForm.rectifyStatus!=0">
+          <p class="content-right-title-p">
+            隐患整改
+            <span :class="itemShowType_4?'el-icon-arrow-down':'el-icon-arrow-up'" @click="itemShowButton(4)"></span>
+          </p>
+          <div v-if="itemShowType_4" class="show-box">
+            <el-form-item label="整改结果">
+              <p :style="'line-height:40px;'+(addForm.rectifyStatus==1?'color:#009519;':'color:#FF8C00;')">{{addForm.rectifyStatus==1?'已整改':(addForm.rectifyStatus==2?'暂无法整改':'')}}</p>
+            </el-form-item>
+            <el-form-item label="整改措施">
+              <el-input placeholder="" maxLength='200' type="textarea" style="width:704px;"
+                        :disabled="lookInfoType||propsData.rectify"
+                        resize="none" v-model="addForm.hazardDescribe" show-word-limit :rows="3"></el-input>
+            </el-form-item>
+            <el-form-item label="现场照片">
+              <div class="snapshotManagement-for-img-box" v-for="(img,imgIndex) in addForm.imgDtoList" :key="imgIndex">
+                <img class="for-img" :src="img.fileUrl" @click="fullScreenViewClick(addForm.imgDtoList,imgIndex)">
+                <p class="for-del-button el-icon-circle-close" v-if="!lookInfoType&&!propsData.rectify" @click="delImg(imgIndex)"></p>
+              </div>
+            </el-form-item>
+            <el-form-item label="整改方案" v-if="addForm.rectifyStatus==2">
+              <div class="up-file-box" v-if="addForm.rectifyProjectUrl" @click="fullScreenFileLookClick">
+                <img src="@/assets/ZDimages/safetyCheck/icon_dr_wj.png">
+                <p>{{addForm.rectifyProjectName}}</p>
+              </div>
+            </el-form-item>
+            <div style="display: flex">
+              <el-form-item label="整改人">
+                <p class="user-time-p">{{addForm.rectifyUserName}}</p>
+              </el-form-item>
+              <el-form-item label="处理时间">
+                <p class="user-time-p">{{ parseTime(addForm.rectifyTime,"{y}-{m}-{d} {h}:{i}") }}</p>
+              </el-form-item>
+            </div>
+          </div>
+        </div>
+        <!--整改-->
+        <rectification-component v-if="propsData.rectify" ref="rectificationComponent" :recheckComponentPropsData="recheckComponentPropsData"></rectification-component>
+      </el-form>
+    </div>
+    <fullScreenView :fullScreenViewProps="fullScreenViewProps" ref="fullScreenView"></fullScreenView>
+    <fullScreenFileLook ref="fullScreenFileLook"></fullScreenFileLook>
+  </div>
+</template>
+
+<script>
+  import { getToken } from "@/utils/auth";
+  import {
+    securityCheckPhotoDetail,
+    securityCheckOptionList,
+    securityCheckPhotoMyAdd,
+    securityCheckPhotoUpdate,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import {
+    laboratorySubRelInfoGetRelList,
+  } from '@/api/commonality/noPermission'
+  import fullScreenView from "@/components/fullScreenView/fullScreenView.vue";
+  import fullScreenFileLook from "@/components/fullScreenFileLook/fullScreenFileLook.vue";
+  import rectificationComponent from "./initiateInspect/rectificationComponent.vue";
+  export default {
+    name: 'snapshotInfo',
+    components: {
+      fullScreenView,
+      fullScreenFileLook,
+      rectificationComponent,
+    },
+    props:{
+      propsData:{},
+      //rectify:是否整改
+      //showType:是否详情
+    },
+    data(){
+      return{
+        //上传相关
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        headers: {
+          Authorization:getToken(),
+        },
+        //图片组件数据
+        fullScreenViewProps:[],
+        //详情模式
+        lookInfoType:false,
+        //实验室列表
+        subOptions:[],
+        //学院列表
+        deptOptions:[],
+        //楼栋列表
+        buildOptions:[],
+        //分类
+        typeOptions: [],
+        //分级
+        levelOptions: [],
+        //提交表单
+        addForm:{
+          deptId:'',
+          deptName:'',
+          subId:'',
+          subName:'',
+          subRoom:'',
+          buildId:'',
+          buildName:'',
+          floorId:'',
+          floorName:'',
+          typeId:'',
+          classTypeNames:'',
+          levelId:'',
+          classLevelName:'',
+          hazardCheckId1:'',
+          hazardCheckName1:'',
+          hazardCheckCode1:'',
+          hazardCheckId2:'',
+          hazardCheckName2:'',
+          hazardCheckCode2:'',
+          hazardCheckId:'',
+          hazardCheckName:'',
+          hazardCheckCode:'',
+          hazardCheckPoint:'',
+          hazardLevel:'',
+          hazardDescribe:'',
+          imgDtoList:[],
+        },
+        noRules:{},
+        rules:{
+          subId: [
+            { required: true, message: "搜索选择实验室", trigger: "blur" },
+          ],
+          hazardDescribe: [
+            { required: true, message: "请输入隐患描述", trigger: "blur" },
+            { required: true, message: '请输入隐患描述', validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          imgDtoList: [
+            { required: true, message: "请上传现场照片", trigger: "blur" },
+          ],
+        },
+        //子项展开状态
+        itemShowType_1:true,
+        itemShowType_2:true,
+        itemShowType_3:true,
+        itemShowType_4:true,
+        options:[],
+        //历史记录组件数据
+        historyRecordsComponentPropsData:{},
+        recheckComponentPropsData:{},
+      }
+    },
+    created(){
+      this.securityCheckOptionList();
+      this.initialize();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //初始化
+      initialize(){
+        if(this.propsData.showType){
+          this.$set(this,'lookInfoType',true);
+          this.securityCheckPhotoDetail();
+        }else{
+          this.$set(this,'lookInfoType',false);
+          if(this.propsData.photoId){
+            this.securityCheckPhotoDetail();
+          }
+        }
+      },
+      //上报详情接口
+      securityCheckPhotoDetail(){
+        securityCheckPhotoDetail({photoId:this.propsData.photoId}).then(response => {
+          response.data.imgDtoList = response.data.yhDtoList;
+          this.$set(this,'subOptions',[{subId:response.data.subId,subName:response.data.subName}]);
+          this.$set(this,'addForm',response.data);
+        });
+      },
+      //查询检查项列表
+      securityCheckOptionList(){
+        securityCheckOptionList({}).then( response => {
+          this.$set(this,'options',this.listChildrenDel(response.data));
+          this.getCascaderData(this.options)
+        });
+      },
+      // tree 结构转化成一维数组
+      listChildrenDel(list) {
+        let listOptions = JSON.parse(JSON.stringify(list))
+        for (let i = 0; i < listOptions.length; i++) {
+          if (listOptions[i].children){
+            if(listOptions[i].children[0]){
+              for(let o=0; o< listOptions[i].children.length;o++){
+                if(!listOptions[i].children[o].children){
+                  listOptions[i].children.splice(o,1);
+                  o--
+                }else if(!listOptions[i].children[o].children[0]){
+                  listOptions[i].children.splice(o,1);
+                  o--
+                }
+              }
+            }else{
+              listOptions.splice(i,1);
+              i--
+            }
+          } else {
+            listOptions.splice(i,1);
+            i--
+          }
+        }
+        for (let i = 0; i < listOptions.length; i++) {
+          if (!listOptions[i].children){
+            listOptions.splice(i,1);
+            i--
+          } else if(!listOptions[i].children[0]){
+            listOptions.splice(i,1);
+            i--
+          }
+        }
+        return listOptions;
+      },
+      //联级选择器数据处理
+      getCascaderData(list){
+        let self = this;
+        for(let i=0;i<list.length;i++){
+          list[i].labelName = list[i].code? list[i].code +' '+ list[i].name:list[i].name
+          if(list[i].level == 1 || list[i].level == 2){
+            self.getCascaderData(list[i].children)
+          }else{
+            delete list[i].children
+          }
+        }
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(6);
+      },
+      /** 提交按钮 */
+      submitForm() {
+        if (this.propsData.rectify){
+          // 整改
+          this.securityCheckPhotoUpdate();
+        } else {
+          this.securityCheckPhotoMyAdd();
+        }
+      },
+      // 新增
+      securityCheckPhotoMyAdd(){
+        let self = this;
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            this.$confirm('是否确认提交?', "警告", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning"
+            }).then(function() {
+              securityCheckPhotoMyAdd(self.addForm).then(response => {
+                self.msgSuccess(response.message)
+                self.$parent.tableButton(6);
+              });
+            }).then(() => {
+            }).catch(() => {});
+          }
+        })
+      },
+      // 整改
+      async securityCheckPhotoUpdate(){
+        let self = this;
+        let obj = await this.$refs["rectificationComponent"].submitData();
+        obj.photoId = this.addForm.photoId;
+        this.$confirm('是否确认提交?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          securityCheckPhotoUpdate(obj).then(response => {
+            self.msgSuccess(response.message)
+            self.$parent.tableButton(6);
+          });
+        }).then(() => {
+        }).catch(() => {});
+      },
+      handleChange(value) {
+        let self = this;
+        if(value){
+          for(let i=0;i<self.options.length;i++){
+            if(self.options[i].children){
+              for(let o=0;o<self.options[i].children.length;o++){
+                if(self.options[i].children[o].children){
+                  for(let x=0;x<self.options[i].children[o].children.length;x++){
+                    if (value == self.options[i].children[o].children[x].id){
+                      self.$set(self.addForm,'hazardCheckId1',self.options[i].id);
+                      self.$set(self.addForm,'hazardCheckName1',self.options[i].name);
+                      self.$set(self.addForm,'hazardCheckCode1',self.options[i].code);
+                      self.$set(self.addForm,'hazardCheckId2',self.options[i].children[o].id);
+                      self.$set(self.addForm,'hazardCheckName2',self.options[i].children[o].name);
+                      self.$set(self.addForm,'hazardCheckCode2',self.options[i].children[o].code);
+                      self.$set(self.addForm,'hazardCheckId',self.options[i].children[o].children[x].id);
+                      self.$set(self.addForm,'hazardCheckName',self.options[i].children[o].children[x].name);
+                      self.$set(self.addForm,'hazardCheckCode',self.options[i].children[o].children[x].code);
+                      self.$set(self.addForm,'hazardCheckPoint',self.options[i].children[o].children[x].mainPoint);
+                      self.$set(self.addForm,'hazardLevel',self.options[i].children[o].children[x].level);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }else{
+          self.$set(self.addForm,'hazardCheckId1','');
+          self.$set(self.addForm,'hazardCheckName1','');
+          self.$set(self.addForm,'hazardCheckCode1','');
+          self.$set(self.addForm,'hazardCheckId2','');
+          self.$set(self.addForm,'hazardCheckName2','');
+          self.$set(self.addForm,'hazardCheckCode2','');
+          self.$set(self.addForm,'hazardCheckId','');
+          self.$set(self.addForm,'hazardCheckName','');
+          self.$set(self.addForm,'hazardCheckCode','');
+          self.$set(self.addForm,'hazardCheckPoint','');
+          self.$set(self.addForm,'hazardLevel','');
+        }
+      },
+      //子项展开隐藏按钮
+      itemShowButton(type){
+        if(type == 1){
+          this.$set(this,'itemShowType_1',!this.itemShowType_1);
+        }else if(type == 2){
+          this.$set(this,'itemShowType_2',!this.itemShowType_2);
+        }else if(type == 3){
+          this.$set(this,'itemShowType_3',!this.itemShowType_3);
+        }else if(type == 4){
+          this.$set(this,'itemShowType_4',!this.itemShowType_4);
+        }
+      },
+      //懒加载实验室
+      laboratorySubRelInfoGetRelList(e){
+        laboratorySubRelInfoGetRelList({searchValue:e}).then(response => {
+          this.subOptions = response.data;
+        });
+      },
+      //实验室选择
+      selectChange(e){
+        let self = this;
+        for(let i=0;i<self.subOptions.length;i++){
+          if(self.subOptions[i].subId == e){
+            self.$set(self.addForm,"deptId",self.subOptions[i].deptId);
+            self.$set(self.addForm,"deptName",self.subOptions[i].deptName);
+            self.$set(self.addForm,"subId",self.subOptions[i].subId);
+            self.$set(self.addForm,"subName",self.subOptions[i].subName);
+            self.$set(self.addForm,"subRoom",self.subOptions[i].subRoom);
+            self.$set(self.addForm,"buildId",self.subOptions[i].buildId);
+            self.$set(self.addForm,"buildName",self.subOptions[i].buildName);
+            self.$set(self.addForm,"floorId",self.subOptions[i].floorId);
+            self.$set(self.addForm,"floorName",self.subOptions[i].floorName);
+            self.$set(self.addForm,"typeId",self.subOptions[i].typeId);
+            self.$set(self.addForm,"classTypeNames",self.subOptions[i].classTypeNames);
+            self.$set(self.addForm,"levelId",self.subOptions[i].levelId);
+            self.$set(self.addForm,"classLevelName",self.subOptions[i].classLevelName);
+          }
+        }
+      },
+      //实验室清除
+      selectClear(){
+        let self = this;
+        self.$set(self.addForm,"deptId",'');
+        self.$set(self.addForm,"deptName",'');
+        self.$set(self.addForm,"subId",'');
+        self.$set(self.addForm,"subName",'');
+        self.$set(self.addForm,"subRoom",'');
+        self.$set(self.addForm,"buildId",'');
+        self.$set(self.addForm,"buildName",'');
+        self.$set(self.addForm,"floorId",'');
+        self.$set(self.addForm,"floorName",'');
+        self.$set(self.addForm,"typeId",'');
+        self.$set(self.addForm,"classTypeNames",'');
+        self.$set(self.addForm,"levelId",'');
+        self.$set(self.addForm,"classLevelName",'');
+      },
+      //文件预览
+      fullScreenFileLookClick(){
+        let item = {
+          fileName:this.addForm.rectifyProjectName,
+          fileUrl:this.addForm.rectifyProjectUrl,
+        }
+        //判断类型
+        let type = '';
+        if(item.fileUrl.split('.')[1] == 'docx'){
+          type = 'docx'
+        }else if(item.fileUrl.split('.')[1] == 'xlsx'){
+          type = 'excel'
+        }else if(item.fileUrl.split('.')[1] == 'pdf'){
+          type = 'pdf'
+        }
+        let url = localStorage.getItem('fileBrowseEnvironment')+item.fileUrl;
+        this.$refs['fullScreenFileLook'].initialize(item.fileName,url,type);
+      },
+      /*==========上传相关==========*/
+      handleAvatarSuccess(res) {
+        this.$set(this,'loading',false);
+        if(this.addForm.imgDtoList.length>5){
+          this.msgError('最多只可上传6张')
+          return
+        }
+        let suffixName= this.upDataName.split('.')[this.upDataName.split('.').length - 2]
+        //判断文件名中是否有逗号和分号
+        if(suffixName.indexOf(',')==-1 && suffixName.indexOf(';')==-1){
+        }else{
+          this.msgError('文件名里包含逗号或分号,请修改后重新上传!')
+          return
+        }
+        let obj ={
+          fileName:this.upDataName,
+          fileUrl:res.data.url,
+        };
+        this.addForm.imgDtoList.push(obj);
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file) {
+        if(this.addForm.imgDtoList.length>5){
+          this.msgError('最多只可上传6张')
+          return false
+        }
+        let type = false;
+        if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/jpg' || file.type == 'image/gif' || file.type == 'image/bmp') {
+          if(file.size> 2100000){
+            this.msgError('上传图片大小不能超过2M')
+            return false
+          }
+          this.$set(this,'loading',true);
+          this.upDataName = file.name;
+          type = true;
+        }else{
+          this.msgError('仅支持jpeg/jpg/png/bmp/gif格式')
+          type = false;
+        }
+        return type;
+      },
+      //删除照片
+      delImg(imgIndex){
+        this.addForm.imgDtoList.splice(imgIndex,1);
+      },
+      //照片预览
+      fullScreenViewClick(list,index){
+        this.$set(this,'fullScreenViewProps',list);
+        this.$refs['fullScreenView'].initialize(index);
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .snapshot-snapshotInfo{
+    padding-bottom:20px;
+    :v-deep .el-cascader-menu{
+      width:470px;
+    }
+    .content-box{
+      flex:1;
+      display: flex;
+      padding:20px;
+      .flex-null{
+        flex:1;
+      }
+      .add-form-box{
+        flex:1;
+        .show-box{
+          border:1px solid #E0E0E0;
+          border-top:none;
+          padding-top:20px;
+        }
+      }
+      .content-flex-box{
+        display: flex;
+      }
+      .content-right-title-p:nth-child(1){
+        border-top: 1px solid #E0E0E0;
+      }
+      .content-right-title-p{
+        line-height:40px;
+        background: #F5F5F5;
+        border: 1px solid #E0E0E0;
+        border-top:none;
+        padding-left:23px;
+        span{
+          float: right;
+          font-size:20px;
+          line-height:40px;
+          margin-right:20px;
+          cursor: pointer;
+        }
+      }
+      .right-text-box{
+        display: flex;
+        margin-bottom:20px;
+        .right-text-name-p{
+          width:90px;
+          line-height:40px;
+          text-align: right;
+          margin-right:14px;
+          font-size:16px;
+        }
+        .right-text-title-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 14px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+            /*单行省略号*/
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+          }
+        }
+        .right-text-text-box{
+          font-size:14px;
+          width:300px;
+          padding:10px 20px;
+          background-color: #f5f5f5;
+          border: 1px solid #E0E0E0;
+          border-radius: 4px 4px 4px 4px;
+          p{
+            line-height:20px;
+          }
+        }
+        .right-no-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #999;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+            }
+          }
+          .right-no-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#333;
+            font-size:16px;
+          }
+        }
+        .right-check-box{
+          height:40px;
+          margin-right:20px;
+          overflow: hidden;
+          display: flex;
+          cursor: pointer;
+          div{
+            margin:13px 0 0;
+            width:16px;
+            height:16px;
+            border:1px solid #0183FA;
+            border-radius:50%;
+            p{
+              height:10px;
+              width:10px;
+              margin:2px;
+              border-radius:50%;
+              background-color: #0183FA;
+            }
+          }
+          .right-check-title-p{
+            margin-left:8px;
+            height:40px;
+            line-height:40px;
+            color:#0183FA;
+            font-size:16px;
+          }
+        }
+        img{
+          cursor: pointer;
+          display: block;
+          width:100px;
+          height:100px;
+          margin-right:20px;
+        }
+      }
+      ::v-deep .el-form-item--medium .el-form-item__label{
+        font-size:16px;
+      }
+      ::v-deep .el-input.is-disabled .el-input__inner{
+        background-color: #f5f5f5;
+        border: 1px solid #E0E0E0;
+        color:#333;
+        cursor: auto;
+      }
+      ::v-deep .el-range-editor.is-disabled{
+        background-color: #f5f5f5;
+        border: 1px solid #E0E0E0;
+        color:#333;
+        cursor: auto;
+      }
+      ::v-deep .el-range-editor.is-disabled input{
+        background-color: #f5f5f5;
+        color:#333;
+        cursor: auto;
+      }
+      ::v-deep .el-textarea.is-disabled .el-textarea__inner{
+        background-color: #f5f5f5;
+        border: 1px solid #E0E0E0;
+        color:#333;
+        cursor: auto;
+      }
+      ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner{
+        border-color: #1890ff;
+        background: #1890ff;
+      }
+      ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner::after{
+        background: #fff;
+      }
+      ::v-deep .snapshotManagement-for-img-box{
+        width:80px;
+        height:80px;
+        border-radius:4px;
+        display: inline-block;
+        overflow: hidden;
+        margin-right:20px;
+        position: relative;
+        .for-img{
+          width:80px;
+          height:80px;
+          display: inline-block;
+          overflow: hidden;
+        }
+        .for-del-button{
+          background: rgba(0,0,0,0.7);
+          width:20px;
+          height:20px;
+          line-height: 20px;
+          text-align: center;
+          color:#fff;
+          border-bottom-left-radius:4px;
+          cursor: pointer;
+          position: absolute;
+          top:0;
+          right:0;
+        }
+      }
+      ::v-deep .up-img-p{
+        height:80px;
+        width:80px;
+        line-height:80px;
+        text-align: center;
+        font-size:16px;
+        border-radius:4px;
+        border:1px dashed #E0E0E0;
+      }
+      .up-img-text{
+        line-height:20px;
+        font-size:14px;
+        color:#999;
+      }
+      .up-file-box{
+        display: flex;
+        height:40px;
+        img{
+          margin-top:12px;
+          width:16px;
+          height:16px;
+          display: block;
+        }
+        p:nth-child(2){
+          line-height:40px;
+          font-size:14px;
+          margin:0 30px 0 15px;
+          cursor: pointer;
+        }
+      }
+      .user-time-p{
+        font-size:14px;
+        color:#333;
+        width:300px;
+        height:40px;
+        line-height:40px;
+        background-color: #f5f5f5;
+        border-radius:4px;
+        border:1px solid #e0e0e0;
+        padding-left:14px;
+        color:#333;
+      }
+    }
+  }
+</style>

+ 563 - 0
src/views/safetyCheck/components/subDialog.vue

@@ -0,0 +1,563 @@
+<!--待检查实验室-->
+<template>
+  <el-dialog class="inspectionPlan-dialog-box"
+             :close-on-click-modal="false"
+             title="待检查实验室" :visible.sync="addDialogType" v-if="addDialogType"
+             @close="addDialogOff" width="1430px" append-to-body>
+    <div class="inspectionPlan-dialog-sub-box">
+      <div v-if="!lookInfoType" class="left-max-box">
+        <div class="dept-table-title-box">
+          <p>待选实验室</p>
+          <p>{{subNumLeft}}/{{subTotalLeft}}</p>
+        </div>
+        <div class="dept-table-max-box">
+          <el-form :model="subQueryParamsLeft" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+            <el-form-item label="" prop="deptId" v-if="schoolCollegeType == 'school'">
+              <el-select v-model="subQueryParamsLeft.deptId" clearable placeholder="学院" style="width: 144px">
+                <el-option
+                  v-for="item in deptSelectList"
+                  :key="item.deptId"
+                  :label="item.deptName"
+                  :value="item.deptId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="buildId" v-if="schoolCollegeType == 'school'">
+              <el-select v-model="subQueryParamsLeft.buildId" clearable placeholder="楼栋" style="width: 144px">
+                <el-option
+                  v-for="item in buildSelectList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="typeId">
+              <el-select v-model="subQueryParamsLeft.typeId" clearable placeholder="分类" style="width: 144px">
+                <el-option
+                  v-for="item in classTypeList"
+                  :key="item.typeId"
+                  :label="item.subType"
+                  :value="item.typeId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="levelId">
+              <el-select v-model="subQueryParamsLeft.levelId" clearable placeholder="分级" style="width: 144px">
+                <el-option
+                  v-for="item in classifiedList"
+                  :key="item.levelId"
+                  :label="item.titleName"
+                  :value="item.levelId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="hazardType">
+              <el-select v-model="subQueryParamsLeft.hazardType" clearable placeholder="危险源标签" style="width: 144px">
+                <el-option
+                  v-for="item in hazardTypeList"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="searchValue" class="form-index">
+              <el-input
+                maxLength="30"
+                v-model="subQueryParamsLeft.searchValue"
+                placeholder="实验室/房间号"
+                clearable
+                style="width: 313px">
+              </el-input>
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="subHandleQueryLeft" style="width:60px;">搜索</p>
+            <p class="page-reset-common-style-button" @click="subResetQueryLeft" style="width:60px;margin-right:0;">重置</p>
+          </el-form>
+          <el-table class="table-box table-null-img-20" ref="leftSubTable" border :data="subTableListLeft" @selection-change="subChangeLeft" :row-key="getSubRowKeys">
+            <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+            <el-table-column label="实验室" align="center" prop="subName" show-overflow-tooltip>
+              <template slot-scope="scope">{{scope.row.roomNum?scope.row.subName+'-'+scope.row.roomNum:scope.row.subName}}</template>
+            </el-table-column>
+            <el-table-column label="分级分类" align="center" prop="deptName" show-overflow-tooltip width="150">
+              <template slot-scope="scope">
+                <span>{{scope.row.classTypeNames}}</span>
+                <span>-</span>
+                <span :style="'color:'+scope.row.classLevelColor+';'">{{scope.row.classLevelName}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="学院" align="center" prop="deptName" show-overflow-tooltip width="150"/>
+          </el-table>
+          <pagination layout="total, prev, pager, next, jumper"
+                      v-show="subTotalLeft>0"
+                      :total="subTotalLeft"
+                      :page.sync="subQueryParamsLeft.page"
+                      :limit.sync="subQueryParamsLeft.pageSize"
+                      @pagination="subGetListLeft"/>
+        </div>
+      </div>
+      <div v-if="!lookInfoType" class="center-box">
+        <p class="el-icon-arrow-left" @click="subArrowButton(1)">到左边</p>
+        <p class="el-icon-arrow-right" @click="subArrowButton(2)">到右边</p>
+      </div>
+      <div class="right-max-box">
+        <div class="dept-table-title-box" v-if="!lookInfoType">
+          <p>已选实验室</p>
+          <p v-if="!lookInfoType">{{subNumRight}}/{{subTotalRight}}</p>
+          <p v-if="lookInfoType">{{subTotalRight}}</p>
+        </div>
+        <div class="dept-table-max-box">
+          <el-form :model="subQueryParamsRight" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+            <el-form-item label="" prop="deptId" v-if="schoolCollegeType == 'school'">
+              <el-select v-model="subQueryParamsRight.deptId" clearable placeholder="学院" :style="!lookInfoType?'width:144px':'width:180px'">
+                <el-option
+                  v-for="item in deptSelectList"
+                  :key="item.deptId"
+                  :label="item.deptName"
+                  :value="item.deptId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="buildId" v-if="schoolCollegeType == 'school'">
+              <el-select v-model="subQueryParamsRight.buildId" clearable placeholder="楼栋" :style="!lookInfoType?'width:144px':'width:180px'">
+                <el-option
+                  v-for="item in buildSelectList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="typeId">
+              <el-select v-model="subQueryParamsRight.typeId" clearable placeholder="分类" :style="!lookInfoType?'width:144px':'width:140px'">
+                <el-option
+                  v-for="item in classTypeList"
+                  :key="item.typeId"
+                  :label="item.subType"
+                  :value="item.typeId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="levelId">
+              <el-select v-model="subQueryParamsRight.levelId" clearable placeholder="分级" :style="!lookInfoType?'width:144px':'width:140px'">
+                <el-option
+                  v-for="item in classifiedList"
+                  :key="item.levelId"
+                  :label="item.titleName"
+                  :value="item.levelId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="hazardType">
+              <el-select v-model="subQueryParamsRight.hazardType" clearable placeholder="危险源标签" :style="!lookInfoType?'width:144px':'width:140px'">
+                <el-option
+                  v-for="item in hazardTypeList"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="searchValue" class="form-index">
+              <el-input
+                maxLength="30"
+                v-model="subQueryParamsRight.searchValue"
+                placeholder="实验室/房间号"
+                clearable
+                :style="!lookInfoType?'width:313px':'width:180px'">
+              </el-input>
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="subHandleQueryRight" style="width:60px;">搜索</p>
+            <p class="page-reset-common-style-button" @click="subResetQueryRight" style="width:60px;margin-right:0;">重置</p>
+          </el-form>
+          <el-table class="table-box table-null-img-20" ref="rightSubTable" border :data="subTableListRight" @selection-change="subChangeRight" :row-key="getSubRowKeys">
+            <el-table-column v-if="!lookInfoType" type="selection" width="50" :reserve-selection="true" align="center"/>
+            <el-table-column label="实验室" align="center" prop="subName" show-overflow-tooltip>
+              <template slot-scope="scope">{{scope.row.roomNum?scope.row.subName+'-'+scope.row.roomNum:scope.row.subName}}</template>
+            </el-table-column>
+            <el-table-column label="分级分类" align="center" prop="classTypeNames" show-overflow-tooltip width="150" v-if="!lookInfoType">
+              <template slot-scope="scope">
+                <span>{{scope.row.classTypeNames}}</span>
+                <span>-</span>
+                <span :style="'color:'+scope.row.classLevelColor+';'">{{scope.row.classLevelName}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="学院" align="center" prop="deptName" show-overflow-tooltip width="150" v-if="!lookInfoType"/>
+            <el-table-column label="学院" align="center" prop="deptName" show-overflow-tooltip width="250" v-if="lookInfoType"/>
+            <el-table-column label="楼栋" align="center" prop="buildName" show-overflow-tooltip width="200" v-if="lookInfoType"/>
+            <el-table-column label="分类" align="center" prop="classTypeNames" show-overflow-tooltip width="150" v-if="lookInfoType"/>
+            <el-table-column label="分级" align="center" prop="classLevelName" show-overflow-tooltip width="150" v-if="lookInfoType">
+              <template slot-scope="scope">
+                <span :style="'color:'+scope.row.classLevelColor+';'">{{scope.row.classLevelName}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="负责人" align="center" prop="deptName" show-overflow-tooltip width="220" v-if="lookInfoType"/>
+          </el-table>
+          <pagination layout="total, prev, pager, next, jumper"
+                      v-show="subTotalRight>0"
+                      :total="subTotalRight"
+                      :page.sync="subQueryParamsRight.page"
+                      :limit.sync="subQueryParamsRight.pageSize"
+                      @pagination="subGetListRight"/>
+        </div>
+      </div>
+    </div>
+    <div slot="footer" class="dialog-footer dialog-footer-box" style="display: flex">
+      <p class="dialog-footer-button-null"></p>
+      <p class="dialog-footer-button-info" @click="addDialogOff" v-if="!lookInfoType">取消</p>
+      <p class="dialog-footer-button-primary" @click="addUserButton" v-if="!lookInfoType">确定</p>
+      <p class="dialog-footer-button-primary" @click="addDialogOff" v-if="lookInfoType">确认</p>
+      <p class="dialog-footer-button-null"></p>
+    </div>
+  </el-dialog>
+</template>
+
+<script>  import {
+  laboratorySubRelInfoConditionSubjectInfo,
+} from '@/api/safetyCheck/indexDemoOne'
+  import {
+  getDeptDropList,
+  systemBuildingGetOptList,
+  laboratoryTypeConfigGetList,
+  laboratoryLevelConfigGetLevelTitleList,
+  laboratorySubRelInfoGetHazardTypeList,
+} from "@/api/commonality/permission";
+  export default {
+    name: 'subDialog',
+    props:{
+      subCheckData:{},
+      schoolCollegeType:null
+    },
+    data(){
+      return{
+        addDialogType:true,
+        lookInfoType:false,
+        deptSelectList:[],
+        buildSelectList:[],
+        classTypeList:[],
+        classifiedList:[],
+        hazardTypeList:[],
+        subQueryParamsLeft:{
+          page:1,
+          pageSize:20,
+          typeId:"",
+          levelId:"",
+          deptId:"",
+          searchValue:"",
+          filtType:1
+        },
+        subTableListLeft:[],
+        subTotalLeft:0,
+        subNumLeft:0,
+        subIdsLeft:[],
+        subQueryParamsRight:{
+          page:1,
+          pageSize:20,
+          typeId:"",
+          levelId:"",
+          deptId:"",
+          searchValue:"",
+          filtType:2
+        },
+        subTableListRight:[],
+        subTotalRight:0,
+        subNumRight:0,
+        subIdsRight:[],
+        dialogTableSubDataList:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.$set(this,'dialogTableSubDataList',this.subCheckData.subIds);
+      this.$set(this,'lookInfoType',this.subCheckData.showType);
+      //下拉框查询
+      this.getDeptDropList();
+      this.systemBuildingGetOptList();
+      this.laboratoryTypeConfigGetList();
+      this.laboratoryLevelConfigGetLevelTitleList();
+      this.laboratorySubRelInfoGetHazardTypeList();
+      this.subResetQueryLeft();
+      this.subResetQueryRight();
+    },
+    methods:{
+      //弹窗关闭
+      addDialogOff(){
+        this.$parent.subCheckButton(4)
+      },
+      //确定按钮
+      addUserButton(){
+        let self = this;
+        if(!this.dialogTableSubDataList[0]){
+          this.msgError('请勾选实验室')
+          return
+        }
+        //实验室选择页面确定
+        // let list = [];
+        let ids = [];
+        for(let o=0;o<self.dialogTableSubDataList.length;o++){
+          ids.push(self.dialogTableSubDataList[o])
+          // let obj = {
+          //   subId:self.dialogTableSubDataList[o].subId,
+          //   subjectName:self.dialogTableSubDataList[o].subjectName,
+          //   typeId:self.dialogTableSubDataList[o].typeId,
+          //   levelId:self.dialogTableSubDataList[o].levelId,
+          //   collegeName:self.dialogTableSubDataList[o].collegeName,
+          // };
+          // list.push(obj)
+        }
+        // console.log('list',list)
+        this.$parent.subCheckButton(3,ids);
+      },
+      //查询
+      subHandleQueryLeft(){
+        this.$set(this.subQueryParamsLeft,'page',1);
+        this.subGetListLeft();
+      },
+      //重置
+      subResetQueryLeft(){
+        this.$set(this,'subQueryParamsLeft',{
+          page:1,
+          pageSize:20,
+          typeId:"",
+          levelId:"",
+          deptId:"",
+          searchValue:"",
+          filtType:1
+        });
+        this.subHandleQueryLeft();
+      },
+      //查询接口
+      subGetListLeft(){
+        let self = this;
+        let leftObj = JSON.parse(JSON.stringify(this.subQueryParamsLeft));
+        leftObj.selectedSubIds = [];
+        for(let i=0;i<self.dialogTableSubDataList.length;i++){
+          leftObj.selectedSubIds.push(self.dialogTableSubDataList[i]);
+        }
+        laboratorySubRelInfoConditionSubjectInfo(leftObj).then(response => {
+          this.subTotalLeft = response.data.total;
+          this.subTableListLeft = response.data.records;
+        });
+      },
+      //查询
+      subHandleQueryRight(){
+        this.$set(this.subQueryParamsRight,'page',1);
+        this.subGetListRight();
+      },
+      //重置
+      subResetQueryRight(){
+        this.$set(this,'subQueryParamsRight',{
+          page:1,
+          pageSize:20,
+          typeId:"",
+          levelId:"",
+          deptId:"",
+          searchValue:"",
+          filtType:2
+        });
+        this.subHandleQueryRight();
+      },
+      //查询接口
+      subGetListRight(){
+        let self = this;
+        let rightObj = JSON.parse(JSON.stringify(this.subQueryParamsRight));
+        rightObj.subIds = [];
+        for(let i=0;i<self.dialogTableSubDataList.length;i++){
+          rightObj.subIds.push(self.dialogTableSubDataList[i]);
+        }
+        laboratorySubRelInfoConditionSubjectInfo(rightObj).then(response => {
+          this.subTotalRight = response.data.total;
+          this.subTableListRight = response.data.records;
+        });
+      },
+      //实验室穿梭按钮
+      subArrowButton(type){
+        if(type == 1){
+          if(this.$refs.rightSubTable.selection[0]){
+            let list = JSON.parse(JSON.stringify(this.dialogTableSubDataList));
+            let subIdsRight = JSON.parse(JSON.stringify(this.$refs.rightSubTable.selection))
+            for(let i=0;i<subIdsRight.length;i++){
+              for(let s=0;s<list.length;s++){
+                if(subIdsRight[i].subId == list[s]){
+                  list.splice(s,1);
+                  s--
+                }
+              }
+            }
+            this.$set(this,'dialogTableSubDataList',list);
+            this.$refs.rightSubTable.clearSelection();
+            this.subHandleQueryLeft();
+            this.subHandleQueryRight();
+          }else{
+            this.msgError('请先勾选右侧列表')
+          }
+        }else if(type == 2){
+          if(this.$refs.leftSubTable.selection[0]){
+            let list = JSON.parse(JSON.stringify(this.dialogTableSubDataList));
+            let subIdsLeft = JSON.parse(JSON.stringify(this.$refs.leftSubTable.selection))
+            for(let i=0;i<subIdsLeft.length;i++){
+              // let obj = {
+              //   subId:subIdsLeft[i].subId,
+              //   subjectName:subIdsLeft[i].subName,
+              //   typeId:subIdsLeft[i].typeId,
+              //   levelId:subIdsLeft[i].levelId,
+              //   collegeName:subIdsLeft[i].deptName,
+              // }
+              // list.push(obj);
+              list.push(subIdsLeft[i].subId);
+            }
+            this.$set(this,'dialogTableSubDataList',list);
+            this.$refs.leftSubTable.clearSelection();
+            this.subHandleQueryLeft();
+            this.subHandleQueryRight();
+          }else{
+            this.msgError('请先勾选左侧列表')
+          }
+        }
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getSubRowKeys(row) {
+        return row.subId
+      },
+      subChangeLeft(selection){
+        this.subNumLeft = selection.length;
+        this.subIdsLeft = selection.map(item => item.subId);
+      },
+      subChangeRight(selection){
+        this.subNumRight = selection.length;
+        this.subIdsRight = selection.map(item => item.subId);
+      },
+      //学院下拉列表
+      getDeptDropList(){
+        getDeptDropList({level:2,deptType:1}).then(response => {
+          this.$set(this,'deptSelectList',response.data);
+        });
+      },
+      //楼栋下拉列表
+      systemBuildingGetOptList(){
+        systemBuildingGetOptList({type:2}).then(response => {
+          this.$set(this,'buildSelectList',response.data);
+        });
+      },
+      //分类下拉列表
+      laboratoryTypeConfigGetList(){
+        laboratoryTypeConfigGetList({}).then(response => {
+          this.$set(this,'classTypeList',response.data);
+        });
+      },
+      //分级下拉列表
+      laboratoryLevelConfigGetLevelTitleList(){
+        laboratoryLevelConfigGetLevelTitleList({}).then(response => {
+          this.$set(this,'classifiedList',response.data);
+        });
+      },
+      //危险源下拉列表
+      laboratorySubRelInfoGetHazardTypeList(){
+        laboratorySubRelInfoGetHazardTypeList().then(response => {
+          this.$set(this,'hazardTypeList',response.data);
+        });
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .inspectionPlan-dialog-box{
+    .el-dialog__body{
+      padding:20px 0 20px 30px;
+    }
+    .inspectionPlan-dialog-sub-box{
+      display: flex;
+      overflow: hidden;
+      height:520px;
+      .el-table__empty-text{
+        background-size: 30%!important;
+      }
+      .dept-table-title-box{
+        display: flex;
+        padding:0 20px;
+        background: rgba(1,131,250,0.1);
+        p{
+          flex:1;
+          color:#0183FA;
+          font-size:16px;
+          line-height:40px;
+        }
+        p:nth-child(1){
+          text-align: left;
+        }
+        p:nth-child(2){
+          text-align: right;
+        }
+      }
+      .dept-table-max-box{
+        border: 1px solid #e0e0e0;
+        flex:1;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        padding:20px;
+        .form-index{
+          .el-input__inner{
+            border-right:none;
+            padding-right:0;
+          }
+          .el-input-group__append{
+            background: #fff;
+            cursor: pointer;
+            padding:0 10px;
+          }
+        }
+        input{
+          border: 1px solid #DCDFE6;
+        }
+      }
+      .left-max-box{
+        height:520px;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        flex:1;
+      }
+      .right-max-box{
+        height:520px;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        flex:1;
+      }
+      .center-box{
+        width:70px;
+        p{
+          display: block;
+          width:60px;
+          height:30px;
+          line-height:30px;
+          text-align: center;
+          background: #fff;
+          color:#0183FA;
+          border-radius:4px;
+          border:1px solid #0183FA;
+          cursor: pointer;
+          font-size:12px;
+        }
+        p:nth-child(1){
+          margin:260px 5px 0;
+        }
+        p:nth-child(2){
+          margin:14px 5px 0;
+        }
+        p:hover{
+          background: #0183FA;
+          color:#fff;
+          border:1px solid #0183FA;
+        }
+      }
+    }
+  }
+</style>

+ 687 - 0
src/views/safetyCheck/dataStatistics/hiddenDangerStatistics.vue

@@ -0,0 +1,687 @@
+<!--隐患统计--->
+<template>
+  <div class="page-container checkItem">
+    <div class="page-container checkItem" v-if="pageType == 1">
+      <div class="page-top-title-box">
+        <p class="page-top-title-name-p">{{propsData.planTitle}}</p>
+        <p class="page-top-title-out-p" @click="backPage">返回</p>
+      </div>
+      <div class="hiddenDanger" id="hiddenDanger-box" v-if="identityType == 1"></div>
+      <div class="tabs">
+        <div class="tabs-li" :class="tabsIndex==index?'color-B':'color-A'" @click="tabsClick(index)" v-for="(item,index) in tabsList">
+          <img  :src="tabsIndex==index?item.img2:item.img"/>
+          <p>{{item.name}}</p>
+        </div>
+      </div>
+      <div class="content-box scrollbar-box">
+        <div class="page-form-title-box" style="border:none;">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <el-form-item label="" prop="deptId" v-if="identityType == 1">
+              <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 120px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.deptId"
+                  :label="dict.deptName"
+                  :value="dict.deptId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="searchValue" v-if="identityType == 2">
+              <el-input
+                maxLength="20"
+                v-model="queryParams.searchValue"
+                placeholder="实验室/房间号"
+                style="width: 120px"
+              />
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <div class="num-data-box">
+              {{formTitleData}}
+            </div>
+            <p class="page-submit-common-style-button"
+               style="float: right;"
+               @click="tableButton(1)"
+
+            >数据刷新</p>
+            <el-form-item style="float: right;">
+              <export-component :exportConfig="exportConfig"></export-component>
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="page-content-box" style="padding-top:0;" v-if="tabsIndex==0">
+          <el-table class="table-box" v-loading="loading" border ref="table-box" :data="dataList"
+                    @selection-change="handleSelectionChange" :row-key="getRowKeys" @sort-change="sortChange">
+            <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="学院单位" prop="deptName" v-if="identityType == 1"  show-overflow-tooltip/>
+            <el-table-column label="实验室名称" prop="subName" v-if="identityType != 1"   show-overflow-tooltip/>
+            <el-table-column label="检查数" prop="checkNum" width="180" show-overflow-tooltip/>
+            <el-table-column label="隐患数" sortable="custom"  prop="hazardNum" width="180" show-overflow-tooltip/>
+            <el-table-column label="已整改数" prop="rectifyNum" width="180" show-overflow-tooltip/>
+            <el-table-column label="未整改数" prop="notRectifyNum" width="180" show-overflow-tooltip/>
+            <el-table-column label="整改完成率" prop="ratio" width="180" show-overflow-tooltip/>
+            <el-table-column label="操作" width="112" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >详情</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+        <div class="page-content-box" style="padding-top:0;" v-if="tabsIndex==1">
+          <el-table class="table-box" v-loading="loading" border ref="table-box" :data="dataList" v-if="tableShowType"
+                    @selection-change="handleSelectionChange" :row-key="getRowKeysTow" @sort-change="sortChange">
+            <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="学院单位" prop="deptName" v-if="identityType == 1"  show-overflow-tooltip/>
+            <el-table-column label="实验室名称" prop="subName" v-if="identityType != 1"   show-overflow-tooltip/>
+            <el-table-column label="隐患总数" sortable="custom" prop="hazardNum" width="130" show-overflow-tooltip/>
+            <el-table-column v-for="(item,index) in tableTitleList" :key="index"
+              :label="item.name" :prop="item.code" width="130" show-overflow-tooltip/>
+            <el-table-column label="操作" width="112" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >详情</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+    <initiateInspect :minPropsData="minPropsData" v-if="pageType == 2"></initiateInspect>
+    <inspect-statistics :minPropsData="minPropsData" v-if="pageType === 3"></inspect-statistics>
+  </div>
+</template>
+
+<script>
+//import { getDicts } from "@/api/commonality/noPermission";
+//import { systemUserSelect } from "@/api/commonality/permission";
+import {
+  reportHazardReportOneHazardGaugeOutfit,
+  securityDataStatisticsGetUserIdentity,
+  securityHazardReportColumnPicture,
+  reportHazardReportDeptList,
+  reportHazardReportDeptTop,
+  securityCheckDangerTodayDangerList,
+  reportHazardReportItemsDeptRefresh,
+  reportHazardReportOneItemsScatter,
+  reportHazardReportOneItemsScatterTop,
+  reportHazardReportDeptListCollege,
+  reportHazardReportDeptTopCollege,
+  reportHazardReportOneItemsScatterCollege,
+  reportHazardReportOneItemsScatterCollegeTop,
+} from "@/api/safetyCheck/indexDemoOne";
+import {
+  getDeptDropList,
+} from '@/api/commonality/permission'
+import echarts from 'echarts'
+import initiateInspect from "@/views/safetyCheck/components/initiateInspect/initiateInspect.vue";
+import inspectStatistics from "@/views/safetyCheck/components/inspectStatistics.vue";
+import exportComponent from '@/components/exportComponent/exportComponent'
+export default {
+  name: 'checkItem',
+  components: {
+    initiateInspect,
+    inspectStatistics,
+    exportComponent,
+  },
+  props:{
+    propsData:{},
+  },
+  data(){
+    return{
+      tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+      //用户身份状态
+      identityType:0,
+      //导出配置
+      exportConfig:{
+        api:'',             //导出接口地址
+        ids:'',                                       //勾选导出,勾选的IDS
+        fileName:'',                         //导出文件的命名
+        screenData:{},
+      },
+      //页面状态
+      pageType:1,
+      //状态选项卡
+      tableButtonCheckType:1,
+      //页面遮罩
+      loading:false,
+      //学院列表
+      optionList:[],
+      //查询条件
+      queryParams:{
+        page:1,
+        pageSize:20,
+        deptId :null,
+        searchValue:'',
+        sort:'desc',
+      },
+      //查询头部数据
+      formTitleData:'',
+      tabsList:[
+        {
+          name:'各单位隐患整改统计',
+          img:require('@/assets/ZDimages/securityCheck/icon_yhtj_wxz@1x.png'),
+          img2:require('@/assets/ZDimages/securityCheck/icon_yhtj_zc@1x.png')
+        },
+        {
+          name:'一级检查项隐患分布',
+          img:require('@/assets/ZDimages/securityCheck/icon_yhfb_wxz@1x.png'),
+          img2:require('@/assets/ZDimages/securityCheck/icon_yhfb_xz@1x.png'),
+        },
+      ],
+      tabsIndex:0,
+      //表头数据
+      tableTitleList:[],
+      //列表数据
+      dataList:[],
+      tableShowType:false,
+      //数据数量
+      total:0,
+      //组件传参
+      minPropsData:{},
+    }
+  },
+  created(){
+    this.getDeptDropList();
+  },
+  mounted(){
+    this.securityDataStatisticsGetUserIdentity();
+    // this.eCharts();
+  },
+  methods:{
+    //查询用户身份
+    securityDataStatisticsGetUserIdentity(){
+      securityDataStatisticsGetUserIdentity().then(response => {
+        if(response.schoolAdmin){
+          //校级管理员
+          this.$set(this,'identityType',1);
+          //查询隐患柱状图
+          this.securityHazardReportColumnPicture();
+        }else if(response.collegeAdmin){
+          //院级管理员
+          this.$set(this,'identityType',2);
+        }else{
+          //无权限
+          this.$set(this,'identityType',0);
+        }
+        this.getList();
+      });
+    },
+    //查询隐患柱状图
+    securityHazardReportColumnPicture(){
+      securityHazardReportColumnPicture({planId:this.propsData.planId}).then(response => {
+        let nameList = [];
+        let dataList = [];
+        for(let i=0;i<response.data.length;i++){
+          nameList.push(response.data[i].deptShortName)
+          dataList.push(response.data[i].hazardNum)
+        }
+        this.eCharts(nameList,dataList);
+      });
+    },
+    //隐患柱状图
+    eCharts(nameList,dataList){
+      let myChart = this.$echarts.init(document.getElementById('hiddenDanger-box'));
+
+      let option =  {
+        color: ['#3398DB'],
+        tooltip : {
+          trigger: 'axis',
+          axisPointer : {            // 坐标轴指示器,坐标轴触发有效
+            type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+          }
+        },
+        title: {
+          top: "5%",
+          left: "center",
+          text:  "各单位隐患数统计",
+          textStyle: {
+            align: "center",
+            color: "#333333",
+            fontWeight:400,
+            fontSize: 16,
+          },
+        },
+        grid: {
+          top:'24%',
+          left: '3%',
+          right: '4%',
+          bottom: '6%',
+          containLabel: true
+        },
+        xAxis : [
+          {
+            type : 'category',
+            data : nameList,
+            axisLabel: {
+              textStyle: {//改变X轴字体颜色
+                color: '#666666',
+
+              },
+              interval:0,
+              rotate:40   //值>0向右倾斜,值<0则向左倾斜
+            },
+            axisTick:{//去掉X轴刻度
+              show:false,
+            },
+            axisLine:{
+              lineStyle:{
+                color:'#D8D8D8',//改变X轴颜色
+
+              }
+            },
+          }
+        ],
+        yAxis : [
+          {
+            type : 'value',
+
+            nameTextStyle:{
+              color:'#fff',
+              align:'left',
+            },
+            splitLine: {           // 分隔线
+              show: true,        // 默认显示,属性show控制显示与否
+              lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
+                color: ['#171f2d'],
+                width: 1,
+                type: 'solid',
+                opacity:0.2
+              },
+
+            },
+            axisLabel: {
+              textStyle: {//改变X轴字体颜色
+                color: '#666666',
+
+              },
+            },
+            axisTick:{//去掉X轴刻度
+              show:false,
+            },
+            axisLine:{
+              show:false,
+            },
+
+          },
+        ],
+        series : [
+          {
+            name:'整改完成率(%)',
+            label: {
+              show: true,
+              color:'#0183FA',
+              position: 'top'
+            },
+            itemStyle: {
+              normal: {
+                barBorderRadius: 2,
+                color: new echarts.graphic.LinearGradient(
+                  0, 0, 0, 1,
+                  [
+                    {offset: 0, color: '#0183FA'},
+                    {offset: 1, color: '#AED8FF'}
+                  ]
+                )
+              },
+
+            },
+            type:'bar',
+            barWidth: '20',
+            data:dataList
+          }
+        ]
+      };
+      myChart.setOption(option);
+    },
+    //选项卡切换
+    tabsClick(index){
+      if (this.tabsIndex != index){
+        this.$set(this,'tabsIndex',index);
+        this.resetQuery();
+      }
+    },
+    // 返回按钮
+    backPage(){
+      this.$parent.tableButton(6);
+    },
+    //查询按钮
+    handleQuery(){
+      this.$set(this.queryParams,'page',1);
+      this.getList();
+    },
+    //重置按钮
+    resetQuery(){
+      this.$refs['table-box'].clearSelection();
+      this.$set(this.exportConfig,'ids','');
+      this.$set(this,'queryParams',{
+        page:1,
+        pageSize:20,
+        deptId :null,
+        searchValue:'',
+        sort:'desc',
+      });
+      this.getList();
+    },
+    getRowKeys(row) {
+      return row.deptId
+    },
+    getRowKeysTow(row){
+      return row.subId
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      if(this.identityType == 1){
+        this.$set(this.exportConfig,'ids',selection.map(item => item.deptId));
+      }else if(this.identityType == 2){
+        this.$set(this.exportConfig,'ids',selection.map(item => item.subId));
+      }
+    },
+    //时间排序方法
+    sortChange(val){
+      if(val.prop == 'hazardNum'){
+        this.$set(this.queryParams,'sort',val.order=='ascending'?'asc':(val.order=='descending'?'desc':''));
+        this.handleQuery();
+      }
+    },
+    //获取数据列表
+    getList(){
+      this.$set(this,'tableShowType',false);
+      let obj = JSON.parse(JSON.stringify(this.queryParams))
+      obj.planId = this.propsData.planId;
+      this.$set(this.exportConfig,'customKey','planId');
+      this.$set(this.exportConfig,'customValue',obj.planId);
+      this.$set(this.exportConfig,'screenData',obj);
+      //判断校级/院级/选项卡当前状态
+      if(this.identityType == 1 && this.tabsIndex == 0){
+        // 各单位隐患整改统计列表-校级
+        reportHazardReportDeptList(obj).then(response => {
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+        reportHazardReportDeptTop(obj).then(response => {
+          this.$set(this,'formTitleData',response.data);
+        });
+        this.$set(this.exportConfig,'api','/report/hazardReport/export');
+        this.$set(this.exportConfig,'fileName','各单位隐患整改统计');
+      }else if(this.identityType == 1 && this.tabsIndex == 1){
+        //一级检查项隐患分布-列表表头数据
+        reportHazardReportOneHazardGaugeOutfit().then(response => {
+          this.$set(this,'tableTitleList',response.data);
+          this.$set(this,'tableShowType',true);
+          this.$nextTick(()=>{
+            // 一级检查项隐患分布-列表-校级
+            reportHazardReportOneItemsScatter(obj).then(response => {
+              this.$set(this,'dataList',response.data.records);
+              this.$set(this,'total',response.data.total);
+            });
+            reportHazardReportOneItemsScatterTop(obj).then(response => {
+              this.$set(this,'formTitleData',response.data);
+            });
+            this.$set(this.exportConfig,'api','/report/hazardReport/oneItemsExport');
+            this.$set(this.exportConfig,'fileName','一级检查项隐患分布');
+          })
+        });
+      }else if(this.identityType == 2 && this.tabsIndex == 0){
+        // 各单位隐患整改统计列表-校级
+        reportHazardReportDeptListCollege(obj).then(response => {
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+        reportHazardReportDeptTopCollege(obj).then(response => {
+          this.$set(this,'formTitleData',response.data);
+        });
+        this.$set(this.exportConfig,'api','/report/hazardReport/exportCollege');
+        this.$set(this.exportConfig,'fileName','各单位隐患整改统计');
+      }else if(this.identityType == 2 && this.tabsIndex == 1){
+        //一级检查项隐患分布-列表表头数据
+        reportHazardReportOneHazardGaugeOutfit().then(response => {
+          this.$set(this,'tableTitleList',response.data);
+          this.$set(this,'tableShowType',true);
+          this.$nextTick(()=>{
+            // 一级检查项隐患分布-列表-校级
+            reportHazardReportOneItemsScatterCollege(obj).then(response => {
+              this.$set(this,'dataList',response.data.records);
+              this.$set(this,'total',response.data.total);
+            });
+            reportHazardReportOneItemsScatterCollegeTop(obj).then(response => {
+              this.$set(this,'formTitleData',response.data);
+            });
+            this.$set(this.exportConfig,'api','/report/hazardReport/oneItemsExportCollege');
+            this.$set(this.exportConfig,'fileName','一级检查项隐患分布');
+          })
+        });
+      }
+    },
+    //操作按钮
+    tableButton(type,row){
+      let self = this;
+      if(type == 1){
+        //数据刷新
+        securityCheckDangerTodayDangerList().then(response => {
+          if(response.data>0){
+            reportHazardReportItemsDeptRefresh().then(response => {
+              this.msgSuccess(response.message)
+              this.getList();
+            });
+          }else{
+            this.msgSuccess('已是最新数据,无需更新.')
+          }
+        });
+      }else if(type == 2){
+        //详情
+        this.$set(this,'pageType',2);
+        let obj = JSON.parse(JSON.stringify(row))
+        obj.showType = true;
+        this.$set(this,'minPropsData',obj);
+      }else if(type == 3){
+        //编辑
+        this.$set(this,'pageType',2);
+        let obj = JSON.parse(JSON.stringify(row))
+        obj.showType = false;
+        this.$set(this,'minPropsData',obj);
+      }else if(type == 4){
+        //删除
+        this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          deleteFunction({id:row.id}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          });
+        }).catch(() => {});
+      }else if(type == 5){
+        //启用&停用
+        let text = row.state  ? "停用" : "启用";
+        this.$confirm('是否确认' + text + '?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          stateFunction({id:row.id,state:!row.state,}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          });
+        }).catch(() => {});
+      }else if(type == 6){
+        //返回并刷新
+        this.$set(this,'pageType',1);
+        this.getList();
+      }
+    },
+    //学院列表
+    getDeptDropList() {
+      getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+        this.$set(this, 'optionList', response.data)
+      })
+    },
+  },
+}
+</script>
+
+<style scoped lang="scss">
+.hiddenDanger{
+  height: 320px;
+}
+.tabs{
+  width: 100%;
+  height: 50px;
+  background: #F5F5F5;
+  border-radius: 0px 0px 0px 0px;
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  .tabs-li{
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    width: 256px;
+    cursor: pointer;
+    padding-left: 20px;
+    box-sizing: border-box;
+    >img{
+      width: 20px;
+      height: 20px;
+      margin-right: 10px;
+    }
+    >p{
+      font-weight: 400;
+      font-size: 16px;
+      color: #333333;
+      line-height: 16px;
+    }
+  }
+  .color-A{
+    >p{
+      color: #333333;
+    }
+  }
+  .color-B{
+    >p{
+      color: #0183FA;
+    }
+  }
+}
+.num-data-box{
+  display: inline-block;
+  vertical-align:top;
+  background: rgba(1,131,250,0.2);
+  color:#0183FA;
+  font-size:14px;
+  line-height:40px;
+  padding:0 20px;
+  border-radius:4px;
+  margin:0px 20px 0px 20px;
+  width: 330px;
+}
+.checkItem{
+  .content-box{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    .table-school-college-toggle-box{
+      overflow: hidden;
+      display: inline-block;
+      margin-right:10px;
+      p{
+        display: inline-block;
+        text-align: center;
+        width:80px;
+        line-height:40px;
+        height:40px;
+        color:#333;
+        background-color: #fff;
+        border:1px solid #E0E0E0;
+        font-size:14px;
+        cursor: pointer;
+      }
+      p:nth-child(1){
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+        /*border-right:none;*/
+      }
+      p:nth-child(4){
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        /*border-left:none;*/
+      }
+      .p-check{
+        border:1px solid #0183FA;
+        background-color: #0183FA;
+        color:#fff;
+      }
+    }
+    .form-button-max-big-box-me{
+      display: inline-block;
+      overflow: hidden;
+      margin-right:10px;
+      .form-button-big-box-me{
+        display: flex;
+        div{
+          position: relative;
+          height:40px;
+          width:100px;
+          line-height: 40px;
+          text-align: center;
+          color:#999;
+          font-size:14px;
+          border:1px solid #999;
+          border-radius:4px;
+          font-weight:500;
+          cursor: pointer;
+          .icon-p-me{
+            width:15px;
+            height:15px;
+            line-height:15px;
+            text-align: center;
+            position: absolute;
+            right:0;
+            bottom:0;
+            color:#fff;
+            background: #0183fa;
+            border-top-left-radius:4px;
+          }
+        }
+        .checkDiv-me{
+          color:#0183FA!important;
+          border:1px solid #0183FA!important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 340 - 87
src/views/safetyCheck/dataStatistics/index.vue

@@ -1,111 +1,364 @@
+<!-- 数据统计 -->
 <template>
   <div class="app-container dataStatistics">
-    <div class="title-box">
-      <div :class="pageType == 1?'checkTitle':''" @click="checkTitleButton(1)">
-        <p>按实验室</p>
-        <p></p>
-      </div>
-      <div :class="pageType == 2?'checkTitle':''" @click="checkTitleButton(2)">
-        <p>按安全隐患</p>
-        <p></p>
-      </div>
-      <div :class="pageType == 3?'checkTitle':''" @click="checkTitleButton(3)">
-        <p>按检查指标</p>
-        <p></p>
+    <div class="page-container dataStatisticsPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="queryParams.year"
+              size="small"
+              style="width: 100px"
+              value-format="yyyy"
+              type="year"
+              placeholder="选择年"
+              :picker-options="pickerOptions"
+            ></el-date-picker>
+          </el-form-item>
+          <div class="table-school-college-toggle-box-one">
+            <p :class="checkCategory==1?'p-check':''" @click="schoolCollegeToggle(1)">校级检查</p>
+            <p :class="checkCategory==2?'p-check':''" @click="schoolCollegeToggle(2)">学院自查</p>
+          </div>
+          <div class="table-school-college-toggle-box">
+            <p :class="planStatus==null?'p-check':''" @click="tableCheck(null)">全部</p>
+            <p :class="planStatus==0?'p-check':''" @click="tableCheck(0)">未开始</p>
+            <p :class="planStatus==1?'p-check':''" @click="tableCheck(1)">进行中</p>
+            <p :class="planStatus==2?'p-check':''" @click="tableCheck(2)">已结束</p>
+          </div>
+          <el-form-item label="" prop="checkTypeValue">
+            <el-select v-model="queryParams.checkTypeValue" placeholder="检查类型" style="width: 120px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="planTitle">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.planTitle"
+              placeholder="计划标题"
+              style="width: 120px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+
+          <p class="page-submit-common-style-button"
+             style="float: right;"
+             @click="tableButton(1)"
+
+          >数据刷新</p>
+          <el-form-item style="float: right;">
+            <export-component :exportConfig="exportConfig"></export-component>
+          </el-form-item>
+        </el-form>
       </div>
-      <div :class="pageType == 4?'checkTitle':''" @click="checkTitleButton(4)">
-        <p>按检查内容</p>
-        <p></p>
+      <div class="page-content-box">
+        <el-table class="table-box" ref="table-box" v-loading="loading" border :data="dataList" @selection-change="handleSelectionChange" :row-key="getRowKeys">
+          <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划任务" prop="planTitle"  show-overflow-tooltip/>
+          <el-table-column label="计划周期" prop="cycleStartTime" width="220" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{scope.row.cycleStartTime}} 至 {{scope.row.cycleEndTime}}
+            </template>
+          </el-table-column>
+          <el-table-column label="检查数" prop="checkNum" width="100" show-overflow-tooltip/>
+          <el-table-column label="隐患数" prop="hazardNum" width="100" show-overflow-tooltip/>
+          <el-table-column label="已整改数" prop="rectificationNum" width="100" show-overflow-tooltip/>
+          <el-table-column label="未整改数" prop="notRectificationNum" width="100" show-overflow-tooltip/>
+          <el-table-column label="整改完成率" prop="ratio" width="100" show-overflow-tooltip/>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              {{scope.row.planStatus == 0 ? '未开始' : (scope.row.planStatus == 1 ? '进行中' : (scope.row.planStatus == 2 ? '已结束' : ''))}}
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >隐患统计</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >检查项统计</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
       </div>
     </div>
-    <laboratoryStatistics v-if="pageType == 1"></laboratoryStatistics>
-    <safetyHazardStatistics v-if="pageType == 2"></safetyHazardStatistics>
-    <checkIndexStatistics v-if="pageType == 3" :propsData="propsData"></checkIndexStatistics>
-    <inspectContent v-if="pageType == 4" ></inspectContent>
+    <hidden-danger-statistics :propsData="propsData" v-if="pageType === 3"></hidden-danger-statistics>
+    <inspection-items-statistics :propsData="propsData" v-if="pageType === 4"></inspection-items-statistics>
   </div>
 </template>
-
 <script>
-  import laboratoryStatistics from './laboratoryStatistics.vue'
-  import safetyHazardStatistics from './safetyHazardStatistics.vue'
-  import checkIndexStatistics from './checkIndexStatistics.vue'
-  import inspectContent from './inspectContent.vue'
-  export default {
-    name: 'index',
-    components: {
-      laboratoryStatistics,
-      safetyHazardStatistics,
-      checkIndexStatistics,
-      inspectContent
-    },
-    data(){
-      return{
-        pageType:1,
-        propsData:{
-          jumpType:false,
+import exportComponent from '@/components/exportComponent/exportComponent'
+import hiddenDangerStatistics from "./hiddenDangerStatistics.vue";
+import inspectionItemsStatistics from "@/views/safetyCheck/components/inspectionItemsStatistics.vue";
+import { securityDataStatisticsList } from "@/api/safetyCheck/indexDemoOne";
+
+
+export default {
+  name: 'index',
+  components: {
+    exportComponent,
+    hiddenDangerStatistics,
+    inspectionItemsStatistics,
+  },
+  data () {
+    return {
+      //日期年限制
+      pickerOptions: {
+        disabledDate(time) {
+          return new Date().getFullYear() < time.getFullYear();
         }
+      },
+      //导出配置
+      exportConfig:{
+        api:'/security/dataStatistics/export',             //导出接口地址
+        ids:'',                                       //勾选导出,勾选的IDS
+        fileName:'安全检查-数据统计',                         //导出文件的命名,
+        screenData:{},
+      },
+      tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+      //页面状态
+      pageType:1,
+      checkCategory:1,
+      //计划状态选项卡
+      planStatus:null,
+      //页面遮罩
+      loading:false,
+      //下拉列表数据
+      optionList:[],
+      //查询条件
+      queryParams:{
+        page:1,
+        pageSize:20,
+        year:'',
+        planTitle:"",
+        checkTypeValue :null,
+      },
+      //时间数据
+      dateRange:[],
+      //列表数据
+      dataList:[],
+      //数据数量
+      total:0,
+      //组件传参
+      propsData:{},
+    }
+  },
+  created () {
+
+  },
+  mounted () {
+    //检查类型字典
+    this.getDicts("check_type").then(response => {
+      this.$set(this,'optionList',response.data);
+    });
+    this.getList();
+  },
+  methods: {
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.$set(this.exportConfig,'ids',selection.map(item => item.planId));
+    },
+    /*===记录勾选数据===
+      需要再el-table 添加  :row-key="getRowKeys"
+      需要在selection 添加 :reserve-selection="true"
+    */
+    getRowKeys(row) {
+      return row.planId
+    },
+    //检查/自查切换
+    schoolCollegeToggle(type){
+      if(this.checkCategory !== type){
+        this.$set(this,'checkCategory',type);
+        this.$set(this,'planStatus',null);
+        this.resetQuery();
       }
     },
-    created(){
-      if(this.$route.query.type){
-        this.$set(this,'pageType',3);
+    //整改状态选项卡切换
+    tableCheck(type){
+      if (this.planStatus !== type){
+        this.$set(this,'planStatus',type);
+        this.resetQuery();
       }
     },
-    mounted(){
-
+    //查询按钮
+    handleQuery(){
+      this.$set(this.queryParams,'page',1);
+      this.getList();
     },
-    methods:{
-      checkTitleButton(type){
-        if(this.pageType != type){
-          this.$set(this,'pageType',type);
-        }
+    //重置按钮
+    resetQuery(){
+      this.$set(this,'dateRange',[])
+      this.$set(this,'queryParams',{
+        page:1,
+        pageSize:20,
+        year:'',
+        planTitle:"",
+        checkTypeValue :null,
+      });
+      this.getList();
+    },
+    //获取数据列表
+    getList(){
+      this.$set(this,'loading',true);
+      let obj = JSON.parse(JSON.stringify(this.queryParams))
+      if(this.dateRange[0]){
+        obj.cycleStartTime = this.dateRange[0]
+        obj.cycleEndTime = this.dateRange[1]
+      }else{
+        obj.startTime = "";
+        obj.endTime = "";
       }
-    }
-  }
+      obj.checkCategory = this.checkCategory;
+      obj.planStatus = this.planStatus;
+      this.$set(this.exportConfig,'screenData',obj);
+      securityDataStatisticsList(obj).then(response => {
+        this.$set(this,'loading',false);
+        this.$set(this,'dataList',response.data.records);
+        this.$set(this,'total',response.data.total);
+      });
+    },
+    //操作按钮
+    tableButton(type,row){
+      let self = this;
+      if(type == 1){
+        //数据刷新
+      }else if(type == 2){
+        //检查统计
+        this.$set(this,'pageType',2);
+        this.$set(this,'propsData',row);
+      }else if(type == 3){
+        //隐患统计
+        this.$set(this,'pageType',3);
+        this.$set(this,'propsData',row);
+      }else if(type == 4){
+        //检查项统计
+        this.$set(this,'pageType',4);
+        this.$set(this,'propsData',row);
+      }else if(type == 5){
+        //启用&停用
+        let text = row.state  ? "停用" : "启用";
+        this.$confirm('是否确认' + text + '?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+        }).then(() => {
+          stateFunction({id:row.id,state:!row.state,}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          });
+        }).catch(() => {});
+      }else if(type == 6){
+        //返回并刷新
+        this.$set(this,'pageType',1);
+        //this.getList();
+      }
+    },
+  },
+}
 </script>
-
 <style scoped lang="scss">
-  .dataStatistics{
-    flex:1;
-    display: flex;
-    flex-direction: column;
-    overflow: hidden;
-    *{
-      font-weight: 500;
+.dataStatistics{
+  .dataStatisticsPage{
+    .table-school-college-toggle-box-one{
+      overflow: hidden;
+      display: inline-block;
+      margin-right:10px;
+      p{
+        display: inline-block;
+        text-align: center;
+        width:80px;
+        line-height:40px;
+        height:40px;
+        color:#333;
+        background-color: #fff;
+        border:1px solid #E0E0E0;
+        font-size:14px;
+        cursor: pointer;
+      }
+      p:nth-child(1){
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+        /*border-right:none;*/
+      }
+      p:nth-child(2){
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        /*border-left:none;*/
+      }
+      .p-check{
+        border:1px solid #0183FA;
+        background-color: #0183FA;
+        color:#fff;
+      }
     }
-    .title-box{
-      display: flex;
-      height:80px;
-      border-bottom:1px solid #d8d8d8;
-      padding:0 40px;
-      div{
-        height:80px;
-        margin-right:80px;
+    .table-school-college-toggle-box{
+      overflow: hidden;
+      display: inline-block;
+      margin-right:10px;
+      p{
+        display: inline-block;
+        text-align: center;
+        width:80px;
+        line-height:40px;
+        height:40px;
+        color:#333;
+        background-color: #fff;
+        border:1px solid #E0E0E0;
+        font-size:14px;
         cursor: pointer;
-        p:nth-child(1){
-          width:80px;
-          font-size:16px;
-          text-align: center;
-          color:#333;
-          line-height:40px;
-          height:40px;
-          margin-top:20px;
-        }
-        p:nth-child(2){
-          width:60px;
-          height: 4px;
-          border-radius:4px;
-          margin:0 10px;
-        }
       }
-      .checkTitle{
-        p:nth-child(1){
-          color:#0045AF;
-        }
-        p:nth-child(2){
-          background-color: #0045AF;
-        }
+      p:nth-child(1){
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+        /*border-right:none;*/
+      }
+      p:nth-child(4){
+        border-top-right-radius: 4px;
+        border-bottom-right-radius: 4px;
+        /*border-left:none;*/
+      }
+      .p-check{
+        border:1px solid #0183FA;
+        background-color: #0183FA;
+        color:#fff;
       }
     }
   }
+}
 </style>

+ 289 - 0
src/views/safetyCheck/inspectJob/index.vue

@@ -0,0 +1,289 @@
+<!-- 检查作业 -->
+<template>
+  <div class="app-container inspectJob">
+    <div class="page-container inspectJobPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-school-college-toggle-box">
+            <p :class="planStatus===''?'p-check':''" @click="tableCheck('')">全部</p>
+            <p :class="planStatus===0?'p-check':''" @click="tableCheck(0)">未提交</p>
+            <p :class="planStatus===1?'p-check':''" @click="tableCheck(1)">已提交</p>
+          </div>
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 200px">
+              <el-option
+                v-for="dict in deptOption"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="计划标题"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <!--<p class="page-submit-common-style-button"-->
+             <!--style="float: right;"-->
+             <!--@click="tableButton(1)"-->
+          <!--&gt;新增</p>-->
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="name"  show-overflow-tooltip/>
+          <el-table-column label="检查批次" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="负责人" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="学院单位" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="检查项数量" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="不符合数量" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+
+            </template>
+          </el-table-column>
+          <el-table-column label="更新时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >详情</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+  } from '@/api/commonality/permission'
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //计划状态选项卡
+        planStatus:'',
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        deptOption:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          deptId :null,
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      this.getDeptDropList();
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //整改状态选项卡切换
+      tableCheck(type){
+        if (this.planStatus !== type){
+          this.$set(this,'planStatus',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          deptId :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },//学院下拉列表
+      getDeptDropList(){
+        getDeptDropList({level: 2, deptType: 1 }).then(response => {
+          this.$set(this,'deptOption',response.data);
+        });
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .inspectJob{
+    .inspectJobPage{
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(3){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 203 - 0
src/views/safetyCheck/inspectProject/inspectProjectAccording/addPage.vue

@@ -0,0 +1,203 @@
+<template>
+  <div class="page-container addPage">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p" style="margin-left:20px;">{{propsData.basisId?'编辑':'新增'}}</p>
+      <p class="page-top-title-out-p" style="margin-right:20px;" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" @click="submitForm">提交</p>
+    </div>
+    <div class="addPage-min safe-book-el-dialog">
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="名称" prop="basisName" style="width:498px;">
+          <el-input v-model="form.basisName" placeholder="请输入检查依据模板名称" maxLength="10" style="width:500px;"/>
+        </el-form-item>
+        <el-form-item label="检查项目" prop="hazardCheckPros" style="width:498px;">
+          <div class="form-add-box">
+            <p class="add-time-button-p" @click="tableButton(1,'')">+ 新增项目</p>
+            <p>已选择{{form.hazardCheckPros.length}}个三级检查项目</p>
+          </div>
+        </el-form-item>
+        <el-form-item label="备注" prop="basisRemark" style="color:#606266;font-size:16px;font-weight:500;" class="wang-editor-form-item-box">
+          <el-input
+            type="textarea"
+            :autosize="{ minRows: 5, maxRows: 5}"
+            placeholder="请输入备注"
+            v-model="form.basisRemark"
+            maxlength="200"
+            resize="none"
+            show-word-limit
+            style="width:548px;">
+          </el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+    <itemCheckComponent ref="userCheckComponent" v-if="itemCheckComponentType"
+                        :itemCheckComponentData="itemCheckComponentData"></itemCheckComponent>
+  </div>
+</template>
+
+<script>
+  import {
+    securityCheckBasisDetail,
+    securityCheckBasisAdd,
+    securityCheckBasisUpdate,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import itemCheckComponent from "./itemCheckComponent.vue";
+  export default {
+    name: "addPage",
+    components: {
+      itemCheckComponent
+    },
+    props:{
+      propsData:{},
+    },
+    data() {
+      return {
+        itemCheckComponentType:false,
+        itemCheckComponentData:{},
+        // 表单参数
+        form: {
+          basisName:'',
+          hazardCheckPros:[],
+          basisRemark:'',
+        },
+        // 表单校验
+        rules: {
+          basisName:[
+            {required: true, message: '请输入检查依据模板名称', trigger: 'blur'},
+            { required: true, message: "请输入检查依据模板名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          hazardCheckPros:[
+            {required: true, message: '请选择三级检查项目', trigger: 'blur'},
+          ],
+        },
+      };
+    },
+    created() {
+    },
+    mounted(){
+      if(this.propsData.basisId){
+        this.$set(this,'form',this.propsData);
+        this.securityCheckBasisDetail();
+      }
+    },
+    methods: {
+      //详情
+      securityCheckBasisDetail(){
+        securityCheckBasisDetail({basisId:this.propsData.basisId}).then(response => {
+          this.$set(this.form,'basisId',response.data.basisId);
+          this.$set(this.form,'basisName',response.data.basisName);
+          this.$set(this.form,'hazardCheckPros',response.data.hazardCheckPros?response.data.hazardCheckPros.split(","):[]);
+          this.$set(this.form,'basisRemark',response.data.basisRemark);
+        });
+      },
+      addItemButton(){
+
+      },
+      tableButton(type,data){
+        if(type == 1){
+          //编辑
+          this.$set(this,'itemCheckComponentData',this.form.hazardCheckPros);
+          this.$set(this,'itemCheckComponentType',true);
+        }else if(type == 2){
+          //启用停用
+        }else if(type == 3){
+          //删除
+        }else if(type == 4){
+          //人员选择关闭
+          this.$set(this,'itemCheckComponentType',false);
+        }else if(type == 5){
+          //人员选择确定
+          this.$set(this.form,'hazardCheckPros',data);
+          this.$set(this,'itemCheckComponentType',false);
+        }
+      },
+      /** 提交按钮 */
+      submitForm() {
+        let self = this;
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            this.$confirm('是否确认提交?', "警告", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning"
+            }).then(function() {
+            }).then(() => {
+              let obj = {
+                basisName:self.form.basisName,
+                hazardCheckPros:self.form.hazardCheckPros+'',
+                basisRemark:self.form.basisRemark,
+              }
+              if (this.form.basisId) {
+                obj.basisId = self.form.basisId;
+                securityCheckBasisUpdate(obj).then( response => {
+                  self.msgSuccess(response.message);
+                  self.$parent.tableButton('back');
+                });
+              } else {
+                securityCheckBasisAdd(obj).then( response => {
+                  self.msgSuccess(response.message);
+                  self.$parent.tableButton('back');
+                });
+              }
+            }).catch(() => {});
+          }
+        });
+      },
+      backPage(){
+        this.$parent.tableButton('back','');
+      },
+      change(val) {
+        this.$set(this.form,'content',val);
+        // this.form.content = val;
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .addPage{
+    flex:1;
+    display: flex !important;
+    flex-direction: column;
+    p{
+      margin:0;
+    }
+    .addPage-min{
+      flex:1;
+      display: flex !important;
+      flex-direction: column;
+      padding:20px!important;
+      .bottom-button-p{
+        margin:40px auto;
+        line-height:40px;
+        width:100px;
+        text-align: center;
+      }
+    }
+  }
+  .form-add-box{
+    display: flex;
+    .add-time-button-p{
+      width:100px;
+      height:40px;
+      line-height:40px;
+      text-align: center;
+      cursor: pointer;
+      border:1px solid #0183FA;
+      border-radius:4px;
+      color:#0183FA;
+      margin-right: 35px;
+    }
+    p:nth-child(2){
+      font-size:14px;
+      color:#0183FA;
+    }
+  }
+</style>
+<style lang="scss">
+  .wang-editor-form-item-box{
+    .el-form-item__content{
+      z-index:0;
+    }
+  }
+</style>

+ 242 - 0
src/views/safetyCheck/inspectProject/inspectProjectAccording/index.vue

@@ -0,0 +1,242 @@
+<!-- 检查依据 -->
+<template>
+  <div class="app-container snapshot">
+    <div class="page-container snapshotPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <!--<el-form-item label="" prop="queryParamsData2">-->
+            <!--<el-select v-model="queryParams.queryParamsData2" placeholder="检查类型" style="width: 160px">-->
+              <!--<el-option-->
+                <!--v-for="dict in optionList"-->
+                <!--:key="dict.value"-->
+                <!--:label="dict.label"-->
+                <!--:value="dict.value"-->
+              <!--/>-->
+            <!--</el-select>-->
+          <!--</el-form-item>-->
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="依据名称/操作人"
+              style="width: 160px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-submit-common-style-button"
+             style="float: right;"
+             @click="tableButton(1)"
+
+          >新增</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="名称" prop="basisName"  show-overflow-tooltip/>
+          <el-table-column label="三级检查项目数" prop="hazardCheckNum" width="200" show-overflow-tooltip/>
+          <el-table-column label="操作人" prop="updateName" width="200" show-overflow-tooltip/>
+          <el-table-column label="操作时间" prop="updateTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="130" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <add-page :propsData="propsData" v-if="pageType==2"></add-page>
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  import { securityCheckBasisList,securityCheckBasisDelete } from '@/api/safetyCheck/indexDemoOne'
+  import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    components: {
+      addPage,
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //整改状态选项卡
+        tableButtonCheckType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //整改状态选项卡切换
+      tableCheck(type){
+        if (this.tableButtonCheckType !== type){
+          this.$set(this,'tableButtonCheckType',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        securityCheckBasisList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //编辑
+          let obj = JSON.parse(JSON.stringify(row))
+          this.$set(this,'propsData',obj);
+          this.$set(this,'pageType',2);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            securityCheckBasisDelete({basisId:row.basisId}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 'back'){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .snapshot{
+    .snapshotPage{
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:100px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 700 - 0
src/views/safetyCheck/inspectProject/inspectProjectAccording/itemCheckComponent.vue

@@ -0,0 +1,700 @@
+<template>
+  <el-dialog class="itemCheckComponent"
+             :close-on-click-modal="false"
+             title="选择检查项目" :visible.sync="itemCheckType" v-if="itemCheckType"
+             @close="addDialogAllOff" width="1383px" append-to-body>
+    <div class="itemCheckComponent-user-box">
+      <div class="itemCheckComponent-user-content-box">
+        <div class="left-max-box">
+          <div class="dept-table-title-box">
+            <p>待选项目</p>
+            <p>{{leftTreeNum}}/{{leftTreeList.length}}</p>
+          </div>
+          <div class="dept-table-max-box">
+            <el-form :model="leftTreeQueryParams" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+              <el-form-item label="" prop="itemIdOne">
+                <el-select v-model="leftTreeQueryParams.itemIdOne" @change="leftSelectChange" placeholder="一级检查项" style="width: 214px">
+                  <el-option
+                    v-for="item in leftItemOptionOne"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="" prop="itemIdTwo">
+                <el-select v-model="leftTreeQueryParams.itemIdTwo" placeholder="二级检查项" style="margin-right:0;">
+                  <el-option
+                    v-for="item in leftItemOptionTwo"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <p class="page-inquire-common-style-button" @click="getLeftTreeData" style="width:60px;margin-right:10px;">搜索</p>
+              <p class="page-reset-common-style-button" @click="resetLeftTreeData" style="width:60px;margin-right:0;">重置</p>
+            </el-form>
+            <div class="tree-max-big-box">
+              <div class="tree-title-box">
+                <div class="tree-title-check-box">
+                  <p class="check-p el-icon-check" v-if="leftTreeCheckType" @click="leftAllCheck"></p>
+                  <p class="no-check-p" v-if="!leftTreeCheckType" @click="leftAllCheck"></p>
+                  <p class="tree-title-p">序号</p>
+                </div>
+                <p class="tree-title-name-p">检查项目</p>
+              </div>
+              <el-tree
+                @check-change="leftTreeChange"
+                class="tree-check-box"
+                :data="leftTreeData"
+                show-checkbox
+                ref="leftTree"
+                node-key="id"
+                :default-expand-all="true"
+                :render-content="renderContent"
+                :props="defaultProps">
+              </el-tree>
+            </div>
+          </div>
+        </div>
+        <div class="center-box">
+          <p class="el-icon-arrow-left" @click="itemArrowButton(1)">到左边</p>
+          <p class="el-icon-arrow-right" @click="itemArrowButton(2)">到右边</p>
+        </div>
+        <div class="right-max-box">
+          <div class="dept-table-title-box">
+            <p>已选项目</p>
+            <p>{{rightTreeNum}}/{{rightTreeList.length}}</p>
+          </div>
+          <div class="dept-table-max-box">
+            <el-form :model="rightTreeQueryParams" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+              <el-form-item label="" prop="itemIdOne">
+                <el-select v-model="rightTreeQueryParams.itemIdOne" @change="rightSelectChange" placeholder="一级检查项" style="width: 214px">
+                  <el-option
+                    v-for="item in rightItemOptionOne"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="" prop="itemIdTwo">
+                <el-select v-model="rightTreeQueryParams.itemIdTwo" placeholder="二级检查项" style="margin-right:0;">
+                  <el-option
+                    v-for="item in rightItemOptionTwo"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <p class="page-inquire-common-style-button" @click="getRightTreeData" style="width:60px;margin-right:10px;">搜索</p>
+              <p class="page-reset-common-style-button" @click="resetRightTreeData" style="width:60px;margin-right:0;">重置</p>
+            </el-form>
+            <div class="tree-max-big-box">
+              <div class="tree-title-box">
+                <div class="tree-title-check-box">
+                  <p class="check-p el-icon-check" v-if="rightTreeCheckType" @click="rightAllCheck"></p>
+                  <p class="no-check-p" v-if="!rightTreeCheckType" @click="rightAllCheck"></p>
+                  <p class="tree-title-p">序号</p>
+                </div>
+                <p class="tree-title-name-p">检查项目</p>
+              </div>
+              <el-tree
+                @check-change="rightTreeChange"
+                class="tree-check-box"
+                :data="rightTreeData"
+                show-checkbox
+                ref="rightTree"
+                node-key="id"
+                :default-expand-all="true"
+                :render-content="renderContent"
+                :props="defaultProps">
+              </el-tree>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="addDialogAllOff">取消</p>
+        <p class="dialog-footer-button-primary" @click="addUserButton">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import { securityCheckOptionShuttleList,securityCheckOptionShuttleRightList,securityCheckOptionSelList } from '@/api/safetyCheck/indexDemoOne'
+  import { getDeptDropList } from '@/api/commonality/permission'
+  export default {
+    name: 'itemCheckComponent',
+    props:{
+      itemCheckComponentData:{},
+    },
+    data(){
+      return{
+        itemCheckType:true,
+        /*===================================树形表配置===================================*/
+        checkIds:[],
+        /*===================================树形表配置===================================*/
+        defaultProps: {
+          children: 'children',
+          label: 'code'
+        },
+        /*===================================左侧穿梭框相关===================================*/
+        leftTreeCheckType:false,
+        leftItemOptionOne:[],
+        leftItemOptionTwo:[],
+        leftTreeQueryParams:{
+          itemIdOne:null,
+          itemIdTwo:null,
+        },
+        leftTreeData:[],
+        leftTreeList:[],
+        leftTreeTotal:0,
+        leftTreeNum:0,
+        /*===================================右侧穿梭框相关===================================*/
+        rightTreeCheckType:false,
+        rightItemOptionOne:[],
+        rightItemOptionTwo:[],
+        rightTreeQueryParams:{
+          itemIdOne:null,
+          itemIdTwo:null,
+        },
+        rightTreeData:[],
+        rightTreeList:[],
+        rightTreeTotal:0,
+        rightTreeNum:0,
+      }
+    },
+    created(){
+      this.initialize();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //初始化
+      initialize() {
+        this.$set(this,'checkIds',this.itemCheckComponentData);
+        this.getItemOne();
+        this.getLeftTreeData();
+        this.getRightTreeData();
+      },
+      //窗口关闭
+      addDialogAllOff(){
+        this.$parent.tableButton(4)
+      },
+      //提交
+      addUserButton(){
+        if(!this.checkIds[0]){
+          this.msgError('请勾选检查项')
+          return
+        }
+        this.$parent.tableButton(5,this.checkIds)
+      },
+      //查询一级指标项
+      getItemOne(){
+        securityCheckOptionSelList({level:1,parentId:''}).then(response => {
+          this.$set(this, 'leftItemOptionOne', response.data)
+          this.$set(this, 'rightItemOptionOne', response.data)
+        });
+      },
+      //获取检查指标下拉列表
+      getItemTwo(val,type){
+        securityCheckOptionSelList({level:2,parentId:val}).then(response => {
+          if(type == 'left'){
+            this.$set(this.leftTreeQueryParams, 'itemIdTwo', null)
+            this.$set(this, 'leftItemOptionTwo', response.data)
+          }else if(type == 'right'){
+            this.$set(this.rightTreeQueryParams, 'itemIdTwo', null)
+            this.$set(this, 'rightItemOptionTwo', response.data)
+          }
+        });
+      },
+      /*===================================左侧列表相关===================================*/
+      //全选/反选
+      leftAllCheck(){
+        if(!this.leftTreeData[0]){
+          return
+        }
+        if(this.leftTreeCheckType){
+          this.$refs.leftTree.setCheckedKeys([]);
+          this.$set(this,'leftTreeCheckType',false);
+        }else{
+          let list = [];
+          let maxList = this.convertTreeData(this.leftTreeData);
+          for(let i=0;i<maxList.length;i++){
+            list.push(maxList[i].id)
+          }
+          this.$refs.leftTree.setCheckedKeys(list);
+          this.$set(this,'leftTreeCheckType',true);
+        }
+      },
+      //树选中触发
+      leftTreeChange(val){
+        let self = this;
+        let list = []
+        list = list.concat(this.$refs.leftTree.getCheckedKeys())
+        list = list.concat(this.$refs.leftTree.getHalfCheckedKeys())
+        list = [...new Set(list)]
+        let maxNum = this.convertTreeData(this.leftTreeData).length;
+        let num = list.length;
+        if(maxNum == num){
+          this.$set(this,'leftTreeCheckType',true);
+        }else{
+          this.$set(this,'leftTreeCheckType',false);
+        }
+        let minList = this.$refs.leftTree.getCheckedKeys();
+        let minNum = 0
+        for(let i=0;i<minList.length;i++){
+          for(let o=0;o<self.leftTreeList.length;o++){
+            if(minList[i]==self.leftTreeList[o].id){
+              minNum++
+            }
+          }
+        }
+        this.$set(this,'leftTreeNum',minNum);
+      },
+      //左侧下拉列表选中
+      leftSelectChange(val){
+        this.getItemTwo(val,'left');
+      },
+      //查询
+      getLeftTreeData(){
+        let obj = {
+          id:this.leftTreeQueryParams.itemIdTwo?this.leftTreeQueryParams.itemIdTwo:(this.leftTreeQueryParams.itemIdOne?this.leftTreeQueryParams.itemIdOne:null),
+          notIds:this.checkIds,
+        };
+        securityCheckOptionShuttleList(obj).then(response => {
+          let maxList = [];
+          let list = [];
+          for(let i=0;i<response.data.length;i++){
+            let num = 0;
+            if(response.data[i].children){
+              for(let o=0;o<response.data[i].children.length;o++){
+                if(response.data[i].children[o].children){
+                  num++
+                  for(let x=0;x<response.data[i].children[o].children.length;x++){
+                    list.push(response.data[i].children[o].children[x])
+                  }
+                }
+              }
+            }
+            if(num != 0){
+              maxList.push(response.data[i]);
+            }
+          }
+          this.$set(this,'leftTreeData',maxList);
+          this.$set(this,'leftTreeList',list);
+          this.$set(this,'leftTreeNum',0);
+          this.$set(this,'leftTreeCheckType',false);
+        });
+      },
+      //重置
+      resetLeftTreeData(){
+        this.$set(this,'leftTreeQueryParams',{
+          itemIdOne:null,
+          itemIdTwo:null,
+        });
+        this.$set(this, 'leftItemOptionTwo', [])
+        this.getLeftTreeData();
+      },
+      /*===================================右侧列表相关===================================*/
+      //全选-反选
+      rightAllCheck(){
+        if(!this.rightTreeData[0]){
+          return
+        }
+        if(this.rightTreeCheckType){
+          this.$refs.rightTree.setCheckedKeys([]);
+          this.$set(this,'rightTreeCheckType',false);
+        }else{
+          let list = [];
+          let maxList = this.convertTreeData(this.rightTreeData);
+          for(let i=0;i<maxList.length;i++){
+            list.push(maxList[i].id)
+          }
+          this.$refs.rightTree.setCheckedKeys(list);
+          this.$set(this,'rightTreeCheckType',true);
+        }
+      },
+      //树选中触发
+      rightTreeChange(val){
+        let self = this;
+        let list = []
+        list = list.concat(this.$refs.rightTree.getCheckedKeys())
+        list = list.concat(this.$refs.rightTree.getHalfCheckedKeys())
+        list = [...new Set(list)]
+        let maxNum = this.convertTreeData(this.rightTreeData).length;
+        let num = list.length;
+        if(maxNum == num){
+          this.$set(this,'rightTreeCheckType',true);
+        }else{
+          this.$set(this,'rightTreeCheckType',false);
+        }
+        let minList = this.$refs.rightTree.getCheckedKeys();
+        let minNum = 0
+        for(let i=0;i<minList.length;i++){
+          for(let o=0;o<self.rightTreeList.length;o++){
+            if(minList[i]==self.rightTreeList[o].id){
+              minNum++
+            }
+          }
+        }
+        this.$set(this,'rightTreeNum',minNum);
+      },
+      //右侧下拉列表选中
+      rightSelectChange(val){
+        this.getItemTwo(val,'right');
+      },
+      //查询
+      getRightTreeData(){
+        let obj = {
+          id:this.rightTreeQueryParams.itemIdTwo?this.rightTreeQueryParams.itemIdTwo:(this.rightTreeQueryParams.itemIdOne?this.rightTreeQueryParams.itemIdOne:null),
+          ids:this.checkIds,
+        };
+        securityCheckOptionShuttleRightList(obj).then(response => {
+          let maxList = [];
+          let list = [];
+          for(let i=0;i<response.data.length;i++){
+            let num = 0;
+            if(response.data[i].children){
+              for(let o=0;o<response.data[i].children.length;o++){
+                if(response.data[i].children[o].children){
+                  num++
+                  for(let x=0;x<response.data[i].children[o].children.length;x++){
+                    list.push(response.data[i].children[o].children[x])
+                  }
+                }
+              }
+            }
+            if(num != 0){
+              maxList.push(response.data[i]);
+            }
+          }
+          this.$set(this,'rightTreeData',maxList);
+          this.$set(this,'rightTreeList',list);
+          this.$set(this,'rightTreeNum',0);
+          this.$set(this,'rightTreeCheckType',false);
+        });
+      },
+      //重置
+      resetRightTreeData(){
+        this.$set(this,'rightTreeQueryParams',{
+          itemIdOne:null,
+          itemIdTwo:null,
+        });
+        this.$set(this, 'rightItemOptionTwo', [])
+        this.getRightTreeData();
+      },
+      /*===================================穿梭按钮相关===================================*/
+      //穿梭按钮
+      itemArrowButton(type){
+        if(type == 1){
+          let maxList = JSON.parse(JSON.stringify(this.checkIds));
+          let checkList = this.$refs.rightTree.getCheckedNodes();
+          for(let o=0;o<checkList.length;o++){
+            for(let i=0;i<maxList.length;i++){
+              if(maxList[i]==checkList[o].id){
+                maxList.splice(i,1);
+                i--
+              }
+            }
+          }
+          this.$set(this,'checkIds',JSON.parse(JSON.stringify(maxList)));
+          this.getLeftTreeData();
+          this.getRightTreeData();
+        }else if(type == 2){
+          let list = this.checkIds.concat(this.$refs.leftTree.getCheckedKeys())
+          list = list.concat(this.$refs.leftTree.getHalfCheckedKeys())
+          list = [...new Set(list)]
+          this.$set(this,'checkIds',JSON.parse(JSON.stringify(list)));
+          this.getLeftTreeData();
+          this.getRightTreeData();
+        }
+      },
+      /*===================================工具类===================================*/
+      // tree 结构转化成一维数组
+      convertTreeData(list) {
+        let menuOptions = JSON.parse(JSON.stringify(list))
+        for (let i = 0; i < menuOptions.length; i++) {
+          if (menuOptions[i].children != undefined) {
+            const temp = menuOptions[i].children;
+            delete menuOptions[i].children;
+            menuOptions = menuOptions.concat(temp);
+          }
+        }
+        return menuOptions;
+      },
+      /*===================================树形表配置===================================*/
+      renderContent(h, { node, data, store }) {
+        return (
+          <span class="custom-tree-node">
+            <span class='custom-tree-node-code'>{data.code}</span>
+            <span class='custom-tree-node-name'>{data.name}</span>
+          </span>
+        )
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .itemCheckComponent{
+    overflow: hidden;
+    .itemCheckComponent-user-box{
+      height:600px;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .itemCheckComponent-user-content-box{
+        flex:1;
+        display: flex;
+        overflow: hidden;
+        .dept-table-title-box{
+          display: flex;
+          padding:0 20px;
+          background: rgba(1,131,250,0.1);
+          p{
+            flex:1;
+            color:#0183FA;
+            font-size:16px;
+            line-height:40px;
+          }
+          p:nth-child(1){
+            text-align: left;
+          }
+          p:nth-child(2){
+            text-align: right;
+          }
+        }
+        .dept-table-max-box{
+          border: 1px solid #e0e0e0;
+          flex:1;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          padding:20px;
+          .form-index{
+            .el-input__inner{
+              border-right:none;
+              padding-right:0;
+            }
+            .el-input-group__append{
+              background: #fff;
+              cursor: pointer;
+              padding:0 10px;
+            }
+          }
+          input{
+            border: 1px solid #DCDFE6;
+          }
+        }
+        .left-max-box{
+          height:550px;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          width:639px;
+        }
+        .right-max-box{
+          height:550px;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          width:639px;
+        }
+        .center-box{
+          width:70px;
+          p{
+            display: block;
+            width:60px;
+            height:30px;
+            line-height:30px;
+            text-align: center;
+            background: #fff;
+            color:#0183FA;
+            border-radius:4px;
+            border:1px solid #0183FA;
+            cursor: pointer;
+            font-size:12px;
+          }
+          p:nth-child(1){
+            margin:270px 5px 0;
+          }
+          p:nth-child(2){
+            margin:14px 5px 0;
+          }
+          p:hover{
+            background: #0183FA;
+            color:#fff;
+            border:1px solid #0183FA;
+          }
+        }
+        ::v-deep .el-range-editor--small .el-range__icon{
+          display: none;
+        }
+        ::v-deep .el-range-editor--small .el-range__close-icon{
+          display: none;
+        }
+        ::v-deep .el-date-editor .el-range-input{
+          width:45%;
+        }
+        ::v-deep .el-range-editor--small .el-range-separator{
+          line-height:30px;
+        }
+        ::v-deep .el-input-group__append, .el-input-group__prepend{
+          background-color: #fff;
+        }
+        .form-index{
+          ::v-deep .el-input--medium .el-input__inner{
+            border:1px solid #DCDFE6;
+            border-right:none;
+            padding-right:0;
+          }
+          ::v-deep .el-input-group__append{
+            padding:0 10px;
+            cursor: pointer;
+          }
+        }
+      }
+      .dialog-footer-box{
+        display: flex;
+      }
+    }
+    ::v-deep .el-dialog__body{
+      padding: 30px 20px!important;
+    }
+    .tree-max-big-box{
+      width:595px;
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .tree-title-box{
+        height:40px;
+        display: flex;
+        flex-direction: row;
+        border:1px solid #E0E0E0;
+        background-color: #f5f5f5;
+        .tree-title-check-box{
+          width:190px;
+          display: flex;
+          border-right:1px solid #E0E0E0;
+          .check-p{
+            background-color: #0183FA;
+            border-radius:2px;
+            color:#fff;
+            text-align: center;
+            line-height:14px;
+            width:14px;
+            height:14px;
+            font-size:12px;
+            margin:13px 15px 13px 13px;
+            cursor: pointer;
+          }
+          .no-check-p{
+            border:1px solid #E0E0E0;
+            border-radius:2px;
+            background-color: #fff;
+            color:#fff;
+            text-align: center;
+            line-height:14px;
+            width:14px;
+            height:14px;
+            margin:13px 15px 13px 13px;
+            cursor: pointer;
+          }
+          .no-check-p:hover{
+            border:1px solid #0183FA;
+          }
+          .tree-title-p{
+            font-size:16px;
+            color: #333;
+            line-height:40px;
+          }
+        }
+        .tree-title-name-p{
+          width:420px;
+          text-align: center;
+          font-size:16px;
+          color: #333;
+          line-height:40px;
+        }
+      }
+      //表格滚动条样式
+      .tree-check-box::-webkit-scrollbar{
+        width: 6px;     /*高宽分别对应横竖滚动条的尺寸*/
+        height: 6px;
+      }
+      .tree-check-box::-webkit-scrollbar-thumb{
+        border-radius: 5px;
+        background: #D3D7D4;
+      }
+      .tree-check-box::-webkit-scrollbar-track{
+        -webkit-box-shadow: inset 0 0 5px #FFFFFF;
+        border-radius: 0;
+        background: #FFFFFF;
+      }
+      .tree-check-box{
+        height:400px;
+        overflow-y: scroll;
+        border:1px solid #E0E0E0;
+        border-top:none;
+        ::v-deep .el-tree-node__content{
+          border-bottom:1px solid #E0E0E0;
+          height:40px;
+          .el-tree-node__label{
+            display: inline-block;
+            height:40px;
+            line-height:40px;
+            border-left:1px solid #E0E0E0;
+            padding-left:24px;
+          }
+          .el-tree-node__expand-icon{
+            margin-left:18px;
+          }
+          .el-tree-node__label{
+            margin-left:40px;
+          }
+          .custom-tree-node-code{
+            display: inline-block;
+            width:120px;
+            height:40px;
+            line-height:40px;
+            border-right:1px solid #E0E0E0;
+          }
+          .custom-tree-node-name{
+            padding-left:24px;
+          }
+        }
+        ::v-deep .el-tree-node__children{
+          .el-tree-node__content{
+            .custom-tree-node-code{
+              display: inline-block;
+              width:102px;
+              height:40px;
+              line-height:40px;
+              border-right:1px solid #E0E0E0;
+            }
+          }
+          .el-tree-node__children{
+            .el-tree-node__content{
+              .custom-tree-node-code{
+                display: inline-block;
+                width:84px;
+                height:40px;
+                line-height:40px;
+                border-right:1px solid #E0E0E0;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+</style>

+ 755 - 0
src/views/safetyCheck/inspectProject/inspectProjectTable/index.vue

@@ -0,0 +1,755 @@
+<!--检查项目表-->
+<template>
+  <div class="app-container checkItemLibrary">
+    <div class="page-form-title-box">
+      <el-form class="form-box" :model="queryParams" ref="examineForm" :inline="true" label-width="80px">
+        <el-form-item label="" prop="name">
+          <el-input
+            maxlength="10"
+            v-model="queryParams.searchValue"
+            placeholder="按检查项目检索"
+            clearable
+            size="small"/>
+        </el-form-item>
+        <div class="num-data-box">
+          已更新至《高等学校实验室安全检查项目表(2023年)》
+        </div>
+        <el-form-item>
+          <p class="page-inquire-common-style-button" @click="onSearch">查询</p>
+          <p class="page-reset-common-style-button" @click="resetForm">重置</p>
+        </el-form-item>
+        <el-form-item style="float: right;" >
+          <p class="page-save-common-style-button" style="width:80px;" @click="addDialogOpen(1)">添加</p>
+        </el-form-item>
+        <el-form-item style="float: right;" >
+          <p class="page-add-common-style-button" style="width:100px;" @click="allDel">批量删除</p>
+        </el-form-item>
+        <el-form-item style="float: right;" >
+          <export-component :exportConfig="exportConfig"></export-component>
+        </el-form-item>
+        <el-form-item style="float: right;" >
+          <import-component :importConfig="importConfig"></import-component>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="page-content-box">
+      <el-table class="table-box" border
+                :data="tableData"
+                ref="table-box" :row-key="getRowKeys"
+                default-expand-all
+                :select-on-indeterminate="false"
+                @selection-change="handleSelectionChange"
+                :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+        <el-table-column type="selection" width="50" align="center"/>
+        <el-table-column label="序号" prop="code" width="240"/>
+        <el-table-column label="检查项目" prop="name"/>
+        <el-table-column label="检查要点" prop="mainPoint" width="700" show-overflow-tooltip/>
+        <el-table-column label="操作" width="180">
+          <template slot-scope="scope">
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p" @click="addDialogOpen(3,scope.row)" >编辑</p>
+              <p class="table-button-p" @click="delItem(scope.row)" >删除</p>
+              <p class="table-button-null"></p>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <!--添加窗口-->
+    <el-dialog :title="addDialogTitle" :visible.sync="addDialogType" v-if="addDialogType" @close="addDialogOff" width="780px" append-to-body class="checkItemLibrary-dialog-box"
+               :close-on-click-modal="false">
+      <el-form ref="addDialogForm" :model="addDialogForm" :rules="rules" label-width="120px">
+        <el-form-item label="所属上级" prop="parentId">
+          <el-cascader
+            style="width:548px;"
+            v-model="addDialogForm.parentId"
+            :options="cascaderData"
+            :props="{ checkStrictly: true, value: 'id', label: 'labelName',emitPath:false }"
+            @change="cascaderCheck">
+            <template slot-scope="{data}">
+              <el-tooltip :content="data.labelName" v-if="data.labelName.length>22">
+                <p style="max-width:300px;overflow: hidden;text-overflow:ellipsis;white-space:nowrap;">{{data.labelName}}</p>
+              </el-tooltip>
+              <p v-else style="max-width:300px;overflow: hidden;text-overflow:ellipsis;white-space:nowrap;">{{data.labelName}}</p>
+            </template>
+          </el-cascader>
+        </el-form-item>
+        <div style="display: flex;justify-content: flex-start">
+          <el-form-item label="新增序号" prop="code">
+            <div class="code-max-box">
+              <el-input v-model="addDialogForm.code" placeholder="未选择指标"
+                        maxLength="6" disabled style="width:210px;"/>
+            </div>
+          </el-form-item>
+          <!--<el-form-item label="隐患等级" prop="level" v-if="addDialogLevel == 2">-->
+            <!--<el-select v-model="addDialogForm.level" placeholder="隐患等级" style="width: 220px">-->
+              <!--<el-option-->
+                <!--v-for="dict in hazardLevelList"-->
+                <!--:key="dict.value"-->
+                <!--:label="dict.label"-->
+                <!--:value="dict.value"-->
+              <!--/>-->
+            <!--</el-select>-->
+          <!--</el-form-item>-->
+        </div>
+        <el-form-item label="检查项目" prop="name">
+          <el-input
+            type="textarea"
+            :autosize="{ minRows: 5, maxRows: 5}"
+            placeholder="请输入检查项目内容"
+            v-model="addDialogForm.name"
+            maxlength="200"
+            resize="none"
+            show-word-limit
+            style="width:548px;">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="检查要点" prop="mainPoint" v-if="addDialogLevel == 2">
+          <el-input
+            type="textarea"
+            :autosize="{ minRows: 5, maxRows: 5}"
+            placeholder="请输入检查要点内容"
+            v-model="addDialogForm.mainPoint"
+            maxlength="500"
+            resize="none"
+            show-word-limit
+            style="width:548px;">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer dialog-footer-box" style="display: flex">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="addDialogOff">取消</p>
+        <p class="dialog-footer-button-primary" @click="upDataButton">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    securityCheckOptionList,
+    securityCheckOptionAdd,
+    securityCheckOptionUpdate,
+    securityCheckOptionDelete,
+    securityCheckOptionBatchDelete,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import { getToken } from "@/utils/auth";
+  //            V3
+  import exportComponent from "@/components/exportComponent/exportComponent.vue";
+  import importComponent from "@/components/importComponent/importComponent.vue";
+  export default {
+    name: 'index',
+    components: {
+      exportComponent,
+      importComponent,
+    },
+    data(){
+      return{
+        //导出
+        exportConfig:{
+          api:'/security/checkOption/export/',             //导出接口地址
+          ids:'',                                       //勾选导出,勾选的IDS
+          fileName:'项目检查库',                         //导出文件的命名
+        },
+        //导入
+        importConfig:{
+          upLoadApi:'/security/checkOption/importData',                //上传接口地址
+          downloadApi:'/security/checkOption/importTemplate',          //下载模板接口地址
+          loseApi:'/security/checkOption/importErrorData',             //失败报表接口地址
+          fileName:'导入模板-',                                   //下载模板命名
+        },
+        uploadImgUrl: window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/zd-security/checkOption/importData", // 上传地址
+        headers: {
+          Authorization: getToken(),
+        },
+        // 遮罩层
+        loading: false,
+        queryParams:{
+          searchValue:"",
+        },
+        //导入弹层开关
+        importOpen:false,
+        //导入数据
+        upImportData:{
+          sysUserEnable:true,
+          upDate:false,
+        },
+        getImportData:{
+          downFile:false,
+          successNum:0,
+          failureNum:0,
+          textName:"",
+        },
+        // 检查项选项表格数据
+        tableData: [{}],
+        cascaderData:[],
+        cascaderDataPrimitive:[],
+        total:0,
+        addDialogType:false,
+        addDialogTitle:null,
+        addDialogLevel:0,
+        addDialogForm:{
+          parentId:"",
+          code:"",
+          name:"",
+          mainPoint:"",
+          level:"",
+        },
+        hazardLevelList:[{label:'轻微隐患',value:1},{label:'一般隐患',value:2},{label:'重大隐患',value:3},],
+        // 表单校验
+        rules: {
+          parentId: [
+            { required: true, message: "请选择上级指标", trigger: "change" },
+            { required: true, message: "请选择上级指标", validator: this.spaceJudgment, trigger: "change" },
+          ],
+          name: [
+            { required: true, message: "请输入检查项目内容", trigger: "change" },
+            { required: true, message: "请输入检查项目内容", validator: this.spaceJudgment, trigger: "change" },
+          ],
+          level: [
+            { required: true, message: "请选择隐患等级", trigger: "change" },
+            { required: true, message: "请选择隐患等级", validator: this.spaceJudgment, trigger: "change" },
+          ],
+
+        },
+        checkList:[],
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.getList();
+    },
+    methods:{
+      //确定按钮
+      upDataButton(){
+        this.$refs["addDialogForm"].validate(valid => {
+          if (valid) {
+            if(this.addDialogForm.id){
+              //编辑
+              let obj = JSON.parse(JSON.stringify(this.addDialogForm))
+              obj.level = this.addDialogLevel+1;
+              obj.mainPoint = this.addDialogLevel>1?obj.mainPoint:'';
+              securityCheckOptionUpdate(obj).then( response => {
+                this.msgSuccess(response.message)
+                this.addDialogOff();
+                this.getList();
+              })
+            }else{
+              //新增
+              let obj = JSON.parse(JSON.stringify(this.addDialogForm))
+              obj.level = this.addDialogLevel+1;
+              securityCheckOptionAdd(obj).then( response => {
+                this.msgSuccess(response.message)
+                this.addDialogOff();
+                this.getList();
+              })
+            }
+          }
+        })
+      },
+      //添加页面开启
+      addDialogOpen(type,row){
+        if(type == 1){
+          //新增
+          this.$set(this,'addDialogTitle','添加检查项目');
+          this.$set(this,'addDialogLevel',0);
+          this.$set(this,'addDialogForm',{
+            parentId:"",
+            code:"",
+            name:"",
+            mainPoint:"",
+            level:"",
+          });
+          this.$set(this,'addDialogType',true);
+        }else if(type == 2){
+          //列表新增
+          this.$set(this,'addDialogTitle','添加检查项目');
+          let obj = this.cascaderCheckData(row.id,this.cascaderDataPrimitive);
+          this.$set(this,'checkList',JSON.parse(JSON.stringify(row.children)));
+          this.$set(this,'addDialogLevel',obj.level);
+          this.$set(this,'addDialogForm',{
+            parentId:row.id,
+            code:obj.key,
+            name:"",
+            mainPoint:"",
+            level:"",
+          });
+          this.$set(this,'addDialogType',true);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'addDialogTitle','编辑检查项目');
+          this.$set(this,'addDialogLevel',row.level-1);
+          this.$set(this,'addDialogForm',{
+            id:row.id,
+            parentId:row.parentId,
+            code:row.code,
+            name:row.name,
+            mainPoint:row.mainPoint,
+            level:row.level,
+          });
+          this.getCodeButton(this.cascaderDataPrimitive,row.parentId,row.id);
+          this.$set(this,'addDialogType',true);
+        }
+      },
+      //添加页面关闭
+      addDialogOff(){
+        this.$set(this,'addDialogType',false);
+      },
+      //联级选中
+      cascaderCheck(val){
+        let obj = this.cascaderCheckData(val,this.cascaderDataPrimitive);
+        this.$set(this.addDialogForm,'code',obj.key);
+        this.getCodeButton(this.cascaderDataPrimitive,obj.parentId,val);
+        this.$set(this,'addDialogLevel',obj.level);
+      },
+      //序号自增
+      cascaderCheckData(val,list){
+        let self = this;
+        for(let i=0;i<list.length;i++){
+          if(list[i].id == val){
+            console.log('list[i]',list[i])
+            let obj = {
+              parentId:list[i].id,
+              parentKey:list[i].code,
+              level:list[i].level,
+              key:'',
+            }
+            if(list[i].children){
+              if(list[i].children[0]){
+                obj.key = list[i].code ? list[i].code + '.' + self.getListKey(list[i].children) : self.getListKey(list[i].children)
+              }else{
+                obj.key = list[i].code ? list[i].code+'.1':'1'
+              }
+            }else{
+              obj.key = list[i].code ? list[i].code+'.1':'1'
+            }
+            return obj
+          }else{
+            if (list[i].level<3){
+              if(list[i].children){
+                if(list[i].children[0]){
+                  let obj = self.cascaderCheckData(val,list[i].children);
+                  if(obj){
+                    return obj
+                  }
+                }
+              }
+            }
+          }
+        }
+      },
+      //自动补位计算
+      getListKey(dataList){
+        let num = 0;
+        for(let i=0;i<dataList.length;i++){
+          let list = dataList[i].code.split('.');
+          if(num === 0 && parseInt(list[list.length-1]) !== 1){
+            return 1
+          }else{
+            if(num+1 === parseInt(list[list.length-1])){
+              num = parseInt(list[list.length-1]);
+            }else{
+              return num+1
+            }
+          }
+        }
+        return num+1
+      },
+      //序号调整按钮
+      codeButton(type){
+        let obj = this.getListCode(this.addDialogForm.code,type,this.checkList);
+        if(obj.type){
+          this.$set(this.addDialogForm,'code',obj.value);
+        }
+      },
+      getListCode(code,type,list){
+        let codeList = code.split('.');
+        let codeNum = parseInt(codeList[codeList.length-1]);
+        let codeText = '';
+        let obj = {type:false,value:""}
+        if(!list[0]){
+          return obj
+        }
+        if(type == 1){
+          if(codeNum==1 || !list[0]){
+            return obj
+          }
+        }else if(type == 2){
+          let maxList = list[list.length-1].code.split('.')
+          let maxCode = parseInt(maxList[maxList.length-1]);
+          if(codeNum > maxCode){
+            return obj
+          }
+        }
+        for(let i=0;i<codeList.length-1;i++){
+          if(i===0){
+            codeText = codeText + codeList[i]
+          }else{
+            codeText = codeText +'.'+ codeList[i]
+          }
+        }
+        let age = parseInt(codeNum);
+        if(type == 1){
+          age--
+          for(age;age>0;age--){
+            let counter = 0;
+            for(let o=0;o<list.length;o++){
+              let codeList = list[o].code.split('.');
+              let code = parseInt(codeList[codeList.length-1]);
+              if(code == age){
+                counter++
+              }
+            }
+            if(counter == 0){
+              return {
+                type:true,
+                value:codeText?codeText+'.'+age:age+''
+              }
+            }
+          }
+          return obj;
+        }else if(type == 2){
+          age++
+          for(age;age<999;age++){
+            let counter = 0;
+            for(let o=0;o<list.length;o++){
+              let codeList = list[o].code.split('.');
+              let code = parseInt(codeList[codeList.length-1]);
+              if(code == age){
+                counter++
+              }
+            }
+            if(counter == 0){
+              return {
+                type:true,
+                value:codeText?codeText+'.'+age:age+''
+              }
+            }
+          }
+          return obj;
+        }
+      },
+      //选中同级数据
+      getCodeButton(list,parentId,id){
+        let self = this;
+        for(let i=0;i<list.length;i++){
+          if(list[i].id == parentId){
+            if(list[i].children){
+              let newList = JSON.parse(JSON.stringify(list[i].children))
+              for(let o=0;o<newList.length;o++){
+                if(newList[o].id == id){
+                  newList.splice(o,1)
+                }
+              }
+              this.$set(this,'checkList',newList);
+              return
+            }
+          }else{
+            if (list[i].level<3){
+              if(list[i].children){
+                if(list[i].children[0]){
+                  self.getCodeButton(list[i].children,parentId,id)
+                }
+              }
+            }
+          }
+        }
+      },
+      //删除
+      delItem(row){
+        let self = this;
+        this.$confirm('是否确认删除'+row.code+'检查项目吗?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          securityCheckOptionDelete({id:row.id}).then( response => {
+            self.msgSuccess(response.message)
+            self.getList();
+          })
+        }).then(() => {
+        }).catch(() => {});
+      },
+      //批量删除
+      allDel(){
+        let self = this;
+        if(!this.$refs['table-box'].selection[0]){
+          this.msgError('请勾选数据')
+          return
+        }
+        this.$confirm('是否确认删除?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          let list = self.$refs['table-box'].selection;
+          let ids = [];
+          for(let i=0;i<list.length;i++){
+            ids.push(list[i].id)
+          }
+          securityCheckOptionBatchDelete({ids:ids}).then( response => {
+            self.msgSuccess(response.message);
+            self.getList();
+          })
+        }).then(() => {
+        }).catch(() => {});
+      },
+      /** 查询检查项选项列表 */
+      getList() {
+        this.loading = true;
+        securityCheckOptionList(this.queryParams).then( response => {
+          this.$set(this,'tableData',JSON.parse(JSON.stringify(response.data)));
+          let list = [{
+            id:'0',
+            name:"最上级",
+            code:false,
+            level:0,
+            children:JSON.parse(JSON.stringify(response.data)),
+          }]
+          this.$set(this,'cascaderData',list);
+          this.$set(this,'cascaderDataPrimitive',JSON.parse(JSON.stringify(list)));
+          this.getCascaderData(this.cascaderData);
+          this.$set(this,'total',response.total);
+          this.loading = false;
+        });
+      },
+      //联级选择器数据处理
+      getCascaderData(list){
+        let self = this;
+        for(let i=0;i<list.length;i++){
+          list[i].labelName = list[i].code? list[i].code +' '+ list[i].name:list[i].name
+          if(list[i].level == 0 || list[i].level == 1){
+            self.getCascaderData(list[i].children)
+          }else{
+            delete list[i].children
+          }
+        }
+      },
+      //查询
+      onSearch() {
+        this.getList();
+      },
+      //重置
+      resetForm() {
+        this.$set(this.queryParams,'searchValue',null);
+        this.$set(this,'total',0);
+        this.onSearch();
+      },
+      //****************************************导入功能**************************************
+      /** 当前时间 */
+      getCurrentTime () {
+        const yy = new Date().getFullYear()
+        const mm = new Date().getMonth() + 1
+        const dd = new Date().getDate()
+        const hh = new Date().getHours()
+        const mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes()
+        const ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds()
+        return yy + '-' + mm + '-' + dd
+      },
+      /** 导出按钮操作 */
+      exportButton(item) {
+        let self = this;
+        this.currentDate=this.getCurrentTime()
+
+        if(item.command == 1){
+          self.$confirm(`确认导出全部数据?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(async () => {
+            self.download('/zd-security/checkOption/export/', {...self.queryParams}, '项目检查库.xlsx')
+          }).catch(() => {})
+        }else if(item.command == 2){
+          let list = self.$refs['table-box'].selection;
+          let ids = [];
+          for(let i=0;i<list.length;i++){
+            ids.push(list[i].id)
+          }
+          if(ids.length>0) {
+            self.$confirm(`确认导出选中数据?`, "提示", {
+              confirmButtonText: "确定",
+              cancelButtonText: "取消",
+              type: "warning"
+            }).then(async () => {
+              let obj = {
+                ids :ids.join(',')
+              }
+              self.download(`/zd-security/checkOption/export/`,obj, '项目检查库.xlsx')
+              this.$refs['table-box'].clearSelection();
+            }).catch(() => {})
+          }else {
+            this.msgError('请选择要导出的数据')
+          }
+        }
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+        this.download('/zd-security/checkOption/importTemplate', {}, `项目检查库批量导入模板.xlsx`)
+      },
+      /*下载失败列表*/
+      failureExcel(){
+        this.download('/zd-security/checkOption/importErrorData', {}, `项目检查库批量导入失败报表.xlsx`)
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.id
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.exportConfig.ids = selection.map(item => item.id);
+      },
+      setChildren (children, type) {
+        children.map(j => {
+          this.toggleSelection(j, type)
+          if (j.children) {
+            this.setChildren(j.children, type)
+          }
+        })
+      },
+      toggleSelection (row, select) {
+        if (row) {
+          this.$nextTick(() => {
+            this.$refs['table-box'] && this.$refs['table-box'].toggleRowSelection(row, select)
+          })
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .checkItemLibrary{
+    .page-form-title-box{
+    }
+  }
+</style>
+<style lang="scss">
+  .checkItemLibrary-dialog-box{
+    .teacher-import-dialog-upLoad-box{
+      .el-upload{
+        width:450px;
+        margin:0 55px;
+        .el-upload-dragger{
+          width:450px;
+          .el-icon-upload{
+            font-size:100px;
+            color:#CBE6FE;
+          }
+          .el-upload__text{
+            margin-top:20px;
+          }
+        }
+      }
+      .el-upload__tip{
+        margin-left:60px;
+        font-size:14px;
+        margin-top:10px;
+      }
+      .el-upload-text-box{
+        background: #F5F5F5;
+        border-radius: 10px;
+        margin:15px 30px 0;
+        padding:0 20px 15px;
+        overflow: hidden;
+        *{
+          margin:0;
+        }
+        .img-text-box{
+          display: flex;
+          margin-top:15px;
+          img{
+            width:16px;
+            height:16px;
+            margin-right:13px;
+          }
+          p{
+            height:16px;
+            line-height:16px;
+            font-size:12px;
+          }
+        }
+        .text-p{
+          margin-top:15px;
+          margin-left:29px;
+          height:16px;
+          line-height:16px;
+          font-size:12px;
+        }
+      }
+    }
+    .teacher-import-dialog-button-box{
+      display: flex;
+      width:190px;
+      margin:0 auto;
+      p{
+        width:70px;
+        height:30px;
+        line-height:30px;
+        font-size:14px;
+        margin:0 auto;
+      }
+    }
+    .teacher-import-dialog-position-box{
+      width:100%;
+      height:100%;
+      position: absolute;
+      top:0;
+      left:0;
+      z-index: 999;
+      background: rgba(255,255,255,0.4);
+      border-radius:20px;
+    }
+    .code-max-box{
+      display: flex;
+      .code-button-box{
+        display: flex;
+        flex-direction: column;
+        margin-left:8px;
+        p{
+          width:40px;
+          text-align: center;
+          line-height:19px;
+          font-size:14px;
+          cursor: pointer;
+          color:#d8d8d8;
+        }
+        p:nth-child(1){
+          border:1px solid #d8d8d8;
+          border-top-left-radius: 4px;
+          border-top-right-radius: 4px;
+        }
+        p:nth-child(2){
+          border-bottom:1px solid #d8d8d8;
+          border-left:1px solid #d8d8d8;
+          border-right:1px solid #d8d8d8;
+          border-bottom-left-radius: 4px;
+          border-bottom-right-radius: 4px;
+        }
+        p:hover{
+          color:#fff;
+          background-color: #d8d8d8;
+        }
+      }
+    }
+  }
+  .num-data-box{
+    display: inline-block;
+    vertical-align:top;
+    background: rgba(1,131,250,0.2);
+    color:#0183FA;
+    font-size:14px;
+    line-height:40px;
+    padding:0 20px;
+    border-radius:4px;
+    margin:0px 20px 0px 20px;
+    width: 492px;
+  }
+</style>

+ 290 - 0
src/views/safetyCheck/inspectReport/index.vue

@@ -0,0 +1,290 @@
+<!-- 检查报告 -->
+<template>
+  <div class="app-container inspectReport">
+    <div class="page-container inspectReportPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-school-college-toggle-box">
+            <p :class="planStatus===''?'p-check':''" @click="tableCheck('')">全部</p>
+            <p :class="planStatus===0?'p-check':''" @click="tableCheck(0)">未提交</p>
+            <p :class="planStatus===1?'p-check':''" @click="tableCheck(1)">已提交</p>
+          </div>
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 200px">
+              <el-option
+                v-for="dict in deptOption"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="计划标题"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-submit-common-style-button"
+             style="float: right;"
+             @click="tableButton(1)"
+
+          >批量提交</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="name"  show-overflow-tooltip/>
+          <el-table-column label="检查批次" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="负责人" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="学院单位" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="检查项数量" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="不符合数量" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+
+            </template>
+          </el-table-column>
+          <el-table-column label="更新时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >详情</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+  } from '@/api/commonality/permission'
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //计划状态选项卡
+        planStatus:'',
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        deptOption:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          deptId :null,
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      this.getDeptDropList();
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //整改状态选项卡切换
+      tableCheck(type){
+        if (this.planStatus !== type){
+          this.$set(this,'planStatus',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          deptId :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      getDeptDropList(){
+        getDeptDropList({level: 2, deptType: 1 }).then(response => {
+          this.$set(this,'deptOption',response.data);
+        });
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .inspectReport{
+    .inspectReportPage{
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(3){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 340 - 0
src/views/safetyCheck/inspectSupervisorGroup/addPage.vue

@@ -0,0 +1,340 @@
+<template>
+  <div class="page-container inspectSupervisorGroup-addPage-addPage">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p">{{propsData.showType?'督导组详情':(newData.id?'编辑督导组':'添加督导组')}}</p>
+      <p class="page-top-title-out-p" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" v-if="!propsData.showType" @click="submitForm">提交</p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="add-form-box" :model="newData" ref="form" :rules="rules" label-width="120px">
+        <el-form-item label="是否启用" prop="enable" class="page-switch">
+          <el-switch
+            :disabled="propsData.showType"
+            class="switch captcha-img"
+            :active-value="true"
+            :inactive-value="false"
+            active-color="#0183FA"
+            inactive-color="#999"
+            v-model="newData.enable"
+            active-text="启用"
+            inactive-text="停用"
+          ></el-switch>
+        </el-form-item>
+        <el-form-item label="督导组名称" prop="groupName">
+          <el-input :disabled="propsData.showType" v-model="newData.groupName" placeholder="请输入督导组名称" maxLength="15" style="width:693px;"></el-input>
+        </el-form-item>
+        <el-form-item label="上级部门" prop="deptId">
+          <el-select :disabled="propsData.showType" v-model="newData.deptId"
+                     @change="deptChange" placeholder="请选择上级部门" style="width: 300px">
+            <el-option
+              v-for="dict in deptOptions"
+              :key="dict.deptId"
+              :label="dict.deptName"
+              :value="dict.deptId"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="督导组成员" prop="checkGroupMemberList">
+          <div class="user-list-max-box">
+            <div class="user-list-top-button-box">
+              <img src="@/assets/ZDimages/safetyCheck/icon_xyxc_cy.png">
+              <p>成员列表</p>
+              <p @click="tableButton(1)" v-if="!propsData.showType">+ 添加</p>
+            </div>
+            <el-table class="table-box table-null-img-20" border :data="newData.checkGroupMemberList">
+              <el-table-column label="序号" type="index" width="60"/>
+              <el-table-column label="姓名" prop="userName" show-overflow-tooltip/>
+              <el-table-column label="工号" prop="account" width="130" show-overflow-tooltip/>
+              <el-table-column label="所在部门" prop="deptName" width="188" show-overflow-tooltip/>
+              <el-table-column :label="propsData.showType?'状态':'操作'" width="228" show-overflow-tooltip>
+                <template slot-scope="scope">
+                  <div class="table-button-box" v-if="!propsData.showType&&!scope.row.isAdmin">
+                    <p class="table-button-null"></p>
+                    <p class="table-button-p"
+                       @click="tableButton(2,scope.row)"
+                    >{{scope.row.enable?'启用':'停用'}}</p>
+                    <p class="table-button-p"
+                       @click="tableButton(3,scope.row,scope.$index)"
+                    >删除</p>
+                    <p class="table-button-p"
+                       v-if="!scope.row.isAdmin"
+                       @click="tableButton(6,scope.row)"
+                    >设为负责人</p>
+                    <p class="table-button-null"></p>
+                  </div>
+                  <div class="table-button-box" v-if="!propsData.showType&&scope.row.isAdmin">
+                    <p class="table-button-null"></p>
+                    <p>负责人</p>
+                    <p class="table-button-null"></p>
+                  </div>
+                  <div class="table-button-box" v-if="propsData.showType">
+                    <p class="table-button-null"></p>
+                    <p>{{scope.row.isAdmin?'负责人':(scope.row.enable?'启用':'停用')}}</p>
+                    <p class="table-button-null"></p>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-form-item>
+      </el-form>
+    </div>
+    <userCheckComponent ref="userCheckComponent" v-if="userCheckComponentType"
+                        :userCheckComponentData="userCheckComponentData"></userCheckComponent>
+  </div>
+</template>
+
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  import {
+    securityCheckGroupDetail,
+    securityCheckGroupUpdate,
+    securityCheckGroupAdd,
+  } from "@/api/safetyCheck/indexDemoOne";
+  import {
+    getDeptDropList,
+    systemUserDetail,
+    systemDeptGetLoginUserByDeptList,
+  } from '@/api/commonality/permission'
+  import userCheckComponent from "./userCheckComponent.vue";
+  export default {
+    name: 'addPage',
+    components: {
+      userCheckComponent
+    },
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        //详情模式
+        lookInfoType:false,
+        deptOptions:[],
+        newData:{
+          enable:true,
+          groupName:'',
+          deptId:null,
+          deptName:"",
+          checkGroupMemberList:[],
+        },
+        rules:{
+          enable:[
+            {required: true, message: '请选择是否启用', trigger: 'blur'},
+          ],
+          groupName:[
+            {required: true, message: '请输入督导组名称', trigger: 'blur'},
+            { required: true, message: '请输入督导组名称', validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          deptId:[
+            {required: true, message: '请选择上级部门', trigger: 'blur'},
+          ],
+          checkGroupMemberList:[
+            {required: true, message: '请选择督导组成员', trigger: 'blur'},
+          ],
+        },
+        //人员列表选择
+        userCheckComponentType:false,
+        userCheckComponentData:{},
+        //当前组管理员
+        isAdminUserId:'',
+      }
+    },
+    created(){
+      this.initialize();
+      this.systemDeptGetLoginUserByDeptList()
+    },
+    mounted(){
+
+    },
+    methods:{
+      initialize(){
+        if(this.propsData.showType){
+          this.$set(this,'lookInfoType',true);
+          this.securityCheckGroupDetail();
+        }else{
+          this.$set(this,'lookInfoType',false);
+          if(this.propsData.groupId){
+            //编辑
+            this.securityCheckGroupDetail();
+          }else{
+            //新增
+            this.systemUserDetail();
+          }
+        }
+      },
+      tableButton(type,data,index){
+        let self = this;
+        if(type == 1){
+          //编辑
+          this.$set(this,'userCheckComponentData',JSON.parse(JSON.stringify(self.newData.checkGroupMemberList)));
+          this.$set(this,'userCheckComponentType',true);
+        }else if(type == 2){
+          //启用停用
+          let text = data.enable?'停用':'启用'
+          this.$confirm('是否确认'+text+'?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            data.enable = !data.enable;
+          }).catch(() => {});
+        }else if(type == 3){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            self.newData.checkGroupMemberList.splice(index,1)
+          }).catch(() => {});
+        }else if(type == 4){
+          //人员选择关闭
+          this.$set(this,'userCheckComponentType',false);
+        }else if(type == 5){
+          //人员选择确定
+          data.forEach((item)=>{
+            item.enable = true;
+            item.isAdmin = item.userId == this.isAdminUserId;
+          })
+          this.$set(this.newData,'checkGroupMemberList',JSON.parse(JSON.stringify(data)));
+          this.$set(this,'userCheckComponentType',false);
+        }else if(type = 6){
+          for(let i=0;i<self.newData.checkGroupMemberList.length;i++){
+            if(self.newData.checkGroupMemberList[i].userId == data.userId){
+              self.newData.checkGroupMemberList[i].isAdmin = true;
+              this.$set(this,'isAdminUserId',self.newData.checkGroupMemberList[i].userId);
+            }else{
+              self.newData.checkGroupMemberList[i].isAdmin = false;
+            }
+          }
+        }
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(6);
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if(this.newData.groupId){
+              securityCheckGroupUpdate(this.newData).then(response => {
+                this.msgSuccess(response.message)
+                this.$parent.tableButton(6);
+              });
+            }else{
+              securityCheckGroupAdd(this.newData).then(response => {
+                this.msgSuccess(response.message)
+                this.$parent.tableButton(6);
+              });
+            }
+          }
+        })
+      },
+      //督导组详情
+      securityCheckGroupDetail(){
+        securityCheckGroupDetail({groupId:this.propsData.groupId,userEnable:0}).then(response => {
+          for(let i=0;i<response.data.checkGroupMemberList.length;i++){
+            if (response.data.checkGroupMemberList[i].isAdmin){
+              this.$set(this,'isAdminUserId',response.data.checkGroupMemberList[i].userId);
+            }
+          }
+          this.$set(this,'newData',response.data);
+        });
+      },
+      /** 查询二级单位列表 */
+      systemDeptGetLoginUserByDeptList() {
+        systemDeptGetLoginUserByDeptList({}).then(response => {
+          this.$set(this, 'deptOptions', response.data)
+        })
+      },
+      /** 获取用户详情 */
+      systemUserDetail() {
+        systemUserDetail({ userId: localStorage.getItem('userId') }).then(response => {
+          this.$set(this,'isAdminUserId',response.data.userId);
+          this.newData.checkGroupMemberList.push({
+            account:response.data.account,
+            deptId:response.data.deptId,
+            deptName:response.data.deptName,
+            enable:true,
+            userId:response.data.userId,
+            userName:response.data.userName,
+            userType:response.data.userType,
+            isAdmin:true,
+          })
+        })
+      },
+      //学院选中
+      deptChange(type){
+        let self = this;
+        for(let i=0;i<self.deptOptions.length;i++){
+          if(self.deptOptions[i].deptId == type){
+            self.$set(self.newData,'deptName',self.deptOptions[i].deptName);
+          }
+        }
+        console.log('type',type)
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .inspectSupervisorGroup-addPage-addPage{
+    .content-box{
+      flex:1;
+      display: flex;
+      padding:20px;
+      .user-list-max-box{
+        width:753px;
+        height:400px;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        .user-list-top-button-box{
+          display: flex;
+          border:1px solid #dedede;
+          border-bottom:none;
+          height:50px;
+          img{
+            width:14px;
+            height:14px;
+            display: inline-block;
+            margin:18px 15px 20px;
+          }
+          p:nth-child(2){
+            flex:1;
+            font-size:16px;
+            line-height:50px;
+            color:#333;
+          }
+          p:nth-child(3){
+            margin:10px 20px 10px 0;
+            cursor: pointer;
+            width: 70px;
+            height: 30px;
+            line-height:30px;
+            text-align: center;
+            background: #0045AF;
+            color:#fff;
+            border-radius: 6px 6px 6px 6px;
+          }
+          p:nth-child(3):hover{
+            background: #0183FA;
+          }
+        }
+      }
+    }
+    ::v-deep .el-input.is-disabled .el-input__inner{
+      background-color: #fff;
+      color: #666;
+      cursor: auto;
+    }
+    ::v-deep .el-input.is-disabled .el-input__suffix{
+      display: none;
+    }
+  }
+</style>

+ 264 - 0
src/views/safetyCheck/inspectSupervisorGroup/index.vue

@@ -0,0 +1,264 @@
+<!-- 检查督导组 -->
+<template>
+  <div class="app-container inspectSupervisorGroup">
+    <div class="page-container inspectSupervisorGroupPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="enable">
+            <el-select v-model="queryParams.enable" placeholder="状态" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="上级部门" style="width: 200px">
+              <el-option
+                v-for="dict in deptOptions"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="groupName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.groupName"
+              placeholder="督导组名称"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="userName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.userName"
+              placeholder="成员"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-submit-common-style-button"
+             style="float: right;width:130px"
+             @click="tableButton(1)"
+
+          >创建督导组</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="督导组名称" prop="groupName"  show-overflow-tooltip/>
+          <el-table-column label="上级部门" prop="deptName" width="150" show-overflow-tooltip/>
+          <el-table-column label="成员人数" prop="peopleNum" width="150" show-overflow-tooltip/>
+          <el-table-column label="是否启用" prop="enable" width="185" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <el-switch
+                @click.native="tableButton(5,scope.row)"
+                class="switch captcha-img"
+                :active-value="true"
+                :inactive-value="false"
+                active-color="#0183FA"
+                inactive-color="#999"
+                v-model="scope.row.enable"
+                active-text="启用"
+                inactive-text="停用"
+                disabled
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作人" prop="updateName" width="150" show-overflow-tooltip/>
+          <el-table-column label="创建时间" prop="createTime" width="245" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >查看</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <add-page :propsData="propsData" v-if="pageType === 2"></add-page>
+  </div>
+</template>
+<script>
+  import {
+    securityCheckGroupList,
+    securityCheckGroupEnable,
+    securityCheckGroupDelete,
+  } from "@/api/safetyCheck/indexDemoOne";
+  import {
+    getDeptDropList,
+  } from '@/api/commonality/permission'
+  import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    components: {
+     addPage
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:1,label:'启用'},{value:0,label:'停用'}],
+        deptOptions:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          enable :null,
+          deptId :null,
+          groupName:"",
+          userName:"",
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[{}],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      this.getDeptDropList()
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          enable :null,
+          deptId :null,
+          groupName:"",
+          userName:"",
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        securityCheckGroupList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'propsData',{showType:false});
+          this.$set(this,'pageType',2);
+        }else if(type == 2){
+          //详情
+          let obj = {
+            groupId:row.groupId,
+            showType:true,
+          }
+          this.$set(this,'propsData',obj);
+          this.$set(this,'pageType',2);
+        }else if(type == 3){
+          //编辑
+          let obj = {
+            groupId:row.groupId,
+            showType:false,
+          }
+          this.$set(this,'propsData',obj);
+          this.$set(this,'pageType',2);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.enable  ? "启用" : "停用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            securityCheckGroupEnable({groupId:row.groupId,enable:!row.enable,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /** 查询二级单位列表 */
+      getDeptDropList() {
+        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+          this.$set(this, 'deptOptions', response.data)
+        })
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .inspectSupervisorGroup{
+    .inspectSupervisorGroupPage{
+
+    }
+  }
+</style>

+ 457 - 0
src/views/safetyCheck/inspectSupervisorGroup/userCheckComponent.vue

@@ -0,0 +1,457 @@
+<template>
+  <el-dialog class="userCheckComponent"
+             :close-on-click-modal="false"
+             title="添加成员" :visible.sync="userCheckComponentType" v-if="userCheckComponentType"
+             @close="addDialogAllOff" width="1383px" append-to-body>
+    <div class="userCheckComponent-user-box">
+      <div class="userCheckComponent-user-content-box">
+        <div class="left-max-box">
+          <div class="dept-table-title-box">
+            <p>待选人员</p>
+            <p>{{userNumLeft}}/{{userTotalLeft}}</p>
+          </div>
+          <div class="dept-table-max-box">
+            <el-form :model="userQueryParamsLeft" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+              <el-form-item label="" prop="deptId">
+                <el-select v-model="userQueryParamsLeft.deptId" clearable @change="userHandleQueryLeft" placeholder="选择部门" style="width: 214px">
+                  <el-option
+                    v-for="item in deptSelectList"
+                    :key="item.deptId"
+                    :label="item.deptName"
+                    :value="item.deptId">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="" prop="searchValue" class="form-index" style="margin-right:0;">
+                <el-input
+                  maxLength="30"
+                  v-model="userQueryParamsLeft.searchValue"
+                  placeholder="搜索姓名/工号"
+                  style="width: 300px">
+                  <p class="el-icon-search" slot="append" @click="userHandleQueryLeft"></p>
+                </el-input>
+              </el-form-item>
+              <el-form-item style="margin-right:0;margin-left: 10px;">
+                <p class="page-submit-common-style-button" @click="userResetQueryLeft" style="width:60px;margin-right:0;">重置</p>
+              </el-form-item>
+            </el-form>
+            <el-table class="table-box" ref="leftUserTable" border :data="userTableListLeft" @selection-change="userChangeLeft" :row-key="getRowKeys">
+              <el-table-column type="selection" width="50" :reserve-selection="true" align="center"/>
+              <el-table-column label="姓名" align="center" prop="userName" show-overflow-tooltip/>
+              <el-table-column label="工号" align="center" prop="account" show-overflow-tooltip width="150"/>
+              <el-table-column label="所在部门" align="center" prop="deptName" show-overflow-tooltip width="270"/>
+            </el-table>
+            <pagination :page-sizes="[20, 30, 40, 50]"
+                        v-show="userTotalLeft>0"
+                        :total="userTotalLeft"
+                        :page.sync="userQueryParamsLeft.page"
+                        :limit.sync="userQueryParamsLeft.pageSize"
+                        @pagination="userGetListLeft"/>
+          </div>
+        </div>
+        <div class="center-box">
+          <p class="el-icon-arrow-left" @click="userArrowButton(1)">到左边</p>
+          <p class="el-icon-arrow-right" @click="userArrowButton(2)">到右边</p>
+        </div>
+        <div class="right-max-box">
+          <div class="dept-table-title-box">
+            <p>已选成员</p>
+            <p>{{userNumRight}}/{{userTotalRight}}</p>
+          </div>
+          <div class="dept-table-max-box">
+            <el-form :model="userQueryParamsRight" class="form-box" ref="queryForm" :inline="true" label-width="50px">
+              <el-form-item label="" prop="deptId">
+                <el-select v-model="userQueryParamsRight.deptId" clearable @change="userHandleQueryRight" placeholder="选择部门" style="width: 214px">
+                  <el-option
+                    v-for="item in deptSelectList"
+                    :key="item.deptId"
+                    :label="item.deptName"
+                    :value="item.deptId">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="" prop="searchValue" class="form-index" style="margin-right:0;">
+                <el-input
+                  maxLength="30"
+                  v-model="userQueryParamsRight.searchValue"
+                  placeholder="搜索姓名/工号"
+                  style="width: 300px">
+                  <p class="el-icon-search" slot="append" @click="userHandleQueryRight"></p>
+                </el-input>
+              </el-form-item>
+              <el-form-item style="margin-right:0;margin-left: 10px;">
+                <p class="page-submit-common-style-button" @click="userResetQueryRight" style="width:60px;margin-right:0;">重置</p>
+              </el-form-item>
+            </el-form>
+            <el-table class="table-box" ref="rightUserTable" border :data="userTableListRight" @selection-change="userChangeRight" :row-key="getRowKeys">
+              <el-table-column v-if="editType" type="selection" width="50" :reserve-selection="true" align="center"/>
+              <el-table-column label="姓名" align="center" prop="userName" show-overflow-tooltip/>
+              <el-table-column label="工号" align="center" prop="account" show-overflow-tooltip width="150"/>
+              <el-table-column label="所在部门" align="center" prop="deptName" show-overflow-tooltip width="270"/>
+            </el-table>
+            <pagination :page-sizes="[20, 30, 40, 50]"
+                        v-show="userTotalRight>0"
+                        :total="userTotalRight"
+                        :page.sync="userQueryParamsRight.page"
+                        :limit.sync="userQueryParamsRight.pageSize"
+                        @pagination="userGetListRight"/>
+          </div>
+        </div>
+      </div>
+      <div class="dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="addDialogAllOff">取消</p>
+        <p class="dialog-footer-button-primary" @click="addUserButton">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import { findUserList } from "@/api/safetyCheck/indexDemoOne";
+  import { getDeptDropList } from '@/api/commonality/permission'
+  export default {
+    name: 'userCheckComponent',
+    props:{
+      userCheckComponentData:{},
+    },
+    data(){
+      return{
+        userCheckComponentType:true,
+        checkDataList:[],
+        checkList:[],
+        checkType:false,
+        /*===================================人员选择相关===================================*/
+        deptSelectList:[],
+        userQueryParamsLeft:{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          deptId:"",
+          filtType:1,
+        },
+        userTableListLeft:[],
+        userTotalLeft:0,
+        userNumLeft:0,
+        userIdsLeft:[],
+        userQueryParamsRight:{
+          page:1,
+          pageSize:20,
+          deptId:"",
+          searchValue:"",
+          filtType:2,
+        },
+        userTableListRight:[],
+        userTotalRight:0,
+        userNumRight:0,
+        userIdsRight:[],
+        //选中巡查人员列表
+        dialogTableList:[],
+        //选中页面人员列表数据
+        dialogTableDataList:[],
+        //选中的人员数据
+        selectedUserIds:[],
+      }
+    },
+    created(){
+      this.initialize();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //初始化
+      initialize() {
+        this.$set(this,'selectedUserIds',this.userCheckComponentData);
+        this.listDepartments();
+        this.userResetQueryLeft();
+        this.userResetQueryRight();
+      },
+      //选择器
+      checkboxChange(val){
+        if(val[0]){
+          let num = 0;
+          for(let i=0;i<val.length;i++){
+            if(val[i] == '4'){
+              num++
+            }
+          }
+          this.$set(this,'checkType',num != 0?true:false);
+        }else{
+          this.$set(this,'checkType',false);
+        }
+      },
+      //窗口关闭
+      addDialogAllOff(){
+        this.$parent.tableButton(4)
+      },
+      addUserButton(){
+        if(!this.selectedUserIds[0]){
+          this.msgError('请勾选人员')
+          return
+        }
+        this.$parent.tableButton(5,this.selectedUserIds)
+      },
+      /*===================================人员选择相关===================================*/
+      //查询
+      userHandleQueryLeft(){
+        this.$set(this.userQueryParamsLeft,'page',1);
+        this.$set(this,'userNumLeft',0);
+        this.$set(this,'userIdsLeft',[]);
+        if (this.$refs.leftUserTable){
+          this.$refs.leftUserTable.clearSelection();
+        }
+        this.userGetListLeft();
+      },
+      //重置
+      userResetQueryLeft(){
+        this.$set(this,'userQueryParamsLeft',{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          deptId:"",
+          filtType:1
+        });
+        this.userHandleQueryLeft();
+      },
+      //查询接口
+      userGetListLeft(){
+        let self = this;
+        let leftObj = JSON.parse(JSON.stringify(this.userQueryParamsLeft));
+        leftObj.selectedUserIds = [];
+        for(let i=0;i<self.selectedUserIds.length;i++){
+          leftObj.selectedUserIds.push(self.selectedUserIds[i].userId);
+        }
+        findUserList(leftObj).then(response => {
+          this.userTotalLeft = response.data.total;
+          this.userTableListLeft = response.data.records;
+        });
+      },
+      //查询
+      userHandleQueryRight(){
+        this.$set(this.userQueryParamsRight,'page',1);
+        this.$set(this,'userNumRight',0);
+        this.$set(this,'userIdsRight',[]);
+        if(this.$refs.rightUserTable){
+          this.$refs.rightUserTable.clearSelection();
+        }
+        this.userGetListRight();
+      },
+      //重置
+      userResetQueryRight(){
+        this.$set(this,'userQueryParamsRight',{
+          page:1,
+          pageSize:20,
+          deptId:"",
+          searchValue:"",
+          filtType:2
+        });
+        this.userHandleQueryRight();
+      },
+      //查询接口
+      userGetListRight(){
+        let self = this;
+        let rightObj = JSON.parse(JSON.stringify(this.userQueryParamsRight));
+        rightObj.userIds = [];
+        for(let i=0;i<self.selectedUserIds.length;i++){
+          rightObj.userIds.push(self.selectedUserIds[i].userId);
+        }
+        findUserList(rightObj).then(response => {
+          this.userTotalRight = response.data.total;
+          this.userTableListRight = response.data.records;
+        });
+      },
+      //穿梭按钮
+      userArrowButton(type){
+        let self = this;
+        if(type == 1){
+          //右至左
+          if(self.$refs.rightUserTable.selection[0]){
+            for(let i=0;i<self.$refs.rightUserTable.selection.length;i++){
+              for(let o=0;o<self.selectedUserIds.length;o++){
+                if(self.$refs.rightUserTable.selection[i].userId == self.selectedUserIds[o].userId){
+                  self.selectedUserIds.splice(o,1);
+                }
+              }
+            }
+            self.$refs.rightUserTable.clearSelection();
+            self.userHandleQueryLeft();
+            self.userHandleQueryRight();
+          }else{
+            self.msgError('请先勾选右侧列表')
+          }
+        }else if(type == 2){
+          //左至右
+          if(self.$refs.leftUserTable.selection[0]){
+            for(let i=0;i<self.$refs.leftUserTable.selection.length;i++){
+              self.selectedUserIds.push({
+                userId: self.$refs.leftUserTable.selection[i].userId,
+                userType: self.$refs.leftUserTable.selection[i].userType,
+                account: self.$refs.leftUserTable.selection[i].account,
+                userName: self.$refs.leftUserTable.selection[i].userName,
+                deptId: self.$refs.leftUserTable.selection[i].deptId,
+                deptName: self.$refs.leftUserTable.selection[i].deptName,
+              })
+            }
+            self.$refs.leftUserTable.clearSelection();
+            self.userHandleQueryLeft();
+            self.userHandleQueryRight();
+          }else{
+            self.msgError('请先勾选左侧列表')
+          }
+        }
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.id
+      },
+      userChangeLeft(selection){
+        this.userNumLeft = selection.length;
+        this.userIdsLeft = selection.map(item => item.userId);
+      },
+      userChangeRight(selection){
+        this.userNumRight = selection.length;
+        this.userIdsRight = selection.map(item => item.userId);
+      },
+      //获取学院列表
+      listDepartments(){
+        getDeptDropList({deptName:"",level:2,deptType:1}).then(response => {
+          this.$set(this, 'deptSelectList', response.data)
+        });
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .userCheckComponent{
+    overflow: hidden;
+    .userCheckComponent-user-box{
+      height:600px;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .userCheckComponent-user-content-box{
+        flex:1;
+        display: flex;
+        overflow: hidden;
+        .dept-table-title-box{
+          display: flex;
+          padding:0 20px;
+          background: rgba(1,131,250,0.1);
+          p{
+            flex:1;
+            color:#0183FA;
+            font-size:16px;
+            line-height:40px;
+          }
+          p:nth-child(1){
+            text-align: left;
+          }
+          p:nth-child(2){
+            text-align: right;
+          }
+        }
+        .dept-table-max-box{
+          border: 1px solid #e0e0e0;
+          flex:1;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          padding:20px;
+          .form-index{
+            .el-input__inner{
+              border-right:none;
+              padding-right:0;
+            }
+            .el-input-group__append{
+              background: #fff;
+              cursor: pointer;
+              padding:0 10px;
+            }
+          }
+          input{
+            border: 1px solid #DCDFE6;
+          }
+        }
+        .left-max-box{
+          height:550px;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          width:639px;
+        }
+        .right-max-box{
+          height:550px;
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          width:639px;
+        }
+        .center-box{
+          width:70px;
+          p{
+            display: block;
+            width:60px;
+            height:30px;
+            line-height:30px;
+            text-align: center;
+            background: #fff;
+            color:#0183FA;
+            border-radius:4px;
+            border:1px solid #0183FA;
+            cursor: pointer;
+            font-size:12px;
+          }
+          p:nth-child(1){
+            margin:270px 5px 0;
+          }
+          p:nth-child(2){
+            margin:14px 5px 0;
+          }
+          p:hover{
+            background: #0183FA;
+            color:#fff;
+            border:1px solid #0183FA;
+          }
+        }
+        ::v-deep .el-range-editor--small .el-range__icon{
+          display: none;
+        }
+        ::v-deep .el-range-editor--small .el-range__close-icon{
+          display: none;
+        }
+        ::v-deep .el-date-editor .el-range-input{
+          width:45%;
+        }
+        ::v-deep .el-range-editor--small .el-range-separator{
+          line-height:30px;
+        }
+        ::v-deep .el-input-group__append, .el-input-group__prepend{
+          background-color: #fff;
+        }
+        .form-index{
+          ::v-deep .el-input--medium .el-input__inner{
+            border:1px solid #DCDFE6;
+            border-right:none;
+            padding-right:0;
+          }
+          ::v-deep .el-input-group__append{
+            padding:0 10px;
+            cursor: pointer;
+          }
+        }
+      }
+      .dialog-footer-box{
+        display: flex;
+      }
+    }
+    ::v-deep .el-dialog__body{
+      padding: 30px 20px!important;
+    }
+  }
+</style>

+ 471 - 0
src/views/safetyCheck/safetyHazard/inspectHazard/index.vue

@@ -0,0 +1,471 @@
+<!-- 检查隐患 -->
+<template>
+  <div class="app-container inspectHazard">
+    <div class="page-container inspectHazardPage" v-if="pageType === 1">
+      <div class="top-table-button-box">
+        <div :class="rectifyStatus === null ? 'tableCheck':''" @click="tableCheck(null)">
+          <p>全部</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 2 ? 'tableCheck':''" @click="tableCheck(2)">
+          <p>待整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 1 ? 'tableCheck':''" @click="tableCheck(1)">
+          <p>已整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 4 ? 'tableCheck':''" @click="tableCheck(4)">
+          <p>暂无法整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 5 ? 'tableCheck':''" @click="tableCheck(5)">
+          <p>多次整改未完成</p>
+          <p></p>
+        </div>
+      </div>
+      <div class="page-form-title-box" style="border:none;" :class="advancedType?'page-advanced-form-title-box':''">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="planTitle">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.planTitle"
+              placeholder="计划标题"
+              style="width: 150px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="hazardCheckPro">
+            <el-cascader
+              style="width: 150px"
+              placeholder="检查指标"
+              v-model="queryParams.hazardCheckPro"
+              filterable
+              :show-all-levels="false"
+              :options="cascaderData"
+              :props="{ value: 'id', label: 'labelName',emitPath:false }"
+            ></el-cascader>
+          </el-form-item>
+          <el-form-item label="" prop="hazardCheckName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.hazardCheckName"
+              placeholder="模糊搜索检查指标项"
+              style="width: 160px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 170px">
+              <el-option
+                v-for="dict in deptOption"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="levelId">
+            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 160px">
+              <el-option
+                v-for="dict in levelOption"
+                :key="dict.levelId"
+                :label="dict.levelName"
+                :value="dict.levelId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="实验室/房间号"
+              style="width: 140px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="rectifyName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.rectifyName"
+              placeholder="整改人"
+              style="width: 140px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 230px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+        </el-form>
+      </div>
+      <div class="page-content-box" style="padding-top:0;">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="planTitle" width="250" show-overflow-tooltip/>
+          <el-table-column label="检查类型" prop="checkTypeName" width="100" show-overflow-tooltip/>
+          <el-table-column label="不符合项" prop="hazardCheckName" width="250" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.hazardCheckName}} {{scope.row.hazardCheckName}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="实验室" prop="subName" width="220" show-overflow-tooltip/>
+          <el-table-column label="整改期限" prop="rectifyDeadline" width="130" show-overflow-tooltip/>
+          <el-table-column label="整改状态" prop="rectifyStatus" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.rectifyStatus == 1?'已完成':(scope.row.rectifyStatus == 2?'待整改':(scope.row.rectifyStatus == 3?'待复核':(scope.row.rectifyStatus == 4?'暂无法整改':'')))}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="整改人" prop="rectifyName" width="100" show-overflow-tooltip/>
+          <el-table-column label="整改时间" prop="rectifyTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.rectifyTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="复查结果" prop="reviewStatus" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ scope.row.reviewStatus ==1 ?'已复查':(scope.row.reviewStatus ==0 ?'未复查':'') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="100" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >详情/整改</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+    laboratoryClassLevelGetList,
+  } from '@/api/commonality/permission'
+  import {
+    securityCheckOptionList,
+    securityCheckDangerList,
+  } from "@/api/safetyCheck/indexDemoOne";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //选项卡状态
+        rectifyStatus:null,
+        //页面遮罩
+        loading:false,
+        //学院列表
+        deptOption:[],
+        //分级下拉列表
+        levelOption:[],
+        //检查项下拉列表
+        cascaderData:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          checkCategory:1,
+          planTitle:"",
+          hazardCheckPro :null,
+          hazardCheckName :"",
+          deptId :null,
+          levelId :null,
+          searchValue :"",
+        },
+        //时间数据
+        dateRange:[],
+        advancedType:false,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      this.getDeptDropList();
+      this.laboratoryClassLevelGetList();
+      this.securityCheckOptionList();
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //选项卡切换
+      tableCheck(type){
+        if (this.rectifyStatus !== type){
+          this.$set(this,'rectifyStatus',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          checkCategory:1,
+          planTitle:"",
+          hazardCheckPro :null,
+          hazardCheckName :"",
+          deptId :null,
+          levelId :null,
+          searchValue :"",
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        obj.rectifyStatus = this.rectifyStatus;
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        securityCheckDangerList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      //学院列表
+      getDeptDropList() {
+        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+          this.$set(this, 'deptOption', response.data)
+        })
+      },
+      //分级下拉列表
+      laboratoryClassLevelGetList(){
+        laboratoryClassLevelGetList({}).then(response => {
+          this.$set(this,'levelOption',response.data);
+        });
+      },
+      //检查项列表
+      securityCheckOptionList() {
+        securityCheckOptionList({}).then(response => {
+          let list = this.getCascaderData(JSON.parse(JSON.stringify(response.data)),3)
+          this.$nextTick(()=>{
+            this.$set(this, 'cascaderData', list)
+          })
+        })
+      },
+      //检查项格式处理
+      getCascaderData(list,type) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        return list
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .inspectHazard{
+    .inspectHazardPage{
+      .top-table-button-box{
+        display: flex;
+        padding:0 40px;
+        border-bottom: 1px solid #dedede;
+        div{
+          cursor: pointer;
+          padding:20px 0 20px 0;
+          margin-right:30px;
+          p:nth-child(1){
+            font-size:16px;
+            color:#333;
+            padding:0 15px;
+            line-height:36px;
+            height:36px;
+          }
+          p:nth-child(2){
+            height:4px;
+            border-radius:4px;
+          }
+        }
+        .tableCheck{
+          p:nth-child(1){
+            color:#0045AF;
+          }
+          p:nth-child(2){
+            background-color: #0045AF;
+          }
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 426 - 0
src/views/safetyCheck/safetyHazard/rectificationNotice/index.vue

@@ -0,0 +1,426 @@
+<!-- 整改通知 -->
+<template>
+  <div class="app-container rectificationNotice">
+    <div class="page-container rectificationNoticePage" v-if="pageType === 1">
+      <div class="page-form-title-box" :class="advancedType?'page-advanced-form-title-box':''">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-school-college-toggle-box" v-if="schoolStanding">
+            <p :class="schoolCollegeType==1?'p-check':''" @click="schoolCollegeToggle(1)">校级检查</p>
+            <p :class="schoolCollegeType==2?'p-check':''" @click="schoolCollegeToggle(2)">学院自查</p>
+          </div>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="状态" :style="schoolStanding?'width:175px':'width:175px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="学院单位" :style="schoolStanding?'width:180px':'width:175px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分类" :style="schoolStanding?'width:180px':'width:175px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分级" :style="schoolStanding?'width:180px':'width:175px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="实验室/房间号"
+              :style="schoolStanding?'width:185px':'width:175px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="实验室负责人"
+              :style="schoolStanding?'width:185px':'width:170px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="计划标题"
+              :style="schoolStanding?'width:185px':'width:175px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state" v-if="advancedType">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 250px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <!--与我相关-->
+          <div class="form-button-max-big-box-me">
+            <div class="form-button-big-box-me">
+              <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                <p class="text-p-me">与我相关</p>
+                <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+              </div>
+            </div>
+          </div>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+          <p class="page-submit-common-style-button"
+             :style="advancedType?'float: right;display: inline-block;margin-right:10px;':'float: right;display: inline-block;'"
+             @click="allDownload">批量下载</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList" ref="multipleTable" @selection-change="handleSelectionChange"  :row-key="getRowKeys">
+          <el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>
+          <el-table-column label="通知书编号" prop="name" width="150"  show-overflow-tooltip/>
+          <el-table-column label="计划标题" prop="name" width="280"  show-overflow-tooltip/>
+          <el-table-column label="检查名称" prop="content" width="150" show-overflow-tooltip/>
+          <el-table-column label="学院单位" prop="content" width="150" show-overflow-tooltip/>
+          <el-table-column label="实验室" prop="content" width="220" show-overflow-tooltip/>
+          <el-table-column label="负责人" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="下发时间" prop="createTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="整改期限" prop="createTime" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >查看</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >下载</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >整改情况</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <list-page :propsData="propsData" v-if="pageType === 2"></list-page>
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  import listPage from "./listPage.vue";
+  export default {
+    name: 'index',
+    components: {
+     listPage
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:2,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //搜索模式切换
+        advancedType:false,
+        //校级身份
+        schoolStanding:true,
+        //校院级状态
+        schoolCollegeType:1,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        selectedNum:0,
+        ids:[],
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //检查/自查切换
+      schoolCollegeToggle(type){
+        if(this.schoolCollegeType !== type){
+          this.$set(this,'schoolCollegeType',type);
+        }
+      },
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.id
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.selectedNum = selection.length;
+        this.ids = selection.map(item => item.id)
+      },
+      // 批量下载
+      allDownload(){
+        let self = this;
+        if(!this.ids[0]){
+          this.msgError('请先勾选数据')
+          return
+        }
+        this.$confirm('是否批量下载?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          let text = self.ids+'';
+          self.downloadGet('/zd-security/checkRectify/genReport/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '批量报告下载.zip')
+        }).then(() => {
+        }).catch(() => {});
+      },
+      // 单个下载按钮
+      downloadButton(row){
+        this.downloadGet('/zd-security/checkRectify/genReport?id='+row.id+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), row.title+'(整改报告).docx')
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .rectificationNotice{
+    .rectificationNoticePage{
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:100px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          border-right:none;
+        }
+        p:nth-child(2){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          border-left:none;
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 386 - 0
src/views/safetyCheck/safetyHazard/rectificationNotice/listPage.vue

@@ -0,0 +1,386 @@
+<!--整改情况-->
+<template>
+  <div class="page-container rectificationNotice-listPage">
+    <div class="page-container checkItem">
+      <div class="page-top-title-box">
+        <p class="page-top-title-name-p">整改情况</p>
+        <p class="page-top-title-out-p" @click="backPage">返回</p>
+      </div>
+      <div class="content-box scrollbar-box">
+        <div class="page-form-title-box" style="border:none;" :class="advancedType?'page-advanced-form-title-box':''">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="检查状态" style="width: 180px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="检查类型" style="width: 180px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="一级指标" style="width: 180px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="学院单位" style="width: 180px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData2">
+              <el-select v-model="queryParams.queryParamsData2" placeholder="楼栋" style="width: 180px">
+                <el-option
+                  v-for="dict in optionList"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.queryParamsData1"
+                placeholder="实验室/房间号"
+                style="width: 190px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.queryParamsData1"
+                placeholder="计划标题"
+                style="width: 190px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.queryParamsData1"
+                placeholder="整改人"
+                style="width: 190px"
+              />
+            </el-form-item>
+            <el-form-item label="" prop="state" v-if="advancedType">
+              <el-date-picker
+                :clearable="false"
+                v-model="dateRange"
+                size="small"
+                style="width: 330px"
+                value-format="yyyy-MM-dd"
+                type="daterange"
+                range-separator="-"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+              ></el-date-picker>
+            </el-form-item>
+            <!--与我相关-->
+            <div class="form-button-max-big-box-me">
+              <div class="form-button-big-box-me">
+                <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                  <p class="text-p-me">与我相关</p>
+                  <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+                </div>
+              </div>
+            </div>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+          </el-form>
+        </div>
+        <div class="page-content-box" style="padding-top:0;">
+          <el-table class="table-box" v-loading="loading" border :data="dataList">
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="计划标题" prop="name"  show-overflow-tooltip/>
+            <el-table-column label="不符合项" prop="content" width="260" show-overflow-tooltip/>
+            <el-table-column label="实验室" prop="content" width="200" show-overflow-tooltip/>
+            <el-table-column label="整改期限" prop="createTime" width="130" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="整改状态" prop="content" width="100" show-overflow-tooltip/>
+            <el-table-column label="整改人" prop="content" width="100" show-overflow-tooltip/>
+            <el-table-column label="整改时间" prop="createTime" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="复查结果" prop="content" width="100" show-overflow-tooltip/>
+            <el-table-column label="操作" width="100" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >整改</p>
+                  <p class="table-button-p"
+                     @click="tableButton(2,scope.row)"
+
+                  >详情</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  export default {
+    name: 'listPage',
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        advancedType:false,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+
+    },
+    methods:{
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(6);
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .rectificationNotice-listPage{
+    .content-box{
+      flex:1;
+      display: flex;
+      flex-direction: column;
+      overflow: hidden;
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 406 - 0
src/views/safetyCheck/safetyHazard/rectificationReport/index.vue

@@ -0,0 +1,406 @@
+<!-- 整改报告 -->
+<template>
+  <div class="app-container rectificationReport">
+    <div class="page-container rectificationReportPage" v-if="pageType === 1">
+      <div class="page-form-title-box" :class="advancedType?'page-advanced-form-title-box':''">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <div class="table-school-college-toggle-box" v-if="schoolStanding">
+            <p :class="schoolCollegeType==1?'p-check':''" @click="schoolCollegeToggle(1)">校级检查</p>
+            <p :class="schoolCollegeType==2?'p-check':''" @click="schoolCollegeToggle(2)">学院自查</p>
+          </div>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="学院单位" :style="schoolStanding?'width:170px':'width:205px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分类" :style="schoolStanding?'width:170px':'width:205px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="安全分级" :style="schoolStanding?'width:170px':'width:205px'">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="实验室/房间号"
+              :style="schoolStanding?'width:170px':'width:205px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="实验室负责人"
+              :style="schoolStanding?'width:170px':'width:205px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData1" v-if="advancedType">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="计划标题"
+              :style="schoolStanding?'width:170px':'width:205px'"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state" v-if="advancedType">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 250px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <!--与我相关-->
+          <div class="form-button-max-big-box-me">
+            <div class="form-button-big-box-me">
+              <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                <p class="text-p-me">与我相关</p>
+                <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+              </div>
+            </div>
+          </div>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+          <p class="page-submit-common-style-button"
+             :style="advancedType?'float: right;display: inline-block;margin-right:10px;':'float: right;display: inline-block;'"
+             @click="allDownload">批量下载</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList" ref="multipleTable" @selection-change="handleSelectionChange"  :row-key="getRowKeys">
+          <el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>
+          <el-table-column label="通知书编号" prop="name" width="150"  show-overflow-tooltip/>
+          <el-table-column label="计划标题" prop="name" width="280"  show-overflow-tooltip/>
+          <el-table-column label="检查名称" prop="content" width="150" show-overflow-tooltip/>
+          <el-table-column label="学院单位" prop="content" width="230" show-overflow-tooltip/>
+          <el-table-column label="实验室" prop="content" width="220" show-overflow-tooltip/>
+          <el-table-column label="负责人" prop="content" width="100" show-overflow-tooltip/>
+          <el-table-column label="完成时间" prop="createTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >查看</p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+
+                >下载</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+
+                >整改情况</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //时间数据
+        dateRange:[],
+        //搜索模式切换
+        advancedType:false,
+        //校级身份
+        schoolStanding:true,
+        //校院级状态
+        schoolCollegeType:1,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        selectedNum:0,
+        ids:[],
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //检查/自查切换
+      schoolCollegeToggle(type){
+        if(this.schoolCollegeType !== type){
+          this.$set(this,'schoolCollegeType',type);
+        }
+      },
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /*===记录勾选数据===
+        需要再el-table 添加  :row-key="getRowKeys"
+        需要在selection 添加 :reserve-selection="true"
+      */
+      getRowKeys(row) {
+        return row.id
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.selectedNum = selection.length;
+        this.ids = selection.map(item => item.id)
+      },
+      // 批量下载
+      allDownload(){
+        let self = this;
+        if(!this.ids[0]){
+          this.msgError('请先勾选数据')
+          return
+        }
+        this.$confirm('是否批量下载?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          let text = self.ids+'';
+          self.downloadGet('/zd-security/checkRectify/genReport/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '批量报告下载.zip')
+        }).then(() => {
+        }).catch(() => {});
+      },
+      // 单个下载按钮
+      downloadButton(row){
+        this.downloadGet('/zd-security/checkRectify/genReport?id='+row.id+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), row.title+'(整改报告).docx')
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .rectificationReport{
+    .rectificationReportPage{
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:100px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          border-right:none;
+        }
+        p:nth-child(2){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          border-left:none;
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+    }
+  }
+</style>

+ 471 - 0
src/views/safetyCheck/safetyHazard/selfInspectionHazard/index.vue

@@ -0,0 +1,471 @@
+<!-- 自查隐患 -->
+<template>
+  <div class="app-container selfInspectionHazard">
+    <div class="page-container selfInspectionHazardPage" v-if="pageType === 1">
+      <div class="top-table-button-box">
+        <div :class="rectifyStatus === null ? 'tableCheck':''" @click="tableCheck(null)">
+          <p>全部</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 2 ? 'tableCheck':''" @click="tableCheck(2)">
+          <p>待整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 1 ? 'tableCheck':''" @click="tableCheck(1)">
+          <p>已整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 4 ? 'tableCheck':''" @click="tableCheck(4)">
+          <p>暂无法整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 5 ? 'tableCheck':''" @click="tableCheck(5)">
+          <p>多次整改未完成</p>
+          <p></p>
+        </div>
+      </div>
+      <div class="page-form-title-box" style="border:none;" :class="advancedType?'page-advanced-form-title-box':''">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="planTitle">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.planTitle"
+              placeholder="计划标题"
+              style="width: 150px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="hazardCheckPro">
+            <el-cascader
+              style="width: 150px"
+              placeholder="检查指标"
+              v-model="queryParams.hazardCheckPro"
+              filterable
+              :show-all-levels="false"
+              :options="cascaderData"
+              :props="{ value: 'id', label: 'labelName',emitPath:false }"
+            ></el-cascader>
+          </el-form-item>
+          <el-form-item label="" prop="hazardCheckName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.hazardCheckName"
+              placeholder="模糊搜索检查指标项"
+              style="width: 160px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 170px">
+              <el-option
+                v-for="dict in deptOption"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="levelId">
+            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 160px">
+              <el-option
+                v-for="dict in levelOption"
+                :key="dict.levelId"
+                :label="dict.levelName"
+                :value="dict.levelId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="实验室/房间号"
+              style="width: 140px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="rectifyName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.rectifyName"
+              placeholder="整改人"
+              style="width: 140px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 230px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+        </el-form>
+      </div>
+      <div class="page-content-box" style="padding-top:0;">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="计划标题" prop="planTitle" width="250" show-overflow-tooltip/>
+          <el-table-column label="检查类型" prop="checkTypeName" width="100" show-overflow-tooltip/>
+          <el-table-column label="不符合项" prop="hazardCheckName" width="250" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.hazardCheckName}} {{scope.row.hazardCheckName}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="实验室" prop="subName" width="220" show-overflow-tooltip/>
+          <el-table-column label="整改期限" prop="rectifyDeadline" width="130" show-overflow-tooltip/>
+          <el-table-column label="整改状态" prop="rectifyStatus" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.rectifyStatus == 1?'已完成':(scope.row.rectifyStatus == 2?'待整改':(scope.row.rectifyStatus == 3?'待复核':(scope.row.rectifyStatus == 4?'暂无法整改':'')))}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="整改人" prop="rectifyName" width="100" show-overflow-tooltip/>
+          <el-table-column label="整改时间" prop="rectifyTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.rectifyTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="复查结果" prop="reviewStatus" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ scope.row.reviewStatus ==1 ?'已复查':(scope.row.reviewStatus ==0 ?'未复查':'') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="100" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+
+                >详情/整改</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+    laboratoryClassLevelGetList,
+  } from '@/api/commonality/permission'
+  import {
+    securityCheckOptionList,
+    securityCheckDangerList,
+  } from "@/api/safetyCheck/indexDemoOne";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //选项卡状态
+        rectifyStatus:null,
+        //页面遮罩
+        loading:false,
+        //学院列表
+        deptOption:[],
+        //分级下拉列表
+        levelOption:[],
+        //检查项下拉列表
+        cascaderData:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          checkCategory:2,
+          planTitle:"",
+          hazardCheckPro :null,
+          hazardCheckName :"",
+          deptId :null,
+          levelId :null,
+          searchValue :"",
+        },
+        //时间数据
+        dateRange:[],
+        advancedType:false,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+      this.getDeptDropList();
+      this.laboratoryClassLevelGetList();
+      this.securityCheckOptionList();
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //选项卡切换
+      tableCheck(type){
+        if (this.rectifyStatus !== type){
+          this.$set(this,'rectifyStatus',type);
+          this.resetQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          checkCategory:2,
+          planTitle:"",
+          hazardCheckPro :null,
+          hazardCheckName :"",
+          deptId :null,
+          levelId :null,
+          searchValue :"",
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        obj.rectifyStatus = this.rectifyStatus;
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        securityCheckDangerList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //新增
+          this.$set(this,'pageType',2);
+          this.$set(this,'propsData',{});
+        }else if(type == 2){
+          //详情
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 3){
+          //编辑
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = false;
+          this.$set(this,'propsData',obj);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      //学院列表
+      getDeptDropList() {
+        getDeptDropList({ deptName: '', level: 2, deptType: 1 }).then(response => {
+          this.$set(this, 'deptOption', response.data)
+        })
+      },
+      //分级下拉列表
+      laboratoryClassLevelGetList(){
+        laboratoryClassLevelGetList({}).then(response => {
+          this.$set(this,'levelOption',response.data);
+        });
+      },
+      //检查项列表
+      securityCheckOptionList() {
+        securityCheckOptionList({}).then(response => {
+          let list = this.getCascaderData(JSON.parse(JSON.stringify(response.data)),3)
+          this.$nextTick(()=>{
+            this.$set(this, 'cascaderData', list)
+          })
+        })
+      },
+      //检查项格式处理
+      getCascaderData(list,type) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        for (let i = 0; i < list.length; i++) {
+          list[i].labelName = list[i].code ? list[i].code + ' ' + list[i].name : list[i].name
+          if(list[i].level == type){
+            delete list[i].children
+          }else if (list[i].children) {
+            if (list[i].children[0]) {
+              list[i].children = self.getCascaderData(list[i].children,type)
+            } else {
+              list.splice(i, 1)
+              i--
+            }
+          } else {
+            list.splice(i, 1)
+            i--
+          }
+        }
+        return list
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .selfInspectionHazard{
+    .selfInspectionHazardPage{
+      .top-table-button-box{
+        display: flex;
+        padding:0 40px;
+        border-bottom: 1px solid #dedede;
+        div{
+          cursor: pointer;
+          padding:20px 0 20px 0;
+          margin-right:30px;
+          p:nth-child(1){
+            font-size:16px;
+            color:#333;
+            padding:0 15px;
+            line-height:36px;
+            height:36px;
+          }
+          p:nth-child(2){
+            height:4px;
+            border-radius:4px;
+          }
+        }
+        .tableCheck{
+          p:nth-child(1){
+            color:#0045AF;
+          }
+          p:nth-child(2){
+            background-color: #0045AF;
+          }
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 419 - 0
src/views/safetyCheck/safetyHazard/snapshotHazard/index.vue

@@ -0,0 +1,419 @@
+<!-- 随手拍隐患 -->
+<template>
+  <div class="app-container snapshotHazard">
+    <div class="page-container snapshotHazardPage" v-if="pageType === 1">
+      <div class="top-table-button-box">
+        <div :class="rectifyStatus === null ? 'tableCheck':''" @click="tableCheck(null)">
+          <p>全部</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 0 ? 'tableCheck':''" @click="tableCheck(0)">
+          <p>待整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 1 ? 'tableCheck':''" @click="tableCheck(1)">
+          <p>已整改</p>
+          <p></p>
+        </div>
+        <div :class="rectifyStatus === 2 ? 'tableCheck':''" @click="tableCheck(2)">
+          <p>暂无法整改</p>
+          <p></p>
+        </div>
+      </div>
+      <div class="page-form-title-box" style="border:none;">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="deptId">
+            <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width: 150px">
+              <el-option
+                v-for="dict in deptOption"
+                :key="dict.deptId"
+                :label="dict.deptName"
+                :value="dict.deptId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="buildId">
+            <el-select v-model="queryParams.buildId" placeholder="楼栋" style="width: 150px">
+              <el-option
+                v-for="dict in buildOption"
+                :key="dict.id"
+                :label="dict.name"
+                :value="dict.id"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="typeId">
+            <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width: 150px">
+              <el-option
+                v-for="dict in classOption"
+                :key="dict.typeId"
+                :label="dict.typeName"
+                :value="dict.typeId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="levelId">
+            <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width: 150px">
+              <el-option
+                v-for="dict in levelOption"
+                :key="dict.levelId"
+                :label="dict.levelName"
+                :value="dict.levelId"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="实验室/房间号"
+              style="width: 150px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="rectifyUserName">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.rectifyUserName"
+              placeholder="整改人"
+              style="width: 150px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="state">
+            <el-date-picker
+              :clearable="false"
+              v-model="dateRange"
+              size="small"
+              style="width: 240px"
+              value-format="yyyy-MM-dd"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+            ></el-date-picker>
+          </el-form-item>
+          <!--与我相关-->
+          <div class="form-button-max-big-box-me">
+            <div class="form-button-big-box-me">
+              <div :class="queryParams.myRelated==1?'checkDiv-me':''" @click="topRightClickType">
+                <p class="text-p-me">与我相关</p>
+                <p class="el-icon-check icon-p-me" v-if="queryParams.myRelated==1"></p>
+              </div>
+            </div>
+          </div>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+        </el-form>
+      </div>
+      <div class="page-content-box" style="padding-top:0;">
+        <el-table class="table-box" ref="tableBox" v-loading="loading" border :data="dataList" @sort-change="sortChange">
+          <el-table-column label="序号" type="index" width="60"/>
+          <el-table-column label="实验室" prop="subName" width="220" show-overflow-tooltip/>
+          <el-table-column label="学院单位" prop="deptName" width="150" show-overflow-tooltip/>
+          <el-table-column label="实验室负责人" prop="adminName" width="130" show-overflow-tooltip/>
+          <el-table-column label="上报人" prop="createName" width="100" show-overflow-tooltip/>
+          <el-table-column label="上报时间" sortable="custom" prop="createTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="隐患描述" prop="hazardDescribe" width="350" show-overflow-tooltip/>
+          <el-table-column label="整改状态" prop="rectifyStatus" width="130" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.rectifyStatus == 1?'已完成':(scope.row.rectifyStatus == 2?'暂无法整改':'待整改')}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="整改人" prop="rectifyUserName" width="100" show-overflow-tooltip/>
+          <el-table-column label="处理时间" sortable="custom" prop="rectifyTime" width="150" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.rectifyTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="120" show-overflow-tooltip >
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(1,scope.row)"
+
+                >详情</p>
+                <p class="table-button-p"
+                   v-if="scope.row.canRectify && scope.row.rectifyStatus == 0"
+                   @click="tableButton(2,scope.row)"
+
+                >整改</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <snapshotInfo :propsData="propsData" v-if="pageType === 2"></snapshotInfo>
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+    systemBuildingGetOptList,
+    laboratoryClassLevelGetList,
+    laboratoryClassTypeGetList,
+  } from '@/api/commonality/permission'
+  import { securityCheckPhotoList } from "@/api/safetyCheck/indexDemoOne";
+  import snapshotInfo from "@/views/safetyCheck/components/snapshotInfo.vue";
+  export default {
+    name: 'index',
+    components: {
+      snapshotInfo
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //选项卡状态
+        rectifyStatus:null,
+        //页面遮罩
+        loading:false,
+        //学院
+        deptOption:[],
+        //楼栋
+        buildOption:[],
+        //分级
+        levelOption:[],
+        //分类
+        classOption:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          deptId:null,
+          buildId:null,
+          typeId :null,
+          levelId :null,
+          searchValue:'',
+          rectifyUserName:'',
+          upTimeOrder:'',
+          rectifyTimeOrder:'',
+        },
+        //时间数据
+        dateRange:[],
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      this.getList();
+      this.getDeptDropList();
+      this.systemBuildingGetOptList();
+      this.laboratoryClassLevelGetList();
+      this.laboratoryClassTypeGetList();
+    },
+    methods: {
+      //选项卡切换
+      tableCheck(type){
+        if (this.rectifyStatus !== type){
+          this.$set(this,'rectifyStatus',type);
+          this.resetQuery();
+        }
+      },
+      //与我相关按钮
+      topRightClickType(){
+        this.$set(this.queryParams,'myRelated',this.queryParams.myRelated==1?0:1);
+        this.handleQuery();
+      },
+      //时间排序方法
+      sortChange(val){
+        console.log('val',val)
+        if(val.prop == 'createTime'){
+          this.$set(this.queryParams,'upTimeOrder',val.order=='ascending'?'1':(val.order=='descending'?'2':''));
+          this.$set(this.queryParams,'rectifyTimeOrder','');
+          this.handleQuery();
+        }else if(val.prop == 'rectifyTime'){
+          this.$set(this.queryParams,'rectifyTimeOrder',val.order=='ascending'?'1':(val.order=='descending'?'2':''));
+          this.$set(this.queryParams,'upTimeOrder','');
+          this.handleQuery();
+        }
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          deptId:null,
+          buildId:null,
+          typeId :null,
+          levelId :null,
+          searchValue:'',
+          rectifyUserName:'',
+          upTimeOrder:'',
+          rectifyTimeOrder:'',
+        });
+        this.$refs.tableBox.clearSort();
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        if(this.dateRange[0]){
+          obj.startTime = this.dateRange[0]+'T00:00:00'
+          obj.endTime = this.dateRange[1]+'T23:59:59'
+        }else{
+          obj.startTime = "";
+          obj.endTime = "";
+        }
+        obj.rectifyStatus = this.rectifyStatus;
+        securityCheckPhotoList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //详情
+          this.$set(this,'propsData',{
+            showType:true,
+            rectify:false,
+            photoId:row.photoId
+          });
+          this.$set(this,'pageType',2);
+        }else if(type == 2){
+          //编辑
+          this.$set(this,'propsData',{
+            showType:false,
+            rectify:true,
+            photoId:row.photoId
+          });
+          this.$set(this,'pageType',2);
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /*********************************** 学院/楼栋/分类/分级 ***********************************/
+      //学院下拉列表
+      getDeptDropList(){
+        getDeptDropList({level: 2, deptType: 1 }).then(response => {
+          this.$set(this,'deptOption',response.data);
+        });
+      },
+      //楼栋下拉列表
+      systemBuildingGetOptList(){
+        systemBuildingGetOptList({}).then(response => {
+          this.$set(this,'buildOption',response.data);
+        });
+      },
+      //分级下拉列表
+      laboratoryClassLevelGetList(){
+        laboratoryClassLevelGetList({}).then(response => {
+          this.$set(this,'levelOption',response.data);
+        });
+      },
+      //分类下拉列表
+      laboratoryClassTypeGetList(){
+        laboratoryClassTypeGetList({}).then(response => {
+          this.$set(this,'classOption',response.data);
+        });
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .snapshotHazard{
+    .snapshotHazardPage{
+      .top-table-button-box{
+        display: flex;
+        padding:0 40px;
+        border-bottom: 1px solid #dedede;
+        div{
+          cursor: pointer;
+          padding:20px 0 20px 0;
+          margin-right:30px;
+          p:nth-child(1){
+            font-size:16px;
+            color:#333;
+            padding:0 15px;
+            line-height:36px;
+            height:36px;
+          }
+          p:nth-child(2){
+            height:4px;
+            border-radius:4px;
+          }
+        }
+        .tableCheck{
+          p:nth-child(1){
+            color:#0045AF;
+          }
+          p:nth-child(2){
+            background-color: #0045AF;
+          }
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 563 - 0
src/views/safetyCheck/schoolInspect/inspectManage/index.vue

@@ -0,0 +1,563 @@
+<!-- 检查管理 -->
+<template>
+  <div class="app-container inspectManage">
+    <div class="page-container inspectManagePage" v-if="pageType === 1">
+      <!--左侧计划栏-->
+      <div class="page-content-left-box">
+        <!--计划栏搜索框-->
+        <div>
+          <el-form :model="leftQueryParams" class="form-box" ref="leftQueryForm"
+                   :inline="true" style="width:100%;">
+            <el-form-item label="" prop="searchValue">
+              <el-input
+                maxLength="30"
+                v-model="leftQueryParams.searchValue"
+                placeholder="计划标题"
+                clearable
+                @clear="leftClear"
+                style="width: 365px"
+              />
+            </el-form-item>
+            <p class="page-save-common-style-button" style="width:80px;display: inline-block" @click="leftHandleQuery">查询</p>
+          </el-form>
+        </div>
+        <!--计划栏列表-->
+        <div class="left-max-list-box scrollbar-box">
+          <div class="left-list-for-max-big-box" v-for="(bigItem,bigIndex) in leftListData" :key="bigIndex">
+            <div class="left-list-title-box" @click="leftBigCheckButton(bigIndex)">
+              <p :class="bigIndex == leftBigCheckType?'el-icon-caret-bottom':'el-icon-caret-right'"></p>
+              <p>{{bigItem.planTitle}}</p>
+              <p>{{bigItem.checkTypeName}}</p>
+            </div>
+            <div class="left-list-box">
+              <div class="left-list-for-box" v-if="bigIndex == leftBigCheckType"
+                   @click="leftCheckButton(index)"
+                   :class="index == leftCheckType ? 'check-left-list-for-box':''"
+                   v-for="(item,index) in bigItem.checkPlanSetVoList" :key="index">
+                <div class="left-list-text-box">
+                  <p>{{item.checkName}}</p>
+                  <p>检查开始时间:{{parseTime(item.checkStartTime,"{y}-{m}-{d}")}}</p>
+                </div>
+                <div class="left-list-progress-box">
+                  <el-progress :stroke-width="14" :percentage="item.checkSetProgress"></el-progress>
+                </div>
+              </div>
+            </div>
+          </div>
+          <p v-if="!leftListData[0]" class="left-list-for-null-p">暂无数据</p>
+        </div>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="titleTotal>0"
+                    :total="titleTotal"
+                    :page.sync="leftQueryParams.page"
+                    :limit.sync="leftQueryParams.pageSize"
+                    @pagination="getTitleList"
+        />
+      </div>
+      <div class="page-content-center-box"></div>
+      <!--右侧数据表格-->
+      <div class="page-content-right-box">
+        <div class="page-form-title-box" style="border:none;" :class="advancedType?'page-advanced-form-title-box':''">
+          <el-form :model="queryParams" class="form-box" ref="queryForm"
+                   :inline="true" style="width:100%;">
+            <div class="table-school-college-toggle-box">
+              <p :class="tableButtonCheckType===''?'p-check':''" @click="tableCheck('')">全部</p>
+              <p :class="tableButtonCheckType===0?'p-check':''" @click="tableCheck(0)">待检查</p>
+              <p :class="tableButtonCheckType===1?'p-check':''" @click="tableCheck(1)">检查中</p>
+              <p :class="tableButtonCheckType===2?'p-check':''" @click="tableCheck(2)">已检查</p>
+            </div>
+            <el-form-item label="" prop="deptId">
+              <el-select v-model="queryParams.deptId" placeholder="学院单位" style="width:157px;">
+                <el-option
+                  v-for="dict in deptOption"
+                  :key="dict.deptId"
+                  :label="dict.deptName"
+                  :value="dict.deptId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="buildId">
+              <el-select v-model="queryParams.buildId" placeholder="楼栋" style="width:150px;">
+                <el-option
+                  v-for="dict in buildOption"
+                  :key="dict.id"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="typeId" v-if="advancedType">
+              <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width:175px;">
+                <el-option
+                  v-for="dict in classOption"
+                  :key="dict.typeId"
+                  :label="dict.typeName"
+                  :value="dict.typeId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="levelId" v-if="advancedType">
+              <el-select v-model="queryParams.levelId" placeholder="安全分级" style="width:175px;">
+                <el-option
+                  v-for="dict in levelOption"
+                  :key="dict.levelId"
+                  :label="dict.levelName"
+                  :value="dict.levelId"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="searchValue" v-if="advancedType">
+              <el-input
+                maxLength="30"
+                v-model="queryParams.searchValue"
+                placeholder="实验室/房间号"
+                style="width:170px;"
+              />
+            </el-form-item>
+            <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+            <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+            <p class="page-save-common-style-button" style="display: inline-block;margin-left:10px;" @click="searchToggle">{{advancedType?'普通搜索':'高级搜索'}}</p>
+          </el-form>
+        </div>
+        <div class="page-conten-box page-content-right-bottom-box">
+          <el-table class="table-box" v-loading="loading" border :data="dataList">
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="实验室" prop="subName"  show-overflow-tooltip/>
+            <el-table-column label="检查状态" prop="manageStatus" width="150" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <span>{{scope.row.manageStatus==0?'待检查':(scope.row.manageStatus==1?'检查中':(scope.row.manageStatus==2?'已检查':''))}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="检查人" prop="checkUserNames" width="230" show-overflow-tooltip/>
+            <el-table-column label="操作" width="180" show-overflow-tooltip >
+              <template slot-scope="scope">
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p"
+                     @click="tableButton(1,scope.row)"
+
+                  >检查项</p>
+                  <p class="table-button-p"
+                     v-if='scope.row.manageStatus!=2'
+                     @click="tableButton(2,scope.row)"
+
+                  >开始检查</p>
+                  <p class="table-button-null"></p>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination :page-sizes="[20, 30, 40, 50]"
+                      v-show="total>0"
+                      :total="total"
+                      :page.sync="queryParams.page"
+                      :limit.sync="queryParams.pageSize"
+                      @pagination="getList"
+          />
+        </div>
+      </div>
+    </div>
+    <checkItem :propsData="propsData" v-if="pageType === 2"></checkItem>
+    <initiateInspect v-if="pageType == 3" :initiateInspectData="initiateInspectData"></initiateInspect>
+  </div>
+</template>
+<script>
+  import {
+    getDeptDropList,
+    systemBuildingGetOptList,
+    laboratoryClassLevelGetList,
+    laboratoryClassTypeGetList,
+  } from '@/api/commonality/permission'
+  import {
+    securityCheckPlanTitleList,
+    securityCheckManageList,
+  } from '@/api/safetyCheck/indexDemoOne'
+  import checkItem from "@/views/safetyCheck/components/checkItem.vue";
+  import initiateInspect from "@/views/safetyCheck/components/initiateInspect/initiateInspect.vue";
+  export default {
+    name: 'index',
+    components: {
+      checkItem,
+      initiateInspect,
+    },
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //复查状态选项卡
+        tableButtonCheckType:'',
+        //页面遮罩
+        loading:false,
+        //学院
+        deptOption:[],
+        //楼栋
+        buildOption:[],
+        //分级
+        levelOption:[],
+        //分类
+        classOption:[],
+        //计划查询条件
+        leftQueryParams:{
+          checkCategory:1,
+          searchValue:'',
+          page:1,
+          pageSize:20,
+        },
+        titleTotal:0,
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          myRelated:1,
+          deptId:null,
+          buildId:null,
+          typeId :null,
+          levelId :null,
+          searchValue:'',
+        },
+        //时间数据
+        dateRange:[],
+        //搜索模式切换
+        advancedType:false,
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        leftBigCheckType:"0",
+        leftCheckType:"0",
+        leftListData:[],
+        //检查组件
+        initiateInspectData:{},
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      this.getTitleList();
+      this.getDeptDropList();
+      this.systemBuildingGetOptList();
+      this.laboratoryClassLevelGetList();
+      this.laboratoryClassTypeGetList();
+    },
+    methods: {
+      //左侧清除查询按钮
+      leftClear(){
+        this.$set(this.leftQueryParams,'searchValue','');
+        this.getTitleList();
+      },
+      //左侧查询按钮
+      leftHandleQuery(){
+        this.getTitleList();
+      },
+      //左侧计划切换
+      leftBigCheckButton(index){
+        if(this.leftBigCheckType !== index){
+          this.$set(this,'leftBigCheckType',index);
+          this.$set(this,'leftCheckType',0);
+          this.resetQuery();
+        }
+      },
+      //左侧计划子级切换
+      leftCheckButton(index){
+        if(this.leftCheckType !== index){
+          this.$set(this,'leftCheckType',index);
+          this.resetQuery();
+        }
+      },
+      //复查状态选项卡切换
+      tableCheck(type){
+        if (this.tableButtonCheckType !== type){
+          this.$set(this,'tableButtonCheckType',type);
+          this.resetQuery();
+        }
+      },
+      //搜索模式切换
+      searchToggle(){
+        this.$set(this,'advancedType',!this.advancedType);
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'dateRange',[])
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          deptId:null,
+          buildId:null,
+          typeId :null,
+          levelId :null,
+          searchValue:'',
+        });
+        this.getList();
+      },
+      //获取计划数据列表
+      getTitleList(){
+        securityCheckPlanTitleList(this.leftQueryParams).then(response => {
+          this.$set(this,'leftListData',response.data.records);
+          this.$set(this,'titleTotal',response.data.total);
+          this.$set(this,'leftBigCheckType',0);
+          this.$set(this,'leftCheckType',0);
+          this.resetQuery();
+        });
+      },
+      //获取数据列表
+      getList(){
+        if(!this.leftListData[0]){
+          this.$set(this,'dataList',[]);
+          this.$set(this,'total',0);
+          return
+        }
+        this.$set(this,'loading',true);
+        let obj = {
+          planSetId:this.leftListData[this.leftBigCheckType].checkPlanSetVoList[this.leftCheckType].planSetId,
+          page:this.queryParams.page,
+          pageSize:this.queryParams.pageSize,
+          manageStatus:this.tableButtonCheckType,
+          deptId:this.queryParams.deptId,
+          buildId:this.queryParams.buildId,
+        }
+        if(this.advancedType){
+          obj.searchValue = this.queryParams.searchValue;
+          obj.typeId = this.queryParams.typeId;
+          obj.levelId = this.queryParams.levelId;
+        }
+        securityCheckManageList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //检查项列表
+          this.$set(this,'pageType',2);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.showType = true;
+          this.$set(this,'propsData',obj);
+        }else if(type == 2){
+          //开始检查
+          this.$set(this,'pageType',3);
+          let obj = JSON.parse(JSON.stringify(row))
+          obj.freeChoiceType = true;
+          obj.processType = 'inspect';
+          obj.showType = false;
+          this.$set(this,'initiateInspectData',obj);
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      /*********************************** 学院/楼栋/分类/分级 ***********************************/
+      //学院下拉列表
+      getDeptDropList(){
+        getDeptDropList({level: 2, deptType: 1 }).then(response => {
+          this.$set(this,'deptOption',response.data);
+        });
+      },
+      //楼栋下拉列表
+      systemBuildingGetOptList(){
+        systemBuildingGetOptList({}).then(response => {
+          this.$set(this,'buildOption',response.data);
+        });
+      },
+      //分级下拉列表
+      laboratoryClassLevelGetList(){
+        laboratoryClassLevelGetList({}).then(response => {
+          this.$set(this,'levelOption',response.data);
+        });
+      },
+      //分类下拉列表
+      laboratoryClassTypeGetList(){
+        laboratoryClassTypeGetList({}).then(response => {
+          this.$set(this,'classOption',response.data);
+        });
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .inspectManage{
+    .inspectManagePage{
+      overflow: hidden;
+      display: flex;
+      flex-direction: row;
+      flex:1;
+
+      .page-content-left-box{
+        width: 480px;
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        margin:20px 0 20px 20px;
+        padding-right:10px;
+        .left-max-list-box{
+          flex:1;
+          padding-right:10px;
+          .left-list-for-max-big-box{
+            .left-list-title-box{
+              cursor: pointer;
+              display: flex;
+              p{
+                height:30px;
+                line-height:30px;
+                margin:15px 0;
+              }
+              p:nth-child(1){
+                font-size:16px;
+                width:30px;
+              }
+              p:nth-child(2){
+                font-size:16px;
+                flex:1;
+                /*单行省略号*/
+                display:block;
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space:nowrap;
+              }
+              p:nth-child(3){
+                font-size:14px;
+                width:80px;
+                height:30px;
+                text-align: center;
+                color:#fff;
+                background-color: #0183FA;
+                border-radius:4px;
+              }
+            }
+            .left-list-box{
+              .left-list-for-box{
+                cursor: pointer;
+                display: flex;
+                height:70px;
+                background-color: #F5F5F5;
+                padding:5px 23px;
+                .left-list-text-box{
+                  width:240px;
+                  p{
+                    height:30px;
+                    line-height: 30px;
+                    font-size:16px;
+                  }
+                  p:nth-child(2){
+                    color:#666666;
+                  }
+                }
+                .left-list-progress-box{
+                  flex:1;
+                  padding-top:15px;
+                }
+              }
+              .check-left-list-for-box{
+                background: rgba(1,131,250,0.1);
+              }
+            }
+          }
+          .left-list-for-null-p{
+            text-align: center;
+            line-height:400px;
+            color:#999;
+          }
+        }
+      }
+      .page-content-center-box{
+        margin:20px 0;
+        border-right:1px dashed #dedede;
+      }
+      .page-content-right-box{
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        flex:1;
+        .page-content-right-bottom-box{
+          display: flex;
+          flex-direction: column;
+          overflow: hidden;
+          flex:1;
+          padding:0 20px 20px;
+        }
+      }
+      .table-school-college-toggle-box{
+        overflow: hidden;
+        display: inline-block;
+        margin-right:10px;
+        p{
+          display: inline-block;
+          text-align: center;
+          width:80px;
+          line-height:40px;
+          height:40px;
+          color:#333;
+          background-color: #fff;
+          border:1px solid #E0E0E0;
+          font-size:14px;
+          cursor: pointer;
+        }
+        p:nth-child(1){
+          border-top-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+          /*border-right:none;*/
+        }
+        p:nth-child(4){
+          border-top-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+          /*border-left:none;*/
+        }
+        .p-check{
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          color:#fff;
+        }
+      }
+      .form-button-max-big-box-me{
+        display: inline-block;
+        overflow: hidden;
+        margin-right:10px;
+        .form-button-big-box-me{
+          display: flex;
+          div{
+            position: relative;
+            height:40px;
+            width:100px;
+            line-height: 40px;
+            text-align: center;
+            color:#999;
+            font-size:14px;
+            border:1px solid #999;
+            border-radius:4px;
+            font-weight:500;
+            cursor: pointer;
+            .icon-p-me{
+              width:15px;
+              height:15px;
+              line-height:15px;
+              text-align: center;
+              position: absolute;
+              right:0;
+              bottom:0;
+              color:#fff;
+              background: #0183fa;
+              border-top-left-radius:4px;
+            }
+          }
+          .checkDiv-me{
+            color:#0183FA!important;
+            border:1px solid #0183FA!important;
+          }
+        }
+      }
+
+    }
+  }
+</style>

+ 0 - 0
src/views/safetyCheck/schoolInspect/inspectProject/index.vue


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott