dedsudiyu 1 год назад
Родитель
Сommit
ec1d047e98
100 измененных файлов с 4093 добавлено и 349 удалено
  1. 6 5
      .env.production
  2. 153 21
      README.md
  3. 1 1
      package.json
  4. 25 0
      src/api/chemicalInventory/index.js
  5. 1 1
      src/api/evacuation3_2/index.js
  6. 10 1
      src/api/laboratory/building.js
  7. 1 1
      src/api/laboratory/violation.js
  8. 874 0
      src/api/safetyCheck/index.js
  9. 13 3
      src/api/system/dept.js
  10. 9 0
      src/api/system/post.js
  11. 19 2
      src/api/system/role.js
  12. 18 0
      src/api/system/user_teacher.js
  13. 115 0
      src/api/trainingCourse/index.js
  14. BIN
      src/assets/ZDimages/personnelManagement/icon_dr_wj.png
  15. BIN
      src/assets/ZDimages/safetyCheck/icon_delete.png
  16. BIN
      src/assets/ZDimages/safetyCheck/icon_dr_wj.png
  17. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_aqyh.png
  18. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_aqyht.png
  19. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_bg.png
  20. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_by.png
  21. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_dn.png
  22. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_dy.png
  23. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_gjyh.png
  24. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_gjyh_2.png
  25. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_kzjc.png
  26. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_sjsys.png
  27. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_sjsys_2.png
  28. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_sjtj.png
  29. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_ssp.png
  30. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_sy.png
  31. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_syszc.png
  32. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_xcgl.png
  33. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_xyxc.png
  34. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_yjcsys.png
  35. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_zcgl.png
  36. BIN
      src/assets/ZDimages/safetyCheck/icon_gzt_zgbg.png
  37. BIN
      src/assets/ZDimages/safetyCheck/icon_jhbt.png
  38. BIN
      src/assets/ZDimages/safetyCheck/icon_xyxc_cy.png
  39. BIN
      src/assets/ZDimages/safetyCheck/icon_xyxc_qx.png
  40. BIN
      src/assets/ZDimages/safetyCheck/icon_xyxc_sys.png
  41. BIN
      src/assets/ZDimages/safetyCheck/icon_xyxc_xy.png
  42. BIN
      src/assets/ZDimages/safetyCheck/icon_xz_xyxc.png
  43. BIN
      src/assets/ZDimages/safetyCheck/icon_zcgl_cg.png
  44. BIN
      src/assets/ZDimages/safetyCheck/icon_zcgl_sb.png
  45. BIN
      src/assets/ZDimages/safetyCheck/search 10.png
  46. 1 0
      src/assets/icons/svg/化学品盘点.svg
  47. 1 0
      src/assets/icons/svg/培训课程.svg
  48. 1 0
      src/assets/icons/svg/学校.svg
  49. 1 0
      src/assets/icons/svg/安全隐患.svg
  50. 1 0
      src/assets/icons/svg/实验管理.svg
  51. 1 0
      src/assets/icons/svg/开展检查.svg
  52. 1 0
      src/assets/icons/svg/报告 (1).svg
  53. 1 0
      src/assets/icons/svg/报告.svg
  54. 1 0
      src/assets/icons/svg/检查配置2.svg
  55. 1 0
      src/assets/icons/svg/统计.svg
  56. 1 0
      src/assets/icons/svg/随手拍管理.svg
  57. 1 0
      src/assets/icons/svg/项目管理.svg
  58. 89 0
      src/assets/styles/ZDcolorClass.scss
  59. 47 6
      src/assets/styles/ZDelement.scss
  60. 29 0
      src/assets/styles/ZDpageCss.scss
  61. 461 0
      src/components/lookDocumentDialog/components/informDom.vue
  62. 421 0
      src/components/lookDocumentDialog/components/noticeDom.vue
  63. 359 0
      src/components/lookDocumentDialog/components/rectificationReportDom.vue
  64. 179 0
      src/components/lookDocumentDialog/lookDocumentDataDialog.vue
  65. 111 0
      src/components/lookDocumentDialog/lookDocumentDialog.vue
  66. 222 0
      src/components/lookDocumentDialog/lookDocumentListDialog.vue
  67. 142 0
      src/components/qrCodeDialog/index.vue
  68. 2 2
      src/layout/components/AppMain.vue
  69. 2 1
      src/main.js
  70. 17 1
      src/utils/request.js
  71. 4 2
      src/views/comprehensive/laboratoryManagement/accessAuthorization/authorize.vue
  72. 7 5
      src/views/comprehensive/laboratoryManagement/accessAuthorization/lookImpower.vue
  73. 2 1
      src/views/comprehensive/laboratoryManagement/building/buildingDetails.vue
  74. 19 17
      src/views/comprehensive/laboratoryManagement/building/buildingManagement.vue
  75. 16 13
      src/views/comprehensive/laboratoryManagement/building/newIndex.vue
  76. 7 4
      src/views/comprehensive/laboratoryManagement/classified/index.vue
  77. 5 3
      src/views/comprehensive/laboratoryManagement/classifiedGrading/classified.vue
  78. 7 4
      src/views/comprehensive/laboratoryManagement/classifiedGrading/classtype.vue
  79. 1 1
      src/views/comprehensive/laboratoryManagement/classifiedGrading/index.vue
  80. 8 5
      src/views/comprehensive/laboratoryManagement/classifiedGrading/subjectClass.vue
  81. 5 3
      src/views/comprehensive/laboratoryManagement/classtype/index.vue
  82. 12 15
      src/views/comprehensive/laboratoryManagement/inspection/index.vue
  83. 12 15
      src/views/comprehensive/laboratoryManagement/layout/index.vue
  84. 10 14
      src/views/comprehensive/laboratoryManagement/material/index.vue
  85. 12 15
      src/views/comprehensive/laboratoryManagement/onepc/index.vue
  86. 7 2
      src/views/comprehensive/laboratoryManagement/record/index.vue
  87. 11 45
      src/views/comprehensive/laboratoryManagement/record/myRecord.vue
  88. 5 1
      src/views/comprehensive/laboratoryManagement/record_my/index.vue
  89. 12 15
      src/views/comprehensive/laboratoryManagement/securityconfigure/index.vue
  90. 19 20
      src/views/comprehensive/laboratoryManagement/subject/addSubject.vue
  91. 104 3
      src/views/comprehensive/laboratoryManagement/subject/associationConfiguration.vue
  92. 73 6
      src/views/comprehensive/laboratoryManagement/subject/deviceList.vue
  93. 4 2
      src/views/comprehensive/laboratoryManagement/subject/deviceListOne.vue
  94. 350 41
      src/views/comprehensive/laboratoryManagement/subject/index.vue
  95. 12 17
      src/views/comprehensive/laboratoryManagement/subject/indexOne.vue
  96. 10 3
      src/views/comprehensive/laboratoryManagement/subject/indexTwo.vue
  97. 11 24
      src/views/comprehensive/laboratoryManagement/subject/infoPage.vue
  98. 6 4
      src/views/comprehensive/laboratoryManagement/timingExhaustAir/index.vue
  99. 4 4
      src/views/comprehensive/message/addContent/index.vue
  100. 0 0
      src/views/comprehensive/message/addContent/subjectList.vue

+ 6 - 5
.env.production

@@ -1,22 +1,23 @@
 # 页面标题
-VUE_APP_TITLE = 实验室安全管理系统
+VUE_APP_TITLE = 实验室安全智能监测与管控系统
 
 # 生产环境配置
 ENV = 'production'
 
 # ####################版本差异字段####################
 
-VUE_APP_VERSION_DIFFERENCE_FIELD = 'kuangYeDaXue_nanHu'
+ VUE_APP_VERSION_DIFFERENCE_FIELD = 'kuangYeDaXue_nanHu'
 # VUE_APP_VERSION_DIFFERENCE_FIELD = 'suZhouDaXue'
-# VUE_APP_VERSION_DIFFERENCE_FIELD = 'public'
+#VUE_APP_VERSION_DIFFERENCE_FIELD = 'xiBeiNongLinDaXue'
 
 # ####################外网接口配置####################
 
-VUE_APP_BASE_API = 'lab.zjznai.com/labSystem'
+VUE_APP_BASE_API = 'lab.zjznai.com/labAppTest'
 
 
 
 # ####################内网接口配置####################
 
-VUE_APP_BASE_LOCAL_API = '192.168.251.2/labSystem'
+VUE_APP_BASE_LOCAL_API = '192.168.1.43/labSystem'
+
 

+ 153 - 21
README.md

@@ -1,30 +1,162 @@
-## 开发
+# 更新日期 2023/07/25
+## 一.开发
 
-```bash
-# 克隆项目
-git clone https://gitee.com/y_project/RuoYi-Vue
+    # 安装依赖
+    npm install
+    
+    # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
+    npm install --registry=https://registry.npm.taobao.org
+    
+    # 启动服务
+    npm run dev
 
-# 进入项目目录
-cd ruoyi-ui
+浏览器访问 http://localhost:80
 
-# 安装依赖
-npm install
+## 二.发布
 
-# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
-npm install --registry=https://registry.npm.taobao.org
+    # 构建测试环境
+    npm run build:stage
+    
+    # 构建生产环境
+    npm run build:prod
+    
+## 三.版本相关
 
-# 启动服务
-npm run dev
-```
+### 1.版本差异字段
+>##### 配置文件在 .env.development 与 .env.production 文件内
 
-浏览器访问 http://localhost:80
+    ├─src
+    │  └─.env.development         (开发配置)
+    │  └─.env.production          (打包配置)
+
+>##### VUE_APP_VERSION_DIFFERENCE_FIELD字段,可通过配置不同的字符来展示各版本差异化内容
+
+     矿业大学-环测学院
+     VUE_APP_VERSION_DIFFERENCE_FIELD = 'kuangYeDaXue_nanHu'
+     苏州大学
+     VUE_APP_VERSION_DIFFERENCE_FIELD = 'suZhouDaXue'
+     西北农林大学
+     VUE_APP_VERSION_DIFFERENCE_FIELD = 'xiBeiNongLinDaXue'
+
+### 2.版本分支关系
+>##### 修改时务必注意版本分支关系,从底层开始迭代
+
+    ├─3.3.1-dspf (定时排风版本)
+    ├─3.3.2-dzxxp (电子信息牌版本)
+    │  ├─suzhouDX-web (苏州大学-当前线上版本)
+    │  ├─suzhouDX-web (化工学院-当前线上版本)
+    │  └─suzhouDX-web (安全学院-当前线上版本)
+    ├─3.3.4-kdyh (矿大优化版本)
+    │  └─nhkd-web (矿大环测学院-当前线上版本)
+    │    └─changAnDaXue-web (长安大学-当前线上版本/去除了AppMain.vue下每次加载预警数据接口)
+    │    └─nhkd-tenantry-web (矿大能动学院-当前线上版本/增加了租户功能,特定租户屏蔽首页)
+    ├─3.3.3-AnQuanJianCha (新安全检查版本)
+    │  ├─3.3.5-BaoJingZhuaPai&DianHuaBaoJing (报警抓拍&电话报警版本)
+    │  └─3.3.6-zzjg&jzbj (组织架构&建筑布局版本)
+    │    └─jiaoTongDaXue-Demo(交通大学演示版本)
+    ├─web-v2-temp (包含 3.3.3 & 3.3.5 & 3.3.6 版本所有内容)
+    ├─3.3.7-scxjy (手持巡检仪版本)
+    │
+    │
+    │
+    │
+    │
+    ├─web-v2 (当前正在开发版本)
+    ├─web-v2-pro (当前正在测试版本)
+
+### 3.多页面路由配置方法用于展示各版本差异化内容(即将废弃,留作备案)
+#### 3.1针对矿大项目修改      针对布局与疏散图 适配多楼栋 多楼层
+>##### 路由配置示意
+
+    ├─views
+    │  ├─comprehensive
+    │  │  └─laboratoryManagement
+    │  │     ├─building
+    │  │     │  └─indexOne.vue
+    │  │     └─subject
+    │  │         └─indexTwo.vue
+    │  └─emergencyManagement
+    │     └─evacuation
+    │        └─emergencyEvacuation
+    │            ├─indexOne.vue
+    │            └─performEvacuationOne.vue
+
+>##### 静态路由修改项  
+
+    path: '/emergencyEvacuationBig' 地址修改为  emergencyEvacuationBigOne  
+    path: '/' 地址修改为  home  
+  
+>##### 其他修改项
+
+    项目名称修改 => 实验室安全智能监测与控制系统
+    取消按钮首页注释  layout => components => Navbar.vue
+        
+#### 3.2针对空军四医大项目   实验室-物联设备配置只有传感器与智能门禁
+>##### 路由配置示意
+
+    ├─views
+    │  ├─comprehensive
+    │  │  ├─laboratoryManagement
+    │  │  │  └─subject
+    │  │  │     └─indexOne.vue
+    │  │  ├─message
+    │  │  │  └─noticeconfig
+    │  │  │     └─indexOne.vue
+    │  │  ├─system
+    │  │  │  └─publicConfig
+    │  │  │     └─indexOne.vue
+    │  │  └─personnel
+    │  │     └─teacher
+    │  │        └─indexOne.vue
+    │  └─mine
+    │     └─indexOne.vue
+
+>##### 静态路由修改项
+
+    path: '/login' 地址修改为  loginOne
+    path: '/' 地址修改为  loginOne
+
+>##### 其他修改项
+
+    项目名称修改 => 危化品智能存储管理系统
+    按钮首页注释掉  layout => components => Navbar.vue
+    
+## 四.二维码相关
+
+### 1.二维码生成规则 
+
+>#### 二维码参数由三部分组成 
+
+##### 微信小程序二维码标识
+
+    需要在微信小程序后台开发配置中配置
+    同时需要在后台配置开发配置中配置 
+    两个配置需要完全一致
+    在用户登录后会存储在local storage中字段为'codeOnlineAdd'
+    
+##### 参数 code
+
+    用于该功能所需参数
+    
+##### 功能标识 type
 
-## 发布
+    用于识别二维码所属功能,用于后续跳转对应后续业务页面
+    
+>##### 示例
+    http://lab.zjznai.com/labAppTest?code=11&type=1
+    微信小程序二维码标识?参数&功能标识
+    
+### 2.功能标识表
 
-```bash
-# 构建测试环境
-npm run build:stage
+| 功能标识      | 功能名称 | 备注 |
+|-----------| -- |  ---- | 
+| type == 10 | 实验室危险源 | 前端生成 |
+| type == 9 | 化学品 | 前端生成 |
+| type == 8 | 化学品柜 | 前端生成 |
+| type == 7 | 培训课程 | 前端生成 |
+| type == 6 | 专项检查 | 前端生成 |
+| type == 5 | 实验室详情 | 后端生成 |
+| type == 3 | 危险源列表 | 后端生成 |
+| type == 2 | 安全制度 | 后端生成 |
+| type == 1 | MSDS说明书 | 后端生成 |
 
-# 构建生产环境
-npm run build:prod
-```

+ 1 - 1
package.json

@@ -1,7 +1,7 @@
 {
   "name": "ruoyi",
   "version": "3.1.0",
-  "description": "实验室安全管理系统",
+  "description": "实验室安全智能监测与管控系统",
   "author": "实验室安全",
   "license": "MIT",
   "scripts": {

+ 25 - 0
src/api/chemicalInventory/index.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+// 化学品盘点列表
+export function hxpTakeStockList(query) {
+  return request({
+    url: '/chemical/hxpTakeStock/list',
+    method: 'get',
+    params: query
+  })
+}
+// 化学品盘点详情
+export function hxpTakeStockInfo(id) {
+  return request({
+    url: '/chemical/hxpTakeStock/'+id,
+    method: 'get',
+  })
+}
+// 化学品盘点化学品列表
+export function hxpTakeStockDetailList(query) {
+  return request({
+    url: '/chemical/hxpTakeStockDetail/list',
+    method: 'get',
+    params: query
+  })
+}

+ 1 - 1
src/api/evacuation3_2/index.js

@@ -234,7 +234,7 @@ export function riskPlanBatchJoinSub(data) {
 }
 
 
-//疏散设备页面获取楼栋楼层
+//疏散设备页面获取楼栋楼层(组织架构优化后废弃2023/6/20)
 export function selBuildOrFloorList(query) {
   return request({
     url: 'laboratory/buildFloor/selBuildOrFloorList',

+ 10 - 1
src/api/laboratory/building.js

@@ -8,7 +8,7 @@ export function listBuilding(query) {
     params: query
   })
 }
-// 查询楼层 通过楼栋ID
+// 查询楼层 通过楼栋ID(组织架构优化后废弃2023/6/20)
 export function listFloorByBuildId(id) {
   return request({
     url: `/laboratory/building/${id}/list`,
@@ -63,3 +63,12 @@ export function delBuilding(id) {
     method: 'delete'
   })
 }
+
+//查询楼栋/根据楼栋ID查询楼层(无权限)
+export function buildFloorGetlist(query) {
+  return request({
+    url: '/laboratory/buildFloor/getlist',
+    method: 'get',
+    params: query
+  })
+}

+ 1 - 1
src/api/laboratory/violation.js

@@ -149,7 +149,7 @@ export function getIntegralMatchingRules(query) {
   })
 }
 
-// 查询实验室字典列表
+// 根据院系ID查询实验室列表(无权限)
 export function getSubjectDictByViolation(data) {
   return request({
     url: '/laboratory/subject/getSubjectDictByViolation',

+ 874 - 0
src/api/safetyCheck/index.js

@@ -0,0 +1,874 @@
+import request from '@/utils/request'
+
+/***************************工作台***************************/
+
+//工作台-查询是否院级用户
+export function isSCollege(query) {
+  return request({
+    url: '/security/collegCheck/isSCollege',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-校级巡查数据
+export function schoolWorkCheck(query) {
+  return request({
+    url: '/security/schoolWork/check',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-实验室巡查数据
+export function schoolWorkSubCheck(query) {
+  return request({
+    url: '/security/schoolWork/subCheck',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-待办事项列表
+export function todoList(query) {
+  return request({
+    url: '/security/schoolWork/todoList',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-待办事项列表-待复核
+export function tobeReviewed(query) {
+  return request({
+    url: '/security/schoolWork/tobeReviewed',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-存在隐患
+export function hiddenCount(query) {
+  return request({
+    url: '/security/schoolWork/hiddenCount',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-检查覆盖率
+export function yearRate(query) {
+  return request({
+    url: '/security/schoolWork/yearRate',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-检查统计
+export function checkStatistics(query) {
+  return request({
+    url: '/security/schoolWork/checkStatistics',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-已处理隐患
+export function hiddenDangerRectify(query) {
+  return request({
+    url: '/security/schoolWork/hiddenDangerRectify',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台-指标统计(校级)
+export function hiddenCountByType(query) {
+  return request({
+    url: '/security/schoolWork/hiddenCountByType',
+    method: 'get',
+    params: query
+  })
+}
+//工作台-指标统计(院级)
+export function collegCheckHiddenCountByType(query) {
+  return request({
+    url: '/security/collegCheck/hiddenCountByType',
+    method: 'get',
+    params: query
+  })
+}
+/***************************设备检查配置***************************/
+//设备检查配置-新增检查内容列表
+export function inspectContentList(query) {
+  return request({
+    url: '/security/checkDevice/getHazardList',
+    method: 'get',
+    params: query
+  })
+}
+//设备检查配置-列表
+export function checkDeviceList(query) {
+  return request({
+    url: '/security/checkDevice/list',
+    method: 'get',
+    params: query
+  })
+}
+//设备检查配置-详情
+export function checkDeviceDetail(query) {
+  return request({
+    url: '/security/checkDevice/findById',
+    method: 'get',
+    params: query
+  })
+}
+//设备检查配置-提交
+export function checkDeviceAdd(data) {
+  return request({
+    url: '/security/checkDevice/add',
+    method: 'post',
+    data: data
+  })
+}
+//设备检查配置-编辑
+export function checkDeviceEdit(data) {
+  return request({
+    url: '/security/checkDevice/edit',
+    method: 'post',
+    data: data
+  })
+}
+export function checkDeviceDelete(id) {
+  return request({
+    url: '/security/checkDevice/'+id,
+    method: 'delete'
+  })
+}
+
+
+/***************************随手拍***************************/
+
+//随手拍-上报记录-列表
+export function securityCheckClapList(query) {
+  return request({
+    url: '/security/checkClap/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//随手拍-上报记录-提交
+export function checkClapAdd(data) {
+  return request({
+    url: '/security/checkClap/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//随手拍-上报记录-详情
+export function findById(query) {
+  return request({
+    url: '/security/checkClap/findById',
+    method: 'get',
+    params: query
+  })
+}
+
+//随手拍-上报记录-整改
+export function clapApprove(data) {
+  return request({
+    url: '/security/checkClap/clapApprove',
+    method: 'post',
+    data: data
+  })
+}
+
+//随手拍-上报记录-上报记录
+export function checkClapMylist(query) {
+  return request({
+    url: '/security/checkClap/mylist',
+    method: 'get',
+    params: query
+  })
+}
+
+/***************************整改报告***************************/
+
+//整改报告-列表
+export function checkRectifyList(query) {
+  return request({
+    url: '/security/checkRectify/list',
+    method: 'get',
+    params: query
+  })
+}
+//整改报告-下载  '/security/checkRectify/genReport/'+row.id
+//整改报告-批量下载  '/security/checkRectify/genReport/zip/'+text
+
+/***************************项目检查库***************************/
+
+//项目检查库-树状列表
+export function checkOptionList(query) {
+  return request({
+    url: '/security/checkOption/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//项目检查库-添加
+export function checkOptionAdd(data) {
+  return request({
+    url: '/security/checkOption/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//项目检查库-编辑
+export function checkOptionUpdate(data) {
+  return request({
+    url: '/security/checkOption/update',
+    method: 'post',
+    data: data
+  })
+}
+
+//项目检查库-删除
+export function checkOptionDelete(id) {
+  return request({
+    url: '/security/checkOption/delete/'+id,
+    method: 'delete'
+  })
+}
+
+//项目检查库-批量删除
+export function checkOptionBatchDelete(ids) {
+  return request({
+    url: '/security/checkOption/batchDelete/'+ids,
+    method: 'delete'
+  })
+}
+
+/***************************检查配置***************************/
+
+//检查配置 检查人员/整改人员-列表
+export function checkStaffList(query) {
+  return request({
+    url: '/security/checkStaff/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查配置 检查人员/整改人员-查询当前配置
+export function checkSet(query) {
+  return request({
+    url: '/security/checkSet/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查配置 检查人员/整改人员-保存当前配置
+export function checkSetAdd(data) {
+  return request({
+    url: '/security/checkSet/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查配置 人员列表查询
+export function checkStaffUserList(data) {
+  return request({
+    url: '/security/checkStaffUser/list',
+    method: 'post',
+    data: data
+  })
+}
+
+/***************************检查计划***************************/
+
+//检查计划-列表
+//自查任务-列表
+export function checkPlanList(data) {
+  return request({
+    url: '/security/checkPlan/list',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-根据计划ID查询管理列表
+//自查任务-根据计划ID查询管理列表
+export function findByCheckPlanId(data) {
+  return request({
+    url: '/security/checkManage/findByCheckPlanId',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-查询管理列表
+//自查任务-查询管理列表
+export function checkManageList(data) {
+  return request({
+    url: '/security/checkManage/list',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-查询管理详情接口
+//自查任务-查询管理详情接口
+//自查任务-查询管理计划详情接口
+//自查任务-查询管理任务详情接口
+export function findCheckManage(query) {
+  return request({
+    url: '/security/checkManage/findCheckManage',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-查询管理保存/提交
+//自查任务-查询管理保存/提交
+export function checkManageUpdate(data) {
+  return request({
+    url: '/security/checkManage/update',
+    method: 'put',
+    data: data
+  })
+}
+
+//检查计划-根据计划ID删除
+//自查任务-根据计划ID删除
+export function checkPlanDelete(query) {
+  return request({
+    url: '/security/checkPlan/delete',
+    method: 'delete',
+    params: query
+  })
+}
+
+//检查计划-查询历史计划标题列表
+//自查任务-查询历史计划标题列表
+export function getHistoryPlanTitles(query) {
+  return request({
+    url: '/security/checkPlan/getHistoryPlanTitles',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-根据ID隐藏历史标题
+export function hideHistoryPlanTitle(query) {
+  return request({
+    url: '/security/checkPlan/hideHistoryPlanTitle',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-查询当前学校下实验室数量
+export function getAllSubNum(query) {
+  return request({
+    url: '/laboratory/subject/getAllSubNum',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-查询当前学校下学院列表与实验室数量
+export function conditionCollegeInfo(query) {
+  return request({
+    url: '/laboratory/subject/conditionCollegeInfo',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-查询选中院系下的实验室列表
+export function findSubInfoByDeptIds(data) {
+  return request({
+    url: '/laboratory/subject/findSubInfoByDeptIds',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-查询实验室(已过滤/未选)
+export function conditionSubjectInfo(data) {
+  return request({
+    url: '/laboratory/subject/conditionSubjectInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-新增计划
+//自查任务-新增计划
+export function checkPlanAdd(data) {
+  return request({
+    url: '/security/checkPlan/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//检查计划-计划详情
+//自查任务-计划详情
+export function findCheckPlan(query) {
+  return request({
+    url: '/security/checkPlan/findCheckPlan',
+    method: 'get',
+    params: query
+  })
+}
+
+//检查计划-修改计划
+//自查任务-修改计划
+export function checkPlanUpdate(data) {
+  return request({
+    url: '/security/checkPlan/update',
+    method: 'put',
+    data: data
+  })
+}
+
+
+
+/***************************校院巡察组***************************/
+
+//校院巡察组-分页获取校院巡查组列表
+export function checkGroupList(data) {
+  return request({
+    url: '/security/checkGroup/list',
+    method: 'post',
+    data: data
+  })
+}
+
+//校院巡察组-通过id查询巡查组详情
+export function checkGroupFind(query) {
+  return request({
+    url: '/security/checkGroup/find',
+    method: 'get',
+    params: query
+  })
+}
+
+//校院巡察组-启用-停用巡查组
+export function checkGroupEnable(query) {
+  return request({
+    url: '/security/checkGroup/enable',
+    method: 'put',
+    params: query
+  })
+}
+
+//校院巡察组-通过id删除巡查组
+export function checkGroupDelete(query) {
+  return request({
+    url: '/security/checkGroup/delete',
+    method: 'delete',
+    params: query
+  })
+}
+//校院巡察组-新增
+export function checkGroupAdd(data) {
+  return request({
+    url: '/security/checkGroup/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//校院巡察组-编辑
+export function checkGroupUpdate(data) {
+  return request({
+    url: '/security/checkGroup/update',
+    method: 'put',
+    data: data
+  })
+}
+
+//校院巡察组-获取巡察组下拉列表
+export function findGroupList(data) {
+  return request({
+    url: '/security/checkGroup/findGroupList',
+    method: 'post',
+    data: data
+  })
+}
+//校院巡察组-获取巡察组下拉列表ID获取巡查组人员
+
+/***************************安全隐患***************************/
+
+//安全隐患-校院巡察/实验室自查-安全隐患列表
+//整改报告-报告隐患列表
+export function checkHazardList(query) {
+  return request({
+    url: '/security/checkHazard/list',
+    method: 'get',
+    params: query
+  })
+}
+//待整改
+export function rectifyList(query) {
+  return request({
+    url: '/security/checkHazard/rectifyList',
+    method: 'get',
+    params: query
+  })
+}
+//待复核
+export function recheckList(query) {
+  return request({
+    url: '/security/checkHazard/recheckList',
+    method: 'get',
+    params: query
+  })
+}
+//已完成
+export function overList(query) {
+  return request({
+    url: '/security/checkHazard/overList',
+    method: 'get',
+    params: query
+  })
+}
+
+//安全隐患-校院巡察/批量审核列表
+export function batchApprovalList(query) {
+  return request({
+    url: '/security/checkHazard/batchApprovalList',
+    method: 'get',
+    params: query
+  })
+}
+
+//安全隐患-暂无法整改列表数据
+export function unableRectifyList(query) {
+  return request({
+    url: '/security/checkHazard/unableRectifyList',
+    method: 'get',
+    params: query
+  })
+}
+
+//安全隐患-批量审核
+export function batchApprove(data) {
+  return request({
+    url: '/security/checkRectify/batchApprove',
+    method: 'post',
+    data: data
+  })
+}
+
+//安全隐患-隐患详情
+export function getHazardById(query) {
+  return request({
+    url: '/security/checkHazard/getHazardById',
+    method: 'get',
+    params: query
+  })
+}
+
+//安全隐患-隐患整改-隐患审核
+export function addOrApprove(data) {
+  return request({
+    url: '/security/checkRectify/addOrApprove',
+    method: 'post',
+    data: data
+  })
+}
+
+
+/***************************数据统计***************************/
+
+//数据统计-实验室列表头部数据汇总
+export function dataStatisticsSubListTop(query) {
+  return request({
+    url: '/security/DataStatistics/subListTop',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-按实验室查询列表
+export function dataStatisticsSubList(query) {
+  return request({
+    url: '/security/DataStatistics/subList',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-安全隐患列表头部数据汇总
+export function dataStatisticsHazardListTop(query) {
+  return request({
+    url: '/security/DataStatistics/hazardListTop',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-按安全隐患查询列表
+export function dataStatisticsHazardList(query) {
+  return request({
+    url: '/security/DataStatistics/hazardList',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-指标列表头部数据汇总
+export function dataStatisticsItemsListTop(query) {
+  return request({
+    url: '/security/DataStatistics/itemsListTop',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-按指标查询列表
+export function dataStatisticsItemsList(query) {
+  return request({
+    url: '/security/DataStatistics/itemsList',
+    method: 'get',
+    params: query
+  })
+}
+
+//数据统计-按检查内容查询列表
+export function dataStatisticsContentList(query) {
+  return request({
+    url: '/security/DataStatistics/contentList',
+    method: 'get',
+    params: query
+  })
+}
+//数据统计-按检查内容头部数据汇总
+export function dataStatisticsContentListTop(query) {
+  return request({
+    url: '/security/DataStatistics/hazardContentTop',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/***************************通用接口***************************/
+
+//通用接口-人员查询(过滤已选/未选)
+export function findUserList(data) {
+  return request({
+    url: '/system/user/findUserList',
+    method: 'post',
+    data: data
+  })
+}
+//通用接口-设备查询(过滤已选/未选)
+export function findDeviceList(data) {
+  return request({
+    url: '/laboratory/hazard/queryHazardList',
+    method: 'post',
+    data: data
+  })
+}
+//通用接口-设备确定提交
+export function haveHazardInSub(data) {
+  return request({
+    url: '/laboratory/hazard/haveHazardInSub',
+    method: 'post',
+    data: data
+  })
+}
+
+//通用接口-查询检查项再特定实验室发生历史次数
+export function countHazardNum(query) {
+  return request({
+    url: '/security/checkHazard/countHazardNum',
+    method: 'get',
+    params: query
+  })
+}
+
+//通用接口-根据实验室id查询该实验室有关计划
+export function getCheckPlanBySubId(query) {
+  return request({
+    url: '/security/checkManage/getCheckPlanBySubId',
+    method: 'get',
+    params: query
+  })
+}
+
+//通用接口-根据楼栋ID查询实验室列表
+//通用接口-根据名称查询实验室列表
+export function buildBySubList(query) {
+  return request({
+    url: '/laboratory/subject/buildBySub/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//通用接口-根据实验室id分类查询实验室内设备
+export function getHazardListBySub(query) {
+  return request({
+    url: '/laboratory/hazard/getHazardListBySub',
+    method: 'get',
+    params: query
+  })
+}
+//通用接口-根据实验室id分类查询实验室内设备
+export function getHazardInfoBySubId(query) {
+  return request({
+    url: '/laboratory/hazard/getHazardInfoBySubId',
+    method: 'get',
+    params: query
+  })
+}
+//通用接口-根据选择的设备id生成检查项
+export function getHazardInfo(query) {
+  return request({
+    url: '/security/checkManage/getHazardInfo',
+    method: 'get',
+    params: query
+  })
+}
+//通用接口-根据选择的设备id生成检查项
+export function getHazardInfoByJoinIds(query) {
+  return request({
+    url: '/security/checkManage/getHazardInfoByJoinIds',
+    method: 'get',
+    params: query
+  })
+}
+
+//开展检查-提交
+export function checkManageAdd(data) {
+  return request({
+    url: '/security/checkManage/add',
+    method: 'post',
+    data: data
+  })
+}
+//通知配置-获取通知配置
+export function noticeConfigList(query) {
+  return request({
+    url: '/security/noticeConfig/list',
+    method: 'get',
+    params: query
+  })
+}
+//通知配置-提交通知配置
+export function noticeConfigAdd(data) {
+  return request({
+    url: '/security/noticeConfig/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//附件列表查询-通过计划ID查询附件列表
+export function getFindByCheckPlanId(query) {
+  return request({
+    url: '/security/upload/findByCheckPlanId',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台跳转后-按指标统计列表
+export function hiddenDataItemsSubList(query) {
+  return request({
+    url: '/security/collegCheck/hiddenDataItemsSubList',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台跳转后-按指标统计顶部数据
+export function hiddenDataItemsSubListTop(query) {
+  return request({
+    url: '/security/collegCheck/hiddenDataItemsSubListTop',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台跳转后-按名称搜索权限下实验室列表
+export function listSubAdmin(query){
+  return request({
+    url: '/laboratory/subject/list/listSubAdmin',
+    method: 'get',
+    params: query
+  })
+}
+
+//工作台跳转后-获取当前角色所属院系ID
+export function getloginUser(query){
+  return request({
+    url: '/security/collegCheck/getloginUser',
+    method: 'get',
+    params: query
+  })
+}
+
+//整改报告-查看文档模式数据
+export function viewReport(id){
+  return request({
+    url: '/security/checkRectify/viewReport/'+id,
+    method: 'get',
+  })
+}
+
+//整改通知书-查看文档模式数据
+export function getRectifyAdviceNoteView(id){
+  return request({
+    url: '/security/checkManage/getRectifyAdviceNoteView/'+id,
+    method: 'get',
+  })
+}
+
+//整改告知书-查看文档模式数据
+export function getRectifyNotificationView(id){
+  return request({
+    url: '/security/checkManage/getRectifyNotificationView/'+id,
+    method: 'get',
+  })
+}
+
+//下载-整改报告
+//下载-通知书
+//下载-告知书
+//下载-检查材料
+//批量下载-检查材料
+
+//获取权限范围(巡查/自查)
+export function getGentle(query){
+  return request({
+    url: '/security/checkSet/getGentle',
+    method: 'get',
+    params: query
+  })
+}

+ 13 - 3
src/api/system/dept.js

@@ -25,7 +25,7 @@ export function listDepartments() {
     method: 'get'
   })
 }
-// 查询楼栋列表-通过院系ID
+// 查询楼栋列表-通过院系ID(组织架构优化后废弃2023/6/20)
 export function listbuildings(id) {
   return request({
     url: `/system/dept/${id}/building/list`,
@@ -49,10 +49,11 @@ export function getDept(deptId) {
 }
 
 // 查询部门下拉树结构
-export function treeselect() {
+export function treeselect(query) {
   return request({
     url: '/system/dept/treeselect',
-    method: 'get'
+    method: 'get',
+    params: query
   })
 }
 
@@ -118,3 +119,12 @@ export function treeselectByUser(data) {
     data: data
   })
 }
+
+//查询学院列表(根据数据权限)
+export function getDeptNoAuthList(data) {
+  return request({
+    url: '/system/dept/getDeptNoAuthList?deptType=1',
+    method: 'get',
+    data: data
+  })
+}

+ 9 - 0
src/api/system/post.js

@@ -52,3 +52,12 @@ export function allListPost(query) {
     params: query
   })
 }
+
+//查询权限组下拉列表
+export function optionselect(query) {
+  return request({
+    url: '/system/role/optionselect',
+    method: 'get',
+    params: query
+  })
+}

+ 19 - 2
src/api/system/role.js

@@ -9,7 +9,7 @@ export function listRole(query) {
   })
 }
 
-// 查询角色详细
+// 查询角色已有权限
 export function getRole(roleId) {
   return request({
     url: '/system/role/' + roleId,
@@ -107,4 +107,21 @@ export function authUserSelectAll(data) {
     method: 'put',
     params: data
   })
-}
+}
+
+// 新增
+export function addRoleByScope(data) {
+  return request({
+    url: '/system/role/addRoleByScope',
+    method: 'POST',
+    data: data
+  })
+}
+// 编辑
+export function editRoleByScope(data) {
+  return request({
+    url: '/system/role/editRoleByScope',
+    method: 'PUT',
+    data: data
+  })
+}

+ 18 - 0
src/api/system/user_teacher.js

@@ -284,6 +284,14 @@ export function treeselect(query) {
     params: query
   })
 }
+// 查询角色列表下拉树结构
+export function roleOptionselect(query) {
+  return request({
+    url: '/system/role/optionselect',
+    method: 'get',
+    params: query
+  })
+}
 
 //批量获取老师数据
 export function teacherBatchSelect(data) {
@@ -301,3 +309,13 @@ export function teacherUpdateCardNum(data) {
     data: data
   })
 }
+
+//获取角色列表(无权限)
+export function noAuthOptionselect(query) {
+  return request({
+    url: '/system/role/noAuthOptionselect',
+    method: 'get',
+    params: query
+  })
+}
+

+ 115 - 0
src/api/trainingCourse/index.js

@@ -0,0 +1,115 @@
+import request from '@/utils/request'
+
+// 获取培训课程列表
+export function securitycourseList(query) {
+  return request({
+    url: '/exam/securitycourse/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取培训课程详情
+export function securitycourseInfo(id) {
+  return request({
+    url: '/exam/securitycourse/'+id,
+    method: 'get',
+  })
+}
+
+//获取详情学生列表
+export function singList(query) {
+  return request({
+    url: '/exam/securitycourse/singList/',
+    method: 'get',
+    params: query
+  })
+}
+
+//新增课程
+export function securitycourseAdd(data) {
+  return request({
+    url: '/exam/securitycourse/',
+    method: 'post',
+    data: data
+  })
+}
+
+//编辑课程
+export function securitycourseEdit(data) {
+  return request({
+    url: '/exam/securitycourse/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+//删除课程
+export function securitycourseDel(id) {
+  return request({
+    url: '/exam/securitycourse/'+id,
+    method: 'delete',
+  })
+}
+
+// 查询老师列表
+export function selectUser(query) {
+  return request({
+    url: '/system/user/teacher/selectUser',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询学院列表
+export function departmentsList(query) {
+  return request({
+    url: '/system/dept/departments/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实验室列表
+export function subListAdmin(query) {
+  return request({
+    url: '/laboratory/subject/list/listAdmin',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询学生列表
+export function findUserList(data) {
+  return request({
+    url: '/system/user/findStudenList',
+    method: 'post',
+    data: data
+  })
+}
+
+//手持用户管理列表
+export function pdaUserList(query) {
+  return request({
+    url: '/system/pdaUser/list',
+    method: 'get',
+    params: query
+  })
+}
+
+//手持用户新增
+export function pdaUser(data) {
+  return request({
+    url: '/system/pdaUser/',
+    method: 'post',
+    data: data
+  })
+}
+
+//手持用户删除
+export function pdaUserDel(id) {
+  return request({
+    url: '/system/pdaUser/'+id,
+    method: 'delete',
+  })
+}

BIN
src/assets/ZDimages/personnelManagement/icon_dr_wj.png


BIN
src/assets/ZDimages/safetyCheck/icon_delete.png


BIN
src/assets/ZDimages/safetyCheck/icon_dr_wj.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_aqyh.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_aqyht.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_bg.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_by.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_dn.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_dy.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_gjyh.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_gjyh_2.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_kzjc.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_sjsys.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_sjsys_2.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_sjtj.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_ssp.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_sy.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_syszc.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_xcgl.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_xyxc.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_yjcsys.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_zcgl.png


BIN
src/assets/ZDimages/safetyCheck/icon_gzt_zgbg.png


BIN
src/assets/ZDimages/safetyCheck/icon_jhbt.png


BIN
src/assets/ZDimages/safetyCheck/icon_xyxc_cy.png


BIN
src/assets/ZDimages/safetyCheck/icon_xyxc_qx.png


BIN
src/assets/ZDimages/safetyCheck/icon_xyxc_sys.png


BIN
src/assets/ZDimages/safetyCheck/icon_xyxc_xy.png


BIN
src/assets/ZDimages/safetyCheck/icon_xz_xyxc.png


BIN
src/assets/ZDimages/safetyCheck/icon_zcgl_cg.png


BIN
src/assets/ZDimages/safetyCheck/icon_zcgl_sb.png


BIN
src/assets/ZDimages/safetyCheck/search 10.png


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/化学品盘点.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/培训课程.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/学校.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/安全隐患.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/实验管理.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/开展检查.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/报告 (1).svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/报告.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/检查配置2.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/统计.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/随手拍管理.svg


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
src/assets/icons/svg/项目管理.svg


+ 89 - 0
src/assets/styles/ZDcolorClass.scss

@@ -110,6 +110,7 @@
 }
 //==============================按钮样式
 .del-button-one-90{
+  font-weight:500;
   width: 90px;
   height: 40px;
   line-height:40px;
@@ -131,6 +132,7 @@
   color:#fff;
 }
 .add-button-one-90{
+  font-weight:500;
   width: 90px;
   height: 40px;
   line-height:40px;
@@ -152,6 +154,7 @@
   color:#fff;
 }
 .add-button-one-120{
+  font-weight:500;
   width: 120px;
   height: 40px;
   line-height:40px;
@@ -173,6 +176,7 @@
   color:#fff;
 }
 .add-button-one-150{
+  font-weight:500;
   width: 150px;
   height: 40px;
   line-height:40px;
@@ -194,6 +198,7 @@
   color:#fff;
 }
 .add-button-two-90{
+  font-weight:500;
   width: 90px;
   height: 40px;
   line-height:40px;
@@ -215,6 +220,7 @@
   color:#fff;
 }
 .inquire-button-one{
+  font-weight:500;
   cursor:pointer;
   display: inline-block;
   text-align: center;
@@ -233,6 +239,7 @@
   border: 1px solid #0183FA;
 }
 .inquire-button-two{
+  font-weight:500;
   cursor:pointer;
   display: inline-block;
   text-align: center;
@@ -251,6 +258,7 @@
   border: 1px solid #FFD700;
 }
 .reset-button-one{
+  font-weight:500;
   cursor:pointer;
   display: inline-block;
   text-align: center;
@@ -269,6 +277,67 @@
   background:rgba(1,131,250,0.1);
   border: 1px solid #0183FA;
 }
+//===========================浮窗按钮样式===========================
+.dialog-footer-box{
+  font-weight:500;
+  .dialog-footer-button-null{
+    flex:1;
+  }
+  .dialog-footer-button-info{
+    width:70px;
+    height:30px;
+    line-height:30px;
+    text-align: center;
+    border:1px solid #E0E0E0;
+    background:#E0E0E0;
+    color:#999999;
+    cursor: pointer;
+    font-size:12px;
+    margin:0 10px;
+    border-radius:6px;
+  }
+  .dialog-footer-button-info:hover{
+    border:1px solid #999999;
+    color:#fff;
+    background:#999999;
+  }
+  .dialog-footer-button-primary{
+    width:70px;
+    height:30px;
+    line-height:30px;
+    text-align: center;
+    border:1px solid #0045AF;
+    color:#fff;
+    background:#0045AF;
+    cursor: pointer;
+    font-size:12px;
+    margin:0 10px;
+    border-radius:6px;
+  }
+  .dialog-footer-button-primary:hover{
+    border:1px solid #409eff;
+    color:#fff;
+    background:#409eff;
+  }
+  .dialog-footer-button-border{
+    width:70px;
+    height:30px;
+    line-height:30px;
+    text-align: center;
+    border:1px solid #0045AF;
+    color:#0045AF;
+    background:#fff;
+    cursor: pointer;
+    font-size:12px;
+    margin:0 10px;
+    border-radius:6px;
+  }
+  .dialog-footer-button-border:hover{
+    border:1px solid #409eff;
+    color:#fff;
+    background:#409eff;
+  }
+}
 //===========================表格内按钮===========================
 .table-button-box{
   font-weight:500;
@@ -340,6 +409,7 @@
   color:$color_ff;
 }
 .table-button-one-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -361,6 +431,7 @@
   color:$color_ff;
 }
 .table-button-warning-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -380,6 +451,7 @@
   background: $color_FFC76E;
 }
 .table-button-warning-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -400,6 +472,7 @@
 }
 
 .table-button-grey-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -419,6 +492,7 @@
   background: #999;
 }
 .table-button-grey-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -440,6 +514,7 @@
 
 
 .table-button-success-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -459,6 +534,7 @@
   background: #39A922;
 }
 .table-button-success-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -474,6 +550,7 @@
   }
 }
 .table-button-success-120-none{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -493,6 +570,7 @@
 }
 
 .table-button-purple-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -512,6 +590,7 @@
   background: #C179F4;
 }
 .table-button-purple-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -531,6 +610,7 @@
   background: #C179F4;
 }
 .table-button-dark-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -552,6 +632,7 @@
   color:$color_ff;
 }
 .table-button-dark-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -573,6 +654,7 @@
   color:$color_ff;
 }
 .table-button-red-90{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -594,6 +676,7 @@
   color:$color_ff;
 }
 .table-button-red-120{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -609,6 +692,7 @@
   }
 }
 .table-button-red-120-none{
+  font-weight:500;
   width:120px;
   height:30px;
   line-height:30px;
@@ -629,6 +713,7 @@
   color:$color_ff;
 }
 .table-more-p{
+  font-weight:500;
   width:90px;
   height:30px;
   line-height:30px;
@@ -647,6 +732,10 @@
 .table-type-color-green{
   color:#52D273;
 }
+//===========================导出按钮=======================
+.form-dropdown-box{
+  font-weight:500!important;
+}
 //===========================考试级别颜色=======================
 .exam-level-1{
   color:$exam1;

+ 47 - 6
src/assets/styles/ZDelement.scss

@@ -9,6 +9,12 @@
 .el-message--error{
   background-color: rgba(254,240,240,0.4);
 }
+/*===================================input textarea样式===================================*/
+.el-textarea .el-input__count{
+  line-height:20px;
+  height:20px;
+  background-color: rgba(255,255,255,0);
+}
 /*===================================多选框样式===================================*/
 .el-tag.el-tag--info{
   color:#0183fa!important;
@@ -65,6 +71,19 @@
   text-align: right;
 }
 /*===================================表格===================================*/
+.el-table{
+  border-right:1px solid #dfe6ec;
+  background-color: #f5f5f5;
+}
+.el-table .caret-wrapper{
+  height:20px;
+}
+.el-table .sort-caret.ascending{
+  top:-3px;
+}
+.el-table .sort-caret.descending{
+  bottom:-1px;
+}
 .el-table--group::after, .el-table--border::after{
   width:0;
 }
@@ -78,12 +97,11 @@
 .el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th{
   color:$color_33;
   background-color:#f5f5f5;
-}
-.el-table__header-wrapper{
-  height:60px;
+  line-height:20px;
 }
 .el-table__body-wrapper{
-  border-right:1px solid #dfe6ec;
+  //border-right:1px solid #dfe6ec;
+  background-color: #fff;
   flex: 1;
   overflow-y: scroll!important;
 }
@@ -97,12 +115,13 @@
 }
 .el-table__body-wrapper::-webkit-scrollbar-thumb{
   border-radius: 5px;
+  //background: #CBCDD1;
   background: #CBCDD1;
 }
 .el-table__body-wrapper::-webkit-scrollbar-track{
-  -webkit-box-shadow: inset 0 0 5px rgba(255,255,255,0);
+  -webkit-box-shadow: inset 0 0 5px rgba(255,255,255,1);
   border-radius: 0;
-  background: rgba(255,255,255,0);
+  background: rgba(255,255,255,1);
 }
 //表格内容高度部分
 //表头
@@ -123,6 +142,8 @@
   padding: 8px 0;
 }
 .el-table__header-wrapper{
+  width: calc(100% - 9px);
+  border-right:1px solid #f5f5f5;
   height:40px;
   th, td{
     padding:8px 0;
@@ -261,6 +282,7 @@
   width:100%;
   height:100%;
   background: url("../ZDimages/null-data-1.png") no-repeat 50% 50%;
+  background-color: #fff;
   background-size: 10%;
 }
 /*======================el-dialog弹窗居中*/
@@ -481,3 +503,22 @@
   height:30px;
   padding:0;
 }
+//时间选择器中间边框位置调整
+.el-time-spinner__wrapper{
+  margin-top:-16px;
+}
+/************ cascader内容过长 ***********/
+.cascader-filterable-hazardCheckPro{
+  width:898px;
+  .el-cascader-panel{
+    width:898px;
+    .el-scrollbar{
+      width:898px;
+    }
+  }
+  span{
+    height:34px;
+    line-height: 34px;
+    overflow: hidden;
+  }
+}

+ 29 - 0
src/assets/styles/ZDpageCss.scss

@@ -227,6 +227,35 @@ p{
     margin: 0;
   }
 }
+//巡察组管理
+.inspectionGroup{
+  .switch .el-switch__label {
+    position: absolute;
+    display: none;
+  }
+  .switch .el-switch__label--right {
+    z-index: 1;
+    color: #fff !important;
+  }
+  .switch .el-switch__label--right span{
+    margin-left: 10px;
+  }
+  .switch .el-switch__label--left {
+    z-index: 1;
+    color: #A2A2A2 !important;
+  }
+  .switch .el-switch__label--left span{
+    margin-left: 24px;
+  }
+  .switch .el-switch__label.is-active {
+    display: block;
+  }
+  .switch.el-switch .el-switch__core,
+  .el-switch .el-switch__label {
+    width: 60px !important;
+    margin: 0;
+  }
+}
 //供应商管理
 .supplier{
   .switch .el-switch__label {

Разница между файлами не показана из-за своего большого размера
+ 461 - 0
src/components/lookDocumentDialog/components/informDom.vue


Разница между файлами не показана из-за своего большого размера
+ 421 - 0
src/components/lookDocumentDialog/components/noticeDom.vue


Разница между файлами не показана из-за своего большого размера
+ 359 - 0
src/components/lookDocumentDialog/components/rectificationReportDom.vue


+ 179 - 0
src/components/lookDocumentDialog/lookDocumentDataDialog.vue

@@ -0,0 +1,179 @@
+<!--
+    查看单个文档
+    <lookDocumentDataDialog v-if="lookDocumentType" :propsLookDocumentData="propsLookDocumentData"></lookDocumentDataDialog>
+
+    import lookDocumentDataDialog from '@/components/lookDocumentDialog/lookDocumentDataDialog.vue'
+
+    components: {
+      lookDocumentDataDialog
+    },
+
+    data(){
+      return{
+        //子组件数据
+        lookDocumentType:false,
+        propsLookDocumentData:{},
+      }
+    }
+
+    //查看单个文档
+    lookDocumentButton(type,row){
+      if(type==1){
+        this.$set(this,'propsLookDocumentData',{
+          title:"整改报告",
+          type:1,
+          id:row.id,
+          name:row.title
+        });
+        this.$set(this,'lookDocumentType',true);
+      }else{
+        this.$set(this,'lookDocumentType',false);
+      }
+    },
+-->
+<template>
+  <el-dialog class="lookDocumentDataDialog" :title="lookDocumentTitle"
+             :class="fullScreenType?'lookDocumentDataDialog-fullScreen':''"
+             :visible.sync="lookDocumentType" v-if="lookDocumentType"
+             @close="outLook"
+             width="834px" height="645px" append-to-body>
+    <div class="lookDocumentDataDialog-page scrollbar-box">
+      <rectificationReportDom v-if="documentType == 1" :propsRectificationReportData="propsRectificationReportData"></rectificationReportDom>
+      <noticeDom v-if="documentType == 2" :propsNoticeDomData="propsNoticeDomData"></noticeDom>
+      <informDom v-if="documentType == 3" :propsInformDomData="propsInformDomData"></informDom>
+    </div>
+    <p class="positionButton" @click="fullScreenButton">{{fullScreenType?'退出':'全屏'}}</p>
+    <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="outLook">取消</p>
+      <p class="dialog-footer-button-primary" @click="downloadButton">下载</p>
+      <p class="dialog-footer-button-null"></p>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import rectificationReportDom from './components/rectificationReportDom.vue'
+  import noticeDom from './components/noticeDom.vue'
+  import informDom from './components/informDom.vue'
+  export default {
+    name: 'lookDocumentDataDialog',
+    props:{
+      propsLookDocumentData:{},
+    },
+    components: {
+      rectificationReportDom,
+      noticeDom,
+      informDom
+    },
+    data(){
+      return{
+        //全屏状态
+        fullScreenType:false,
+        lookDocumentType:true,
+        lookDocumentTitle:"",
+        lookDocumentSrc:"",
+        documentType:null,//1.整改报告 2.通知书 3.告知书,
+        //整改报告
+        propsRectificationReportData:{},
+        //通知书
+        propsNoticeDomData:{},
+        //告知书
+        propsInformDomData:{},
+      }
+    },
+    created(){
+      this.$set(this,'lookDocumentTitle',this.propsLookDocumentData.title);
+      if(this.propsLookDocumentData.type == 1){
+        this.$set(this.propsRectificationReportData,'id',this.propsLookDocumentData.id)
+        this.$set(this,'documentType',1)
+      }else if(this.propsLookDocumentData.type == 2){
+        this.$set(this.propsNoticeDomData,'id',this.propsLookDocumentData.id)
+        this.$set(this,'documentType',2)
+      }else if(this.propsLookDocumentData.type == 3){
+        this.$set(this.propsInformDomData,'id',this.propsLookDocumentData.id)
+        this.$set(this,'documentType',3)
+      }
+    },
+    mounted(){
+
+    },
+    methods:{
+      // 返回按钮
+      outLook(){
+        this.$parent.lookDocumentButton(2)
+      },
+      // 下载按钮
+      downloadButton(){
+        if(this.documentType == 1){
+          this.download('/zd-security/checkRectify/genReport/'+this.propsLookDocumentData.id, {}, this.propsLookDocumentData.name+'(整改报告).docx')
+        }else if(this.documentType == 2){
+          this.download('/zd-security/checkManage/getRectifyAdviceNote/'+this.propsLookDocumentData.id, {}, this.propsLookDocumentData.name+'(整改通知书).docx')
+        }else if(this.documentType == 3){
+          this.download('/zd-security/checkManage/getRectifyNotification/'+this.propsLookDocumentData.id, {}, this.propsLookDocumentData.name+'(整改告知书).docx')
+        }
+      },
+      fullScreenButton(){
+        this.fullScreenType = !this.fullScreenType
+      },
+      //打开新窗口
+      goPage(){
+        window.open(this.lookDocumentSrc)
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .lookDocumentDataDialog{
+    .lookDocumentDataDialog-page{
+      display: flex;
+      flex-direction: column;
+      flex:1;
+      height:645px;
+      position: relative;
+    }
+    .positionButton{
+      position: absolute;
+      top:15px;
+      right: 15px;
+      border:1px solid #0183fa;
+      border-radius:4px;
+      line-height:30px;
+      width:60px;
+      text-align: center;
+      cursor: pointer;
+      color:#0183fa;
+      background-color: #fff;
+    }
+    .positionButton:hover{
+      background-color:#0183fa;
+      color:#fff;
+    }
+  }
+  .lookDocumentDataDialog-fullScreen{
+    background-color: #666;
+    .positionButton{
+      top:25px;
+      right: 15px;
+    }
+    ::v-deep .el-dialog{
+      width:100% !important;
+      height:100% !important;
+      box-shadow: none;
+    }
+    ::v-deep .el-dialog__header{
+      display: none;
+    }
+    ::v-deep .el-dialog__body{
+      height:100% !important;
+      background-color: #666;
+      .lookDocumentDataDialog-page{
+        height:100%;
+      }
+    }
+    ::v-deep .el-dialog__footer{
+      display: none;
+    }
+  }
+</style>

+ 111 - 0
src/components/lookDocumentDialog/lookDocumentDialog.vue

@@ -0,0 +1,111 @@
+<!--
+    查看单个文档
+
+    import lookDocumentDialog from '@/components/lookDocumentDialog/lookDocumentDialog.vue'
+
+    components: {
+      lookDocumentDialog
+    },
+
+    <lookDocumentDialog v-if="lookDocumentType" :propsLookDocumentData="propsLookDocumentData"></lookDocumentDialog>
+
+    //查看单个文档
+    lookDocumentButton(type){
+      if(type==1){
+        this.$set(this,'propsLookDocumentData',{
+          title:"整改报告",
+          url:this.addForm.data7[0].url
+        });
+        this.$set(this,'lookDocumentType',true);
+      }else{
+        this.$set(this,'lookDocumentType',false);
+      }
+    },
+-->
+<template>
+  <el-dialog class="lookDocumentDialog" :title="lookDocumentTitle"
+             :visible.sync="lookDocumentType" v-if="lookDocumentType"
+             @close="outLook"
+             width="1300px" height="700" append-to-body>
+    <div class="lookDocumentDialog-page">
+      <iframe
+        v-if="lookDocumentSrc"
+        class="iframe"
+        :src="lookDocumentSrc" scrolling="auto" frameborder="0">
+      </iframe>
+      <p class="positionButton" @click="goPage">全屏</p>
+    </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="outLook">取消</p>
+      <p class="dialog-footer-button-primary" @click="downloadButton">下载</p>
+      <p class="dialog-footer-button-null"></p>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: 'lookDocumentDialog',
+    props:{
+      propsLookDocumentData:{},
+    },
+    data(){
+      return{
+        lookDocumentType:true,
+        lookDocumentTitle:"",
+        lookDocumentSrc:"",
+      }
+    },
+    created(){
+      this.$set(this,'lookDocumentTitle',this.propsLookDocumentData.title);
+      this.$set(this,'lookDocumentSrc',this.urlJudge(this.propsLookDocumentData.url));
+    },
+    mounted(){
+
+    },
+    methods:{
+      // 返回按钮
+      outLook(){
+        this.$parent.lookDocumentButton(2)
+      },
+      // 下载按钮
+      downloadButton(){
+        this.download(this.propsLookDocumentData.url, {}, this.propsLookDocumentData.name)
+      },
+      //打开新窗口
+      goPage(){
+        window.open(this.lookDocumentSrc)
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .lookDocumentDialog{
+    .lookDocumentDialog-page{
+      display: flex;
+      flex:1;
+      height:645px;
+      overflow: hidden;
+      padding:0 50px;
+      position: relative;
+      .positionButton{
+        position: absolute;
+        top:15px;
+        right: 225px;
+        border:1px solid #0183fa;
+        border-radius:4px;
+        line-height:30px;
+        width:60px;
+        text-align: center;
+        cursor: pointer;
+        color:#0183fa;
+        background-color: #fff;
+      }
+      .iframe{
+        flex:1;
+      }
+    }
+  }
+</style>

+ 222 - 0
src/components/lookDocumentDialog/lookDocumentListDialog.vue

@@ -0,0 +1,222 @@
+<!--
+    查看多个文档
+
+    import lookDocumentListDialog from '@/components/lookDocumentDialog/lookDocumentListDialog.vue'
+
+    components: {
+      lookDocumentListDialog
+    },
+
+    <lookDocumentListDialog v-if="lookDocumentListType" :propsLookDocumentListData="propsLookDocumentListData"></lookDocumentListDialog>
+
+      //查看多个文档
+      lookDocumentListButton(type){
+        if(type==1){
+          this.$set(this,'propsLookDocumentListData',{
+            title:"查看附件",
+            list:this.addForm.data7
+          });
+          this.$set(this,'lookDocumentListType',true);
+        }else{
+          this.$set(this,'lookDocumentListType',false);
+        }
+      },
+-->
+<template>
+  <el-dialog class="lookDocumentListDialog" :title="lookDocumentListTitle"
+             :visible.sync="lookDocumentListType" v-if="lookDocumentListType"
+             @close="outLook"
+             width="1300px" height="700" append-to-body>
+    <div class="lookDocumentListDialog-page">
+      <div class="left-box">
+        <div class="left-title-box">
+          <img src="@/assets/ZDimages/safetyCheck/icon_dr_wj.png">
+          <p>材料附件</p>
+          <p class="button-p" @click="allDownloadButton">全部下载</p>
+        </div>
+        <div class="left-for-box scrollbar-box">
+          <p class="left-for-p" v-for="(iframeItem,iframeIndex) in lookDocumentList" :key="iframeIndex"
+             @click="lookDocumentListCheck(iframeIndex)"
+             :class="lookDocumentListIndex == iframeIndex?'check-p':''">{{iframeItem.name}}</p>
+        </div>
+      </div>
+      <div class="center-border"></div>
+      <div class="right-box">
+        <iframe
+          v-if="lookDocumentSrc"
+          class="iframe"
+          :src="lookDocumentSrc" scrolling="auto" frameborder="0">
+        </iframe>
+        <p class="positionButton" @click="goPage">全屏</p>
+      </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="outLook">取消</p>
+      <p class="dialog-footer-button-primary" @click="downloadButton">下载</p>
+      <p class="dialog-footer-button-null"></p>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: 'lookDocumentListDialog',
+    props:{
+      propsLookDocumentListData:{},
+    },
+    data(){
+      return{
+        lookDocumentListType:true,
+        lookDocumentListTitle:"",
+        lookDocumentList:[],
+        lookDocumentSrc:"",
+        lookDocumentListIndex:0,
+      }
+    },
+    created(){
+      this.$set(this,'lookDocumentListTitle',this.propsLookDocumentListData.title);
+      this.$set(this,'lookDocumentList',this.propsLookDocumentListData.list);
+      this.$set(this,'lookDocumentSrc',this.urlJudge(this.propsLookDocumentListData.list[0].url));
+    },
+    mounted(){
+
+    },
+    methods:{
+      //全部下载
+      allDownloadButton(){
+        let self = this;
+        for(let i=0;i<self.lookDocumentList.length;i++){
+          this.downloadUrl(this.lookDocumentList[i].url,this.lookDocumentList[i].name)
+        }
+      },
+      // 切换按钮
+      lookDocumentListCheck(val){
+        console.log(val)
+        this.$set(this,'lookDocumentListIndex',val);
+        this.$set(this,'lookDocumentSrc',this.urlJudge(this.lookDocumentList[val].url));
+      },
+      // 返回按钮
+      outLook(){
+        this.$parent.lookDocumentListButton(2)
+      },
+      // 下载按钮
+      downloadButton(){
+        this.downloadUrl(this.lookDocumentList[this.lookDocumentListIndex].url,this.lookDocumentList[this.lookDocumentListIndex].name)
+      },
+      //打开新窗口
+      goPage(){
+        window.open(this.lookDocumentSrc)
+      },
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  .lookDocumentListDialog{
+    .lookDocumentListDialog-page{
+      display: flex;
+      flex:1;
+      height:645px;
+      overflow: hidden;
+      padding:0 50px;
+      .left-box{
+        display: flex;
+        flex-direction: column;
+        overflow: hidden;
+        width:265px;
+        .left-title-box{
+          padding-bottom:20px;
+          display: flex;
+          width:230px;
+          border-bottom:1px dashed #D8D8D8;
+          img{
+            width:16px;
+            height:13px;
+            margin:13px 15px 13px 0;
+          }
+          p:nth-child(2){
+            flex:1;
+            line-height:40px;
+            font-size:16px;
+            color:#0183FA;
+          }
+          .button-p{
+            padding:0 10px;
+            margin-top:5px;
+            height:30px;
+            line-height:30px;
+            font-size:14px;
+            color:#0183FA;
+            border:1px solid #0183FA;
+            border-radius:4px;
+            cursor: pointer;
+          }
+          .button-p:hover{
+            color:#fff;
+            border:1px solid #0183FA;
+            background-color: #0183FA;
+          }
+        }
+        .left-for-box{
+          flex:1;
+          .left-for-p{
+            padding:0 10px;
+            width:230px;
+            line-height:40px;
+            margin-top:10px;
+            font-size:16px;
+            color:#333;
+            display:block;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+            cursor: pointer;
+          }
+          .check-p{
+            background-color:rgba(1,131,250,0.2);
+            color:#0183FA;
+          }
+        }
+      }
+      .center-border{
+        border-right:1px dashed #D8D8D8;
+      }
+      .right-box{
+        flex:1;
+        display: flex;
+        margin-left:57px;
+        position: relative;
+        .positionButton{
+          position: absolute;
+          top:15px;
+          right: 35px;
+          border:1px solid #0183fa;
+          border-radius:4px;
+          line-height:30px;
+          width:60px;
+          text-align: center;
+          cursor: pointer;
+          color:#0183fa;
+          background-color: #fff;
+        }
+        .iframe{
+          flex:1;
+        }
+      }
+      .out-button{
+        width:60px;
+        line-height:30px;
+        color:#999;
+        background-color: #dedede;
+        border-radius:4px;
+        text-align: center;
+        cursor: pointer;
+        position: absolute;
+        top:17px;
+        right:17px;
+        z-index:99999;
+      }
+    }
+  }
+</style>

+ 142 - 0
src/components/qrCodeDialog/index.vue

@@ -0,0 +1,142 @@
+<!--  公共二维码dialog组件
+
+1.引入方式
+
+  <qr-code-dialog v-if="qrCodeDialogType" :qrCodeDialogData="qrCodeDialogData"></qr-code-dialog>
+
+  import qrCodeDialog from "@/components/qrCodeDialog/index.vue"
+
+  components: {
+    qrCodeDialog
+  },
+
+2.必要参数
+
+  qrCodeDialogType:false,
+  qrCodeDialogData:{},
+
+3.必要方法
+
+  //二维码组件开关
+  qrCodeDialogButton(type,id,name){
+    if(type == 1){
+      this.$set(this,'qrCodeDialogData',{
+        type:'chemicalsCabinet',                                  //二维码类型 用于区分二维码功能类型
+        parameter:id,                                             //二维码参数
+        name:name,                                                //二维码名称用于下载时命名
+      });
+      this.$set(this,'qrCodeDialogType',true);
+    }else{
+      this.$set(this,'qrCodeDialogType',false);
+    }
+  },
+
+-->
+
+<template>
+  <div>
+    <!--添加/编辑弹窗-->
+    <el-dialog class="trainingCourseAddDialog" title=' 1'
+               :show-close="false" :close-on-click-modal="false" :close-on-press-escape="false"
+               :visible.sync="dialogType" v-if="dialogType" width="394px">
+      <div class="trainingCourseAddDialog-title-box">
+        <p></p>
+        <p class="el-icon-close" @click="buttonClick"></p>
+      </div>
+      <vue-qr v-if="vueQrImgType" ref="vueQr" class="trainingCourseAddDialog-vue-qr" :text="vueQrCodeData" :size="200"></vue-qr>
+      <p class="trainingCourseAddDialog-button-p" @click="buttonClick(1)">下载二维码</p>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import vueQr from 'vue-qr'
+  export default {
+    name: 'qrCodeDialog',
+    components: {
+      vueQr
+    },
+    props:{
+      qrCodeDialogData:{},
+    },
+    data(){
+      return{
+        dialogType:true,
+        vueQrCodeData:null,
+        vueQrImgType:false,
+        identification: localStorage.getItem('codeOnlineAdd'),            //二维码规则 服务器域名,需与微信后台开发配置内一致.
+      }
+    },
+    created(){
+
+    },
+    mounted(){
+      this.initialize();
+    },
+    methods:{
+      //初始化
+      initialize(){
+        this.$set(this,'vueQrCodeData', this.identification+'?code='+this.qrCodeDialogData.parameter+'&type='+this.qrCodeDialogData.type+'&subId='+this.qrCodeDialogData.subId);
+        this.$set(this,'vueQrImgType',true);
+      },
+      buttonClick(type){
+        if(type == 1){
+          let base64Str = this.$refs.vueQr.imgUrl;
+          let aLink = document.createElement("a");
+          aLink.style.display = "none";
+          aLink.href = base64Str;
+          aLink.download = this.qrCodeDialogData.name+"-二维码.png";
+          document.body.appendChild(aLink);
+          aLink.click();
+          document.body.removeChild(aLink);
+        }else{
+          this.$parent.qrCodeDialogButton();
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .trainingCourseAddDialog{
+    font-weight:500;
+    .trainingCourseAddDialog-title-box{
+      display: flex;
+      p:nth-child(1){
+        flex:1;
+      }
+      p:nth-child(2){
+        font-size:18px;
+        width:60px;
+        height:60px;
+        text-align: center;
+        line-height:60px;
+        color:#999;
+        cursor: pointer;
+      }
+    }
+    .trainingCourseAddDialog-vue-qr{
+      display: block!important;
+      height:200px;
+      width:200px;
+      margin:20px auto 27px;
+    }
+    .trainingCourseAddDialog-button-p{
+      width:150px;
+      height:40px;
+      line-height:40px;
+      margin:0 auto 30px;
+      color:#fff;
+      background:#0045AF;
+      border-radius:10px;
+      text-align: center;
+      cursor: pointer;
+    }
+    ::v-deep .el-dialog__header{
+      display: none;
+    }
+    ::v-deep .el-dialog__body{
+      padding:0;
+    }
+  }
+</style>

+ 2 - 2
src/layout/components/AppMain.vue

@@ -18,7 +18,7 @@
 </template>
 
 <script>
-  import { selectTriggerInfo} from '@/api/evacuationBigData/index.js'
+  import { selectTriggerInfo } from '@/api/evacuationBigData/index.js'
   import store from '@/store'
   import mqtt from 'mqtt'
 export default {
@@ -55,7 +55,7 @@ export default {
   },
   mounted(){
     this.userType = localStorage.getItem('userType')
-    if(this.userType != 22){
+    if( this.userType != 22 && this.versionField() != 'xiBeiNongLinDaXue'){
       this.selectTriggerInfo();
       this.subscriptionMQTT();
     }

+ 2 - 1
src/main.js

@@ -12,7 +12,7 @@ import App from './App'
 import store from './store'
 import router from './router'
 import directive from './directive' //directive
-import { download } from '@/utils/request'
+import { download,downloadUrl } from '@/utils/request'
 import { uploadUrl,judgmentNetworkReturnAddress,versionField } from '@/utils/ruoyi'
 import hasPermiDom from './directive/permission/hasPermiDom'
 
@@ -58,6 +58,7 @@ Vue.prototype.addDateRange = addDateRange
 Vue.prototype.selectDictLabel = selectDictLabel
 Vue.prototype.selectDictLabels = selectDictLabels
 Vue.prototype.download = download
+Vue.prototype.downloadUrl = downloadUrl
 Vue.prototype.uploadUrl = uploadUrl
 Vue.prototype.versionField = versionField
 Vue.prototype.hasPermiDom = hasPermiDom.hasPermiDom

+ 17 - 1
src/utils/request.js

@@ -187,7 +187,7 @@ export function download(url, params, filename) {
       return tansParams(params)
     }],
     headers: {
-        'Content-Type': 'application/x-www-form-urlencoded'
+      'Content-Type': 'application/x-www-form-urlencoded'
     },
     responseType: 'blob'
   }).then((data) => {
@@ -209,6 +209,22 @@ export function download(url, params, filename) {
     console.error(r)
   })
 }
+// 通用地址文件下载方法
+export function downloadUrl(fileUrl,fleName) {
+  const newUrl = urlText + judgmentNetworkReturnAddress() + fileUrl;
+  const x = new XMLHttpRequest();
+  x.open("GET", newUrl, true);
+  x.responseType = "blob";
+  x.onload = () => {
+    const url = URL.createObjectURL(x.response);
+    const a = document.createElement("a");
+    a.href = url;
+    a.download = fleName;
+    a.target = "_blank";
+    a.click();
+  };
+  x.send();
+}
 
 
 export default service

+ 4 - 2
src/views/comprehensive/laboratoryManagement/accessAuthorization/authorize.vue

@@ -59,11 +59,13 @@
           </el-table-column>
           <el-table-column label="操作" align="left" class-name="small-padding fixed-width"  width="120">
             <template slot-scope="scope">
-              <div class="button-box">
-                <p class="table-min-button"
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
                    v-hasPermi="['haikang:user:list']"
                    @click="handleClick('',scope.row,'detail')"
                 >查看授权</p>
+                <p class="table-button-null"></p>
               </div>
             </template>
           </el-table-column>

+ 7 - 5
src/views/comprehensive/laboratoryManagement/accessAuthorization/lookImpower.vue

@@ -48,11 +48,13 @@
         </el-table-column>
         <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="220">
           <template slot-scope="scope">
-            <div class="button-box" style="display: flex;justify-content: flex-start;">
-              <p class="table-min-button" v-if="(scope.row.userType=='学生' && !admittance && !scope.row.isretry) || (scope.row.userType=='教师' && !whiteList) && !scope.row.isretry" style="color: #333;cursor: text" @click="handleClick('',scope.row,'again')">手动<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')">重试</i></p>
-              <p class="table-min-button" v-if="scope.row.userType=='学生' && admittance"  style="color: #333;cursor: text" @click="handleClick('',scope.row,'again')"  >安全准入<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')" v-if="!scope.row.isretry">重试</i></p>
-              <p class="table-min-button" v-if="scope.row.userType=='教师' && whiteList" style="color: #333;cursor: text" @click="handleClick('',scope.row,'again')" >白名单<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')" v-if="!scope.row.isretry">重试</i></p>
-              <p class="table-min-button" v-if="(scope.row.userType=='学生' && !admittance) || (scope.row.userType=='教师' && !whiteList)"@click="handleClick('',scope.row,'delete')">删除</p>
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p" v-if="(scope.row.userType=='学生' && !admittance && !scope.row.isretry) || (scope.row.userType=='教师' && !whiteList) && !scope.row.isretry"  @click="handleClick('',scope.row,'again')">手动<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')">重试</i></p>
+              <p class="table-button-p" v-if="scope.row.userType=='学生' && admittance"  @click="handleClick('',scope.row,'again')"  >安全准入<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')" v-if="!scope.row.isretry">重试</i></p>
+              <p class="table-button-p" v-if="scope.row.userType=='教师' && whiteList" @click="handleClick('',scope.row,'again')" >白名单<i style="color: #0183FA;cursor: pointer;font-style: normal;text-decoration:underline" @click="handleClick('',scope.row,'retry')" v-if="!scope.row.isretry">重试</i></p>
+              <p class="table-button-p" v-if="(scope.row.userType=='学生' && !admittance) || (scope.row.userType=='教师' && !whiteList)"@click="handleClick('',scope.row,'delete')">删除</p>
+              <p class="table-button-null"></p>
             </div>
           </template>
         </el-table-column>

+ 2 - 1
src/views/comprehensive/laboratoryManagement/building/buildingDetails.vue

@@ -167,7 +167,7 @@
               </el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="房间编号:" prop="roomNum">
+          <el-form-item label="房间编号:" prop="roomNum" v-if="dialogForm.roomType == '-99'">
             <el-input v-model="dialogForm.roomNum" placeholder="请输入房间编号" maxlength="20" style="width:300px;"/>
           </el-form-item>
           <el-form-item label="房间名称:" prop="roomName" v-if="dialogForm.roomType == '-99'">
@@ -569,6 +569,7 @@
         for(let i=0;i<self.subjectOptions.length;i++){
           if(e == self.subjectOptions[i].id){
             self.$set(self.dialogForm,'subName',self.subjectOptions[i].name);
+            self.$set(self.dialogForm,'roomNum',self.subjectOptions[i].room);
           }
         }
       },

+ 19 - 17
src/views/comprehensive/laboratoryManagement/building/buildingManagement.vue

@@ -25,7 +25,7 @@
           </div>
         </div>
       </div>
-      <p class="max-left-big-button" @click="handleCommand(3)">+ 新增校</p>
+      <p class="max-left-big-button" @click="handleCommand(3)">+ 新增校</p>
     </div>
     <div class="max-right-box">
       <div class="school-box" v-if="checkTreeType == 1">
@@ -139,9 +139,11 @@
             <el-table-column label="创建时间" align="left" prop="createTime" width="200"/>
             <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="200">
               <template slot-scope="scope">
-                <div class="button-box">
-                  <p class="table-min-button" @click="roomClick(1,item)">编辑</p>
-                  <p class="table-min-button" @click="roomClick(3)">删除</p>
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p" @click="roomClick(1,item)">编辑</p>
+                  <p class="table-button-p" @click="roomClick(3)">删除</p>
+                  <p class="table-button-null"></p>
                 </div>
               </template>
             </el-table-column>
@@ -157,11 +159,11 @@
         </div>
       </div>
     </div>
-    <!-- 新增/编辑校 -->
+    <!-- 新增/编辑校 -->
     <el-dialog :title="dialogTitle" v-if="dialogOpen" :visible.sync="dialogOpen" width="600px" append-to-body>
       <el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px">
-        <el-form-item label="校名称:" prop="nameOne">
-          <el-input v-model="dialogForm.nameOne" maxlength="10" placeholder="请输入校名称" :disabled="dialogType==2 || dialogType==3"/>
+        <el-form-item label="校名称:" prop="nameOne">
+          <el-input v-model="dialogForm.nameOne" maxlength="10" placeholder="请输入校名称" :disabled="dialogType==2 || dialogType==3"/>
         </el-form-item>
         <el-form-item label="楼栋名称:" prop="nameTwo" v-if="dialogType==2 || dialogType==3">
           <el-input v-model="dialogForm.nameTwo" maxlength="10" placeholder="请输入楼栋名称" :disabled="dialogType==3"/>
@@ -275,8 +277,8 @@
         // 表单校验
         rules: {
           nameOne: [
-            { required: true, message: "请输入校名称", trigger: "blur" },
-            { required: true, message: "请输入校名称", validator: this.spaceJudgment, trigger: "blur" }
+            { required: true, message: "请输入校名称", trigger: "blur" },
+            { required: true, message: "请输入校名称", validator: this.spaceJudgment, trigger: "blur" }
           ],
           nameTwo: [
             { required: true, message: "请输入楼栋名称", trigger: "blur" },
@@ -320,7 +322,7 @@
             cancelButtonText: "取消",
             type: "warning"
           }).then(function() {
-            console.log('删除校',item)
+            console.log('删除校',item)
           }).then(() => {
           }).catch(() => {});
         }else if(type == 3){
@@ -330,23 +332,23 @@
       //楼栋弹出下啦列表选中事件
       handleCommand(command,item){
         if (command == 1){
-          //编辑
-          this.$set(this,'dialogTitle','编辑校');
+          //编辑校
+          this.$set(this,'dialogTitle','编辑校');
           this.$set(this,'dialogType',1);
           this.$set(this,'dialogOpen',true);
         }else if(command == 2){
-          //删除
-          this.$confirm('确定要删除该校吗?', "警告", {
+          //删除校
+          this.$confirm('确定要删除该校吗?', "警告", {
             confirmButtonText: "确定",
             cancelButtonText: "取消",
             type: "warning"
           }).then(function() {
-            console.log('删除校',item)
+            console.log('删除校',item)
           }).then(() => {
           }).catch(() => {});
         }else if(command == 3){
-          //新增
-          this.$set(this,'dialogTitle','新增校');
+          //新增校
+          this.$set(this,'dialogTitle','新增校');
           this.$set(this,'dialogType',1);
           this.$set(this,'dialogOpen',true);
         }else if(command == 4){

+ 16 - 13
src/views/comprehensive/laboratoryManagement/building/newIndex.vue

@@ -4,6 +4,7 @@
     <div class="buildingManagement" v-if="pageType == 1">
       <div class="max-left-box">
         <div class="tree-box scrollbar-box" v-if="treeList[0]">
+          <p style="color:#0183FA;font-size:18px;">{{schoolName}}</p>
           <div class="terr-max-box" v-for="(item,index) in treeList" :key="index">
             <div class="max-name-box">
               <p class="max-name" :class="checkTreeId==item.id?'check-color':''" @click="clickCheckTree(item,1)">
@@ -36,7 +37,7 @@
           </div>
         </div>
         <p class="tree-null-p" v-if="!treeList[0]">暂无数据</p>
-        <p class="max-left-big-button" @click="handleCommand(3)">+ 新增校</p>
+        <p class="max-left-big-button" @click="handleCommand(3)">+ 新增校</p>
       </div>
       <div class="max-right-box">
         <div class="school-box" v-if="checkTreeType == 1">
@@ -275,11 +276,11 @@
           </div>
         </div>
       </div>
-      <!-- 新增/编辑校 -->
+      <!-- 新增/编辑校 -->
       <el-dialog :title="dialogTitle" v-if="dialogOpen" :visible.sync="dialogOpen" width="600px" append-to-body>
         <el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px">
-          <el-form-item label="校名称:" prop="nameOne">
-            <el-input v-model="dialogForm.nameOne" maxlength="10" placeholder="请输入校名称"
+          <el-form-item label="校名称:" prop="nameOne">
+            <el-input v-model="dialogForm.nameOne" maxlength="10" placeholder="请输入校名称"
                       :disabled="dialogType==2 || dialogType==22 || dialogType==3 || dialogType==33"/>
           </el-form-item>
           <el-form-item label="楼栋名称:" prop="nameTwo"
@@ -427,6 +428,7 @@
     },
     data() {
       return {
+        schoolName:'',
         pageType: 1,
         //拖拽起始Y点(用于计算朝向)
         clientY: null,
@@ -446,7 +448,7 @@
         // 表单参数
         dialogForm: {},
         roomDialogForm: {},
-        //校名称
+        //校名称
         yxName: null,
         ldName: null,
         lcName: null,
@@ -454,8 +456,8 @@
         // 表单校验
         rules: {
           nameOne: [
-            { required: true, message: '请输入校名称', trigger: 'blur' },
-            { required: true, message: '请输入校名称', validator: this.spaceJudgment, trigger: 'blur' }
+            { required: true, message: '请输入校名称', trigger: 'blur' },
+            { required: true, message: '请输入校名称', validator: this.spaceJudgment, trigger: 'blur' }
           ],
           nameTwo: [
             { required: true, message: '请输入楼栋名称', trigger: 'blur' },
@@ -496,6 +498,7 @@
 
     },
     mounted() {
+      this.$set(this,'schoolName',localStorage.getItem('schoolName'));
       this.getTreeList()
       this.getDicts('layout_room_type').then(response => {
         this.roomTypeOptions = response.data
@@ -616,8 +619,8 @@
       handleCommand(command, item) {
         let self = this
         if (command == 1) {
-          //编辑
-          this.$set(this, 'dialogTitle', '编辑校')
+          //编辑校
+          this.$set(this, 'dialogTitle', '编辑校')
           this.$set(this, 'dialogForm', {
             id: item.id,
             nameOne: item.name,
@@ -626,8 +629,8 @@
           this.$set(this, 'dialogType', 11)
           this.$set(this, 'dialogOpen', true)
         } else if (command == 2) {
-          //删除
-          this.$confirm('确定要删除该校吗?', '警告', {
+          //删除校
+          this.$confirm('确定要删除该校吗?', '警告', {
             confirmButtonText: '确定',
             cancelButtonText: '取消',
             type: 'warning'
@@ -637,9 +640,9 @@
           }).catch(() => {
           })
         } else if (command == 3) {
-          //新增
+          //新增校
           this.$set(this, 'dialogForm', {})
-          this.$set(this, 'dialogTitle', '新增校')
+          this.$set(this, 'dialogTitle', '新增校')
           this.$set(this, 'dialogType', 1)
           this.$set(this, 'dialogOpen', true)
         } else if (command == 4) {

+ 7 - 4
src/views/comprehensive/laboratoryManagement/classified/index.vue

@@ -42,15 +42,17 @@
       <el-table-column label="创建时间" align="left" prop="createTime" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
-            <p class="table-min-button"
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
                @click="handleUpdate(scope.row)"
                v-hasPermiAnd="['laboratory:classified:query','laboratory:classified:edit']"
             >修改</p>
-            <p class="table-min-button"
+            <p class="table-button-p"
                @click="handleDelete(scope.row)"
                v-hasPermi="['laboratory:classified:remove']"
             >删除</p>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -65,7 +67,8 @@
     />
 
     <!-- 添加或修改安全分级对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="分级名称" prop="classifiedName">
           <el-input v-model="form.classifiedName" maxlength="4" placeholder="请输入内容" />

+ 5 - 3
src/views/comprehensive/laboratoryManagement/classifiedGrading/classified.vue

@@ -42,15 +42,17 @@
       <el-table-column label="创建时间" align="left" prop="createTime" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
-            <p class="table-min-button"
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
                @click="handleUpdate(scope.row)"
                v-hasPermiAnd="['laboratory:classtype:query','laboratory:classtype:edit']"
             >修改</p>
-            <p class="table-min-button"
+            <p class="table-button-p"
                @click="handleDelete(scope.row)"
                v-hasPermi="['laboratory:classtype:remove']"
             >删除</p>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>

+ 7 - 4
src/views/comprehensive/laboratoryManagement/classifiedGrading/classtype.vue

@@ -32,15 +32,17 @@
       <el-table-column label="创建时间" align="left" prop="createTime" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
-            <p class="table-min-button"
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
                v-hasPermiAnd="['laboratory:classtype:query','laboratory:classtype:edit']"
                @click="handleUpdate(scope.row)"
             >修改</p>
-            <p class="table-min-button"
+            <p class="table-button-p"
                v-hasPermi="['laboratory:classtype:remove']"
                @click="handleDelete(scope.row)"
             >删除</p>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>
@@ -55,7 +57,8 @@
     />
 
     <!-- 添加或修改安全分级类型对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="110px">
         <el-form-item label="安全类别名称" prop="typeName">
           <el-input v-model="form.typeName" maxlength="10" placeholder="请输入安全类别名称" />

+ 1 - 1
src/views/comprehensive/laboratoryManagement/classifiedGrading/index.vue

@@ -10,7 +10,7 @@
         <p :class="pageType == 2 ? 'p-back':''"></p>
       </div>
       <div class="top-button-box" @click="buttonPageType(3)">
-        <p :class="pageType == 3 ? 'p-color':''">实验室类型</p>
+        <p :class="pageType == 3 ? 'p-color':''">{{versionField() == 'xiBeiNongLinDaXue'?'房间类型':'实验室类型'}}</p>
         <p :class="pageType == 3 ? 'p-back':''"></p>
       </div>
     </div>

+ 8 - 5
src/views/comprehensive/laboratoryManagement/classifiedGrading/subjectClass.vue

@@ -24,21 +24,23 @@
         </el-form>
         <el-table v-loading="loading" border :data="classtypeList" @selection-change="handleSelectionChange">
           <!--<el-table-column label="自增id" align="left" prop="id" v-if="false"/>-->
-          <el-table-column label="实验室类型" align="left" prop="moldName" />
+          <el-table-column :label="versionField() == 'xiBeiNongLinDaXue'?'房间类型':'实验室类型'" align="left" prop="moldName" />
           <!--<el-table-column label="备注" align="left" prop="remark" />-->
           <el-table-column label="创建人" align="left" prop="createBy" />
           <el-table-column label="创建时间" align="left" prop="createTime" />
           <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160" v-if="tableButtonType">
             <template slot-scope="scope">
-              <div class="button-box">
-                <p class="table-min-button"
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
                    v-hasPermiAnd="['laboratory:classtype:query','laboratory:classtype:edit']"
                    @click="handleUpdate(scope.row)"
                 >修改</p>
-                <p class="table-min-button"
+                <p class="table-button-p"
                    v-hasPermi="['laboratory:classtype:remove']"
                    @click="handleDelete(scope.row)"
                 >删除</p>
+                <p class="table-button-null"></p>
               </div>
             </template>
           </el-table-column>
@@ -51,7 +53,8 @@
           @pagination="getList"
         />
         <!-- 添加或修改安全分级类型对话框 -->
-        <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+        <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+                   :close-on-click-modal="false">
           <el-form ref="form" :model="form" :rules="rules" label-width="110px">
             <el-form-item label="实验室类型" prop="moldName">
               <el-input v-model="form.moldName" maxlength="10" placeholder="请输入实验室类型名称" />

+ 5 - 3
src/views/comprehensive/laboratoryManagement/classtype/index.vue

@@ -32,15 +32,17 @@
       <el-table-column label="创建时间" align="left" prop="createTime" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160" v-if="tableButtonType">
         <template slot-scope="scope">
-          <div class="button-box">
-            <p class="table-min-button"
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
                v-hasPermiAnd="['laboratory:classtype:query','laboratory:classtype:edit']"
                @click="handleUpdate(scope.row)"
             >修改</p>
-            <p class="table-min-button"
+            <p class="table-button-p"
                v-hasPermi="['laboratory:classtype:remove']"
                @click="handleDelete(scope.row)"
             >删除</p>
+            <p class="table-button-null"></p>
           </div>
         </template>
       </el-table-column>

+ 12 - 15
src/views/comprehensive/laboratoryManagement/inspection/index.vue

@@ -113,20 +113,16 @@
       <el-table-column label="备注" align="left" prop="remark" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" v-if="tableButtonType">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['laboratory:inspection:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['laboratory:inspection:remove']"
-          >删除</el-button>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
+               @click="handleUpdate(scope.row)"
+               v-hasPermi="['laboratory:inspection:edit']">修改</p>
+            <p class="table-button-p"
+               @click="handleDelete(scope.row)"
+               v-hasPermi="['laboratory:inspection:remove']">删除</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -141,7 +137,8 @@
     />
 
     <!-- 添加或修改拍照检查附件对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="进出记录表id" prop="accessId">
           <el-input v-model="form.accessId" placeholder="请输入进出记录表id" />

+ 12 - 15
src/views/comprehensive/laboratoryManagement/layout/index.vue

@@ -149,20 +149,16 @@
       <el-table-column label="备注" align="left" prop="remark" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" v-if="tableButtonType">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['laboratory:layout:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['laboratory:layout:remove']"
-          >删除</el-button>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
+               @click="handleUpdate(scope.row)"
+               v-hasPermi="['laboratory:layout:edit']">修改</p>
+            <p class="table-button-p"
+               @click="handleDelete(scope.row)"
+               v-hasPermi="['laboratory:layout:remove']">删除</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -176,7 +172,8 @@
     />
 
     <!-- 添加或修改实验室布局对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="实验室id" prop="subjectId">
           <el-input v-model="form.subjectId" placeholder="请输入实验室id" />

+ 10 - 14
src/views/comprehensive/laboratoryManagement/material/index.vue

@@ -77,20 +77,16 @@
       <el-table-column label="备注" align="left" prop="remark" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" v-if="tableButtonType">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['laboratory:material:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['laboratory:material:remove']"
-          >删除</el-button>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
+               @click="handleUpdate(scope.row)"
+               v-hasPermi="['laboratory:material:edit']">修改</p>
+            <p class="table-button-p"
+               @click="handleDelete(scope.row)"
+               v-hasPermi="['laboratory:material:remove']">删除</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>

+ 12 - 15
src/views/comprehensive/laboratoryManagement/onepc/index.vue

@@ -113,20 +113,16 @@
       <el-table-column label="备注" align="left" prop="remark" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" v-if="tableButtonType">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['laboratory:onepc:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['laboratory:onepc:remove']"
-          >删除</el-button>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
+               @click="handleUpdate(scope.row)"
+               v-hasPermi="['laboratory:onepc:edit']">修改</p>
+            <p class="table-button-p"
+               @click="handleDelete(scope.row)"
+               v-hasPermi="['laboratory:onepc:remove']">删除</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -141,7 +137,8 @@
     />
 
     <!-- 添加或修改一体机设备勾选对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="进出记录表id" prop="accessId">
           <el-input v-model="form.accessId" placeholder="请输入进出记录表id" />

+ 7 - 2
src/views/comprehensive/laboratoryManagement/record/index.vue

@@ -79,7 +79,11 @@
         <el-table-column label="停留时间" align="left" prop="intervalTime" show-overflow-tooltip width="220"/>
         <el-table-column label="操作" align="left" width="210">
           <template slot-scope="scope">
-            <p class="table-min-button" v-if="scope.row.outTime" @click="lookInfo(scope.row)">详情</p>
+            <div class="table-button-box">
+              <p class="table-button-null"></p>
+              <p class="table-button-p" v-if="scope.row.outTime" @click="lookInfo(scope.row)">详情</p>
+              <p class="table-button-null"></p>
+            </div>
           </template>
         </el-table-column>
       </el-table>
@@ -94,7 +98,8 @@
     </div>
     <my-record v-if="pageType == 2"></my-record>
 
-    <el-dialog class="record-el-dialog-max-box" :title="infoList[infoIndex].imgName" :visible.sync="infoShadeType" v-if="infoShadeType" width="1070px" height="700" append-to-body>
+    <el-dialog class="record-el-dialog-max-box" :title="infoList[infoIndex].imgName" :visible.sync="infoShadeType" v-if="infoShadeType" width="1070px" height="700" append-to-body
+               :close-on-click-modal="false">
       <div class="record-el-dialog-min-box scrollbar-box">
         <img style="width:1026px;" :src="infoList[infoIndex].imgUrl">
       </div>

+ 11 - 45
src/views/comprehensive/laboratoryManagement/record/myRecord.vue

@@ -71,16 +71,15 @@
         </el-form-item>
       </el-form>
       <el-table style="margin:20px 0 10px 0;" v-loading="loading" border :data="recordList" @selection-change="handleSelectionChange" ref="multipleTable" :row-key="getRowKeys">
-        <el-table-column label="实验室" align="left" prop="subjectName" show-overflow-tooltip/>
-        <el-table-column label="学院" align="left" prop="deptName" show-overflow-tooltip/>
-        <el-table-column label="进入时间" align="left" prop="inTime" show-overflow-tooltip width="220"/>
-        <el-table-column label="离开时间" align="left" prop="outTime" show-overflow-tooltip width="220"/>
-        <el-table-column label="停留时间" align="left" prop="intervalTime" show-overflow-tooltip width="220"/>
-        <el-table-column label="操作" align="left" width="210">
-          <template slot-scope="scope">
-            <p class="table-min-button" v-if="scope.row.outTime" @click="lookInfo(scope.row)">详情</p>
-          </template>
+        <el-table-column label="实验室" align="left" prop="subjectName" />
+        <el-table-column label="学院" align="left" prop="deptName" />
+        <el-table-column label="进入时间" align="left" prop="inTime">
+
+        </el-table-column>
+        <el-table-column label="离开时间" align="left" prop="outTime">
+
         </el-table-column>
+        <el-table-column label="停留时间" align="left" prop="intervalTime" />
       </el-table>
       <pagination
         v-show="total>0"
@@ -93,7 +92,8 @@
     </div>
 
     <!-- 添加或修改实验室进出记录对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="出进人员id" prop="joinUserId">
           <el-input v-model="form.joinUserId" placeholder="请输入出进人员id" />
@@ -135,19 +135,11 @@
         <el-button type="primary" @click="submitForm">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog class="record-el-dialog-max-box" :title="infoList[infoIndex].imgName" :visible.sync="infoShadeType" v-if="infoShadeType" width="1070px" height="700" append-to-body>
-      <div class="record-el-dialog-min-box scrollbar-box">
-        <img style="width:1026px;" :src="infoList[infoIndex].imgUrl">
-      </div>
-      <p class="el-icon-arrow-left left-i-button" @click="infoLeftButton"></p>
-      <p class="el-icon-arrow-right right-i-button" @click="infoRightButton"></p>
-      <p class="record-el-dialog-bottom-text">{{infoIndex+1}}/{{infoList.length}}</p>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listRecord, getRecord, delRecord, addRecord, updateRecord,myListRecord,subjectDictList,getDetial } from "@/api/laboratory/record";
+import { listRecord, getRecord, delRecord, addRecord, updateRecord,myListRecord,subjectDictList } from "@/api/laboratory/record";
 import { listDepartments } from "@/api/system/dept";
 
 import { treeselect } from "@/api/system/dept";
@@ -210,10 +202,6 @@ export default {
       //表格扩展选择器---需要在@selection-change绑定的方法内监控selection数组长度
       selectedNum:0,
       dateRange:[],
-      //详情遮罩开关
-      infoShadeType:false,
-      infoIndex:0,
-      infoList:[],
     };
   },
   created() {
@@ -221,28 +209,6 @@ export default {
     this.getDeptList();
   },
   methods: {
-    //查看详情
-    lookInfo(row){
-      getDetial(row.id).then(response => {
-        this.$set(this,'infoIndex',0);
-        this.$set(this,'infoList',response.rows);
-        this.$set(this,'infoShadeType',true);
-      });
-    },
-    infoLeftButton(){
-      if (this.infoIndex == 0){
-        this.msgError('当前是第一张')
-      }else{
-        this.infoIndex--
-      }
-    },
-    infoRightButton(){
-      if (this.infoIndex == this.infoList.length-1){
-        this.msgError('当前是最后一张')
-      }else{
-        this.infoIndex++
-      }
-    },
     backPage(){
       this.$parent.clickPage(1);
     },

+ 5 - 1
src/views/comprehensive/laboratoryManagement/record_my/index.vue

@@ -47,7 +47,11 @@
       <el-table-column label="停留时间" align="left" prop="intervalTime" show-overflow-tooltip width="210"/>
       <el-table-column label="操作" align="left" width="160">
         <template slot-scope="scope">
-          <p class="table-min-button" v-if="scope.row.outTime" @click="lookInfo(scope.row)">详情</p>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p" v-if="scope.row.outTime" @click="lookInfo(scope.row)">详情</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>

+ 12 - 15
src/views/comprehensive/laboratoryManagement/securityconfigure/index.vue

@@ -77,20 +77,16 @@
       <el-table-column label="备注" align="left" prop="remark" />
       <el-table-column label="操作" align="left" class-name="small-padding fixed-width" v-if="tableButtonType">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['laboratory:securityconfigure:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['laboratory:securityconfigure:remove']"
-          >删除</el-button>
+          <div class="table-button-box">
+            <p class="table-button-null"></p>
+            <p class="table-button-p"
+               @click="handleUpdate(scope.row)"
+               v-hasPermi="['laboratory:securityconfigure:edit']">修改</p>
+            <p class="table-button-p"
+               @click="handleDelete(scope.row)"
+               v-hasPermi="['laboratory:securityconfigure:remove']">删除</p>
+            <p class="table-button-null"></p>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -105,7 +101,8 @@
     />
 
     <!-- 添加或修改实验室和安全准入配置中间关联对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body
+               :close-on-click-modal="false">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="实验室id" prop="subjectId">
           <el-input v-model="form.subjectId" placeholder="请输入实验室id" />

+ 19 - 20
src/views/comprehensive/laboratoryManagement/subject/addSubject.vue

@@ -46,7 +46,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="学院" prop="deptId" class="form-item">
-        <el-select v-model="form.deptId" placeholder="请选择学院" @change="getBuildings" style="width:320px;">
+        <el-select v-model="form.deptId" placeholder="请选择学院" style="width:320px;">
           <el-option
             v-for="dict in deptOptions"
             :key="dict.deptId"
@@ -59,9 +59,9 @@
         <el-select v-model="form.buildId" placeholder="请选择楼栋"  @change="getFloors" style="width:320px;">
           <el-option
             v-for="dict in buildings"
-            :key="dict.deptId"
-            :label="dict.deptName"
-            :value="dict.deptId"
+            :key="dict.id"
+            :label="dict.name"
+            :value="dict.id"
           ></el-option>
         </el-select>
       </el-form-item>
@@ -85,7 +85,7 @@
           size="small"
         />
       </el-form-item>
-      <el-form-item label="准入设备"  class="form-item">
+      <el-form-item label="准入设备"  class="form-item"  v-if="versionField() != 'xiBeiNongLinDaXue'">
         <el-select v-model="form.hardwareType" placeholder="请选择整改类型" style="width:320px;" @change="hardwareTypeFun()" >
           <el-option label="无"  :value="0" />
           <el-option label="海康智能门禁" :value="1" />
@@ -276,11 +276,11 @@
 </template>
 
 <script>
-    import { listDepartments,listbuildings } from "@/api/system/dept";
+    import { listDepartments } from "@/api/system/dept";
     import { listClassifiedAll } from "@/api/laboratory/classified";
     import { listClasstypeAll } from "@/api/laboratory/classtype";
     import { onUselistLayoutByFloorId,onUselistLayoutByFloorIdTwo } from "@/api/laboratory/layout";
-    import { listFloorByBuildId } from "@/api/laboratory/building";
+    import { buildFloorGetlist } from "@/api/laboratory/building";
     import { selectTeacherList } from "@/api/system/user";
     import { addSubject, getClassifyBySubId, updateSubject } from '@/api/laboratory/subject'
     import { labMoldQueryOption } from "@/api/laboratory/subjectClass";
@@ -359,7 +359,10 @@
         this.getListClassifiedAll();
         this.getListClasstypeAll();
         this.labMoldQueryOption();
-
+        //获取楼栋
+        buildFloorGetlist({type:2}).then(response => {
+          this.buildings = response.rows;
+        });
         //安全标识字典
         this.getDicts("sys_safety_warning").then(response => {
           this.safetyWarning = response.data;
@@ -451,15 +454,11 @@
             this.getClassifyBySubId();
           }
           //根据学院获取楼栋
-          listbuildings(this.form.deptId).then(response => {
-            this.buildings = response.data;
+          buildFloorGetlist({type:2}).then(response => {
+            this.buildings = response.rows;
             //根据楼栋获取层
-            listFloorByBuildId(this.form.buildId).then(response=>{
-              this.floors = response.data;
-              //根据层获取实验室
-              // onUselistLayoutByFloorIdTwo(this.form.floorId,this.form.layoutId).then(response=>{
-              //   this.layoutLists = response.data;
-              // });
+            buildFloorGetlist({type:3,parentId:this.form.buildId}).then(response=>{
+              this.floors = response.rows;
             });
           });
         }else{
@@ -572,8 +571,8 @@
             this.floors = [];
             // this.$set(this.form, 'layoutId', '');//房间
             this.layoutLists = [];
-            listbuildings(id).then(response => {
-              this.buildings = response.data;
+            buildFloorGetlist({type:2}).then(response => {
+              this.buildings = response.rows;
             });
           }
         },
@@ -584,8 +583,8 @@
             this.floors = [];
             // this.$set(this.form, 'layoutId', '');//房间
             this.layoutLists = [];
-            listFloorByBuildId(id).then(response=>{
-              this.floors = response.data;
+            buildFloorGetlist({type:3,parentId:id}).then(response=>{
+              this.floors = response.rows;
             });
           }
         },

+ 104 - 3
src/views/comprehensive/laboratoryManagement/subject/associationConfiguration.vue

@@ -1,7 +1,7 @@
 <!--关联配置-->
 <template>
   <div class="associationConfiguration scrollbar-box">
-    <el-form ref="form" :model="form" label-width="160px" :rules="rules">
+    <el-form v-if="versionField() != 'xiBeiNongLinDaXue'" ref="form" :model="form" label-width="160px" :rules="rules">
       <div class="title-box">
         <p class="left-title">检查项信息</p>
       </div>
@@ -136,17 +136,78 @@
         </el-form-item>
         <el-form-item label="型号" :prop="'hazardRelations.'+ index +'.anotherCode'" :rules="rules.anotherCode"
                       class="form-item" label-width="60px">
-          <el-input placeholder="请输入型号"  maxlength="10" v-model="item.anotherCode"/>
+          <el-input placeholder="请输入型号" disabled maxlength="10" v-model="item.anotherCode"/>
         </el-form-item>
         <el-form-item label="" class="form-item" label-width="20px">
           <span class="del-hazard el-icon-error" style="line-height:40px;font-size:24px;" @click="delHazard(index)"></span>
         </el-form-item>
+        <el-form-item label="" class="form-item" v-if="item.xyId">
+          <p class="look-code-p" @click="qrCodeDialogButton(1,item.xyId,item.anotherName+'-'+item.anotherCode,item.subId)">查看二维码</p>
+        </el-form-item>
+      </div>
+      <div class="bottom-button-box">
+        <p class="reset-button-one left-button" @click="backPage">取消</p>
+        <p class="inquire-button-one right-button" @click="upData">提交</p>
+      </div>
+    </el-form>
+    <el-form v-if="versionField() == 'xiBeiNongLinDaXue'" ref="form" :model="form" label-width="160px" :rules="rules">
+      <div class="title-box">
+        <p class="left-title">危险源信息</p>
+      </div>
+      <el-form-item label="气瓶存放总量" prop="bottleTotal" class="form-item input-number-none-box-left">
+        <el-input
+          oninput="value=value.replace(/[^0-9.]/g,'')"
+          style="width:320px;"
+          v-model="form.bottleTotal"
+          placeholder="请输入数量"
+          maxLength="3"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item label="气瓶单人可存放总量" prop="bottleUserTotal" class="form-item input-number-none-box-left">
+        <el-input
+          oninput="value=value.replace(/[^0-9.]/g,'')"
+          style="width:320px;"
+          v-model="form.bottleUserTotal"
+          placeholder="请输入数量"
+          clearable
+          maxLength="3"
+        />
+      </el-form-item>
+      <div>
+        <el-form-item label="危险源"  prop="hazardId" class="form-item">
+          <el-select placeholder="请选择危险源" v-model="hazardId" style="width:320px;" @change="hazardClick">
+            <el-option
+              v-for="dict in hazardList"
+              :key="dict.id"
+              :label="dict.text"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
+      <div class="hazard-for-box" v-for="(item,index) in form.hazardRelations">
+        <el-form-item label="危险源名称" :prop="'hazardRelations.'+ index +'.anotherName'" :rules="rules.anotherName"
+                      class="form-item" label-width="160px">
+          <el-input placeholder="请输入危险源名称" maxlength="20" v-model="item.anotherName"/>
+        </el-form-item>
+        <el-form-item label="型号" :prop="'hazardRelations.'+ index +'.anotherCode'" :rules="rules.anotherCode"
+                      class="form-item" label-width="60px">
+          <el-input placeholder="请输入型号" disabled maxlength="10" v-model="item.anotherCode"/>
+        </el-form-item>
+        <el-form-item label="" class="form-item" label-width="20px">
+          <span class="del-hazard el-icon-error" style="line-height:40px;font-size:24px;" @click="delHazard(index)"></span>
+        </el-form-item>
+        <el-form-item label="" class="form-item" v-if="item.xyId">
+          <p class="look-code-p" @click="qrCodeDialogButton(1,item.xyId,item.anotherName+'-'+item.anotherCode,item.subId)">查看二维码</p>
+        </el-form-item>
       </div>
       <div class="bottom-button-box">
         <p class="reset-button-one left-button" @click="backPage">取消</p>
         <p class="inquire-button-one right-button" @click="upData">提交</p>
       </div>
     </el-form>
+    <qr-code-dialog v-if="qrCodeDialogType" :qrCodeDialogData="qrCodeDialogData"></qr-code-dialog>
   </div>
 </template>
 
@@ -154,11 +215,15 @@
   import { listHazard } from "@/api/permissionRequired";
   import { updateSubjectEditJoinHazard } from "@/api/laboratory/subject";
   import { getBottleInfo} from "@/api/gasManage3_0/gasManage";
+  import qrCodeDialog from "@/components/qrCodeDialog/index.vue"
   export default {
     name: "associationConfiguration",
     props:{
       subjectData:{},
     },
+    components: {
+      qrCodeDialog
+    },
     data() {
       return {
         onepcOutcheckIn:[],
@@ -176,10 +241,12 @@
           ],
         },
         hazardId:"",
+        //二维码组件参数
+        qrCodeDialogType:false,
+        qrCodeDialogData:{},
       }
     },
     created() {
-
     },
     mounted(){
       let self = this;
@@ -248,16 +315,33 @@
         let list = [];
         for(let i=0;i<self.subjectData.labHazardList.length;i++){
           list.push({
+            subId:this.subjectData.id,
             hazardId:self.subjectData.labHazardList[i].id,
+            xyId:self.subjectData.labHazardList[i].xyId,
             anotherName:self.subjectData.labHazardList[i].anotherName,
             anotherCode:self.subjectData.labHazardList[i].anotherCode
           })
         }
         this.$set(this.form,'hazardRelations',list)
+        console.log(this.form.hazardRelations)
       }
       this.radioChange();
     },
     methods:{
+      //二维码组件开关
+      qrCodeDialogButton(type,id,name,subId){
+        if(type == 1){
+          this.$set(this,'qrCodeDialogData',{
+            type:'10',          //二维码类型 用于区分二维码功能类型
+            parameter:id,                     //二维码参数
+            subId:subId,                     //实验室id
+            name:name,                        //二维码名称用于下载时命名
+          });
+          this.$set(this,'qrCodeDialogType',true);
+        }else{
+          this.$set(this,'qrCodeDialogType',false);
+        }
+      },
       //删除选中危险源
       delHazard(index){
         this.form.hazardRelations.splice(index, 1);
@@ -390,6 +474,18 @@
               this.msgError('穿戴检查识别上限不能小于2')
               return
             }
+            for(let i=0;i<self.form.hazardRelations.length;i++){
+              let num = 0;
+              for(let o=0;o<self.form.hazardRelations.length;o++){
+                if(self.form.hazardRelations[i].anotherName == self.form.hazardRelations[o].anotherName){
+                  num++
+                }
+                if(num > 1){
+                  this.msgError('危险源名称重复:'+self.form.hazardRelations[i].anotherName);
+                  return
+                }
+              }
+            }
             self.$confirm('是否确认提交?', "", {
               confirmButtonText: "确定",
               cancelButtonText: "取消",
@@ -499,6 +595,11 @@
       display: inline-block;
       overflow: hidden;
       min-height:70px;
+      .look-code-p{
+        font-weight:500;
+        color:#0183fa;
+        cursor: pointer;
+      }
     }
     .hazard-for-box{
       .del-hazard{

+ 73 - 6
src/views/comprehensive/laboratoryManagement/subject/deviceList.vue

@@ -98,17 +98,20 @@
     </div>
     <div class="for-max-box">
       <div class="for-big-box" v-for="(item,index) in listSpjk" :key="index">
-        <p class="for-title-p">{{subjectData.room}}-{{item.type.name}}{{index+1}}</p>
+        <p class="camera" v-if="item.isArrest">抓拍</p>
+        <p class="for-title-p" style="background: none;color: #333;margin-top: 12px;">{{subjectData.room}}-{{item.type.name}}{{index+1}}</p>
         <div class="for-text-box">
           <p>摄像头编号:</p>
-          <p></p>
-        </div>
-        <div class="for-text-box">
-          <p></p>
           <el-tooltip class="item" effect="dark" :content="item.hardwareNum" placement="top">
             <p>{{item.hardwareNum}}</p>
           </el-tooltip>
         </div>
+<!--        <div class="for-text-box">-->
+<!--          <p></p>-->
+<!--          <el-tooltip class="item" effect="dark" :content="item.hardwareNum" placement="top">-->
+<!--            <p>{{item.hardwareNum}}</p>-->
+<!--          </el-tooltip>-->
+<!--        </div>-->
         <div class="for-button-box">
           <p @click="editData(8,item)"><i class="el-icon-edit-outline"></i>编辑</p>
           <p></p>
@@ -256,10 +259,42 @@
           </el-form-item>
         </div>
         <div v-if="upType == 4 || upType == 8">
+          <el-form-item label="硬件名称" prop="name">
+            <el-input
+              v-model="form.name"
+              placeholder="请输入硬件名称"
+              clearable
+              size="small"
+              maxLength="8"
+              style="width:320px;"
+            />
+          </el-form-item>
           <el-form-item label="摄像头编号" prop="hardwareNum">
             <el-input v-model="form.hardwareNum" placeholder="摄像头编号"
                       maxlength="30" style="width:320px;"/>
           </el-form-item>
+          <el-form-item label="硬件IP" prop="ipAddress">
+            <el-input
+              v-model="form.ipAddress"
+              placeholder="请输入硬件IP"
+              clearable
+              size="small"
+              maxLength="20"
+              style="width:320px;"
+            />
+          </el-form-item>
+          <el-form-item label="类型" >
+<!--            <el-radio-group v-model="form.pcType">-->
+<!--              <el-radio :label="0">火焰算法</el-radio>-->
+<!--              <el-radio :label="1">穿戴识别</el-radio>-->
+<!--              <el-radio :label="2">违规带离抓拍</el-radio>-->
+<!--            </el-radio-group>-->
+            <el-checkbox-group v-model="form.subType">
+              <el-checkbox label="0">火焰算法</el-checkbox>
+              <el-checkbox label="1">穿戴识别</el-checkbox>
+              <el-checkbox label="2">违规带离抓拍</el-checkbox>
+            </el-checkbox-group>
+          </el-form-item>
         </div>
         <div v-if="upType == 'addEntrance'||  upType=='editEntrance'">
           <el-form-item label="门禁编号" prop="hardwareNum">
@@ -679,7 +714,10 @@ export default {
     addHardwareThree(){
       let obj = {
         type:4,
+        name:this.form.name,
         hardwareNum:this.form.hardwareNum,
+        ipAddress:this.form.ipAddress,
+        subType:this.form.subType.toString(),
         subjectId:this.subjectData.id,
         deptId:this.subjectData.deptId,
         deptName:this.subjectData.deptName,
@@ -694,7 +732,10 @@ export default {
     putHardwareThree(){
       let obj = {
         id:this.form.id,
+        name:this.form.name,
         hardwareNum:this.form.hardwareNum,
+        ipAddress:this.form.ipAddress,
+        subType:this.form.subType.toString(),
         subjectId:this.form.subjectId,
         deptId:this.form.deptId,
         deptName:this.form.deptName,
@@ -1002,6 +1043,7 @@ export default {
         this.title = '新增摄像头';
         this.$set(this,'form',{
           hardwareNum:"",
+          subType:[],
         });
       }else if(type == 'addEntrance'){
         this.title = '新增智能门禁';
@@ -1047,6 +1089,11 @@ export default {
       }else if(type == 8){
         this.title = '编辑摄像头';
         this.$set(this,'form',JSON.parse(JSON.stringify(row)));
+        if(this.form.subType!='' && this.form.subType!=null ){
+          this.form.subType=this.form.subType.split(',')
+        }else{
+          this.form.subType=[];
+        }
       }else if(type == 'editEntrance'){
         this.title = '编辑智能门禁';
         this.$set(this,'form',JSON.parse(JSON.stringify(row)));
@@ -1081,7 +1128,12 @@ export default {
           this.$set(this,'listkzsb',response.data.listkzsb);
         }
         if(response.data.listSpjk){
+          //判断是否是抓拍摄像头
+          for(let i=0; i< response.data.listSpjk.length;i++){
+            response.data.listSpjk[i].isArrest=(response.data.listSpjk[i].subType!=''&& response.data.listSpjk[i].subType!=null);
+          }
           this.$set(this,'listSpjk',response.data.listSpjk);
+
         }
         if(response.data.listHK){
           this.$set(this,'listHK',response.data.listHK);
@@ -1139,10 +1191,25 @@ export default {
       display: inline-block;
       overflow: hidden;
       width:280px;
-      min-height:130px;
+      min-height:158px;
       padding-bottom:10px;
       border-radius: 6px;
       margin:0 20px 20px 0;
+      position: relative;
+      .camera{
+        position: absolute;
+        right: 0;
+        top: 0;
+        width: 50px;
+        height: 30px;
+        background: #0183FA;
+        border-radius: 10px 0px 10px 0px;
+        font-size: 14px;
+        font-weight: 400;
+        color: #FFFFFF;
+        line-height: 30px;
+        text-align: center;
+      }
       .for-title-p{
         background: rgba(182,214,254,1);
         color:#0183FA;

+ 4 - 2
src/views/comprehensive/laboratoryManagement/subject/deviceListOne.vue

@@ -121,7 +121,8 @@
         <!--</div>-->
         <!--<p class="add-for-p-two" @click="addData(4)"><i class="el-icon-plus"></i>添加摄像头</p>-->
       <!--</div>-->
-      <el-dialog :title="title" :visible.sync="addType" v-if="addType" width="500px" append-to-body>
+      <el-dialog :title="title" :visible.sync="addType" v-if="addType" width="500px" append-to-body
+                 :close-on-click-modal="false">
         <el-form ref="form" :model="form" :rules="rules" label-width="110px">
           <div v-if="upType == 1 || upType == 5">
             <el-form-item label="传感器类型" prop="type">
@@ -215,7 +216,8 @@
           <el-button type="primary" @click="submitForm">确 定</el-button>
         </div>
       </el-dialog>
-      <el-dialog :title="titleOne" :visible.sync="addTypeOne" v-if="addTypeOne" width="800px" append-to-body>
+      <el-dialog :title="titleOne" :visible.sync="addTypeOne" v-if="addTypeOne" width="800px" append-to-body
+                 :close-on-click-modal="false">
         <div style="height:500px;overflow: hidden;display: flex;flex-direction: column">
           <el-table  border :data="tableList" @select-all="handleSelectionChange" @select="handleSelectionChange" ref="multipleTable" :row-key="getRowKeys">
             <el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>

+ 350 - 41
src/views/comprehensive/laboratoryManagement/subject/index.vue

@@ -2,10 +2,18 @@
   <div class="subject">
     <div class="subject-page" v-if="pageType == 1">
       <div class="subject-page-min">
-        <div class="left-subject-list" >
+        <div :class="versionField() == 'xiBeiNongLinDaXue'?'left-subject-list-flex':''" class="left-subject-list" >
           <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" style="border-bottom:1px solid #D8D8D8">
-            <el-form-item label="学院" prop="deptId" label-width="60px">
-              <el-select v-model="queryParams.deptId" placeholder="请选择学院" clearable size="small">
+            <el-form-item label="关键字" prop="searchValue" label-width="100px">
+              <el-input
+                v-model="queryParams.searchValue"
+                placeholder="实验室/房间号"
+                clearable
+                style="width:150px;"
+              />
+            </el-form-item>
+            <el-form-item label="学院" prop="deptId" label-width="50px">
+              <el-select v-model="queryParams.deptId" placeholder="请选择学院" style="width:150px;">
                 <el-option
                   v-for="dict in deptOptions"
                   :key="dict.deptId"
@@ -14,22 +22,47 @@
                 ></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="实验室名称" prop="name" label-width="100px">
-              <el-input
-                v-model="queryParams.name"
-                placeholder="请输入实验室名称"
-                clearable
-                size="small"
-              />
+            <el-form-item label="" prop="typeId" label-width="60px">
+              <el-select v-model="queryParams.typeId" placeholder="安全分类" style="width:120px;margin-left:10px;">
+                <el-option
+                  v-for="dict in typeList"
+                  :key="dict.typeName"
+                  :label="dict.typeName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="" prop="level" label-width="60px">
+              <el-select v-model="queryParams.level" placeholder="安全分级" style="width:120px;margin-left:10px;">
+                <el-option
+                  v-for="dict in levelList"
+                  :key="dict.id"
+                  :label="dict.classifiedName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
             </el-form-item>
             <el-form-item style="float: right;">
               <el-col :span="1.5" style="margin-bottom:26px;margin-right: 20px">
-                <p class="add-button-one-120"
+                <p class="add-button-one-90"
                    @click="clickPage(2)"
                    v-hasPermi="['laboratory:subject:add']"
-                ><i class="el-icon-plus"></i>新增实验室</p>
+                ><i class="el-icon-plus"></i>新增</p>
               </el-col>
             </el-form-item>
+            <el-form-item style="float: right;margin-right:20px;" v-hasPermi="['laboratory:subject:import']">
+              <el-dropdown @command="importButton">
+                <div class="form-dropdown-box">
+                  <img src="@/assets/ZDimages/personnelManagement/icon_jzgxx_dr.png">
+                  <p>导入</p>
+                  <img src="@/assets/ZDimages/personnelManagement/icon_jzggl_xljt.png">
+                </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="margin:0 10px;color:#333;" :command="{command:2}">导入数据</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </el-form-item>
             <el-form-item style="margin-right: 20px;">
               <p class="inquire-button-one" style="margin-left:20px;" @click="handleQuery">查询</p>
               <p class="reset-button-one" style="margin-left:20px;" @click="resetQuery">重置</p>
@@ -37,36 +70,40 @@
           </el-form>
           <div class="table_border">
             <el-table ref="multipleTable" border :data="subjectList" highlight-current-row @current-change="handleCurrentChange" style="cursor: pointer;">
+
               <el-table-column label="排序" align="left" prop="id" width="80">
                 <template slot-scope="scope">
                   <el-input maxlength="4" type="text" oninput ="value=value.replace(/[^0-9.]/g,'')" v-model="scope.row.diyOrder" @focus="liveSort(scope.row)" @blur="editSort(scope.row)"></el-input>
                 </template>
               </el-table-column>
               <el-table-column label="实验室名称" align="left" prop="name"  show-overflow-tooltip/>
-              <el-table-column label="房间号" align="left" prop="room" width="120" show-overflow-tooltip/>
-              <el-table-column label="分类/分级" align="left" prop="levelName" width="150" show-overflow-tooltip>
+              <el-table-column label="房间号" align="left" prop="room" :width="versionField() == 'xiBeiNongLinDaXue'?250:150" show-overflow-tooltip/>
+              <el-table-column label="学院" align="left" prop="deptName" :width="versionField() == 'xiBeiNongLinDaXue'?200:130"  show-overflow-tooltip/>
+              <el-table-column label="分类/分级" align="left" prop="levelName" :width="versionField() == 'xiBeiNongLinDaXue'?200:150"  show-overflow-tooltip>
                 <template slot-scope="scope">
                   <span >{{scope.row.typeName}}/</span>
                   <span :style="'color:'+scope.row.fiedColor+';'">{{scope.row.levelName}}</span>
                 </template>
               </el-table-column>
-              <el-table-column label="实验室责任人" align="left" prop="adminName" width="130" show-overflow-tooltip/>
-              <el-table-column label="安全责任人" align="left" prop="safeUserName" width="200" show-overflow-tooltip/>
-              <el-table-column label="操作" align="left" width="160">
+              <el-table-column label="实验室责任人" align="left" prop="adminName" :width="versionField() == 'xiBeiNongLinDaXue'?180:130"  show-overflow-tooltip/>
+              <el-table-column label="安全责任人" align="left" prop="safeUserName" :width="versionField() == 'xiBeiNongLinDaXue'?180:130"  show-overflow-tooltip/>
+              <el-table-column label="操作" align="left" :width="versionField() == 'xiBeiNongLinDaXue'?180:140" >
                 <template slot-scope="scope">
-                  <div style="display: flex;height:30px;">
-                    <p class="table-min-button" style="margin-right:10px;" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
+                  <div class="table-button-box">
+                    <p class="table-button-null"></p>
+                    <p class="table-button-p" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
                     <el-dropdown trigger="click" size="mini" @command="(command) => handleCommand(command, scope.row)">
-                      <p class="table-min-button">更多<i class="el-icon-d-arrow-right"></i></p>
+                      <p class="table-button-p">更多>></p>
                       <el-dropdown-menu slot="dropdown" style="margin:0!important;">
                         <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="1" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">关联配置</el-dropdown-item>
-                        <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="2">物联配置</el-dropdown-item>
-                        <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="3" v-hasPermi="['laboratory:subjectmaterial:add']">准入配置</el-dropdown-item>
+                        <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="2">物联配置</el-dropdown-item>
+                        <el-dropdown-item v-if="versionField() != 'xiBeiNongLinDaXue'" style="height:36px;line-height:36px;width:90px;text-align: center" command="3" v-hasPermi="['laboratory:subjectmaterial:add']">准入配置</el-dropdown-item>
                         <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="4" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">编辑</el-dropdown-item>
                         <!--<el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="5"-->
                         <!--v-hasPermi="['laboratory:subject:remove']">删除</el-dropdown-item>-->
                       </el-dropdown-menu>
                     </el-dropdown>
+                    <p class="table-button-null"></p>
                   </div>
                 </template>
               </el-table-column>
@@ -81,7 +118,8 @@
             />
           </div>
         </div>
-        <div class="right-subject-box scrollbar-box" :class="rightButtonType == 4?'overflow-box':''" v-if="checkedSubject.id">
+        <div class="right-subject-box scrollbar-box" v-if="checkedSubject.id && versionField() != 'xiBeiNongLinDaXue'"
+             :class="rightButtonType == 4?'overflow-box':''">
           <div class="top-button-box">
             <div :class="rightButtonType == 1 ? 'buttonColorA' : 'buttonColorB'" @click="rightButtonClick(1)">传感器监测</div>
             <div :class="rightButtonType == 2 ? 'buttonColorA' : 'buttonColorB'" @click="rightButtonClick(2)">物联控制</div>
@@ -94,10 +132,14 @@
           <div class="bottom-max-box" :class="rightButtonType == 4?'overflow-box':''">
             <div class="bottom-sensor-box" v-if="rightButtonType == 1">
               <p class="top-title">
-                <el-tooltip class="item" effect="dark" :content="checkedSubject.deptName" placement="bottom">
+                <el-tooltip class="item" effect="dark"
+                            v-if="checkedSubject.deptName"
+                            :content="checkedSubject.deptName" placement="bottom">
                   <i>{{checkedSubject.deptName}}</i>
                 </el-tooltip>
-                <el-tooltip class="item" effect="dark" :content="checkedSubject.subAddrr.buildName+checkedSubject.subAddrr.floorName" placement="bottom">
+                <el-tooltip class="item" effect="dark"
+                            v-if="checkedSubject.subAddrr.buildName && checkedSubject.subAddrr.floorName"
+                            :content="checkedSubject.subAddrr.buildName+checkedSubject.subAddrr.floorName" placement="bottom">
                   <i>当前位置:{{checkedSubject.subAddrr.buildName}}{{checkedSubject.subAddrr.floorName}}</i>
                 </el-tooltip>
               </p>
@@ -317,11 +359,42 @@
         <el-button type="primary" @click="submitFormOne">确 定</el-button>
       </div>
     </el-dialog>
+    <!--导入窗口-->
+    <el-dialog title="导入数据" :visible.sync="importOpen" @close="importOpenOff" width="600px" append-to-body class="checkItemLibrary-dialog-box">
+      <el-upload
+        class="teacher-import-dialog-upLoad-box"
+        :drag="true"
+        :data="upImportData"
+        :action="uploadImgUrl"
+        :show-file-list="false"
+        :on-success="handleAvatarSuccess"
+        :headers="headers"
+        :before-upload="beforeAvatarUpload">
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip" slot="tip">仅允许导入xls、xlsx、格式文件。<span style="color:#0183FA;cursor: pointer" v-hasPermi="['system:user_teacher:exceltemplate']" @click="importTemplate">下载模板</span></div>
+        <div class="el-upload-text-box" slot="tip" v-if="getImportData.downFile">
+          <div class="img-text-box">
+            <img src="@/assets/ZDimages/personnelManagement/icon_dr_wj.png">
+            <p>{{getImportData.textName}}</p>
+          </div>
+          <p class="text-p">数据导入成功 <span style="color:#0183FA;">{{getImportData.successNum}}</span> 条,失败 <span style="color:#FF6464 ;">{{getImportData.failureNum}}</span> 条</p>
+          <div class="img-text-box" v-if="getImportData.failureNum">
+            <img src="@/assets/ZDimages/personnelManagement/icon_dr_sj.png">
+            <p style="color:#0183FA;cursor: pointer;" @click="failureExcel">点击下载失败数据报表</p>
+          </div>
+        </div>
+      </el-upload>
+      <div slot="footer" class="teacher-import-dialog-button-box">
+        <p class="inquire-button-one" @click="importOpenOff">确定</p>
+      </div>
+      <div class="teacher-import-dialog-position-box" v-if="loading"></div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-  import { controlSwitch } from "@/api/laboratory/hardware";
+import { controlSwitch } from "@/api/laboratory/hardware";
 import mqtt from 'mqtt'
 import flvjs from 'flv.js'
 import { hardWareControl,alarmControl } from "@/api/laboratory/hardware";
@@ -334,13 +407,16 @@ import {
   queryHardByTypeList, getHaikangUserList, subjectTriggerModes, subjectEditSort, laboratorySubjectEditSort
 } from '@/api/laboratory/subject'
 import { listData} from "@/api/system/dict/data";
-import { filterDept } from "@/api/medicUniversity-3_1/index";
+import { listDepartments } from "@/api/system/dept";
 import addSubject from "./addSubject.vue";
 import deviceList from "./deviceList.vue";
 import admissionConfiguration from "./admissionConfiguration.vue";
 import associationConfiguration from "./associationConfiguration.vue";
 import infoPage from "./infoPage.vue";
 import { getHxpAlarmRecordNoAuthList,getEnablelist} from "@/api/medicUniversity-3_1/index";
+import { listClassifiedAll } from "@/api/laboratory/classified";
+import { listClasstypeAll } from "@/api/laboratory/classtype";
+import { getToken } from "@/utils/auth";
 import store from '@/store'
 export default {
   filters:{
@@ -362,6 +438,23 @@ export default {
   },
   data(){
     return{
+      uploadImgUrl: window.location.href.split('://')[0]+'://' + this.judgmentNetworkReturnAddress() + "/laboratory/subject/importSubData", // 上传地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      //导入弹层开关
+      importOpen:false,
+      //导入数据
+      upImportData:{
+        sysUserEnable:true,
+        upDate:false,
+      },
+      getImportData:{
+        downFile:false,
+        successNum:0,
+        failureNum:0,
+        textName:"",
+      },
       pageType:1,
       // 遮罩层
       loading: true,
@@ -446,11 +539,17 @@ export default {
       //字典排风扇数组
       fanList:[],
       selectTriggerList:[],//预案触发下,预案数据存储
+      //分类数据
+      typeList:[],
+      //分级数据
+      levelList:[],
     }
   },
   created() {
   },
   mounted(){
+    this.getListClasstypeAll();
+    this.getListClassifiedAll();
     this.getDeptList();
     // this.subscriptionMQTT();
     this.getList();
@@ -675,6 +774,11 @@ export default {
           }
         }
         this.$set(this.newData,'labHardwareVOListTwo',listTwo);
+        if(this.versionField() == 'xiBeiNongLinDaXue'){
+          this.$set(this.newData,'videoData',[]);
+          this.pageType = 6;
+          return
+        }
         if(list[0]){
           let obj = {
             count:"100",
@@ -894,6 +998,9 @@ export default {
     //选中实验室
     handleCurrentChange(val){
       let self = this;
+      if(this.versionField() == 'xiBeiNongLinDaXue'){
+        return
+      }
       if(val.id != this.checkedSubject.id){
         this.videoOff();
         this.offMQTT();
@@ -1033,7 +1140,7 @@ export default {
     },
     /** 查询学院列表 */
     getDeptList() {
-      filterDept().then(response => {
+      listDepartments().then(response => {
         this.$set(this, 'deptOptions', response.data)
       });
     },
@@ -1056,18 +1163,6 @@ export default {
             console.log("订阅成功:" + this.mtopicOne+self.subId);
           }
         });
-        // for(let i = 0; i< self.mqttIdList.length;i++){
-        //   this.client.subscribe(this.mtopic+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopic+self.mqttIdList[i]);
-        //     }
-        //   });
-        //   this.client.subscribe(this.mtopicOne+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopicOne+self.mqttIdList[i]);
-        //     }
-        //   });
-        // }
       });
       this.client.on("message", (topic, message) => {
         // console.log('message',message)
@@ -1222,6 +1317,80 @@ export default {
         self.videoList = [];
       }
     },
+    //查询安全分级
+    getListClassifiedAll(){
+      listClassifiedAll().then(response=>{
+        if(response.code==200){
+          console.log(response)
+          this.levelList=response.data
+        }
+      })
+    },
+    //查询安全分类
+    getListClasstypeAll(){
+      listClasstypeAll().then(response=>{
+        if(response.code==200){
+          this.typeList=response.data;
+        }
+      });
+    },
+    //****************************************导入功能**************************************
+    handleAvatarSuccess(res, file) {
+      if(res.code == 200){
+        this.getImportData.downFile = true
+        this.getImportData.successNum = res.data.successNum
+        this.getImportData.failureNum = res.data.failureNum
+        // this.importOpen = false;
+        // this.getList();
+      }else{
+        this.msgError(res.msg);
+      }
+      this.loading = false;
+    },
+    beforeAvatarUpload(file) {
+      let type = false;
+      console.log('file',file);
+      if (file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type == 'application/vnd.ms-excel') {
+        if(file.size> 5250000){
+          this.msgError('上传大小不能超过5M')
+          return false
+        }
+        this.getImportData.textName = file.name;
+        type = true;
+        this.loading = true;
+      }else{
+        this.$message.error('只能上传xls/xlsx格式文件');
+        type = false;
+      }
+      return type;
+    },
+    //导入页面关闭
+    importOpenOff(){
+      this.importOpen = false;
+      this.getImportData.downFile = false;
+      this.getImportData.successNum = 0;
+      this.getImportData.failureNum = 0;
+      this.getImportData.textName = "";
+    },
+    /** 导入按钮操作 */
+    importButton(item){
+      if(item.command == 1){
+        //  下载模板
+        this.download('/laboratory/subject/exportSubTemplate', {}, `实验室导入模板.xlsx`)
+      }else if(item.command == 2){
+        //  导入数据
+        console.log('导入数据');
+        this.importOpen = true;
+      }
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.download('/laboratory/subject/exportSubTemplate', {}, `实验室导入模板.xlsx`)
+    },
+    /*下载失败列表*/
+    failureExcel(){
+      this.download('/laboratory/subject/exportProblemData', {}, `实验室导入模板失败报表.xlsx`)
+    },
   },
   beforeDestroy() {
     //清除定时器
@@ -1241,6 +1410,11 @@ export default {
   *{
     margin:0;
   }
+  ::v-deep .el-table__row{
+    td:nth-child(1){
+      padding:0;
+    }
+  }
   .subject-page{
     flex:1;
     display: flex;
@@ -1255,6 +1429,33 @@ export default {
       overflow: hidden;
       padding: 2px 0 10px 10px;
       box-sizing: border-box;
+      .form-dropdown-box{
+        display: flex;
+        margin:0;
+        padding:0 10px;
+        cursor: pointer;
+        height:40px;
+        img:nth-child(1){
+          width:16px;
+          height:16px;
+          margin-top:12px;
+        }
+        p{
+          width:47px;
+          text-align: center;
+          font-size:14px;
+          margin:0;
+          line-height:40px;
+        }
+        img:nth-child(3){
+          width:10px;
+          height:6px;
+          margin-top:17px;
+        }
+      }
+    }
+    .left-subject-list-flex{
+      flex:1;
     }
     .left-subject-list{
       /*flex:1;*/
@@ -1281,7 +1482,6 @@ export default {
     }
     .right-subject-box{
       /*width:440px;*/
-      flex:1;
       display: flex;
       flex-direction: column;
       .top-button-box{
@@ -1839,4 +2039,113 @@ export default {
     background-size: 45%;
   }
 }
+
+.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;
+      }
+    }
+  }
+}
 </style>

+ 12 - 17
src/views/comprehensive/laboratoryManagement/subject/indexOne.vue

@@ -61,10 +61,11 @@
             <el-table-column label="安全责任人" align="left" prop="safeUserName" width="200" show-overflow-tooltip/>
             <el-table-column label="操作" align="left" width="160">
               <template slot-scope="scope">
-                <div style="display: flex;height:30px;">
-                  <p class="table-min-button" style="margin-right:10px;" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
                   <el-dropdown trigger="click" size="mini" @command="(command) => handleCommand(command, scope.row)">
-                    <p class="table-min-button">更多<i class="el-icon-d-arrow-right"></i></p>
+                    <p class="table-button-p">更多>></p>
                     <el-dropdown-menu slot="dropdown" style="margin:0!important;">
                       <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="1" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">关联配置</el-dropdown-item>
                       <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="2">物联配置</el-dropdown-item>
@@ -74,6 +75,7 @@
                       <!--v-hasPermi="['laboratory:subject:remove']">删除</el-dropdown-item>-->
                     </el-dropdown-menu>
                   </el-dropdown>
+                  <p class="table-button-null"></p>
                 </div>
               </template>
             </el-table-column>
@@ -281,7 +283,7 @@ import mqtt from 'mqtt'
 import flvjs from 'flv.js'
 import { hardWareControl,alarmControl } from "@/api/laboratory/hardware";
 import { authListSubject,subjectInfo,updateSubject,mangerVoice,startUrl,getDetalis } from "@/api/laboratory/subject";
-import { filterDept } from "@/api/medicUniversity-3_1/index";
+import { listDepartments } from "@/api/system/dept";
 // import addSubject from "./addSubject.vue";
 // import deviceList from "./deviceListOne.vue";
 // import admissionConfiguration from "./admissionConfiguration.vue";
@@ -800,7 +802,7 @@ export default {
     },
     /** 查询学院列表 */
     getDeptList() {
-      filterDept().then(response => {
+      listDepartments().then(response => {
         this.$set(this, 'deptOptions', response.data)
       });
     },
@@ -823,18 +825,6 @@ export default {
             console.log("订阅成功:" + this.mtopicOne+self.subId);
           }
         });
-        // for(let i = 0; i< self.mqttIdList.length;i++){
-        //   this.client.subscribe(this.mtopic+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopic+self.mqttIdList[i]);
-        //     }
-        //   });
-        //   this.client.subscribe(this.mtopicOne+self.mqttIdList[i], (err) => {
-        //     if (!err) {
-        //       console.log("订阅成功:" + this.mtopicOne+self.mqttIdList[i]);
-        //     }
-        //   });
-        // }
       });
       this.client.on("message", (topic, message) => {
         // console.log('message',message)
@@ -998,6 +988,11 @@ export default {
   *{
     margin:0;
   }
+  ::v-deep .el-table__row{
+    td:nth-child(1){
+      padding:0;
+    }
+  }
   .subject-page{
     flex:1;
     display: flex;

+ 10 - 3
src/views/comprehensive/laboratoryManagement/subject/indexTwo.vue

@@ -60,10 +60,11 @@
             <el-table-column label="安全责任人" align="left" prop="safeUserName" width="200" show-overflow-tooltip/>
             <el-table-column label="操作" align="left" width="160">
               <template slot-scope="scope">
-                <div style="display: flex;height:30px;">
-                  <p class="table-min-button" style="margin-right:10px;" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
+                <div class="table-button-box">
+                  <p class="table-button-null"></p>
+                  <p class="table-button-p" v-hasPermi="['laboratory:subject:query']" @click="clickPage(7,scope.row)">详情</p>
                   <el-dropdown trigger="click" size="mini" @command="(command) => handleCommand(command, scope.row)">
-                    <p class="table-min-button">更多<i class="el-icon-d-arrow-right"></i></p>
+                    <p class="table-button-p">更多>></p>
                     <el-dropdown-menu slot="dropdown" style="margin:0!important;">
                       <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="1" v-hasPermiAnd="['laboratory:subject:query','laboratory:subject:edit']">关联配置</el-dropdown-item>
                       <el-dropdown-item style="height:36px;line-height:36px;width:90px;text-align: center" command="2">物联配置</el-dropdown-item>
@@ -73,6 +74,7 @@
                       <!--v-hasPermi="['laboratory:subject:remove']">删除</el-dropdown-item>-->
                     </el-dropdown-menu>
                   </el-dropdown>
+                  <p class="table-button-null"></p>
                 </div>
               </template>
             </el-table-column>
@@ -1022,6 +1024,11 @@ export default {
   *{
     margin:0;
   }
+  ::v-deep .el-table__row{
+    td:nth-child(1){
+      padding:0;
+    }
+  }
   .subject-page{
     flex:1;
     display: flex;

+ 11 - 24
src/views/comprehensive/laboratoryManagement/subject/infoPage.vue

@@ -1,10 +1,11 @@
 <template>
     <div class="infoPage" v-if="newData.id">
-      <div class="left-max-box scrollbar-box">
-        <div class="top-max-box" style="position: relative">
+      <div :class="versionField() == 'xiBeiNongLinDaXue'?'left-max-box-flex':''" class="left-max-box scrollbar-box">
+        <div :class="versionField() == 'xiBeiNongLinDaXue'?'top-max-box-flex':''" class="top-max-box" style="position: relative">
           <div class="all-title-box">
             <p></p>
-            <p>实验室信息</p>
+            <p style="flex:1;">实验室信息</p>
+            <div v-if="versionField() == 'xiBeiNongLinDaXue'" class="reset-button-one" style="margin-top:-5px;width:80px!important;height:30px!important;line-height:30px!important;" @click="backPage">返回</div>
           </div>
           <div class="left-top-title-box">
             <div class="left-box">
@@ -84,28 +85,8 @@
             </div>
           </div>
         </div>
-        <div class="bottom-max-box">
-          <div class="all-title-box">
-            <p></p>
-            <p>关联预案</p>
-          </div>
-          <div class="for-list-box">
-            <div class="title-box">
-              <p>预案名称</p>
-              <p>启动次数</p>
-              <p>最近启动时间</p>
-            </div>
-            <div class="list-box" v-for="(item,index) in newData.riskPlanList" :key="index">
-              <p>{{item.planName}}</p>
-              <p>{{item.planCount}}</p>
-              <p>{{item.lastTime}}</p>
-            </div>
-            <img class="null-data-img" src="@/assets/ZDimages/null-data.png" v-if="!newData.riskPlanList[0]">
-            <p class="null-p" v-if="!newData.riskPlanList[0]" >暂未关联预案信息,请在应急管理-预案管理中进行配置</p>
-          </div>
-        </div>
       </div>
-      <div class="right-max-box scrollbar-box">
+      <div class="right-max-box scrollbar-box" v-if="versionField() != 'xiBeiNongLinDaXue'">
         <div class="all-title-box" style="height:40px;">
           <p></p>
           <p>传感器监测</p>
@@ -472,11 +453,17 @@
       font-size:14px;
       color:#999;
     }
+    .left-max-box-flex{
+      flex:1;
+    }
     .left-max-box{
       font-weight:500;
       width:1035px;
       display: flex;
       flex-direction: column;
+      .top-max-box-flex{
+        flex:1;
+      }
       .top-max-box{
         border-radius:10px!important;
         box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1) !important;

+ 6 - 4
src/views/comprehensive/laboratoryManagement/timingExhaustAir/index.vue

@@ -57,16 +57,18 @@
           <el-table-column label="操作人" align="left" prop="updateBy" width="200" show-overflow-tooltip/>
           <el-table-column label="操作" align="left" prop="createTime" width="300" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
-              <div class="button-box">
-                <p class="table-min-button" style="margin-left:20px!important;"
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
                    v-hasPermiAnd="['laboratory:exhaust:query','laboratory:exjoinsub:add']"
                    @click="correlationButton(scope.row.id)">关联实验室</p>
-                <p class="table-min-button" style="margin-left:20px!important;"
+                <p class="table-button-p"
                    v-hasPermiAnd="['laboratory:exhaust:query','laboratory:exhaust:edit']"
                    @click="goPage(3,scope.row.id)">编辑</p>
-                <p class="table-min-button" style="margin-left:20px!important;"
+                <p class="table-button-p"
                    v-hasPermi="['laboratory:exhaust:remove']"
                    @click="delExhaust(scope.row.id)">删除</p>
+                <p class="table-button-null"></p>
               </div>
             </template>
           </el-table-column>

+ 4 - 4
src/views/comprehensive/message/addContent/index.vue

@@ -73,7 +73,7 @@
   import userList from "./userList.vue"
   import subjectList from "./subjectList.vue"
   import { optionselect } from "@/api/laboratory/gradeManage";
-  import { listDepartments } from "@/api/system/dept";
+  import { getDeptNoAuthList } from "@/api/system/dept";
     export default {
       name: "addContent",
       components: {
@@ -126,7 +126,7 @@
       },
       mounted(){
         this.optionselect();
-        this.listDepartments();
+        this.getDeptNoAuthList();
       },
       methods: {
         //选择实验室
@@ -205,8 +205,8 @@
             this.optionselectList = list;
           });
         },
-        listDepartments(){
-          listDepartments().then(response => {
+        getDeptNoAuthList(){
+          getDeptNoAuthList().then(response => {
             let list = response.data;
             let obj = {
               deptName:"全部学院",

+ 0 - 0
src/views/comprehensive/message/addContent/subjectList.vue


Некоторые файлы не были показаны из-за большого количества измененных файлов