heyang 1 vuosi sitten
vanhempi
commit
218749f595
75 muutettua tiedostoa jossa 15105 lisäystä ja 114 poistoa
  1. 282 0
      api/index.js
  2. 2 2
      api/request/config.js
  3. BIN
      images/Version3.3.3/icon_04.png
  4. BIN
      images/Version3.3.3/icon_06.png
  5. BIN
      images/Version3.3.3/icon_06_1.png
  6. BIN
      images/Version3.3.3/icon_aqjc_sm.png
  7. BIN
      images/Version3.3.3/icon_aqjc_ss.png
  8. BIN
      images/Version3.3.3/icon_aqjc_ssp.png
  9. BIN
      images/Version3.3.3/icon_bfhx_sq.png
  10. BIN
      images/Version3.3.3/icon_bfhx_xq.png
  11. BIN
      images/Version3.3.3/icon_cg.png
  12. BIN
      images/Version3.3.3/icon_djc_wj.png
  13. BIN
      images/Version3.3.3/icon_djcsys.png
  14. BIN
      images/Version3.3.3/icon_fjgk_sc.png
  15. BIN
      images/Version3.3.3/icon_jcjh_cy.png
  16. BIN
      images/Version3.3.3/icon_ksjc_yysr.png
  17. BIN
      images/Version3.3.3/icon_rl.png
  18. BIN
      images/Version3.3.3/icon_ssp_ry.png
  19. BIN
      images/Version3.3.3/icon_xyxc_aqyh.png
  20. BIN
      images/Version3.3.3/icon_xyxc_qx.png
  21. BIN
      images/Version3.3.3/icon_xyxc_sm.png
  22. BIN
      images/Version3.3.3/icon_xyxc_sys.png
  23. BIN
      images/Version3.3.3/icon_xyxc_syszc.png
  24. BIN
      images/Version3.3.3/icon_xyxc_xy.png
  25. BIN
      images/Version3.3.3/icon_xyxc_xyxc.png
  26. BIN
      images/Version3.3.3/icon_xyxcgl_jhwks.png
  27. BIN
      images/Version3.3.3/icon_xzwt_xz.png
  28. BIN
      images/Version3.3.3/icon_ywc.png
  29. 119 2
      pages.json
  30. 121 88
      pages/manageWorkbench.vue
  31. 2004 0
      pages/safetyExamineWorkbench.vue
  32. 62 22
      pages/studentWorkbench.vue
  33. 1240 0
      pages_safetyExamine/dangerManage/dangerDetail.vue
  34. 540 0
      pages_safetyExamine/dangerManage/dangerList.vue
  35. 633 0
      pages_safetyExamine/dangerManage/dangerManage.vue
  36. 1263 0
      pages_safetyExamine/examineManage/examineAdd.vue
  37. 935 0
      pages_safetyExamine/examineManage/examineAddTow.vue
  38. 717 0
      pages_safetyExamine/examineManage/examineDetail.vue
  39. 899 0
      pages_safetyExamine/examineManage/examineList.vue
  40. BIN
      pages_safetyExamine/images/icon_04.png
  41. BIN
      pages_safetyExamine/images/icon_06.png
  42. BIN
      pages_safetyExamine/images/icon_06_1.png
  43. BIN
      pages_safetyExamine/images/icon_aqjc_sm.png
  44. BIN
      pages_safetyExamine/images/icon_aqjc_ss.png
  45. BIN
      pages_safetyExamine/images/icon_aqjc_ssp.png
  46. BIN
      pages_safetyExamine/images/icon_bfhx_sq.png
  47. BIN
      pages_safetyExamine/images/icon_bfhx_xq.png
  48. BIN
      pages_safetyExamine/images/icon_cg.png
  49. BIN
      pages_safetyExamine/images/icon_djc_wj.png
  50. BIN
      pages_safetyExamine/images/icon_djcsys.png
  51. BIN
      pages_safetyExamine/images/icon_fjgk_sc.png
  52. BIN
      pages_safetyExamine/images/icon_jcjh_cy.png
  53. BIN
      pages_safetyExamine/images/icon_ksjc_yysr.png
  54. BIN
      pages_safetyExamine/images/icon_rl.png
  55. BIN
      pages_safetyExamine/images/icon_ssp_ry.png
  56. BIN
      pages_safetyExamine/images/icon_xyxc_aqyh.png
  57. BIN
      pages_safetyExamine/images/icon_xyxc_qx.png
  58. BIN
      pages_safetyExamine/images/icon_xyxc_sm.png
  59. BIN
      pages_safetyExamine/images/icon_xyxc_sys.png
  60. BIN
      pages_safetyExamine/images/icon_xyxc_syszc.png
  61. BIN
      pages_safetyExamine/images/icon_xyxc_xy.png
  62. BIN
      pages_safetyExamine/images/icon_xyxc_xyxc.png
  63. BIN
      pages_safetyExamine/images/icon_xyxcgl_jhwks.png
  64. BIN
      pages_safetyExamine/images/icon_xzwt_xz.png
  65. BIN
      pages_safetyExamine/images/icon_ywc.png
  66. 333 0
      pages_safetyExamine/inforSign.vue
  67. 897 0
      pages_safetyExamine/patrolPlan/patrolPlanAdd.vue
  68. 348 0
      pages_safetyExamine/patrolPlan/patrolPlanAddLab.vue
  69. 283 0
      pages_safetyExamine/patrolPlan/patrolPlanAddMember.vue
  70. 877 0
      pages_safetyExamine/patrolPlan/patrolPlanDetail.vue
  71. 1538 0
      pages_safetyExamine/patrolPlan/patrolPlanEdit.vue
  72. 431 0
      pages_safetyExamine/patrolPlan/patrolPlanList.vue
  73. 639 0
      pages_safetyExamine/snapshotManage/snapshotAdd.vue
  74. 552 0
      pages_safetyExamine/snapshotManage/snapshotDetail.vue
  75. 390 0
      pages_safetyExamine/snapshotManage/snapshotList.vue

+ 282 - 0
api/index.js

@@ -1885,3 +1885,285 @@ export const subjectTriggerModes = (data) => {
         method: 'GET',
     })
 };
+
+
+
+//3.3.3安全检查--------------------------------
+//查询人员身份标识
+export const getGentleIdentifier  = (data) => {
+    return apiResquest({
+        url: `/security/checkSet/getGentle`,
+        method: 'GET',
+        data: data,
+    })
+};
+//数据统计
+export const dataStatistics  = (data) => {
+    return apiResquest({
+        url: `/security/DataStatistics/countApp`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划-查询是否院级用户
+export const isSCollege  = (data) => {
+    return apiResquest({
+        url: `/security/collegCheck/isSCollege`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--添加
+export const checkPlanAdd  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkPlan/appAdd`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//巡查计划--列表
+export const checkPlanList  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkPlan/appList`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//巡查计划--详情
+export const checkPlanById  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkPlan/appFindCheckPlan`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--修改
+export const checkPlanEdit  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkPlan/appUpdate`,
+        method: 'PUT',
+        data: {...data}
+    })
+};
+//巡查计划--检查计划各检查状态数据数量
+export const getCheckStatusCount  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkPlan/getCheckStatusCount`,
+        method: 'GET',
+        data: data,
+    })
+};
+//各检查状态数据数量
+export const getManageStatusCount  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkManage/getManageStatusCount`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--获取巡查组列表
+export const checkGroupList  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkGroup/appFindGroupList`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//巡查计划--巡查组详情
+export const checkGroupDetail  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkGroup/appFind`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--查询学院数据
+export const conditionCollegeInfo  = (data) => {
+    return apiResquest({
+        url: `/laboratory/subject/conditionCollegeInfo`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--条件查询实验室信息(分页)
+export const conditionSubjectInfo  = (data) => {
+    return apiResquest({
+        url: `/laboratory/subject/conditionSubjectInfo`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//巡查计划--全校学院/实验室数量
+export const getAllSubNum  = (data) => {
+    return apiResquest({
+        url: `/laboratory/subject/getAllSubNum`,
+        method: 'GET',
+        data: data,
+    })
+};
+//巡查计划--添加
+export const findByCheckPlanId  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkManage/appFindByCheckPlanId`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+
+//随手拍-----------------------------------------------------
+//随手拍--添加
+export const checkClapAdd  = (data) => {
+    return apiResquest({
+        url: `/security/checkClap/appAdd`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//随手拍--管理列表
+export const checkClapList  = (data) => {
+    return apiResquest({
+        url: `/security/checkClap/appList`,
+        method: 'GET',
+        data: data,
+    })
+};
+//随手拍--上报记录-列表
+export const checkClapMylist  = (data) => {
+    return apiResquest({
+        url: `/security/checkClap/mylist`,
+        method: 'GET',
+        data: data,
+    })
+};
+//随手拍--获取当前登录人身份信息
+export const getUserCollegCheck  = (data) => {
+    return apiResquest({
+        url: `/security/collegCheck/getloginUser`,
+        method: 'GET',
+        data: data,
+    })
+};
+
+//随手拍--详情
+export const checkClapById  = (data) => {
+    return apiResquest({
+        url: `/security/checkClap/appFindById`,
+        method: 'GET',
+        data: data,
+    })
+};
+//随手拍--整改
+export const checkClapRectify  = (data) => {
+    return apiResquest({
+        url: `/security/checkClap/clapApprove`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+
+//开展检查-------------------------------------------
+//开展检查-获取巡查计划管理列表
+export const checkManageList  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkManage/appList`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//开展检查-安全隐患列表(在开展检查列表里待复核)
+export const checkHazardList = (data) => {
+    return apiResquestForm({
+        url: '/security/checkHazard/appList',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-通过id查询巡查管理
+export const findCheckManage = (data) => {
+    return apiResquestForm({
+        url: '/zd-security/checkManage/appFindCheckManage',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查--新增-该实验室没有计划的时候
+export const checkManageAdd  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkManage/add`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//开展检查--新增--有计划的时候
+export const checkManageUpdate  = (data) => {
+    return apiResquest({
+        url: `/zd-security/checkManage/appUpdate`,
+        method: 'PUT',
+        data: {...data}
+    })
+};
+//项目检查库-树状列表
+export const checkOptionListNew = (data) => {
+    return apiResquestForm({
+        url: '/zd-security/checkOption/list',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-根据实验室id查询该实验室有关计划
+export const getCheckPlanBySubId = (data) => {
+    return apiResquestForm({
+        url: '/zd-security/checkManage/getCheckPlanBySubId',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-根据实验室id查询该实验室有关计划
+export const buildBySub = (data) => {
+    return apiResquestForm({
+        url: '/laboratory/subject/buildBySub/list',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-根据计划id查询附件列表
+export const findByPlanIdAttachment = (data) => {
+    return apiResquestForm({
+        url: '/zd-security/upload/findByCheckPlanId',
+        method: 'GET',
+        data: data
+    })
+};
+
+//安全隐患---------------------------------------------------------------
+//开展检查-安全隐患列表
+export const checkHazardAppList = (data) => {
+    return apiResquestForm({
+        url: '/security/checkHazard/appCheckHazardList',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-安全隐患详情
+export const getHazardById = (data) => {
+    return apiResquestForm({
+        url: '/security/checkHazard/getAppHazardById',
+        method: 'GET',
+        data: data
+    })
+};
+//开展检查-获取巡查计划管理列表
+export const checkHazardAdd  = (data) => {
+    return apiResquest({
+        url: `/security/checkRectify/addOrApprove`,
+        method: 'POST',
+        data: {...data}
+    })
+};
+//开展检查-安全信息牌
+export const getInforSign = (data) => {
+    return apiResquestForm({
+        url: `/laboratory/subject/manger/subQuery/`+data+`/0`,
+        method: 'GET',
+    })
+};

+ 2 - 2
api/request/config.js

@@ -9,12 +9,12 @@ const config = {
 	// base_url: 'https://demo.zjznai.com/xzgd/',
 
     //base_url: 'https://lab.zjznai.com/labNhSystem/',//43服务器高升测试
-	//base_url: 'https://lab.zjznai.com/labAppTest/',//43服务器线上
+	base_url: 'https://lab.zjznai.com/labAppTest/',//43服务器线上
     // base_url: 'https://lab.zjznai.com/appTest/',//88服务器线上
     //base_url: 'https://lab.zjznai.com/labSystem/', //矿大地址
 	// base_url: 'https://lab.zjznai.com/jdlabSystem/', //交大地址
    // base_url: 'https://lab.zjznai.com/jndxlabSystem/', //暨大地址
-    base_url: 'https://lab.zjznai.com/api/', //暨大化材
+   // base_url: 'https://lab.zjznai.com/api/', //暨大化材
    //  base_url: 'https://lab.zjznai.com/kdwclabSystem/', //矿大文昌地址
    //base_url: 'https://znyj.zjznai.suda.edu.cn/labSystem/', //苏大临时地址
 }

BIN
images/Version3.3.3/icon_04.png


BIN
images/Version3.3.3/icon_06.png


BIN
images/Version3.3.3/icon_06_1.png


BIN
images/Version3.3.3/icon_aqjc_sm.png


BIN
images/Version3.3.3/icon_aqjc_ss.png


BIN
images/Version3.3.3/icon_aqjc_ssp.png


BIN
images/Version3.3.3/icon_bfhx_sq.png


BIN
images/Version3.3.3/icon_bfhx_xq.png


BIN
images/Version3.3.3/icon_cg.png


BIN
images/Version3.3.3/icon_djc_wj.png


BIN
images/Version3.3.3/icon_djcsys.png


BIN
images/Version3.3.3/icon_fjgk_sc.png


BIN
images/Version3.3.3/icon_jcjh_cy.png


BIN
images/Version3.3.3/icon_ksjc_yysr.png


BIN
images/Version3.3.3/icon_rl.png


BIN
images/Version3.3.3/icon_ssp_ry.png


BIN
images/Version3.3.3/icon_xyxc_aqyh.png


BIN
images/Version3.3.3/icon_xyxc_qx.png


BIN
images/Version3.3.3/icon_xyxc_sm.png


BIN
images/Version3.3.3/icon_xyxc_sys.png


BIN
images/Version3.3.3/icon_xyxc_syszc.png


BIN
images/Version3.3.3/icon_xyxc_xy.png


BIN
images/Version3.3.3/icon_xyxc_xyxc.png


BIN
images/Version3.3.3/icon_xyxcgl_jhwks.png


BIN
images/Version3.3.3/icon_xzwt_xz.png


BIN
images/Version3.3.3/icon_ywc.png


+ 119 - 2
pages.json

@@ -10,7 +10,13 @@
 				"navigationStyle": "custom"
 			}
 		},
-		/* 预警信息 */	
+		{
+			"path": "pages/safetyExamineWorkbench",
+			"style": {
+				"navigationBarTitleText": "安全检查"
+			}
+		},
+		/* 预警信息 */
 		{
 			"path": "pages/earlyWarningManage/earlyWarningDetail",
 			"style": {
@@ -23,7 +29,7 @@
 				"navigationBarTitleText": "预警记录"
 			}
 		},
-			
+
 		{
 			"path": "pages/earlyWarningManage/videoMonitoring",
 			"style": {
@@ -942,6 +948,117 @@
 					}
 				}
 			]
+		},
+		{
+
+			/* 安全检查分包 */
+			"root": "pages_safetyExamine",  //分包根路径
+			"name": "safetyExamine", //分包名字可写可不写
+			"pages": [
+				{
+					"path": "patrolPlan/patrolPlanAdd",
+					"style": {
+						"navigationBarTitleText": "发起巡查计划"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanAddLab",
+					"style": {
+						"navigationBarTitleText": "选择实验室"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanAddMember",
+					"style": {
+						"navigationBarTitleText": "选择巡查组"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanList",
+					"style": {
+						"navigationBarTitleText": "校院巡查计划"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanDetail",
+					"style": {
+						"navigationBarTitleText": "计划详情"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanEdit",
+					"style": {
+						"navigationBarTitleText": "计划编辑"
+					}
+				},
+				{
+					"path": "examineManage/examineAddTow",
+					"style": {
+						"navigationBarTitleText": "开始检查"
+					}
+				},
+				{
+					"path": "examineManage/examineAdd",
+					"style": {
+						"navigationBarTitleText": "开始检查"
+					}
+				},
+				{
+					"path": "examineManage/examineDetail",
+					"style": {
+						"navigationBarTitleText": "检查详情"
+					}
+				},
+				{
+					"path": "examineManage/examineList",
+					"style": {
+						"navigationBarTitleText": "校院巡查管理"
+					}
+				},
+				{
+					"path": "dangerManage/dangerManage",
+					"style": {
+						"navigationBarTitleText": "隐患整改"
+					}
+				},
+				{
+					"path": "dangerManage/dangerList",
+					"style": {
+						"navigationBarTitleText": "安全隐患"
+					}
+				},
+				{
+					"path": "dangerManage/dangerDetail",
+					"style": {
+						"navigationBarTitleText": "安全隐患"
+					}
+				},
+				{
+					"path": "snapshotManage/snapshotDetail",
+					"style": {
+						"navigationBarTitleText": "待整改"
+					}
+				},
+				{
+					"path": "snapshotManage/snapshotAdd",
+					"style": {
+						"navigationBarTitleText": "随手拍上报"
+					}
+				},
+				{
+					"path": "snapshotManage/snapshotList",
+					"style": {
+						"navigationBarTitleText": "随手拍上报记录"
+					}
+				},
+				{
+					"path": "inforSign",
+					"style": {
+						"navigationBarTitleText": "安全信息牌"
+					}
+				}
+
+			]
 		}
 	],
 

+ 121 - 88
pages/manageWorkbench.vue

@@ -1,7 +1,7 @@
 <!-- 管理端工作台 -->
 <template>
   <view class="manage-workbench" :style="{paddingTop:navHeight+'rpx'}">
-	<nav-bar :title="title"></nav-bar>
+    <nav-bar :title="title"></nav-bar>
     <img class="top-big-img" :src="homepageBanner">
     <top-warn></top-warn>
     <view class="min-icon-button-box" style="margin-bottom: 0;">
@@ -21,7 +21,7 @@
         <img src="@/images/Version2.2/icon_sy_zrsq.png">
         <view>准入审核</view>
       </view>
-      <view @click="goPage('gas')">
+      <view @click="goPage('none')">
         <img src="@/images/Version3.0/icon_sy_qpgl.png">
         <view>气瓶管理</view>
       </view>
@@ -95,15 +95,14 @@
           <img src="@/images/icon_14.png">
           <view>{{item.subAddrrStr}}</view>
         </view>
-
-		<view class="text-box" v-if="item.sensorFunctionList[0]">
-			<view class="min-box" v-for="(minItem,index2) in item.sensorFunctionList" :key="index2">
-				<view class="min-min-box">
-					<img v-show="minItem.hasWarn" src="@/images/icon_15.png">
-					<view :class="{'colorA':minItem.hasWarn}">{{minItem.funcName}}:{{minItem.formatVal?minItem.formatVal:'-'}}</view>
-				</view>
-			</view>
-		</view>
+        <view class="text-box" v-if="item.sensorFunctionList[0]">
+          <view class="min-box" v-for="(minItem,index2) in item.sensorFunctionList" :key="index2">
+            <view class="min-min-box">
+              <img v-show="minItem.hasWarn" src="@/images/icon_15.png">
+              <view :class="{'colorA':minItem.hasWarn}">{{minItem.funcName}}:{{minItem.formatVal?minItem.formatVal:'-'}}</view>
+            </view>
+          </view>
+        </view>
       </view>
     </view>
     <tab-bar></tab-bar>
@@ -113,7 +112,7 @@
 <script>
 import $mqtt from '@/utils/mqtt.min.js';
 import { config } from '@/api/request/config.js'
-import { appReceivePhotoNote,getApprovalCount,subject_class,getSafeWarnList,laboratoryInfo,laboratoryList,getLoginUserInfo,outSubjectPhoto,gradingControl,listData} from '@/api/index.js'
+import { appReceivePhotoNote,getApprovalCount,subject_class,getSafeWarnList,laboratoryInfo,laboratoryList,getLoginUserInfo,outSubjectPhoto,gradingControl,listData,getGentleIdentifier} from '@/api/index.js'
 import { tabBar } from '@/component/tabBar.vue'
 import { topWarn } from '@/component/topWarn.vue'
 import { navBar } from '@/component/navbar.vue'
@@ -121,12 +120,12 @@ export default {
   components: {
     tabBar,
     topWarn,
-	navBar
+    navBar
   },
   data() {
     return {
-	  navHeight: uni.getStorageSync('navHeight'),		
-	  title:'实验室安全智能监测与控制系统',
+      navHeight: uni.getStorageSync('navHeight'),
+      title:'实验室安全智能监测与控制系统',
       //随手拍数量
       appReceivePhotoNoteNum:0,
       //准入数量
@@ -151,7 +150,7 @@ export default {
       buttonArray:[],
       gradingCount:0,//分级管控未完成总数
       homepageBanner:uni.getStorageSync('homepageBanner'),
-	  fanList:[],//控制记录触发方式
+      fanList:[],//控制记录触发方式
     }
   },
   created() {
@@ -165,24 +164,24 @@ export default {
     this.getSafeWarnList();
     this.getLoginUserInfo();
     this.getGrading();
-	this.getListData();
+    this.getListData();
     //监听报警信息
     getApp().watch(this.getSafeWarnList,'mqttAlarmData');
   },
   methods: {
-	  //查询控制记录触发方式
-	  async getListData() {
-		let _this = this;
-		let obj={
-		  pageNum:1,
-		  pageSize:20,
-		  dictType:'trigger_modes'
-		}
-		const {data} = await listData(obj)
-		if (data.code == 200) {
-		   this.fanList=data.rows
-		}
-	  },
+    //查询控制记录触发方式
+    async getListData() {
+      let _this = this;
+      let obj={
+        pageNum:1,
+        pageSize:20,
+        dictType:'trigger_modes'
+      }
+      const {data} = await listData(obj)
+      if (data.code == 200) {
+        this.fanList=data.rows
+      }
+    },
     //暂无提示
     goCheckPage(){
       if(this.userInfo.isadmin){
@@ -251,7 +250,7 @@ export default {
     },
     //获取报警信息详情
     async laboratoryInfo(item){
-		let self=this;
+      let self=this;
       const {data} = await laboratoryInfo(item.subDiyVo.id);
       if(data.code == 200){
         let obj = data.data[0];
@@ -260,16 +259,16 @@ export default {
         obj.subTypeLable = item.subDiyVo.subTypeLable;
         obj.deptName = item.subDiyVo.deptName;
         obj.subAddrrStr = item.subDiyVo.subAddrrStr;
-		//循环判断如果是排风扇的话,启动的时候是人工还是预案还是定时
-		for(let i=0;i<obj.labHardwareVOList.length;i++){
-		 if(obj.labHardwareVOList[i].hardwareTypeEnum.hardwareTypeCode == '2'){
-		 	for(let b=0;b<self.fanList.length;b++){
-		 	  if(self.fanList[b].dictValue==obj.labHardwareVOList[i].triggerModes){
-		 		obj.labHardwareVOList[i].dictLabel=self.fanList[b].dictLabel
-		 	  }
-		 	}
-		 }
-		}
+        //循环判断如果是排风扇的话,启动的时候是人工还是预案还是定时
+        for(let i=0;i<obj.labHardwareVOList.length;i++){
+          if(obj.labHardwareVOList[i].hardwareTypeEnum.hardwareTypeCode == '2'){
+            for(let b=0;b<self.fanList.length;b++){
+              if(self.fanList[b].dictValue==obj.labHardwareVOList[i].triggerModes){
+                obj.labHardwareVOList[i].dictLabel=self.fanList[b].dictLabel
+              }
+            }
+          }
+        }
         uni.navigateTo({
           url: '/pages_manage/workbench/laboratory/laboratoryInfo?item='+encodeURIComponent(JSON.stringify(obj))+'&deptId='+obj.deptId
         });
@@ -277,7 +276,7 @@ export default {
     },
     //获取实验室详情
     async laboratoryInfoOne(item){
-		let self=this;
+      let self=this;
       const {data} = await laboratoryInfo(item.id);
       if(data.code == 200){
         let obj = data.data[0];
@@ -287,16 +286,16 @@ export default {
         obj.deptName = item.deptName;
         obj.subAddrrStr = item.subAddrrStr;
         obj.sensorFunctionList = item.sensorFunctionList;
-		//循环判断如果是排风扇的话,启动的时候是人工还是预案还是定时
-		for(let i=0;i<obj.labHardwareVOList.length;i++){
-		 if(obj.labHardwareVOList[i].hardwareTypeEnum.hardwareTypeCode == '2'){
-		 	for(let b=0;b<self.fanList.length;b++){
-		 	  if(self.fanList[b].dictValue==obj.labHardwareVOList[i].triggerModes){
-		 		obj.labHardwareVOList[i].dictLabel=self.fanList[b].dictLabel
-		 	  }
-		 	}
-		 }
-		}
+        //循环判断如果是排风扇的话,启动的时候是人工还是预案还是定时
+        for(let i=0;i<obj.labHardwareVOList.length;i++){
+          if(obj.labHardwareVOList[i].hardwareTypeEnum.hardwareTypeCode == '2'){
+            for(let b=0;b<self.fanList.length;b++){
+              if(self.fanList[b].dictValue==obj.labHardwareVOList[i].triggerModes){
+                obj.labHardwareVOList[i].dictLabel=self.fanList[b].dictLabel
+              }
+            }
+          }
+        }
         uni.navigateTo({
           url: '/pages_manage/workbench/laboratory/laboratoryInfo?item='+encodeURIComponent(JSON.stringify(obj))+'&deptId='+item.deptId
         });
@@ -354,24 +353,24 @@ export default {
           }
         }
         this.dataList = data.data;
-		let list = [];
-		let obj = {
-			type:"lab/function/data",
-			idList:[],
-		}
-		for(let i=0;i<self.dataList.length;i++){
-			let num = 0;
-			for(let o=0;o<obj.idList.length;o++){
-				if(obj.idList[o] == self.dataList[i].id){
-					num++
-				}
-			}
-			if(num == 0){
-				obj.idList.push(self.dataList[i].id)
-			}
-		}
-		list.push({type:"lab/riskPlan/trigger/notice",});
-		getApp().appMqttOn(1,list);
+        let list = [];
+        let obj = {
+          type:"lab/function/data",
+          idList:[],
+        }
+        for(let i=0;i<self.dataList.length;i++){
+          let num = 0;
+          for(let o=0;o<obj.idList.length;o++){
+            if(obj.idList[o] == self.dataList[i].id){
+              num++
+            }
+          }
+          if(num == 0){
+            obj.idList.push(self.dataList[i].id)
+          }
+        }
+        list.push({type:"lab/riskPlan/trigger/notice",});
+        getApp().appMqttOn(1,list);
       }
     },
     //获取输入数量
@@ -405,30 +404,31 @@ export default {
     goPage(type){
       if(type=='casuallyPat'){
         uni.navigateTo({
-          url: '/pages/casuallyPat',//随手拍
+          url: '/pages_safetyExamine/snapshotManage/snapshotAdd',//随手拍
         });
-      }else if(type=='receiveCasuallyPat'){//收到随手拍
+      }else if(type=='receiveCasuallyPat'){
         uni.navigateTo({
           url: '/pages_manage/workbench/receiveCasuallyPat/receiveCasuallyPat',
         });
-      }else if(type=='accessQualification'){//收到随手拍
+      }else if(type=='accessQualification'){
         uni.navigateTo({
           url: '/pages_manage/workbench/accessQualification/accessQualification',
         });
 
       }else if(type == 'safetyInspect'){//安全检查
+        this.getGentleIdentifier();
+        // uni.navigateTo({
+        //   url: '/pages_manage/workbench/securityCheck/inspectionRecords',//安全检查
+        // });
 
-        uni.navigateTo({
-          url: '/pages_manage/workbench/securityCheck/inspectionRecords',//安全检查
-        });
       }
       else if(type == 'alarm'){
         uni.navigateTo({
-		  url: '/pages/earlyWarningManage/earlyWarningList',//安全警报
-		});
+          url: '/pages/earlyWarningManage/earlyWarningList',//安全警报
+        });
       }else if(type == 'emergencyEvacuation'){
         uni.navigateTo({
-          url: '/pages_manage/emergencyEvacuationBig',//安全警报
+          url: '/pages_manage/emergencyEvacuationBig',
         });
       }else if(type == 'photoInspection'){
         this.outSubjectPhoto();
@@ -441,13 +441,13 @@ export default {
           url: '/pages_manage/gasManage/gasManage',
         });
       }else if(type == 'none'){
-		  uni.showToast({
-		    title: '暂未开放',
-		    icon:"none",
-		    mask:true,
-		    duration: 2000
-		  });
-	  }
+        uni.showToast({
+          title: '暂未开放',
+          icon:"none",
+          mask:true,
+          duration: 2000
+        });
+      }
     },//获取拍照检查配置
     async outSubjectPhoto(){
       const {data} = await outSubjectPhoto();
@@ -494,10 +494,43 @@ export default {
         }
       }
     },
+    //获取用户身份标识"adminGentle": false,   管理员身份 "rectifyGentle": false,   整改身份"applyGentle": false    检查者身份
+    async getGentleIdentifier(){
+      let self = this;
+      const {data} = await getGentleIdentifier();
+      if(data.code==200){
+        let pageType = null
+        // 如果是管理员 检查者和整改者
+        let list=[];
+        if(data.data.adminGentle){
+          list.push({name:'管理员',pageType:1})
+        }
+        if(data.data.applyGentle ||data.data.myApplyGentle){
+          list.push({name:'检查者',pageType:2})
+        }
+        if(data.data.rectifyGentle){
+          list.push({name:'整改者',pageType:3})
+        }
+        uni.setStorageSync('gentleIdentifier',list)
+        uni.setStorageSync('gentleIdentifierData',data.data)
+        if(list.length>0){
+          uni.navigateTo({
+            url: '/pages/safetyExamineWorkbench',
+          });
+        }else{
+          uni.showToast({
+            title: '没有相关权限',
+            icon:"none",
+            mask:true,
+            duration: 2000
+          });
+        }
+      }
+    },
   },
   beforeDestroy(){
-	//断开mqtt连接
-	getApp().offMQTT();
+    //断开mqtt连接
+    getApp().offMQTT();
     //删除报警监听
     getApp().deleteAlarmWatch();
     //删除传感器监听

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 2004 - 0
pages/safetyExamineWorkbench.vue


+ 62 - 22
pages/studentWorkbench.vue

@@ -1,7 +1,7 @@
 <!-- 学生端工作台 -->
 <template>
   <view class="user-workbench" :style="{paddingTop:navHeight+'rpx'}">
-	<nav-bar :title="title"></nav-bar>  
+    <nav-bar :title="title"></nav-bar>
     <img class="top-big-img" :src="homepageBanner">
     <view class="min-icon-button-box">
       <view @click="goPage('casuallyPat')">
@@ -24,7 +24,7 @@
         <img src="@/images/icon_dzt_pzjc.png">
         <view>离开检查</view>
       </view>
-      <view @click="goPage('gas')">
+      <view @click="goPage('none')">
         <img src="@/images/Version3.0/icon_sy_qpgl.png">
         <view>气瓶管理</view>
       </view>
@@ -71,23 +71,23 @@
 </template>
 
 <script>
-import { myViolationCount,queryMyCert,outSubjectPhoto,gradingControl} from '@/api/index.js'
+import { myViolationCount,queryMyCert,outSubjectPhoto,gradingControl,getGentleIdentifier} from '@/api/index.js'
 import { tabBar } from '@/component/tabBar.vue'
 import { navBar } from '@/component/navbar.vue'
 export default {
   components: {
     tabBar,
-	navBar
+    navBar
   },
   data() {
     return {
-		navHeight: uni.getStorageSync('navHeight'),
-	    title:'实验室安全智能监测与控制系统',		
-		hintType:false,
-		dataList:[],
-		violationData:{},
-		gradingCount:0,
-		homepageBanner:uni.getStorageSync('homepageBanner'),
+      navHeight: uni.getStorageSync('navHeight'),
+      title:'实验室安全智能监测与控制系统',
+      hintType:false,
+      dataList:[],
+      violationData:{},
+      gradingCount:0,
+      homepageBanner:uni.getStorageSync('homepageBanner'),
     }
   },
   created() {
@@ -176,7 +176,7 @@ export default {
         });
       }else if(type == 'casuallyPat'){//随手拍
         uni.navigateTo({
-          url: '/pages/casuallyPat',//随手拍
+          url: '/pages_safetyExamine/snapshotManage/snapshotAdd',//随手拍
         });
       }else if(type == 'safeAccess'){//安全准入
         uni.navigateTo({
@@ -192,21 +192,23 @@ export default {
         });
       }else if(type == 'safetyInspect'){//安全检查
 
-        uni.navigateTo({
-          url: '/pages_manage/workbench/problemRectification/rectifyList',//安全检查
-        });
+        this.getGentleIdentifier();
+        // uni.navigateTo({
+        //   url: '/pages_manage/workbench/problemRectification/rectifyList',//安全检查
+        // });
+
       }else if(type == 'gas'){//气瓶管理
         uni.navigateTo({
           url: '/pages_student/gasManage/gasManage',
         });
       }else if(type == 'none'){
-		  uni.showToast({
-		    title: '暂未开放',
-		    icon:"none",
-		    mask:true,
-		    duration: 2000
-		  });
-	  }
+        uni.showToast({
+          title: '暂未开放',
+          icon:"none",
+          mask:true,
+          duration: 2000
+        });
+      }
     },
     //获取拍照检查配置
     async outSubjectPhoto(){
@@ -254,6 +256,44 @@ export default {
         }
       }
     },
+    //获取用户身份标识"adminGentle": false,   管理员身份 "rectifyGentle": false,   整改身份"applyGentle": false    检查者身份
+    async getGentleIdentifier(){
+      let self = this;
+      const {data} = await getGentleIdentifier();
+      if(data.code==200){
+        let pageType = null
+        // 如果是管理员 检查者和整改者
+        if(data.data.adminGentle && (data.data.applyGentle || data.data.myApplyGentle) && data.data.rectifyGentle){
+          pageType=1
+        }else if(data.data.adminGentle && (data.data.applyGentle || data.data.myApplyGentle) && !data.data.rectifyGentle){
+          pageType=1
+        }else if(data.data.adminGentle && !data.data.applyGentle && data.data.rectifyGentle){
+          pageType=1
+        }else if(!data.data.adminGentle && (data.data.applyGentle || data.data.myApplyGentle) && data.data.rectifyGentle){
+          pageType=2
+        }else if(data.data.adminGentle && !data.data.applyGentle && !data.data.rectifyGentle){
+          pageType=1
+        }else if(!data.data.adminGentle && (data.data.applyGentle || data.data.myApplyGentle) && !data.data.rectifyGentle){
+          pageType=2
+        }else if(!data.data.adminGentle && !data.data.applyGentle && data.data.rectifyGentle){
+          pageType=3
+        }
+        uni.setStorageSync('gentleIdentifier',pageType)
+        uni.setStorageSync('gentleIdentifierData',data.data)
+        if(pageType){
+          uni.navigateTo({
+            url: '/pages/safetyExamineWorkbench',
+          });
+        }else{
+          uni.showToast({
+            title: '没有相关权限',
+            icon:"none",
+            mask:true,
+            duration: 2000
+          });
+        }
+      }
+    },
   }
 }
 </script>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1240 - 0
pages_safetyExamine/dangerManage/dangerDetail.vue


+ 540 - 0
pages_safetyExamine/dangerManage/dangerList.vue

@@ -0,0 +1,540 @@
+<!-- 安全检查-安全隐患 -->
+<template>
+  <view class="examine">
+	<view class="header">
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(index)"  :key="index" v-for="(item,index) in tabTextTow">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item}}</view>
+			    <view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view>
+		<view class="lab_title">
+			<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="lab_title_l">
+				<view class="lab_title_l_n">
+					<view>{{getData.deptName?getData.deptName:'选择学院'}}</view>
+					<img src="@/pages_safetyExamine/images/icon_06.png">
+				</view>
+			</picker>
+			<view class="lab_title_r">
+				<view class="lab_title_r_btn" @click="searchBtn">
+					<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+				</view>
+				<input type="text" v-model="getData.searchValue" placeholder="实验室/房间号" maxlength="50" placeholder-style="color: #CCCCCC;font-size:22rpx;">
+				<view class="clear" @click="clearBtn">清除</view>
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="list_three">
+			<view class="list_three_li" v-for="(item,index) in  dataList" :key="index" @click="handleClick(item,'detail')">
+				<view class="list_three_li_t">
+					<view class="list_three_li_t_l">
+						<img v-if="item.checkRange==1" src="@/pages_safetyExamine/images/icon_xyxc_qx.png"/>
+						<img v-if="item.checkRange==2" src="@/pages_safetyExamine/images/icon_xyxc_xy.png"/>
+						<img v-if="item.checkRange==3" src="@/pages_safetyExamine/images/icon_xyxc_sys.png"/>
+						<text></text>
+					</view>
+					<view class="list_three_li_t_c">{{item.subRoom}}</view>
+					<view class="list_three_li_t_c2" v-if="item.overdueStatus==1">已逾期</view>
+					<view class="list_three_li_t_r"></view>
+				</view>
+				<view class="list_three_li_m">
+					<view class="list_three_li_m_t">{{item.title}}</view>
+					<view class="list_three_li_m_b">
+						<text class="green_color" v-if="item.rectifyStatus==1">已完成</text>
+						<text class="blue_color" v-if="item.rectifyStatus==2">待整改</text>
+						<text class="orange_color" v-if="item.rectifyStatus==3">待复核</text>
+						<text class="gray_color" v-if="item.rectifyStatus==4">暂无法整改</text>
+						<text>{{item.hazardType==1?'校院巡查':'实验室自查'}}</text>
+						<text>{{item.collegeName}}</text>
+					</view>
+				</view>
+				<view class="list_three_li_b">整改期限:{{item.rectifyDeadline}}</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkHazardAppList,conditionCollegeInfo} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+		 pageNum:1,
+		 pageSize:20,
+		 hazardType:'1',//1是院校巡查,2是实验室自查
+		 rectifyStatus:'',//1已完成 2待整改 3待复核 4 暂无法整改
+		 searchValue:'',
+		},
+		tabTextTow:['全部','待整改','待复核','已完成','暂无法整改'],
+		curTabTow:0,
+		form:{
+			name:'',
+			type:'校院巡查',
+			startTime:'',
+			endTime:'',
+			inspectScope:[],
+			tiemQuickList:[],
+			scopeIndex:'',
+			seleteListLab:[],
+			patrolIndex:'',
+			seleteListMember:[],
+		},
+		collegeList:[{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},],
+		collegeIndex :0,
+		collegeArray:[],
+		dataList:[],
+	}
+  },
+  onLoad(option) {
+	 if(option.form){
+		this.form=JSON.parse(decodeURIComponent(option.form)); 
+	 }
+	 if(option.pageType==1){
+		  uni.setNavigationBarTitle({
+				title:'校院巡查隐患'
+		  })
+		  this.getData.hazardType=option.pageType;
+	 }else if(option.pageType==2){
+		  uni.setNavigationBarTitle({
+				title:'实验室自查隐患'
+		  })
+		  this.getData.hazardType=option.pageType;
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.getList();
+	  this.conditionCollegeInfo();
+  },
+  methods: {
+		//顶部tab点击
+		tabClickTow(index) {
+			this.curTabTow = index;
+			this.getData.pageNum=1;
+			this.getData.searchValue='';
+			this.getData.deptId='';
+			this.getData.deptName='';
+			this.dataList=[];
+			if(index==0){
+				this.getData.rectifyStatus='';
+			}else if(index==1){//待整改
+				this.getData.rectifyStatus=2;
+			}else if(index==2){//待复核
+				this.getData.rectifyStatus=3;
+			}else if(index==3){//已完成
+				this.getData.rectifyStatus=1;
+			}else if(index==4){//暂无法整改
+				this.getData.rectifyStatus=4;
+			}
+			this.getList()
+		},
+		//选择学院
+		collegeChange(e){
+			this.collegeIndex = e.target.value;
+			this.getData.deptId=this.collegeList[e.target.value].deptId
+			this.getData.deptName=this.collegeList[e.target.value].deptName
+			this.dataList=[];
+			this.getList(); 
+		},
+		//实验室搜索
+		searchBtn(){
+			this.dataList=[];
+			this.getList();
+		},
+		//清除
+		clearBtn(){
+			  this.getData.pageNum=1;
+			  this.collegeIndex=0;
+			  this.getData.deptId='';
+			  this.getData.deptName='';
+			  this.getData.searchValue='';
+			  this.dataList=[];
+			  this.getList();
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+			if(self.total/self.getData.pageSize<=self.getData.pageNum){
+			    console.log('没有更多数据!')
+			}else{
+					setTimeout(function(){
+						self.getData.pageNum += 1;
+						self.getList(); 
+					},1000)
+						 
+			}
+			
+		},
+	    //查询学院列表
+	    async conditionCollegeInfo(){
+	    	let _this = this;
+	    	const {data} = await conditionCollegeInfo();
+	    	if(data.code == 200){
+	    		data.data.forEach(function(item){
+	    			item.type=false;
+	    		})
+	    		_this.collegeList=data.data;
+	    		
+	    		//检查管理
+	    		for(let i=0;i<data.data.length;i++){
+	    			_this.collegeArray.push(data.data[i].deptName)
+	    		}
+	    	}
+	    },
+	    handleClick(row,doType){
+	      let self=this;
+	      if( doType=='subBtn'){//	
+	      
+	      }else if(doType=='detail'){//详情
+	    	  uni.redirectTo({
+	    	  	 url: '/pages_safetyExamine/dangerManage/dangerDetail?item='+encodeURIComponent(JSON.stringify(row))
+	    	  })
+	      }
+	      
+	    },
+	    async getList(){
+	    	let self = this;
+	    	const {data} = await checkHazardAppList(this.getData);
+	    	if(data.code==200){
+	    		this.dataList=[...this.dataList,...data.data.records]
+	    		this.total=data.data.total;
+	    	}
+	    },
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 20rpx;
+	box-sizing: border-box;
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	.orange_color{
+		color: #FA8E1B;
+		border: 1rpx solid #FA8E1B;
+	}
+	.gray_color{
+		color: #A2A2A2;
+		border: 1rpx solid #A2A2A2;
+	}
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 220rpx 0rpx 0;
+		box-sizing: border-box;
+	}
+	/* 切换按钮 */
+	.header{
+		width:100%;
+		position: fixed;
+		top: 0rpx;
+		z-index: 100;
+		.tabTitle_tow{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: flex-start;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			.tabTitle_tow_li{
+				position: relative;
+				width:152rpx;
+				text-align center;
+				.tabTitle_tow_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_tow_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left: 50rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+		}
+		.lab_title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			padding: 20rpx 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			
+			.lab_title_l{
+				width: 250rpx;
+				height: 60rpx;
+				margin-right: 20rpx;
+				.lab_title_l_n{
+					width: 250rpx;
+					height: 60rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #E0E0E0;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					>view{
+						flex:1;
+						line-height:60rpx;
+						margin-left:20rpx;
+						color: #999999;
+						font-size:28rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					>img{
+						width: 14rpx;
+						height: 8rpx;
+						margin-right: 30rpx;
+					}
+				}
+			}
+			.lab_title_r{
+				width: 420rpx;
+				height: 60rpx;
+				position:relative;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				.lab_title_r_btn{
+					width: 60rpx;
+					height: 60rpx
+					position: absolute;
+					top: 0rpx;
+					left:0rpx;
+					z-index: 100;
+					>img{
+						width: 20rpx;
+						height: 20rpx;
+						position: absolute;
+						top: 20rpx;
+						left: 24rpx;
+					}
+				}
+				>input{
+					width: 274rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					left: 60rpx;
+				}
+				.clear{
+					width: 60rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					right:20rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 60rpx;
+				}
+			}
+		}
+		
+	}
+	.list_three{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.list_three_li{
+			position: relative;
+			width: 690rpx;
+			height: 320rpx;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_three_li_t{
+				width: 100%;
+				position: absolute;
+				left: 0;
+				top: 0;
+				.list_three_li_t_l{
+					>img{
+						width: 70rpx;
+						height: 70rpx;
+					}
+					>text{
+						position: absolute;
+						left: -15rpx;
+						top: 76rpx;
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						background: #F5F5F5;
+						border-radius: 15rpx;
+					}
+				}
+				.list_three_li_t_c{
+					width: 630rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 60rpx;
+					box-sizing: border-box;
+				}
+				.list_three_li_t_c2{
+					position: absolute;
+					right: 20rpx;
+					top: 38rpx;
+					width: 120rpx;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF5757;
+					line-height: 40rpx;
+					border: 1rpx solid #FF5757;
+					border-radius: 6rpx;
+					text-align: center;
+				}
+				.list_three_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_three_li_m{
+				position: absolute;
+				top: 110rpx;
+				left: 0;
+				width: 690rpx;
+				height: 158rpx;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_three_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+				}
+				.list_three_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #0183FA;
+						line-height: 40rpx;
+						padding: 0 8rpx;
+						border-radius: 6rpx;
+						background: rgba(1,131,250,0.1);
+						margin-right: 24rpx;
+					}
+					>text:nth-of-type(3){
+						display: inline-block;
+						width: 280rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 26rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						
+					}
+				}
+			}
+			.list_three_li_b{
+				height: 60rpx;
+				width: 100%;
+				position: absolute;
+				top: 258rpx;
+				left: 0;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 60rpx;
+				padding-left: 28rpx;
+				box-sizing: border-box;
+			}
+			
+		}
+	}
+	
+}
+</style>

+ 633 - 0
pages_safetyExamine/dangerManage/dangerManage.vue

@@ -0,0 +1,633 @@
+<!-- 安全检查-安全隐患 -->
+<template>
+  <view class="examine">
+	<view class="header">
+		<view class="tabTitle" v-if="pageType==0">
+			<view class="tabTitle_li" @tap="tabClick(index)"  :key="index" v-for="(item,index) in tabText">
+				<view :class="{on:curTab==index}" class="tabTitle_text">{{item}}</view>
+			    <view :class="{on:curTab==index}" class="tabTitle_across"></view>
+			</view>
+		</view>
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(index)"  :key="index" v-for="(item,index) in tabTextTow">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item}}</view>
+			    <view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view><strong></strong>
+		<view class="lab_title">
+			<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="lab_title_l">
+				<view class="lab_title_l_n">
+					<view>{{getData.deptName?getData.deptName:'选择学院'}}</view>
+					<img src="@/pages_safetyExamine/images/icon_06.png">
+				</view>
+			</picker>
+			<view class="lab_title_r">
+				<view class="lab_title_r_btn" @click="searchBtn">
+					<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+				</view>
+				<input type="text" v-model="getData.searchValue" placeholder="实验室/房间号" maxlength="50" placeholder-style="color: #CCCCCC;font-size:22rpx;">
+				<view class="clear" @click="clearBtn">清除</view>
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="list_three">
+			<view class="list_three_li" v-for="(item,index) in  dataList" :key="index" @click="handleClick(item,'detail')">
+				<view class="list_three_li_t">
+					<view class="list_three_li_t_l">
+						<img v-if="item.checkRange==1" src="@/pages_safetyExamine/images/icon_xyxc_qx.png"/>
+						<img v-if="item.checkRange==2" src="@/pages_safetyExamine/images/icon_xyxc_xy.png"/>
+						<img v-if="item.checkRange==3" src="@/pages_safetyExamine/images/icon_xyxc_sys.png"/>
+						<text></text>
+					</view>
+					<view class="list_three_li_t_c">{{item.subRoom}}</view>
+					<view class="list_three_li_t_c2" v-if="item.overdueStatus==1">已逾期</view>
+					<view class="list_three_li_t_r"></view>
+				</view>
+				<view class="list_three_li_m">
+					<view class="list_three_li_m_t">{{item.title}}</view>
+					<view class="list_three_li_m_b">
+						<text class="green_color" v-if="item.rectifyStatus==1">已完成</text>
+						<text class="blue_color" v-if="item.rectifyStatus==2">待整改</text>
+						<text class="orange_color" v-if="item.rectifyStatus==3">待复核</text>
+						<text class="gray_color" v-if="item.rectifyStatus==4">暂无法整改</text>
+						<text>{{item.hazardType==1?'校院巡查':'实验室自查'}}</text>
+						<text>{{item.collegeName}}</text>
+					</view>
+				</view>
+				<view class="list_three_li_b">整改期限:{{item.rectifyDeadline}}</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkHazardAppList,conditionCollegeInfo} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+			pageNum:1,
+			pageSize:20,
+		    hazardType:'1',//1是院校巡查,2是实验室自查
+			rectifyStatus:'',//1已完成 2待整改 3待复核 4 暂无法整改
+			searchValue:'',
+		},
+		tabText:['校院巡查隐患','实验室自查隐患'],
+		curTab:0,
+		tabTextTow:['全部','待整改','待复核','已完成','暂无法整改'],
+		curTabTow:0,
+		form:{
+			name:'',
+			type:'校院巡查',
+			startTime:'',
+			endTime:'',
+			inspectScope:[],
+			tiemQuickList:[],
+			scopeIndex:'',
+			seleteListLab:[],
+			patrolIndex:'',
+			seleteListMember:[],
+		},
+		collegeList:[{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},],
+		collegeIndex :0,
+		collegeArray:[],
+		dataList:[],
+	}
+  },
+  onLoad(option) {
+	 if(option.form){
+		this.form=JSON.parse(decodeURIComponent(option.form)); 
+		console.log(this.form)
+	 }
+	 if(option.pageType==1){
+	 		  uni.setNavigationBarTitle({
+	 				title:'校院巡查隐患'
+	 		  })
+	 }else if(option.pageType==2){
+	 		  uni.setNavigationBarTitle({
+	 				title:'实验室自查隐患'
+	 		  })
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.getList();
+	  this.conditionCollegeInfo();
+  },
+  methods: {
+		tabClick(index) {
+			this.curTab = index;
+			this.getData.pageNum=1;
+			this.getData.searchValue='';
+			this.getData.deptId='';
+			this.getData.deptName='';
+			this.getData.rectifyStatus='';
+			this.curTabTow=0;
+			this.dataList=[];
+			if(index==0){//校院
+				this.getData.hazardType=1;
+			}else if(index==1){//实验室
+				this.getData.hazardType=2;
+			}
+			this.getList()
+		},
+		//顶部tab点击
+		tabClickTow(index) {
+			this.curTabTow = index;
+			this.getData.pageNum=1;
+			this.getData.searchValue='';
+			this.getData.deptId='';
+			this.getData.deptName='';
+			this.dataList=[];
+			if(index==0){
+				this.getData.rectifyStatus='';
+			}else if(index==1){//待整改
+				this.getData.rectifyStatus=2;
+			}else if(index==2){//待复核
+				this.getData.rectifyStatus=3;
+			}else if(index==3){//已完成
+				this.getData.rectifyStatus=1;
+			}else if(index==4){//暂无法整改
+				this.getData.rectifyStatus=4;
+			}
+			this.getList()
+		},
+		//选择学院
+		collegeChange(e){
+			this.collegeIndex = e.target.value;
+			this.getData.deptId=this.collegeList[e.target.value].deptId
+			this.getData.deptName=this.collegeList[e.target.value].deptName
+			this.dataList=[];
+			this.getList(); 
+		},
+		//实验室搜索
+		searchBtn(){
+			this.dataList=[];
+			this.getList();
+		},
+		//清除
+		clearBtn(){
+			  this.getData.pageNum=1;
+			  this.collegeIndex=0;
+			  this.getData.deptId='';
+			  this.getData.deptName='';
+			  this.getData.searchValue='';
+			  this.dataList=[];
+			  this.getList();
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+			if(self.total/self.getData.pageSize<=self.getData.pageNum){
+			    console.log('没有更多数据!')
+			}else{
+					setTimeout(function(){
+						self.getData.pageNum += 1;
+						self.getList(); 
+					},1000)
+						 
+			}
+			
+		},
+		//查询学院列表
+		async conditionCollegeInfo(){
+			let _this = this;
+			const {data} = await conditionCollegeInfo();
+			if(data.code == 200){
+				data.data.forEach(function(item){
+					item.type=false;
+				})
+				_this.collegeList=data.data;
+				
+				//检查管理
+				for(let i=0;i<data.data.length;i++){
+					_this.collegeArray.push(data.data[i].deptName)
+				}
+			}
+		},
+	    handleClick(row,doType){
+		  let self=this;
+		  if( doType=='subBtn'){//	
+		  
+		  }else if(doType=='detail'){//详情
+			  uni.redirectTo({
+			  	 url: '/pages_safetyExamine/dangerManage/dangerDetail?item='+encodeURIComponent(JSON.stringify(row))
+			  })
+		  }
+		  
+	    },
+		async getList(){
+			let self = this;
+			const {data} = await checkHazardAppList(this.getData);
+			if(data.code==200){
+				this.dataList=[...this.dataList,...data.data.records]
+				this.total=data.data.total;
+			}
+		},
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 20rpx;
+	box-sizing: border-box;
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	.orange_color{
+		color: #FA8E1B;
+		border: 1rpx solid #FA8E1B;
+	}
+	.gray_color{
+		color: #A2A2A2;
+		border: 1rpx solid #A2A2A2;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 220rpx 0rpx 0;
+		box-sizing: border-box;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 340rpx 0rpx 0;
+		box-sizing: border-box;
+	}
+	/* 切换按钮 */
+	.header{
+		width:100%;
+		position: fixed;
+		top: 0rpx;
+		z-index: 100;
+		.tabTitle{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: center;
+			align-items: center;
+			margin-bottom:20rpx;
+			.tabTitle_li{
+				position: relative;
+				width:372rpx;
+				text-align center;
+				.tabTitle_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					>text{
+						position:absolute;
+						min-width: 30rpx;
+						min-height: 30rpx;
+						border-radius:54%;
+						background: #E80000;
+						font-size: 18rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #FFFFFF;
+						text-align: center;
+						line-height: 30rpx;
+						margin-left: 6rpx;
+						padding:2rpx;
+						box-sizing: border-box;
+					}
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left 162rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+			.tabTitle_li:nth-of-type(1)::after{
+				content: '';
+				position: absolute;
+				top: 0rpx;
+				right:  0rpx;
+				width: 1rpx;
+				height: 50rpx;
+				background: #E0E0E0;
+			}
+		}
+		.tabTitle_tow{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: flex-start;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			.tabTitle_tow_li{
+				position: relative;
+				width:152rpx;
+				text-align center;
+				.tabTitle_tow_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_tow_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left: 50rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+		}
+		.lab_title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			padding: 20rpx 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			
+			.lab_title_l{
+				width: 250rpx;
+				height: 60rpx;
+				margin-right: 20rpx;
+				.lab_title_l_n{
+					width: 250rpx;
+					height: 60rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #E0E0E0;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					>view{
+						flex:1;
+						line-height:60rpx;
+						margin-left:20rpx;
+						color: #999999;
+						font-size:28rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					>img{
+						width: 14rpx;
+						height: 8rpx;
+						margin-right: 30rpx;
+					}
+				}
+			}
+			.lab_title_r{
+				width: 420rpx;
+				height: 60rpx;
+				position:relative;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				.lab_title_r_btn{
+					width: 60rpx;
+					height: 60rpx
+					position: absolute;
+					top: 0rpx;
+					left:0rpx;
+					z-index: 100;
+					>img{
+						width: 20rpx;
+						height: 20rpx;
+						position: absolute;
+						top: 20rpx;
+						left: 24rpx;
+					}
+				}
+				>input{
+					width: 274rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					left: 60rpx;
+				}
+				.clear{
+					width: 60rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					right:20rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 60rpx;
+				}
+			}
+		}
+		
+	}
+	.list_three{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.list_three_li{
+			position: relative;
+			width: 690rpx;
+			height: 320rpx;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_three_li_t{
+				width: 100%;
+				position: absolute;
+				left: 0;
+				top: 0;
+				.list_three_li_t_l{
+					>img{
+						width: 70rpx;
+						height: 70rpx;
+					}
+					>text{
+						position: absolute;
+						left: -15rpx;
+						top: 76rpx;
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						background: #F5F5F5;
+						border-radius: 15rpx;
+					}
+				}
+				.list_three_li_t_c{
+					width: 630rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 60rpx;
+					box-sizing: border-box;
+				}
+				.list_three_li_t_c2{
+					position: absolute;
+					right: 20rpx;
+					top: 38rpx;
+					width: 120rpx;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF5757;
+					line-height: 40rpx;
+					border: 1rpx solid #FF5757;
+					border-radius: 6rpx;
+					text-align: center;
+				}
+				.list_three_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_three_li_m{
+				position: absolute;
+				top: 110rpx;
+				left: 0;
+				width: 690rpx;
+				height: 158rpx;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_three_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+				}
+				.list_three_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #0183FA;
+						line-height: 40rpx;
+						padding: 0 8rpx;
+						border-radius: 6rpx;
+						background: rgba(1,131,250,0.1);
+						margin-right: 24rpx;
+					}
+					>text:nth-of-type(3){
+						display: inline-block;
+						width: 290rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 26rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						
+					}
+				}
+			}
+			.list_three_li_b{
+				height: 60rpx;
+				width: 100%;
+				position: absolute;
+				top: 258rpx;
+				left: 0;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 60rpx;
+				padding-left: 28rpx;
+				box-sizing: border-box;
+			}
+			
+		}
+	}
+	
+}
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1263 - 0
pages_safetyExamine/examineManage/examineAdd.vue


+ 935 - 0
pages_safetyExamine/examineManage/examineAddTow.vue

@@ -0,0 +1,935 @@
+<!-- 开始检查 -->
+<template>
+    <view id="startChecking">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+			<viwe class="list">
+				<view class="title">不符合项</view>
+				<view class="check-for-big-box" v-for="(item,index) in form.checkHazardDtoList" :key="index">
+					<view class="grade">
+						<view class="grade_l">隐患等级:</view>
+						<picker @change="gradeChange(item,$event)" :value="gradeIndex" :range="gradeArray" class="scope_r">
+							<view class="grade_r">
+								<view>{{item.hazardLevel==2?'一般隐患':(item.hazardLevel==1?'重大隐患':(item.hazardLevel==3?'管理问题':''))}}</view>
+								<img src="@/pages_safetyExamine/images/icon_06.png">
+							</view>
+						</picker>
+					</view>
+					<view class="project" v-if="checkOptionList.length>0">
+						<view class="project_l">检查项目:</view>
+						<uni-data-picker :ellipsis="false" :localdata="checkOptionList[0]" :map="{text:'name',value:'id'}"
+						popup-title="请选择所属目录" @change="(e)=>onchange(e,index)" @nodeclick="onnodeclick()"
+						ref="uniDataPicker" :addType="true" :addIndex="index">
+							<view  class="project_r">{{item.hazardCheckName?item.hazardCheckName:'请选择检查项'}}</view>
+						</uni-data-picker>
+					</view>
+					<view class="point">
+						<view class="point_l">检查要点:</view>
+						<textarea class="point_r" type="text" v-model="item.hazardCheckPoint" maxlength="50" placeholder="未查到此项检查要点,可在此输入添加" placeholder-style="font-size:28rpx;color:#999;"></textarea>
+					</view>
+					<view class="check-for-input-max-box">
+						<view class="left-title-p">隐患描述:</view>
+						<textarea type="text" v-model="item.hazardDescribe" maxlength="50" placeholder="请输入隐患描述" placeholder-style="font-size:28rpx;color:#999;"></textarea>
+					</view>
+					<view class="check-for-img-max-box">
+						<view class="left-title-p">隐患照片(最多上传5张):</view>
+						<view class="right-img-box">
+							<view class="img-box" v-for="(imgItem,imgIndex) in item.uploadDtoList" :key="imgIndex">
+								<img class="img-data" :src="configURL+imgItem.fileUrl">
+								<img class="position-img" src="@/pages_manage/images/icon_ssp_closure.png" @click="delImg(index,imgIndex)">
+							</view>
+							<img class="add-button" src="@/pages_manage/images/icon_07.png" @click="selectImage(item)" v-if="item.uploadDtoList.length<5">
+						</view>
+					</view>
+				   <view class="voice">
+					   <view class="voice_t">
+						   <view class="voice_t_l">语音备注:</view>
+						   <img class="voice_t_r" src="@/pages_safetyExamine/images/icon_ksjc_yysr.png" @longpress.stop="recordButton(item,$event)" @touchmove.stop="cancelButton"  @touchend.stop="sendButton(item,$event)">
+					   </view>
+					   <view class="voice_b" v-for="(voiceItem,voiceIndex) in item.voiceRemark" :key="voiceIndex">
+						   <view class="voice_b_l" @tap="voicePlay(voiceItem.url)"><img class="add-button" src="@/pages_manage/images/icon_yyt.png"/>{{voiceItem.times}}″</view>
+						   <img class="voice_b_r" src="@/pages_manage/images/Version2.3/icon_sczl_sc.png" @tap="voiceDele(index,voiceIndex)"/>
+					   </view>
+				   </view>
+					<view class="check-for-big-box-position-img-box" v-if="form.checkHazardDtoList.length>1" @click="delDetailsList(index)">
+						<img src="@/pages_manage/images/icon_ssp_closure.png">
+					</view>
+				</view>
+				<view class="add-for-item-p" @click="addDanger()">+ 新增隐患项</view>      
+			</viwe>
+		</scroll-view>
+		<view class="bottom_btn">
+			<view class="bottom_btn_li"  @click="goMinButton(index)" v-for="(item,index) in  bottomBtnList" :key="index">{{item}}</view>
+		</view>  
+	</view>
+</template>
+
+<script>
+	const myaudio  = uni.createInnerAudioContext();
+    import { config } from '@/api/request/config.js'
+    import {checkOptionListNew,treeDepselect,checkManageUpdate,checkManageAdd} from '@/api/index.js'
+    export default {
+        name: "startChecking",
+        data() {
+            return {
+
+				configURL:config.base_url,
+				id:"",
+                //页面子状态
+                minPageType:1,
+				//临时存储隐患信息ID
+				hiddenDangerIdList:[],
+				//数据
+				form:{
+					id:'',
+					checkPlanId:'',
+					manageStatus:'',//保存1  提交2
+					subIds:'',//实验室
+					subjectName:'',
+					title:'',//计划标题
+					deptId:'',//学院
+					collegeName:'',
+					buildId:'',//楼栋
+					buildName:'',
+					checkType:'',// 检查类型(1校院巡查 2实验室自查)  
+					checkResult:'1',// 检查结果 0不符合 1符合 
+					rectifyDeadline:'',//整改期限
+					rectifyNotice:'1',//整改通知(1整改告知书 2整改通知书)
+					roomNumber:'',//房间号
+					checkHazardDtoList:[
+						{
+							voiceRemark:[],//语音备忘存储
+							hazardLevel:2,//隐患等级
+							hazardCheckCode:'', //检查项目code序号 
+							hazardCheckName:'', //检查项目名称 
+							hazardCheckPro:'', //最后一级的id  
+							hazardCheckPoint:'',// 检查要点  
+							hazardDescribe:'', //隐患描述 
+							uploadDtoList:[],//隐患照片
+						}
+					],
+				},
+                inspectionUnit:"",
+                inspectionUnitArray:[],
+				inspectionUnitArrayData:[],
+                //搜索回调列表
+                searchList:[],
+				searchNullType:true,
+				//检查项
+				checkOptionList:[],
+				//新增检查项
+				openIndex:"",
+				open:false,
+				jcxSstkMs:[],
+				jcxSstkNum:'',
+				//临时数据组
+				temporaryIdList:[],
+				//添加项 目录
+				uniPicker:"请选择所属目录",
+				//滑动记录
+				startPoint:{},
+				liveType:false,
+				sendLock: true, //发送锁,当为true时上锁,false时解锁发送
+				recorderManager : wx.getRecorderManager(),
+				temporaryData:[],
+				gradeIndex :0,
+				gradeArray:['一般隐患','重大隐患','管理问题'],
+				bottomBtnList:['上一步','保存','提交'],
+				currentDate:'',//当前时间
+				
+            }
+        },
+        onLoad(option) {
+			//获取当前日期
+			this.currentDate=this.getNowFormatDate()
+			if(option.form){
+				this.form=JSON.parse(decodeURIComponent(option.form)); 
+			}
+        },
+        onShow() {
+			this.getCheckOptionList();
+        },
+        methods: {
+			//获取当前日期函数
+			getNowFormatDate() {
+			  let date = new Date(),
+			    year = date.getFullYear(), //获取完整的年份(4位)
+			    month = date.getMonth() + 1, //获取当前月份(0-11,0代表1月)
+			    strDate = date.getDate() // 获取当前日(1-31)
+			  if (month < 10) month = `0${month}` // 如果月份是个位数,在前面补0
+			  if (strDate < 10) strDate = `0${strDate}` // 如果日是个位数,在前面补0
+			 
+			  return `${year}-${month}-${strDate}`
+			},
+			//隐患等级
+			gradeChange(item,e){
+				console.log(item)
+				console.log(e.target.value)
+				if(e.target.value==0){
+					item.hazardLevel=2
+				}else if(e.target.value==1){
+					item.hazardLevel=1
+				}else if(e.target.value==2){
+					item.hazardLevel=3
+				}
+				
+			},
+			//语音备忘播放
+			async voicePlay(item){
+				console.log(myaudio.src)
+				 myaudio.src = config.base_url+item;
+				 myaudio.play();
+			},
+			//语音备忘删除
+			async voiceDele(index,voiceIndex){
+				let self = this;
+				uni.showModal({
+				  title: '',
+				  cancelColor:'#999999',
+				  confirmColor:'#FF6E6E',
+				  content: '确定删除此语音吗?',
+				  success (res) {
+				    if (res.confirm) {
+				      console.log('用户点击确定')
+					  self.form.checkHazardDtoList[index].voiceRemark.splice(voiceIndex,1);
+					  self.$forceUpdate();
+				    } else if (res.cancel) {
+				      console.log('用户点击取消')
+
+				    }
+				  }
+				})
+
+			},
+			//录制
+			recordButton(item,e){
+				console.log("按下")
+				let self = this;
+				if(item.voiceRemark.length>=5){
+					uni.showToast({
+						title: '语音备忘最多只能上传5条',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				this.liveType=true;
+				console.log('录制',e)
+				this.startPoint = e.touches[0];//记录长按时开始点信息,后面用于计算上划取消时手指滑动的距离。
+				const options = {
+					duration: 60000,
+					sampleRate: 16000,
+					numberOfChannels: 1,
+					encodeBitRate: 48000,
+					format: 'mp3',
+					frameSize: 50
+				}
+				this.recorderManager.start(options);//开始录音
+				this.recorderManager.onStart(() => {
+					console.log('recorder start')
+				})
+				this.recorderManager.onError((res) => {
+					console.log(res);
+				})
+				wx.showToast({
+					title: "正在录音,上划取消发送",
+					icon: "none",
+					duration: 60000//先定义个60秒,后面可以手动调用wx.hideToast()隐藏
+				});
+				this.sendLock = false;//长按时是不上锁的。
+			},
+			//取消
+			cancelButton(e){
+				console.log("移动")
+				let self = this;
+
+			    this.liveType=false;
+				console.log('取消',e)
+				let moveLenght = e.touches[e.touches.length - 1].clientY - this.startPoint.clientY; //移动距离
+				if (Math.abs(moveLenght) > 50) {
+					wx.showToast({
+						title: "松开手指,取消发送",
+						icon: "none",
+						duration: 60000
+					});
+					this.sendLock = true;//触发了上滑取消发送,上锁
+				} else {
+					wx.showToast({
+						title: "正在录音,上划取消发送",
+						icon: "none",
+						duration: 60000
+					});
+					this.sendLock = false;//上划距离不足,依然可以发送,不上锁
+				}
+			},
+			//发送
+			sendButton(item,e){
+				console.log("松开")
+				let self = this;
+
+			    this.liveType=false;
+				console.log('发送',e)
+				wx.hideToast();//结束录音、隐藏Toast提示框
+				this.recorderManager.stop();//结束录音
+				this.recorderManager.onStop((res) => {
+
+					if(!this.sendLock){
+
+						this.uploadVoice(item,res.duration,res.tempFilePath);
+					}
+					console.log('停止录音', res.tempFilePath)
+					console.log("sendLock",this.sendLock);
+				})
+			},
+			//上传MP3
+			async uploadVoice(item,times,tempFilePaths){
+
+			    var self = this;
+			    uni.uploadFile({
+			        url: config.base_url+'/base/file/upload', //仅为示例,非真实的接口地址
+			        header:{'Authorization':uni.getStorageSync('token')},
+			        filePath: tempFilePaths,
+			        name: 'file',
+			        formData: {
+			            'user': 'test'
+			        },
+			        success: (uploadFileRes) => {
+			            let res = JSON.parse(uploadFileRes.data);
+						if(res.code == 200){
+							console.log("上传成功",res)
+							console.log(item)
+							let seconds = Math.round((parseInt(times) % (1000 * 60)) / 1000);
+							item.voiceRemark.push({'times':seconds,'url':res.data.url})
+							console.log(JSON.stringify(self.voice))
+							//self.textParseUrlIps(res.data.url);
+							// self.newData.imgList.push(res.data.url);
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+			        },
+			        fail: err => {
+						uni.hideLoading()
+					},
+			        complete: () => {
+			        }
+			    });
+			},
+			
+			
+            /**************************检查项***************************/
+			
+			//获取检查项
+			async getCheckOptionList() {
+				const {data} = await checkOptionListNew();
+				if(data.code == 200){
+					let list = this.getTreeData(data.data);
+					//this.checkOptionList.push(JSON.parse(JSON.stringify(list)));
+					this.checkOptionList.push(JSON.parse(JSON.stringify(list)));
+					console.log(this.checkOptionList)
+				}
+			},
+			getTreeData(data){
+			  for(var i=0;i<data.length>0;i++){
+				if(data[i].children == null||data[i].children.length<=0){
+				  // children若为空数组,则将children设为undefined
+				  data[i].children = undefined;
+				}else {
+				  // children若不为空数组,则继续 递归调用 本方法
+				  this.getTreeData(data[i].children);
+				}
+			  }
+			  return data;
+			},
+			/**************************搜索项***************************/
+			//搜索特定检查项
+			async searchClick(text,index){
+				console.log("搜索text",text);
+				console.log("搜索index",index);
+				const {data} = await checkOptionListNew({'searchValue':text});
+				if(data.code == 200){
+					if(data.data[0]){
+						// let list = JSON.parse(JSON.stringify(this.checkOptionList));
+						// list[index] = this.getTreeData(data.data);
+						// this.$set(this,'checkOptionList',JSON.parse(JSON.stringify(list)))
+						
+						
+						let list = [];
+						list[0]=this.getTreeData(data.data)
+						this.$set(this,'checkOptionList',JSON.parse(JSON.stringify(list)))
+						
+						console.log(this.checkOptionList)
+						
+						this.$refs.uniDataPicker[index].show();
+					}else{
+						uni.showToast({
+							title: '未找到相关检查项',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+					}
+				}
+			},
+			//重置检查项
+			async resetClick(index){
+				console.log("重置index",index);
+				const {data} = await checkOptionListNew();
+				if(data.code == 200){
+					let list = [];
+					list[0] = this.getTreeData(data.data);
+					this.$set(this,'checkOptionList',JSON.parse(JSON.stringify(list)))
+					this.$refs.uniDataPicker[index].show();
+				}
+			},
+			
+			//选中固有检查项(新)
+			onchange(e,index) {
+				let self = this;
+				//hazardCheckCode:'', //检查项目code序号
+				//hazardCheckName:'', //检查项目名称 
+				//hazardCheckPro:'', //最后一级的id 
+				 
+				if(this.getTreeName(this.checkOptionList[0],e.detail.value[e.detail.value.length-1].value).level==3){
+					let jcxSstkNum=this.getTreeName(this.checkOptionList[0],e.detail.value[e.detail.value.length-1].value).code
+					this.$set(this.form.checkHazardDtoList[index],'hazardCheckPro',e.detail.value[e.detail.value.length-1].value);
+					this.$set(this.form.checkHazardDtoList[index],'hazardCheckCode',jcxSstkNum);
+					this.$set(this.form.checkHazardDtoList[index],'hazardCheckName',e.detail.value[e.detail.value.length-1].text);
+					this.$set(this.form.checkHazardDtoList[index],'hazardCheckPoint',this.getTreeName(this.checkOptionList[0],e.detail.value[e.detail.value.length-1].value).mainPoint);
+					
+				}else{
+					uni.showToast({
+						title: '暂无数据',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			},
+			  //根据id查找元素
+			getTreeName(list,id){
+			   let _this=this
+			  for (let i = 0; i < list.length; i++) {
+				let a=list[i]
+				if(a.id===id){
+				  return a
+				}else{
+				  if(a.children && a.children.length>0){
+					let res=_this.getTreeName(a.children,id)
+					if(res){
+					  return res
+					}
+				  }
+				}
+			  }
+			},
+			onnodeclick(node) {
+				
+			},
+            // 图片上传
+            selectImage(item) {
+                let self = this;
+                if(item.uploadDtoList.length>4){
+                    uni.showToast({
+                        title: '最多上传5张图片',
+                        icon:"none",
+                        mask:true,
+                        duration: 2000
+                    });
+                    return
+                }
+                wx.chooseImage({
+                    count: 1,
+                    sizeType: ["original", "compressed"],
+                    sourceType: ["album", "camera"],
+                    success: function(res) {
+                        let tempFilePaths = res.tempFilePaths[0];
+                        self.uploadImg(tempFilePaths,item);
+                    }
+                });
+            },
+            async uploadImg(tempFilePaths,item){
+                var self = this;
+                uni.showLoading({
+                    title: '上传中',
+                    mask: true
+                });
+                uni.uploadFile({
+                    url: config.base_url+'/base/file/upload', //仅为示例,非真实的接口地址
+                    header:{'Authorization':uni.getStorageSync('token')},
+                    filePath: tempFilePaths,
+                    name: 'file',
+                    formData: {
+                        'user': 'test'
+                    },
+                    success: (uploadFileRes) => {
+                        let res = JSON.parse(uploadFileRes.data);
+						if(res.code == 200){
+							item.uploadDtoList.push({'fileUrl':res.data.url,'fileName':res.data.name});
+							console.log(res.data.url)
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+                    },
+                    fail: err => {},
+                    complete: () => {
+                        uni.hideLoading()
+                    }
+                });
+            },
+            //删除图片
+            delImg(index,minIndex){
+                this.form.checkHazardDtoList[index].uploadDtoList.splice(minIndex,1);
+				this.$forceUpdate();
+			},
+            //添加隐患
+            addDanger(){
+				if(this.form.checkHazardDtoList.length>19){
+					uni.showToast({
+						title: '最多添加20个隐患',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				let obj = {
+					voiceRemark:[],//语音备忘存储
+					hazardLevel:2,//隐患等级
+					hazardCheckCode:'', //检查项目code序号 
+					hazardCheckName:'', //检查项目名称 
+					hazardCheckPro:'', //最后一级的id  
+					hazardCheckPoint:'',// 检查要点  
+					hazardDescribe:'', //隐患描述 
+					uploadDtoList:[],//隐患照片
+				}
+				this.form.checkHazardDtoList.push(obj);
+				this.getCheckOptionList();
+				this.$forceUpdate();
+            },
+			//删除隐患
+			delDetailsList(index){
+				this.hiddenDangerIdList.push(this.form.checkHazardDtoList[index].id)
+				this.form.checkHazardDtoList.splice(index,1);
+				this.$forceUpdate();
+			},
+            //子页面切换
+            goMinButton(index){
+				let self = this;
+				if(index == 0){
+					uni.redirectTo({
+					    url: '/pages_safetyExamine/examineManage/examineAdd?form='+encodeURIComponent(JSON.stringify(this.form))
+					});
+				}else if(index == 1 || index == 2){
+					this.form.manageStatus=index;//1保存 2提交
+					for(let i=0;i<self.form.checkHazardDtoList.length;i++){
+						let num = i+1;
+						if(!self.form.checkHazardDtoList[i].hazardCheckName){
+							uni.showToast({
+								title: '第'+num+'未选择隐患项',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}else if(!self.form.checkHazardDtoList[i].hazardDescribe && self.form.checkHazardDtoList[i].voiceRemark.length<=0){
+							uni.showToast({
+								title: '请输入第'+num+'项隐患描述!',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}else if(self.form.checkHazardDtoList[i].uploadDtoList.length<=0){
+							uni.showToast({
+								title: '请输入第'+num+'项隐患图片!',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}
+					}
+					
+					this.submitForm();
+				}
+            },
+			//提交
+			async submitForm(){
+				let self = this;
+				let obj=JSON.parse(JSON.stringify(self.form));
+				//语音备注JSON对象转字符串
+				for(let i=0;i<obj.checkHazardDtoList.length;i++){
+					if(obj.checkHazardDtoList[i].voiceRemark){
+						obj.checkHazardDtoList[i].voiceRemark=JSON.stringify(obj.checkHazardDtoList[i].voiceRemark)
+					}
+				}
+				if(self.form.id){
+					const {data} = await checkManageUpdate(obj);
+					if(data.code == 200){
+						uni.showToast({
+							title: '提交成功',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						uni.redirectTo({
+						    url: '/pages_safetyExamine/examineManage/examineList?pageType='+this.form.checkType
+						});
+					}
+				}else{
+					const {data} = await checkManageAdd(obj);
+					if(data.code == 200){
+						uni.showToast({
+							title: '提交成功',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						uni.redirectTo({
+						    url: '/pages_safetyExamine/examineManage/examineList?pageType='+this.form.checkType
+						});
+					}
+				}
+			  },
+			
+            
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #startChecking{
+		height:100%;
+		.info-max-box{
+			flex: 1;
+			overflow: scroll;
+			padding: 20rpx 0rpx 128rpx;
+			box-sizing: border-box;
+		}
+		.list{
+			.title{
+				width: 690rpx;
+				height: 100rpx;
+				background: #FFFFFF;
+				border-radius: 20rpx;
+				margin: 20rpx 30rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 100rpx;
+				padding-left: 24rpx;
+				box-sizing: border-box;
+			}
+			.check-for-big-box{
+				width 690rpx;
+				//padding-top:30rpx;
+				margin:0 30rpx 20rpx;
+				background #fff
+				border-radius:20rpx;
+				overflow hidden
+				position relative;
+				padding:30rpx;
+				box-sizing border-box;
+				/* 隐患等级 */
+				.grade{
+					display: flex;
+					justify-content: flex-start;
+					.grade_l{
+						width: 158rpx;
+						text-align: left;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 80rpx;
+					}
+					.grade_r{
+						width: 480rpx;
+						height: 80rpx;
+						border-radius: 10rpx;
+						border: 1rpx solid #E0E0E0;
+						display: flex;
+						justify-content: flex-start;
+						align-items: center;
+						padding-left: 20rpx;
+						box-sizing: border-box;
+						>view{
+							flex:1;
+							line-height:80rpx;
+							font-size: 30rpx;
+							font-family: PingFang SC-Medium, PingFang SC;
+							font-weight: 400;
+							color: #333333;
+							line-height: 80rpx;
+						}
+						>img{
+							width: 14rpx;
+							height: 8rpx;
+							margin-right: 30rpx;
+						}
+					}
+				}
+				/* 检查项目 */
+				.project{
+					.project_l{
+						width: 158rpx;
+						text-align: left;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 80rpx;
+						margin-top: 24rpx;
+					}
+					.project_r{
+						width: 630rpx;
+						min-height: 80rpx;
+						border-radius: 10rpx;
+						border: 1rpx solid #E0E0E0;
+						display: flex;
+						justify-content: flex-start;
+						align-items: center;
+						padding-left: 20rpx;
+						box-sizing: border-box;
+					}
+				}
+				/* 检查要点 */
+				.point{
+					.point_l{
+						width: 158rpx;
+						text-align: left;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 80rpx;
+					}
+					.point_r{
+						width: 630rpx;
+						height: 158rpx;
+						border-radius: 20rpx 20rpx 20rpx 20rpx;
+						opacity: 1;
+						border: 1rpx solid #E0E0E0;
+						padding: 20rpx 14rpx;
+						box-sizing: border-box;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 34rpx;
+					}
+				}
+				/* 隐患描述 */
+				.check-for-input-max-box{
+					.left-title-p{
+						width:150rpx;
+						line-height:80rpx;
+						text-align right
+						font-size:30rpx;
+					}
+					textarea{
+						width: 630rpx;
+						height: 158rpx;
+						border-radius: 20rpx 20rpx 20rpx 20rpx;
+						border: 1rpx solid #E0E0E0;
+						padding: 20rpx 14rpx;
+						box-sizing: border-box;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 34rpx;
+					}
+				}
+				/* 隐患照片 */
+				.check-for-img-max-box{
+					.left-title-p{
+						width: 100%;
+						text-align: left;
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 80rpx;
+					}
+					.right-img-box{
+						.img-box{
+							display inline-block;
+							height:200rpx;
+							width:200rpx;
+							position relative
+							margin:0 14rpx 20rpx 0;
+							border-radius 10rpx;
+							overflow hidden;
+							.img-data{
+								height:200rpx;
+								width:200rpx;
+							}
+							.position-img{
+								position absolute
+								right:0;
+								top:0;
+								width:36rpx;
+								height:36rpx;
+							}
+						}
+						.img-box:nth-of-type(3n+3){
+							margin-right: 0rpx;
+						}
+						.add-button{
+							 margin:0 20rpx 20rpx 0;
+							border-radius 10rpx;
+							overflow hidden;
+							display inline-block
+							height:200rpx;
+							width:200rpx;
+						}
+					}
+				}
+				
+				/* 语音备注 */
+				.voice{
+					.voice_t{
+						height: 80rpx;
+						display: flex;
+						justify-content: space-between;
+						align-items: center;
+						.voice_t_l{
+							font-size: 30rpx;
+							font-family: PingFang SC-Medium, PingFang SC;
+							font-weight: 400;
+							color: #333333;
+							line-height: 80rpx;
+						}
+						.voice_t_r{
+							width: 170rpx;
+							height: 50rpx;
+						}
+					}
+					.voice_b{
+						display flex;
+						justify-content flex-start;
+						align-items center;
+						margin-bottom :30rpx;
+						.voice_b_l{
+							width: 400rpx;
+							height: 40rpx;
+							background:rgba(88,175,255,0.3);
+							border-radius: 10rpx;
+							display flex;
+							justify-content flex-start;
+							align-items center;
+							>img{
+								width: 18rpx;
+								height: 24rpx;
+								margin-left:16rpx;
+								margin-right :20rpx;
+							}
+						}
+						.voice_b_r{
+							width: 28rpx;
+							height: 28rpx;
+							margin-left:20rpx;
+						}
+					}
+				}
+				.check-for-button-max-box{
+					display flex
+					margin-top:30rpx;
+					margin-bottom:20rpx;
+					.left-title-p{
+						width:150rpx;
+						line-height:88rpx;
+						text-align right
+						font-size:30rpx;
+					}
+					.button-text-p{
+						border:1rpx solid #E0E0E0;
+						width:440rpx;
+						height:80rpx;
+						border-radius:10rpx;
+						line-height :80rpx;
+						color: #A2A2A2
+						padding:0 20rpx;
+						font-size:28rpx;
+						display:block;
+						overflow:hidden;
+						text-overflow:ellipsis;
+						white-space:nowrap;
+					}
+				}
+				.check-for-big-box-position-img-box{
+					position absolute
+					top:0;
+					right:0;
+					width:60rpx;
+					height:60rpx;
+					img{
+						width:36rpx;
+						height:36rpx;
+						margin:12rpx;
+					}
+				}
+			}
+			/* 添加隐患项 */
+			.add-for-item-p{
+				width:690rpx;
+				height:100rpx;	
+				border:4rpx dashed #0183FA;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 100rpx;
+				text-align center;
+				border-radius:20rpx;
+				margin:40rpx auto 100rpx;
+		    }
+		}
+		.bottom_btn{
+			width: 690rpx;
+			height: 90rpx;
+			background: #0183FA;
+			border-radius: 10rpx 10rpx 10rpx 10rpx;
+			display: flex;
+			justify-content: flex-start;
+			position: fixed;
+			left: 30rpx;
+			bottom: 20rpx;
+			.bottom_btn_li{
+				flex: 1;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 90rpx;
+				text-align: center;
+				position: relative;
+			}
+			.bottom_btn_li::after{
+				content:'';
+				position: absolute;
+				top: 20rpx;
+				right:0rpx;
+				width: 1rpx;
+				height: 60rpx;
+				background: #D8D8D8;
+			}
+			.bottom_btn_li:nth-of-type(3)::after{
+				display: none;
+			}
+		}
+	}
+
+</style>

+ 717 - 0
pages_safetyExamine/examineManage/examineDetail.vue

@@ -0,0 +1,717 @@
+<!-- 安全检查-检查详情 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="basics">
+			<view class="basics_li">
+				<text>学院:</text>
+				<text>{{infoData.collegeName}}</text>
+			</view>
+			<view class="basics_li">
+				<text>实验室:</text>
+				<text>{{infoData.subjectName}}-{{infoData.roomNumber}}</text>	
+			</view>
+			<view class="basics_li">
+				<text>楼栋:</text>
+				<text>{{infoData.buildName?infoData.buildName:'-'}}</text>
+			</view>
+			<view class="basics_li">
+				<text>检查类型:</text>
+				<text>{{infoData.checkType==1?'校园巡查':(infoData.checkType==2?'实验室自查':'')}}</text>
+			</view>
+			<view class="basics_li">
+				<text>检查范围:</text>
+				<text>{{infoData.checkRange==1?'全校':(infoData.checkRange==2?'学院':'实验室')}}</text>
+			</view>
+			<view class="basics_li" >
+				<text>计划标题:</text>
+				<text>{{infoData.title}}</text>
+			</view>
+			<view class="demand" style="border:none;">
+				<text>检查要求:</text>
+				<text>{{infoData.checkDemand?infoData.checkDemand:''}}</text>
+			</view>
+		</view>
+		<view class="attachment" v-if="infoData.isAttachment==1">
+			<view class="attachment_t">
+				<text>材料附件</text>
+				<text>点击文件标题查看</text>
+			</view>
+			<view class="attachment_li" v-for="item in attachmentList">
+				<img src="@/pages_safetyExamine/images/icon_djc_wj.png"/>
+				<text  @click="attachmentPreview(item)">{{item.fileName}}</text>
+				<!-- <img class="attachment_li_del" src="@/images/Version3.3.3/icon_fjgk_sc.png"/> -->
+			</view>
+		</view>
+		<view class="basics" v-if="manageStatus==2">
+			<view class="basics_li">
+				<text>检查结果:</text>
+				<text>{{infoData.checkResult==0?'不符合':(infoData.checkResult==1?'符合':'')}}</text>
+			</view>
+			<view class="basics_li" v-if="infoData.checkResult==0">
+				<text>整改期限:</text>
+				<text>{{infoData.rectifyDeadline}}</text>	
+			</view>	
+			<view class="basics_li" v-if="infoData.checkResult==0">
+				<text>整改通知:</text>
+				<text style="color: #0183FA;" @click="rectifyInform">{{infoData.rectifyNotice == 1?'整改告知书':(infoData.rectifyNotice == 2?'整改通知书':'')}}</text>
+			</view>
+			<view class="basics_li">
+				<text>检查者:</text>
+				<text>{{infoData.checkUser}}</text>
+			</view>
+			<view class="basics_li" style="border:none;">
+				<text>检查时间:</text>
+				<text>{{infoData.checkTime}}</text>
+			</view>
+		</view>
+		<view class="inconformity" @click="inconformityFun()" v-if="manageStatus==2 && infoData.checkResult==0">不符合项<img v-if="inconformityStatus" src="@/pages_safetyExamine/images/icon_bfhx_xq.png"/><img v-if="!inconformityStatus" src="@/pages_safetyExamine/images/icon_bfhx_sq.png"/></view>
+		<view v-for="(item,index) in infoData.checkHazardDtoList" v-if="manageStatus==2 && infoData.checkResult==0">
+			<view class="danger">
+				<view class="sort">{{index+1}}</view>
+				<view class="grade" :style="item.switch?'border-bottom: 1rpx solid #D8D8D8;':'border:none;'">
+					<text>第{{index+1}}项隐患</text>
+					<text style="color: #0183FA;" @click="dangerItem(item)">{{item.rectifyStatus==1?'已完成':(item.rectifyStatus==2?'待整改':(item.rectifyStatus==3?'待复核':(item.rectifyStatus==4?'暂无法整改':'')))}} >></text>
+				</view>
+				<view v-if="item.switch">
+					<view class="grade">
+						<text>隐患等级:</text>
+						<text>{{item.hazardLevel==2?'一般隐患':(item.hazardLevel==1?'重大隐患':(item.hazardLevel==3?'管理问题':''))}}</text>
+					</view>
+					<view class="project">
+						<view class="project_t">检查项目:</view>
+						<view class="project_b">{{item.hazardCheckProStr}}</view>
+						<view class="project_b2" v-if="item.hazardCheckCount>0">此检查项在当前实验室累计出现{{item.hazardCheckCount}}次隐患</view>
+					</view>
+					<view class="project">
+						<view class="project_t">检查要点:</view>
+						<view class="project_b">{{item.hazardCheckPoint}}</view>
+					</view>
+					<view class="project">
+						<view class="project_t">隐患描述:</view>
+						<view class="project_b">{{item.hazardDescribe}}</view>
+					</view>
+					<view class="picture">
+						<view class="picture_t">隐患照片</view>
+						<view class="picture_b" @click="lockImg(item.uploadDtoList)">
+							<img  :src="baseUrl+imgItem.fileUrl"   v-for="(imgItem,imgIndex) in item.uploadDtoList"/>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="pack_up" @click="switchFun(item)">{{item.switch?'收起':'展开'}}<img v-if="item.switch" src="@/pages_safetyExamine/images/icon_06_1.png"/><img v-if="!item.switch" src="@/pages_safetyExamine/images/icon_06.png"/></view>
+		</view>
+	</scroll-view>
+	<view class="report" @click="rectifyReport" v-if="manageStatus==2 && infoData.checkResult==0">整改报告</view>	
+	<view class="bottom_btn" v-if="manageStatus==0 && isSelfData==1" @click="handleClick('','startInspect')">开始检查</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkSign,queryDeptSignByUserId,findCheckManage,findByPlanIdAttachment} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		baseUrl:config.base_url,
+		manageStatus:0,//0 待检查 1 检查中 2已检查
+		pageType:0,
+		inconformityStatus:false,
+		infoData:{},
+		isSelfData:'',
+		attachmentList:[],
+	}
+  },
+  onLoad(option) {
+	 if(option.id){
+	 	this.id=option.id
+	 	this.findCheckManage()
+	 }
+	 if(option.manageStatus){//检查状态
+		 this.manageStatus=option.manageStatus;
+	 }
+	 if(option.isSelfData){//0没有权限 1 有权限 
+	 		 this.isSelfData=option.isSelfData;
+	 }
+	 
+	 if(option.manageStatus==0 || option.manageStatus==1){
+		uni.setNavigationBarTitle({
+			title:'待检查'
+		})
+	 }else if(option.manageStatus==2){
+	 	uni.setNavigationBarTitle({
+	 		title:'已检查'
+	 	})
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  
+  },
+  methods: {
+		
+		//滚动事件
+		scrollGet(){
+			
+		},
+		//开展检查
+		handleClick(row,doType){
+			if(doType=='startInspect'){
+				uni.navigateTo({
+				    url: '/pages_safetyExamine/examineManage/examineAdd?id='+this.id
+				});
+			}
+		},
+		//根据计划id查询附件列表
+		async findByPlanIdAttachment(){
+			let _this = this;
+			const {data} = await findByPlanIdAttachment({checkPlanId:this.infoData.checkPlanId});
+			if(data.code == 200){
+				_this.attachmentList=data.data;
+			}
+		},
+		//详情
+		async findCheckManage(){
+			let _this = this;
+			const {data} = await findCheckManage({id:this.id});
+			if(data.code == 200){
+				
+				data.data.checkHazardDtoList.forEach(function(item){
+					item.switch=false;
+				})
+				this.infoData=data.data;
+				
+				if(data.data.isAttachment==1){//0没有附件 1有附件
+					this.findByPlanIdAttachment()
+				}
+				
+			}
+		},
+		//附件查看
+		attachmentPreview(item){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+item.fileUrl,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					uni.hideLoading();
+					const filePath = res.tempFilePath
+					wx.openDocument({
+					  filePath: filePath,
+					  success: function (res) {
+						console.log('打开文档成功')
+					  }
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//查看图片
+		lockImg(list){
+			console.log(list)
+			if(!list[0]){
+				return
+			}
+			let urlList=[];
+			for(let i=0;i<list.length;i++){
+				urlList.push(this.baseUrl+list[i].fileUrl)
+			}
+			wx.previewImage({
+				urls: urlList, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+				current: '', // 当前显示图片的http链接,默认是第一个
+				success: function(res) {},
+				fail: function(res) {},
+				complete: function(res) {},
+			})
+		},
+		//隐患项跳转详情
+		dangerItem(row){
+			uni.navigateTo({
+				 url: '/pages_safetyExamine/dangerManage/dangerDetail?item='+encodeURIComponent(JSON.stringify(row))
+			})
+		},
+		//隐患项收起展开
+	    inconformityFun(){
+			this.inconformityStatus=!this.inconformityStatus;
+			if(this.inconformityStatus){
+				this.infoData.checkHazardDtoList.forEach(function(item){
+					item.switch=true;
+				})
+			}else{
+				this.infoData.checkHazardDtoList.forEach(function(item){
+					item.switch=false;
+				})
+			}
+		},
+		//隐患小项收起展开
+		switchFun(item){
+			item.switch=!item.switch
+		},
+		//整改通知
+		rectifyInform(){//rectifyNotice 整改通知(1整改告知书 2整改通知书)
+			if(this.infoData.rectifyNotice==1){//1整改告知书
+				this.genReport(this.infoData.id)
+			}else if(this.infoData.rectifyNotice==2){//2整改通知书
+				this.genNotice(this.infoData.id)
+			}
+		},
+		//整改报告
+		rectifyReport(){
+			console.log(1111)
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkRectify/genReport/' + this.infoData.id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/(整改报告).docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+							filePath: filePath,
+							showMenu: true,
+							fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//整改通知书
+		genNotice(id){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkManage/getRectifyAdviceNote/' + id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/(整改通知书).docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+							filePath: filePath,
+							showMenu: true,
+							fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//整改告知书
+		genReport(id){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkManage/getRectifyNotification/' + id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/整改报告.docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+								filePath: filePath,
+								showMenu: true,
+								fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding-bottom: 140rpx;
+	}
+	.basics{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 30rpx 30rpx 32rpx;
+		box-sizing: border-box;
+		margin: 20rpx 30rpx ;
+		.basics_li{
+			height: 80rpx;
+			display: flex;
+			justify-content: space-between;
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 80rpx;
+				width: 140rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				text-align: right;
+				white-space: nowrap;
+			    overflow: hidden;
+			    text-overflow: ellipsis;
+			}
+		}
+		.demand{
+			>text{
+				display: block;
+			}
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 70rpx;
+				width: 140rpx;
+			}
+			>text:nth-of-type(2){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 40rpx;
+				text-align: left;
+			}
+		}
+	}
+	.attachment{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin: 20rpx 30rpx 0;
+		padding-bottom: 32rpx;
+		box-sizing: border-box;
+		.attachment_t{
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 110rpx;
+				margin-left: 28rpx;
+			}
+			>text:nth-of-type(2){
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #999999;
+				line-height: 110rpx;
+				margin-left: 24rpx;
+			}
+		}
+		.attachment_li{
+			height: 40rpx;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 32rpx;
+			>img{
+				width: 30rpx;
+				height: 26rpx;
+				margin-right: 20rpx;
+				margin-left: 50rpx;
+			}
+			>text{
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 40rpx;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+			}
+			.attachment_li_del{
+				width: 30rpx;
+				height: 30rpx;
+			}
+		}
+	}
+	.inconformity{
+		width: 690rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		margin: 20rpx 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #333333;
+		line-height: 100rpx;
+		text-align: center;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		>img{
+			width: 30rpx;
+			height: 26rpx;
+			margin-left: 20rpx;
+		}
+	}
+	.danger{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 15rpx 30rpx 15rpx;
+		box-sizing: border-box;
+		margin: 20rpx 30rpx ;
+		position: relative;
+		.sort{
+			width: 40rpx;
+			height: 40rpx;
+			background: #0183FA;
+			border-radius: 20rpx 0rpx 10rpx 0rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #FFFFFF;
+			line-height: 40rpx;
+			text-align: center;
+			position: absolute;
+			left: 0;
+			top: 0;
+		}
+		.danger_title{
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height:80rpx;
+			border-bottom: 1rpx solid #D8D8D8;
+		}
+		.grade{
+			height: 80rpx;
+			display: flex;
+			justify-content: space-between;
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 80rpx;
+				width: 140rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				text-align: right;
+			}
+		}
+		.project{
+			.project_t{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.project_b{
+				min-height: 158rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 40rpx;
+				padding: 20rpx 14rpx;
+				box-sizing: border-box;
+				background: #F5F5F5;
+				border-radius: 20rpx 20rpx 20rpx 20rpx;
+			}
+			.project_b2{
+				font-size: 26rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 26rpx;
+				margin-top: 14rpx;
+				text-align: right;
+			}
+		}
+		.picture{
+			.picture_t{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.picture_b{
+				display: flex;
+				justify-content: flex-start;
+				flex-wrap: wrap;
+				>img{
+					width: 200rpx;
+					height: 200rpx;
+					border-radius: 10rpx 10rpx 10rpx 10rpx;
+					margin-right: 14rpx;
+					margin-bottom: 10rpx;
+				}
+				>img:nth-of-type(3n+3){
+					margin-right: 0rpx;
+				}
+			}
+		}
+	}
+	.pack_up{
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #666666;
+		line-height: 140rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		>img{
+			width: 14rpx;
+			height: 8rpx;
+			margin-left: 22rpx;
+		}
+	}
+	.report{
+		width: 153rpx;
+		height: 50rpx;
+		background: #0183FA;
+		border-radius: 25rpx 0rpx 0rpx 25rpx;
+		font-size: 26rpx;
+		font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 50rpx;
+		position: fixed;
+		top: 180rpx;
+		right: 0;
+		text-align: center;
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 899 - 0
pages_safetyExamine/examineManage/examineList.vue

@@ -0,0 +1,899 @@
+<!-- 安全检查-校院巡查管理 -->
+<template>
+  <view class="examine">
+	<view class="header">
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(index)"  :key="index" v-for="(item,index) in tabTextTow">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item}}</view>
+			    <view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view>
+		<view class="lab_title">
+			<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="lab_title_l">
+				<view class="lab_title_l_n">
+					<view>{{getData.deptName?getData.deptName:'选择学院'}}</view>
+					<img src="@/pages_safetyExamine/images/icon_06.png">
+				</view>
+			</picker>
+			<view class="lab_title_r">
+				<view class="lab_title_r_btn" @click="searchBtn">
+					<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+				</view>
+				<input type="text" v-model="getData.searchValue" placeholder="计划标题/实验室/房间号" maxlength="50" placeholder-style="color: #CCCCCC;font-size:22rpx;">
+				<view class="clear" @click="clearBtn">清除</view>
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="list_three">
+			<view class="list_three_li" v-for="(item,index) in  dataList" :key="index">
+				<view class="list_three_li_t">
+					<view class="list_three_li_t_l">
+						<img v-if="item.checkRange==1" src="@/pages_safetyExamine/images/icon_xyxc_qx.png"/>
+						<img v-if="item.checkRange==2" src="@/pages_safetyExamine/images/icon_xyxc_xy.png"/>
+						<img v-if="item.checkRange==3" src="@/pages_safetyExamine/images/icon_xyxc_sys.png"/>
+						<text></text>
+					</view>
+					<view class="list_three_li_t_c">{{item.subjectName}}-{{item.roomNumber}}</view>
+					<view class="list_three_li_t_c2"  v-if="item.isOverdue==1">已逾期</view>
+					<view class="list_three_li_t_r"></view>
+				</view>
+				<view class="list_three_li_m">
+					<view class="list_three_li_m_t">{{item.title}}</view>
+					<view class="list_three_li_m_b">
+						<text class="blue_color" v-if="item.manageStatus==0">待检查</text>
+						<text class="red_color" v-if="item.manageStatus==1">检查中</text>
+						<text class="green_color" v-if="item.manageStatus==2">已检查</text>
+						<text>{{item.checkType==1?'校院巡查':'实验室自查'}}</text>
+						<text>{{item.collegeName}}</text>
+					</view>
+				</view>
+				<!-- 开始检查 -->
+				<view v-if="buttonHide && item.isSelfData==1">
+					<view v-if="item.manageStatus==0 && item.notStarted" class="list_three_li_b" @click="handleClick(item,'add')">开始检查</view>
+					<view v-if="item.manageStatus==1 && item.notStarted" class="list_three_li_b" @click="handleClick(item,'edit')">编辑</view>
+					<view v-if="!item.notStarted" class="list_three_li_b_tow"><img src="@/pages_safetyExamine/images/icon_xyxcgl_jhwks.png"/>计划未开始</view>
+					<view v-if="item.manageStatus==2 && item.notStarted" class="list_three_li_b_three">
+						<img src="@/pages_safetyExamine/images/icon_djcsys.png"/>
+						<text>整改进度:</text>
+						<text v-if="item.checkResult==0" @click="handleClick(item,'detail')">{{item.rectifySchedule}}</text>
+						<text v-if="item.checkResult==1" @click="handleClick(item,'detail')">已完成</text>
+						<text v-if="item.isEndProcess==1" class="report" @click="handleClick(item,'download')">整改报告</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+	</scroll-view>	
+	<view class="bottom_btn" @click="handleClick('','startInspect')">开始检查</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkManageList,conditionCollegeInfo} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+			pageNum:1,
+			pageSize:20,
+			isSelf: 0,//是否本人查询
+		    checkType:'',//检查类型(0全部1校院巡查2实验室自查)
+			manageStatus:-1,//管理状态(-1全部 0待检查,1检查中,2已检查)
+			searchValue:'',
+		},
+		tabTextTow:['全部','待检查','检查中','已检查'],
+		curTabTow:0,
+		form:{
+			name:'',
+			type:'校院巡查',
+			startTime:'',
+			endTime:'',
+			inspectScope:[],
+			tiemQuickList:[],
+			scopeIndex:'',
+			seleteListLab:[],
+			patrolIndex:'',
+			seleteListMember:[],
+		},
+		collegeList:[],
+		collegeIndex :0,
+		collegeArray:[],
+		dataList:[],
+		currentDate:'',
+		myApplyGentle:'',//自查身份 校院巡查管理 里操作按钮隐藏 
+		applyGentle:'',//检查组身份 实验室自查管理 里操作按钮隐藏
+		buttonHide:false,//判断按钮显示隐藏
+	}
+  },
+  onLoad(option) {
+	  this.myApplyGentle=uni.getStorageSync('gentleIdentifierData').myApplyGentle
+	  this.applyGentle=uni.getStorageSync('gentleIdentifierData').applyGentle
+	  
+	 if(option.pageType==1){
+	 		  this.getData.checkType=option.pageType
+	 		  uni.setNavigationBarTitle({
+	 		  		title:'校院巡查管理'
+	 		  })
+			  if(this.myApplyGentle && !this.applyGentle){
+				  this.buttonHide=false
+			  }if(!this.myApplyGentle && !this.applyGentle){
+				  this.buttonHide=false
+			  }else{
+				  this.buttonHide=true;
+			  }
+			  
+	 }else if(option.pageType==2){
+	 		   this.getData.checkType=option.pageType
+	 		  uni.setNavigationBarTitle({
+	 		  		title:'实验室自查管理'
+	 		  })
+			  if(!this.myApplyGentle && this.applyGentle){
+			  		this.buttonHide=false
+			  }if(!this.myApplyGentle && !this.applyGentle){
+				  this.buttonHide=false
+			  }else{
+			  		this.buttonHide=true;
+			  }
+	 }
+  },
+  onShow() {
+	
+  },
+  mounted(){
+	  //获取当前日期
+	  this.currentDate=this.getNowFormatDate() 
+	  this.getList(); 
+	  this.conditionCollegeInfo();
+	  
+  },
+  methods: {
+		//顶部tab点击
+		tabClickTow(index) {
+			this.curTabTow = index;
+			this.getData.pageNum=1;
+			this.dataList=[];
+			if(index==0){
+				this.getData.manageStatus=-1;
+			}else if(index==1){
+				this.getData.manageStatus=0;
+			}else if(index==2){
+				this.getData.manageStatus=1;
+			}else if(index==3){
+				this.getData.manageStatus=2;
+			}
+			this.getList()
+		},
+		//选择学院
+		collegeChange(e){
+			this.collegeIndex = e.target.value;
+			this.getData.deptId=this.collegeList[e.target.value].deptId
+			this.getData.deptName=this.collegeList[e.target.value].deptName
+			this.dataList=[];
+			this.getList(); 
+		},
+		//实验室搜索
+		searchBtn(){
+			this.dataList=[];
+			this.getList();
+		},
+		//清除
+		clearBtn(){
+			  this.getData.pageNum=1;
+			  this.collegeIndex=0;
+			  this.getData.deptId='';
+			  this.getData.deptName='';
+			  this.getData.searchValue='';
+			  this.dataList=[];
+			  this.getList();
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+			if(self.total/self.getData.pageSize<=self.getData.pageNum){
+			    console.log('没有更多数据!')
+			}else{
+					setTimeout(function(){
+						self.getData.pageNum += 1;
+						self.getList(); 
+					},1000)
+						 
+			}
+			
+		},
+		//查询学院列表
+		async conditionCollegeInfo(){
+			let _this = this;
+			const {data} = await conditionCollegeInfo();
+			if(data.code == 200){
+				data.data.forEach(function(item){
+					item.type=false;
+				})
+				_this.collegeList=data.data;
+				
+				//检查管理
+				for(let i=0;i<data.data.length;i++){
+					_this.collegeArray.push(data.data[i].deptName)
+				}
+			}
+		},
+	    handleClick(row,doType){
+		  let self=this;
+		  if( doType=='add'){//开始检查	
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/examineManage/examineAdd?id='+row.id
+			  });
+		  }else if(doType=='edit'){
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/examineManage/examineAdd?id='+row.id
+			  });
+		  }else if(doType=='detail'){
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/examineManage/examineDetail?id='+row.id+'&manageStatus='+row.manageStatus
+			  });
+		  }else if(doType=='startInspect'){//开始检查
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/examineManage/examineAdd'
+			  });
+		  }else if(doType=='download'){//整改报告下载rectifyNotice 整改通知(1整改告知书 2整改通知书)
+			  this.rectifyReport(row.id)
+		  }
+		  
+	    },
+		//整改报告
+		rectifyReport(id){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkRectify/genReport/' + id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/(整改报告).docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+							filePath: filePath,
+							showMenu: true,
+							fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//整改通知书
+		genNotice(id){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkManage/getRectifyAdviceNote/' + id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/(整改通知书).docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+							filePath: filePath,
+							showMenu: true,
+							fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//整改告知书
+		genReport(id){
+			uni.showLoading({
+				title: '下载中'
+			});
+			wx.downloadFile({
+				url: config.base_url+'/zd-security/checkManage/getRectifyNotification/' + id,
+				header: {
+					Authorization: uni.getStorageSync('token')
+				},
+				success: function (res) {
+					const fileManager = wx.getFileSystemManager()
+					const filePath = wx.env.USER_DATA_PATH + '/整改报告.docx'
+					fileManager.saveFile({
+						tempFilePath: res.tempFilePath,
+						filePath,
+						success: () => {
+							uni.hideLoading();
+							wx.openDocument({
+								filePath: filePath,
+								showMenu: true,
+								fileType: 'docx'
+							})
+						},
+						fail: function (res){
+							uni.hideLoading();
+							uni.showToast({
+								title: '下载失败',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					})
+				},
+				fail: function (res){
+					uni.hideLoading();
+					uni.showToast({
+						title: '下载失败',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			})
+		},
+		//获取当前日期函数
+		getNowFormatDate() {
+		  let date = new Date(),
+		    year = date.getFullYear(), //获取完整的年份(4位)
+		    month = date.getMonth() + 1, //获取当前月份(0-11,0代表1月)
+		    strDate = date.getDate() // 获取当前日(1-31)
+		  if (month < 10) month = `0${month}` // 如果月份是个位数,在前面补0
+		  if (strDate < 10) strDate = `0${strDate}` // 如果日是个位数,在前面补0
+		 
+		  return `${year}-${month}-${strDate}`
+		},
+		//是否可以开始检查
+		compareTime(date1){
+		        if(!date1){
+				   return false
+			    } else {
+				   const oDate1 = new Date(date1);
+				   const oDate2 = new Date(this.currentDate)
+					   
+				   if(oDate1.getTime() <= oDate2.getTime()){
+					   return true; //可以开始
+				   } else {
+					   return false; //不能开始
+				   }
+			    }   
+		},
+		async getList(){
+			let self = this;
+			const {data} = await checkManageList(this.getData);
+			if(data.code==200){
+				//判断计划是否开始
+				data.data.records.forEach(function(item){
+					item.notStarted=self.compareTime(item.cycleStartTime)
+				})
+				this.dataList=[...this.dataList,...data.data.records]
+				this.total=data.data.total;
+			}
+		},
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 126rpx;
+	box-sizing: border-box;
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 220rpx 0rpx 0;
+		box-sizing: border-box;
+	}
+	/* 切换按钮 */
+	.header{
+		width:100%;
+		position: fixed;
+		top: 0rpx;
+		z-index: 100;
+		.tabTitle_tow{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: flex-start;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			.tabTitle_tow_li{
+				position: relative;
+				width:146rpx;
+				text-align center;
+				.tabTitle_tow_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_tow_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left: 46rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+		}
+		.lab_title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			padding: 20rpx 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			
+			.lab_title_l{
+				width: 250rpx;
+				height: 60rpx;
+				margin-right: 20rpx;
+				.lab_title_l_n{
+					width: 250rpx;
+					height: 60rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #E0E0E0;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					>view{
+						flex:1;
+						line-height:60rpx;
+						margin-left:20rpx;
+						color: #999999;
+						font-size:28rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					>img{
+						width: 14rpx;
+						height: 8rpx;
+						margin-right: 30rpx;
+					}
+				}
+			}
+			.lab_title_r{
+				width: 420rpx;
+				height: 60rpx;
+				position:relative;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				.lab_title_r_btn{
+					width: 60rpx;
+					height: 60rpx
+					position: absolute;
+					top: 0rpx;
+					left:0rpx;
+					z-index: 100;
+					>img{
+						width: 20rpx;
+						height: 20rpx;
+						position: absolute;
+						top: 20rpx;
+						left: 24rpx;
+					}
+				}
+				>input{
+					width: 274rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					left: 60rpx;
+				}
+				.clear{
+					width: 60rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					right:20rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 60rpx;
+				}
+			}
+		}
+		
+	}
+	.list_three{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.list_three_li{
+			position: relative;
+			width: 690rpx;
+			/* height: 360rpx; */
+			height: auto;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_three_li_t{
+				width: 100%;
+				height: 110rpx;
+				position: relative;
+				left: 0;
+				top: 0;
+				.list_three_li_t_l{
+					>img{
+						width: 70rpx;
+						height: 70rpx;
+					}
+					>text{
+						position: absolute;
+						left: -15rpx;
+						top: 76rpx;
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						background: #F5F5F5;
+						border-radius: 15rpx;
+					}
+				}
+				.list_three_li_t_c{
+					width: 630rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 120rpx;
+					box-sizing: border-box;
+				}
+				.list_three_li_t_c2{
+					position: absolute;
+					right: 20rpx;
+					top: 38rpx;
+					width: 120rpx;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF5757;
+					line-height: 40rpx;
+					border: 1rpx solid #FF5757;
+					border-radius: 6rpx;
+					text-align: center;
+				}
+				.list_three_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_three_li_m{
+				// position: absolute;
+				// top: 110rpx;
+				// left: 0;
+				width: 690rpx;
+				height: 158rpx;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_three_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+				}
+				.list_three_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #0183FA;
+						line-height: 40rpx;
+						padding: 0 8rpx;
+						border-radius: 6rpx;
+						background: rgba(1,131,250,0.1);
+						margin-right: 24rpx;
+					}
+					>text:nth-of-type(3){
+						display: inline-block;
+						width: 350rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 26rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						
+					}
+				}
+			}
+			.list_three_li_b{
+				height: 80rpx;
+				width: 100%;
+				// position: absolute;
+				// top: 278rpx;
+				// left: 0;
+				border-top: 1rpx solid #E0E0E0;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 80rpx;
+				text-align: center;
+			}
+			.list_three_li_b_tow{
+				height: 80rpx;
+				width: 100%;
+				// position: absolute;
+				// top: 278rpx;
+				// left: 0;
+				border-top: 1rpx solid #E0E0E0;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 80rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				>img{
+					width: 28rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+			}
+			.list_three_li_b_three{
+				height: 80rpx;
+				// position: absolute;
+				// top: 278rpx;
+				// left: 0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				width: 100%;
+				border-top: 1rpx solid #E0E0E0;
+				>img{
+					width: 24rpx;
+					height: 30rpx;
+					margin-right: 26rpx;
+					margin-left: 30rpx;
+				}
+				>text:nth-of-type(1){
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 28rpx;
+				}
+				>text:nth-of-type(2){
+					flex:1;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 28rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.report{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 28rpx;
+					margin-right: 40rpx;
+				}
+			}
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+	/* 指纹采集 */
+	.shade {
+	  height: 100%;
+	  width: 100%;
+	  position: fixed;
+	  display: flex;
+	  flex-direction: column;
+	  z-index: 10;
+	  background: rgba(0, 0, 0, 0.2);
+	  .null-box {
+		flex: 1;
+	  }
+	  .shade_n {
+		  position: absolute;
+		  bottom: 0;
+		  left: 0;
+		  width: 750rpx;
+		  height: 560rpx;
+		  background: #FFFFFF;
+		  border-radius: 20rpx 20rpx 0rpx 0rpx;
+		  .shade_n_title{
+			  height: 100rpx;
+			  padding: 0 30rpx;
+			  box-sizing: border-box;
+			  display: flex;
+			  justify-content:space-between;
+			  border-bottom: 1rpx solid #E0E0E0;
+			  >text:nth-of-type(1){
+				  font-size: 30rpx;
+				  font-family: PingFang SC-Medium, PingFang SC;
+				  font-weight: 400;
+				  color: #333333;
+				  line-height: 100rpx;
+			  }
+			  >text:nth-of-type(2){
+				  font-size: 30rpx;
+				  font-family: PingFang SC-Medium, PingFang SC;
+				  font-weight: 400;
+				  color: #0183FA;
+				  line-height: 100rpx;
+				  
+			  }
+		  }
+		  .shade_n_b{
+			  height: 460rpx;
+			  padding: 0 30rpx;
+			  box-sizing: border-box;
+			  overflow-y: auto;
+			  .shade_n_b_li{
+				   display: flex;
+				   justify-content:space-between;
+				   align-items: center;
+				   height: 80rpx;
+				   border-bottom: 1rpx solid #E0E0E0;
+				 >text{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					line-height: 80rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+				 }
+				 >img{
+					 width: 24rpx;
+					 height: 16rpx;
+					 margin-right: 14rpx;
+				 } 
+			  }
+			  .color_A{
+				  color: #333333;
+			  }
+			  .color_B{
+				  color: #0183FA;
+			  }
+			  
+			 
+		  }
+	  }
+	}
+}
+</style>

BIN
pages_safetyExamine/images/icon_04.png


BIN
pages_safetyExamine/images/icon_06.png


BIN
pages_safetyExamine/images/icon_06_1.png


BIN
pages_safetyExamine/images/icon_aqjc_sm.png


BIN
pages_safetyExamine/images/icon_aqjc_ss.png


BIN
pages_safetyExamine/images/icon_aqjc_ssp.png


BIN
pages_safetyExamine/images/icon_bfhx_sq.png


BIN
pages_safetyExamine/images/icon_bfhx_xq.png


BIN
pages_safetyExamine/images/icon_cg.png


BIN
pages_safetyExamine/images/icon_djc_wj.png


BIN
pages_safetyExamine/images/icon_djcsys.png


BIN
pages_safetyExamine/images/icon_fjgk_sc.png


BIN
pages_safetyExamine/images/icon_jcjh_cy.png


BIN
pages_safetyExamine/images/icon_ksjc_yysr.png


BIN
pages_safetyExamine/images/icon_rl.png


BIN
pages_safetyExamine/images/icon_ssp_ry.png


BIN
pages_safetyExamine/images/icon_xyxc_aqyh.png


BIN
pages_safetyExamine/images/icon_xyxc_qx.png


BIN
pages_safetyExamine/images/icon_xyxc_sm.png


BIN
pages_safetyExamine/images/icon_xyxc_sys.png


BIN
pages_safetyExamine/images/icon_xyxc_syszc.png


BIN
pages_safetyExamine/images/icon_xyxc_xy.png


BIN
pages_safetyExamine/images/icon_xyxc_xyxc.png


BIN
pages_safetyExamine/images/icon_xyxcgl_jhwks.png


BIN
pages_safetyExamine/images/icon_xzwt_xz.png


BIN
pages_safetyExamine/images/icon_ywc.png


+ 333 - 0
pages_safetyExamine/inforSign.vue

@@ -0,0 +1,333 @@
+<!-- 安全信息牌 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="header">
+			<view class="header_l">
+				<text>{{itemData.typeName}}</text>
+				<text></text>
+				<text>{{itemData.levelName}}</text>
+			</view>
+			<view class="header_r">{{itemData.deptName}}-{{itemData.room}}</view>
+		</view>
+		<view  class="basics">
+			<view class="grade">
+				<text>责任单位:</text>
+				<text>{{itemData.deptName}}</text>
+			</view>
+			<view class="grade">
+				<text>实验室负责人:</text>
+				<text >{{itemData.adminName}}-{{itemData.adminPhone?itemData.adminPhone:'未填写'}}</text>
+			</view>
+			<view class="duty">
+				<view class="duty_l">安全责任人:</view>
+				<view class="duty_r">
+					<text>{{itemData.safeUserNameAdminPhone}}</text>
+				</view>
+			</view>
+		</view>
+		<view class="category" v-if="item.privateList.length>0 && item.classifyType==1" v-for="(item,index) in  itemData.classifyList">
+			<view class="title" :style="'background:'+item.showColour">{{item.classifyName}}</view>
+			<view class="category_li" v-for="(item2,index2) in item.privateList" :key="index2"><text></text><text>{{item2.infoName}}</text></view>
+		</view>
+		<view class="category" v-if="item.privateList.length>0 && item.classifyType==2" v-for="(item,index) in  itemData.classifyList">
+			<view class="title">{{item.classifyName}}</view>
+			<view class="identify_img" @click="lockImg(item.privateList)">
+				<img :src="baseUrl+item2.infoContent" v-for="(item2,index2) in item.privateList" :key="index2"/>
+			</view>
+		</view>
+		<view class="category" v-if="item.privateList.length>0 && item.isSpecial==2" v-for="(item,index) in  itemData.classifyList">
+			<view class="title">{{item.classifyName}}</view>
+			<view class="telephone_li" v-for="(item3,index3) in item.privateList" :key="index3">{{item3.infoContent}}</view>
+		</view>
+		
+	</scroll-view>
+	<view  class="bottom_btn" @click="handleClick('start')">开展检查</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { getSelectInfoByRoom,getInforSign} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		baseUrl:config.base_url,
+		pageType:2,
+		id:'',
+		itemData:{},
+	}
+  },
+  onLoad(option) {
+	 if(option.subId){
+	 	this.id=option.subId;
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.getInforSign()
+	  console.log(uni.getStorageSync('saoCodeId'))
+  },
+  methods: {
+		//滚动事件
+		scrollGet(){},
+		//查询详情
+		async getInforSign(){
+		  let self = this;
+		  let id = uni.getStorageSync('saoCodeId');
+		  const {data} = await getInforSign(id);
+		  if(data.code == 200){
+		    this.itemData = data.data;
+			console.log(this.itemData)
+		  }
+		},
+		//查看图片
+		lockImg(list){
+			console.log(list)
+			if(!list[0]){
+				return
+			}
+			let urlList=[];
+			for(let i=0;i<list.length;i++){
+				urlList.push(this.baseUrl+list[i].infoContent)
+			}
+			wx.previewImage({
+				urls: urlList, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+				current: '', // 当前显示图片的http链接,默认是第一个
+				success: function(res) {},
+				fail: function(res) {},
+				complete: function(res) {},
+			})
+		},
+	    handleClick(doType){
+		  let self=this;
+		  if(doType=='start'){//提交
+			  uni.navigateTo({
+			      url: '/pages_safetyExamine/examineManage/examineAdd?id='+ uni.getStorageSync('saoCodeId')
+			  });
+		  }
+	    },
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding-bottom: 128rpx;
+		box-sizing: border-box;
+	}
+	.header{
+		width: 690rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		margin: 20rpx 30rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		.header_l{
+			width: auto;
+			height: 60rpx;
+			background: #FFFFFF;
+			border-radius: 50rpx 50rpx 50rpx 50rpx;
+			opacity: 1;
+			border: 1rpx solid #DF4848;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-right: 26rpx;
+			
+			>text:nth-of-type(1){
+				font-size: 24rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #DF4848;
+				line-height: 60rpx;
+			}
+			>text:nth-of-type(2){
+				display: inline-block;
+				width: 0rpx;
+				height: 19rpx;
+				opacity: 1;
+				border: 1rpx solid #A2A2A2;
+				margin: 0 10rpx;
+			}
+			>text:nth-of-type(3){
+				font-size: 24rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #DF4848;
+				line-height: 60rpx;
+			}
+		}
+		.header_r{
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 60rpx;
+			flex: 1;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+	}
+	.basics{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 0rpx 30rpx;
+		box-sizing: border-box;
+		margin: 20rpx 30rpx ;
+		.grade{
+			height: 100rpx;
+			display: flex;
+			justify-content: space-between;
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 100rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 100rpx;
+				text-align: right;
+			}
+		}
+		.duty{
+			display: flex;
+			justify-content: space-between;
+			padding: 20rpx 0rpx;
+			box-sizing: border-box;
+			.duty_l{
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 60rpx;
+			}
+			.duty_r{
+				flex: 1;
+				>text{
+					display: block;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 60rpx;
+					text-align: right;
+				}
+			}
+		}
+		
+	}
+	.category{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin: 20rpx 30rpx ;
+		padding-bottom: 20rpx;
+		box-sizing: border-box;
+		.title{
+			width: 690rpx;
+			height: 80rpx;
+			background: #133E93;
+			border-radius: 10rpx 10rpx 0rpx 0rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #FFFFFF;
+			line-height: 80rpx;
+			text-align: center;
+			margin-bottom:20rpx;
+		}
+		.category_li{
+			margin-left: 34rpx;
+			display: flex;
+			justify-content: flex-start;
+			>text:nth-of-type(1){
+				display: inline-block;
+				width: 20rpx;
+				height: 20rpx;
+				border-radius: 50%;
+				background: #D8D8D8;
+				margin-right: 14rpx;
+				margin-top: 20rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 60rpx;
+			}
+		}
+		/* 安全警示标识 */
+		.identify_img{
+			display: flex;
+			justify-content: flex-start;
+			flex-wrap:wrap;
+			margin-left: 34rpx;
+			>img{
+				width: 67rpx;
+				height: 90rpx;
+				margin-right: 24rpx;
+				margin-bottom: 20rpx;
+			}
+		}
+		/* 紧急报警电话 */
+		.telephone_li{
+			flex: 1;
+			font-size: 28rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 60rpx;
+			margin-left: 34rpx;
+		}
+	}
+	/* 待整改 */
+		
+    .bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 897 - 0
pages_safetyExamine/patrolPlan/patrolPlanAdd.vue

@@ -0,0 +1,897 @@
+<!-- 安全检查-发起巡查计划 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="basics">
+			<view class="title">
+				<view class="title_t">计划标题</view>
+				<textarea class="title_b" type="text" v-model="form.title" maxlength="200" placeholder="请输入检查计划标题" placeholder-style="color:#999999;font-size:30rpx;"></textarea>
+			</view>
+			<view class="type">
+				<view class="type_l">检查类型</view>
+				<input class="type_r" type="text" v-model="form.checkTypeName" placeholder="" disabled maxlength="20">
+			</view>
+			<view class="period">		
+				<view class="period_l">检查周期</view>
+				<view class="period_r">
+					<picker mode="date" @change="startChange(form,$event)">
+						<input class="picker-text"  disabled type="text" v-model="form.cycleStartTime" placeholder="开始时间">
+					</picker>
+					<view>至</view>
+					<picker mode="date"  @change="endChange(form,$event)">
+						<input class="picker-text2" disabled type="text" v-model="form.cycleEndTime" placeholder="结束时间">
+					</picker>
+				</view>
+			</view>
+			<view class="tiem_quick">
+				<view @click="tiemQuick(index)" :class="item.type?'tiem_quick_a':'tiem_quick_b'" v-for="(item,index) in tiemQuickList">{{item.name}}</view>
+			</view>
+			<view class="scope">
+				<view class="scope_l">检查范围</view>
+				<picker @change="scopeChange" :value="scopeIndex" :range="scopeArray" class="scope_r">
+					<view class="scope_r_n">
+						<view>{{form.checkRange?(form.checkRange==1?'全校':(form.checkRange==2?'学院':'实验室')):'选择检查范围'}}</view>
+						<img src="@/pages_safetyExamine/images/icon_06.png">
+					</view>
+				</picker>
+			</view>
+			<view class="scope_btn" v-if="scopeIndex==1 || scopeIndex==2" @click="collegeOrLab()">{{scopeIndex==1?'选择学院':'选择实验室'}}</view>
+			<view class="scope_text" v-if="scopeIndex==0 || scopeIndex==1">已选择<text>{{form.collegeNum}}</text>个学院,共<text>{{form.subjectNum}}</text>间实验室</view>
+			<view class="scope_text" v-if="scopeIndex==2">已选择<text>{{form.subjectNum}}</text>间实验室</view>
+			<view class="title">
+				<view class="title_t">检查要求</view>
+				<textarea class="title_b" type="text" v-model="form.checkDemand" maxlength="200" placeholder="请输入检查要求" placeholder-style="color:#999999;font-size:30rpx;"></textarea>
+			</view>
+		</view>
+		<view class="patrol_group" v-if="form.checkType==1">
+			<view class="patrol">
+				<view class="patrol_l">巡查组</view>
+				<view class="patrol_r_n" @click="patrolChange">
+					<view>{{form.checkGroupName?form.checkGroupName:'请选择巡查组'}}</view>
+					<img src="@/pages_safetyExamine/images/icon_06.png">
+				</view>
+			</view>
+			<view class="list">
+				<view class="list_title"><img src="@/pages_safetyExamine/images/icon_jcjh_cy.png">成员</view>
+				<view class="list_header"><text>工号</text><text>姓名</text></view>
+				<view class="list_li" v-for="(item,index) in form.checkMemberDtoList"><text>{{item.jobNum}}</text><text>{{item.name}}</text></view>
+				<view class="list_bottom" v-if="form.checkMemberDtoList.length==0">无数据</view>
+			</view>
+		</view>
+	</scroll-view>	
+	<view class="bottom_btn" @click="submitForm()">保存</view>
+	 <!-- 选择学院-->
+	<view class="shade" v-if="dialogVisible">
+		<view class="null-box" @click="dialogClose()"></view>
+		<view class="shade_n">
+			<view class="shade_n_title"><text>选择学院</text><text @click="collegeConfirm">确定</text></view>
+			<view class="shade_n_b">
+				<view class="shade_n_b_li" v-for="(item,index) in  collegeList" :key="index" @click="collegeSelete(index)">
+					<text :class="item.type?'color_B':'color_A'">{{item.deptName}}</text>
+					<img v-if="item.type" src="@/pages_safetyExamine/images/icon_xzwt_xz.png">
+				</view>
+			</view>
+		</view>
+	</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { checkPlanAdd,conditionCollegeInfo,getAllSubNum,isSCollege} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+		 pageNum:1,
+		 pageSize:20,
+		},
+		form:{
+			title:'',
+			checkType:'1',//1校院巡查 2实验室自查
+			checkTypeName:'校院巡查',//1校院巡查 2实验室自查
+			cycleStartTime:'',
+			cycleEndTime:'',
+			checkRange:'',//检查范围 1全校 2学院 3实验室
+			checkLevel:'',//巡查组层级
+			seleteListMember:[],//临时存储选中巡查组
+			checkMemberDtoList:[],//巡查组成员
+			collegeIds:'',//学院id组
+			collegeNum:0,//学院数量
+			subIds:'',//实验室id组
+			subjectNum:0,//实验室数量
+			checkDemand:'',//检查要求
+			tiemQuickList:[],
+			scopeIndex:'',//0 全校 1学院 2实验室
+			seleteListLab:[],
+			groupDataType:'',//巡查组状态 院级/校级
+		},
+		tiemQuickList:[{name:'本月',type:false},{name:'本季度',type:false},{name:'全年',type:false}],
+		scopeIndex:0,
+		scopeArray:['全校','学院','实验室'],
+		dialogVisible:false,
+		collegeList:[]
+	  
+	}
+  },
+  onLoad(option) {
+	  
+	 if(option.form){
+		this.form=JSON.parse(decodeURIComponent(option.form)); 
+		this.tiemQuickList=this.form.tiemQuickList//时间快捷
+		this.scopeIndex=this.form.scopeIndex//检查范围
+		console.log(this.form)
+	 }
+	 if(option.pageType){
+		 if(option.pageType==1){//校院巡查
+			 this.form.checkType=option.pageType;
+			 this.form.checkTypeName='校院巡查';
+			 uni.setNavigationBarTitle({
+			 		title:'发起巡查计划'
+			 })
+		 }else if(option.pageType==2){//实验室自查
+			  this.form.checkType=option.pageType;
+			  this.form.checkTypeName='实验室自查';
+			  uni.setNavigationBarTitle({
+			  		title:'发起自查计划'
+			  })
+		 }
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.isSCollege();
+  },
+  methods: {
+		//滚动事件
+		scrollGet(){
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.curTab = index;
+		},
+	    //开始时间选中事件
+		startChange(form,e){
+			if(new Date(e.target.value).getTime()>new Date(form.cycleEndTime).getTime()){
+				 uni.showToast({
+					title: '结束时间不能小于开始时间',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				});
+			}else{
+				form.cycleStartTime=e.target.value
+			}
+		},
+	    //结束时间选中事件
+		endChange(form,e){
+			if(new Date(form.cycleStartTime).getTime()>new Date(e.target.value).getTime()){
+				 uni.showToast({
+					title: '结束时间不能小于开始时间',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				});
+			}else{
+				form.cycleEndTime=e.target.value
+			}
+		},
+		//检查周期快捷
+		tiemQuick(index){
+			this.tiemQuickList[index].type = !this.tiemQuickList[index].type
+			let _this = this;
+			if (_this.tiemQuickList[index].type == true) {
+				_this.tiemQuickList.forEach(function(item2) {
+				  if (item2.name == _this.tiemQuickList[index].name) {
+					item2.type = true
+				  } else {
+					item2.type = false
+				  }
+				})
+				//快捷本月-本季度-全年
+				_this.timeSlotChange(_this.tiemQuickList[index].name)
+			}else{
+				console.log('取消选中')
+				_this.form.cycleStartTime='';
+				_this.form.cycleEndTime='';
+			}
+			
+		},
+		//查询当前用户是否是院级
+		async isSCollege(){
+			let _this = this;
+			const {data} = await isSCollege();
+			if(data.code == 200){
+				if(data.data.userFlg){
+					// 院级
+					this.$set(this,'scopeArray',['学院','实验室']);
+					this.form.groupDataType=2;
+				}else{
+					// 校级
+					this.$set(this,'scopeArray',['全校','学院','实验室']);
+					this.form.groupDataType=0;
+				}
+			}
+		},
+		//检查范围
+		scopeChange(e){
+			let _this=this;
+			console.log(this.scopeArray[e.target.value])
+			if(this.scopeArray[e.target.value]=='全校'){
+				_this.scopeIndex=0;
+				_this.form.checkRange=1;
+			}else if(this.scopeArray[e.target.value]=='学院'){
+				_this.scopeIndex=1;
+				_this.form.checkRange=2;
+			}else if(this.scopeArray[e.target.value]=='实验室'){
+				_this.scopeIndex=2;
+				_this.form.checkRange=3;
+			}
+			if(this.form.subjectNum>0){
+				uni.showModal({
+					content: '重新选择会删除现有选择的实验室,是否重选?',
+					cancelColor:"#999",
+					confirmColor:"#0183FA",
+					success: function (res) {
+					  if (res.confirm) {
+						
+						_this.form.collegeIds ='';
+						_this.form.collegeNum =0;
+						_this.form.subIds ='';
+						_this.form.subjectNum =0;
+						
+						if(_this.scopeIndex==0){//全校
+						   _this.getAllSubNum();
+						}else if(_this.scopeIndex==1){//选择学院
+							_this.conditionCollegeInfo();
+						}else if(_this.scopeIndex==2){
+							console.log('选择实验室')
+						}
+						
+					  } else if (res.cancel) {
+						  
+					  }
+					}
+				});
+			}else{
+				if(_this.scopeIndex==0){//全校
+				   _this.getAllSubNum();
+				}else if(_this.scopeIndex==1){//选择学院
+					_this.conditionCollegeInfo();
+				}else if(_this.scopeIndex==2){
+					console.log('选择实验室')
+				}
+			}
+			
+			
+		},
+		timeSlotChange (val) {
+			  let _this=this;	
+		      let cycleStartTime, cycleEndTime;
+		      let now = new Date(); //当前日期 
+		      let nowDayOfWeek = now.getDay(); //今天本周的第几天 
+		      let nowDay = now.getDate(); //当前日 
+		      let nowMonth = now.getMonth(); //当前月 
+		      let nowYear = now.getFullYear(); //当前年 
+		      let jd=Math.ceil((nowMonth + 1) / 3)
+		      switch (val) {
+		        case "本周":
+		          cycleStartTime = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek)
+		          cycleEndTime = new Date(nowYear, nowMonth, nowDay + 6 - nowDayOfWeek)
+		          break;
+		        case "本月":
+		          cycleStartTime = new Date(nowYear, nowMonth, 1)
+		          cycleEndTime = new Date(nowYear, nowMonth + 1, 0)
+		          break;
+		        case "本季度":
+		          cycleStartTime = new Date(nowYear, (jd-1)*3, 1)
+		          cycleEndTime = new Date(nowYear, jd*3, 0)
+		          break
+		          case "全年":
+		          cycleStartTime = new Date(nowYear, 0, 1)
+		          cycleEndTime = new Date(nowYear, 11, 31)
+		          break
+		      }
+			  _this.form.cycleStartTime=_this.formatDateTime(cycleStartTime)
+			  _this.form.cycleEndTime=_this.formatDateTime(cycleEndTime)
+		},
+		// 中国标准时间 转换成 年月日
+		 formatDateTime (date) {
+		  var y = date.getFullYear();
+		  var m = date.getMonth() + 1;
+		  m = m < 10 ? ('0' + m) : m;
+		  var d = date.getDate();
+		  d = d < 10 ? ('0' + d) : d;
+		  var h = date.getHours();
+		  var minute = date.getMinutes();
+		  minute = minute < 10 ? ('0' + minute) : minute;
+		  // return y + '-' + m + '-' + d+' '+h+':'+minute;
+		  return y + '-' + m + '-' + d
+		},
+		//巡查组
+		patrolChange(){
+			this.form.tiemQuickList=this.tiemQuickList//检查周期快捷存储
+			this.form.scopeIndex=this.scopeIndex//检查范围
+			uni.redirectTo({
+			    url: '/pages_safetyExamine/patrolPlan/patrolPlanAddMember?form='+encodeURIComponent(JSON.stringify(this.form))+'&pageType=1'
+			});
+		},
+		//选择学院或者实验室
+		collegeOrLab(){
+			console.log(this.scopeIndex)
+			if(this.scopeIndex==1){//学院
+				this.dialogVisible=true;
+			}else if(this.scopeIndex==2){//实验室
+			    this.form.tiemQuickList=this.tiemQuickList//检查周期快捷存储
+			    this.form.scopeIndex=this.scopeIndex//检查范围
+				uni.redirectTo({
+				    url: '/pages_safetyExamine/patrolPlan/patrolPlanAddLab?form='+encodeURIComponent(JSON.stringify(this.form))+'&pageType=1'
+				});
+			}
+		},
+		//选择学院弹窗关闭
+		dialogClose(){
+		   this.dialogVisible=false;
+	    },
+		
+		//选择学院确定
+		collegeConfirm(){
+			let _this=this;
+			this.dialogVisible=false;
+			let list=[];
+			let collegeIds=[];
+			let subjectNum=0;
+			_this.collegeList.forEach(function(item){
+				if(item.type==true){
+					list.push(item)
+					collegeIds.push(item.deptId);
+					subjectNum+=item.subNum;
+				}
+			})
+			_this.form.collegeIds=collegeIds.join(',');
+			_this.form.subjectNum=subjectNum;
+			_this.form.collegeNum=list.length;
+		},
+		//学院选择
+		collegeSelete(index){
+			this.collegeList[index].type = !this.collegeList[index].type
+		},
+		//查询学院列表
+		async conditionCollegeInfo(){
+			let _this = this;
+			const {data} = await conditionCollegeInfo();
+			if(data.code == 200){
+				data.data.forEach(function(item){
+					item.type=false;
+				})
+				_this.collegeList=data.data;
+			}
+		},
+		//查询全校学院和实验室数量
+		async getAllSubNum(){
+			let _this = this;
+			const {data} = await getAllSubNum();
+			if(data.code == 200){
+				this.form.collegeNum=data.data.collegeCount
+				this.form.subjectNum=data.data.subCount
+			}
+		},
+		
+	    handleClick(doType){
+		  let self=this;
+		  
+		  if( doType=='subBtn'){//	
+			  console.log(11)
+		  }
+		  
+	    },
+		//巡查计划-添加
+		async submitForm(){
+			let _this = this;
+			if(!_this.form.title){
+				uni.showToast({
+				    title: '请输入计划标题',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			if(!_this.form.cycleStartTime || !_this.form.cycleEndTime){
+				uni.showToast({
+				    title: '请选择计划周期',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			if(!_this.form.checkRange){
+				uni.showToast({
+				    title: '请选择检查范围',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			if(_this.form.checkRange==2 && _this.form.subjectNum==0){
+				uni.showToast({
+				    title: '请选择学院',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			if(_this.form.checkRange==3 && _this.form.subjectNum==0){
+				uni.showToast({
+				    title: '请选择实验室',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			if( _this.form.checkType==1 &&_this.form.checkMemberDtoList.length<=0){
+				uni.showToast({
+				    title: '请选择巡查组',
+				    icon:"none",
+				    mask:true,
+				    duration: 2000
+				});
+				return;
+			}
+			
+			
+			const {data} = await checkPlanAdd(_this.form);
+			if(data.code == 200){
+			    uni.showToast({
+			        title: '提交成功',
+			        icon:"none",
+			        mask:true,
+			        duration: 2000
+			    });
+				uni.redirectTo({
+					url: '/pages_safetyExamine/patrolPlan/patrolPlanList?pageType='+this.form.checkType
+				});
+			   
+			}
+		},
+		
+		
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 126rpx;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 0 30rpx;
+		box-sizing: border-box;
+	}
+	.basics{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 20rpx;
+		padding: 60rpx 26rpx 32rpx;
+		box-sizing: border-box;
+		.title{
+			.title_t{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				margin-bottom: 12rpx;
+			}
+			.title_b{
+				width: 636rpx;
+				height: 150rpx;
+				border-radius: 10rpx;
+				opacity: 1;
+				border: 1rpx solid #E0E0E0;
+				padding: 26rpx 23rpx;
+				box-sizing: border-box;
+			}
+		}
+		.type{
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 20rpx;
+			.type_l{
+				width: 146rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				text-align: left;
+			}
+			.type_r{
+				width: 490rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				padding-left:22rpx;
+				box-sizing: border-box;
+                background: #F5F5F5;				
+			}
+		}
+		.period{
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 26rpx;
+			.period_l{
+				width: 146rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				text-align: left;
+			}
+			.period_r{
+				width: 490rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.picker-text{
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+					line-height: 80rpx;
+					width: 230rpx;
+					text-align: center;
+				}
+				.picker-text2{
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+					line-height: 80rpx;
+					width: 230rpx;
+					text-align: center;
+				}
+			}
+		}
+		.tiem_quick{
+			margin-left: 146rpx;
+			display: flex;
+			justify-content: flex-start;
+			margin-top: 20rpx;
+			>view{
+				width: 130rpx;
+				height: 80rpx;
+				opacity: 1;
+				border: 1rpx solid #E0E0E0;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				line-height: 80rpx;
+				text-align: center;
+			}
+			>view:nth-of-type(1){
+				border-radius: 10rpx 0rpx 0rpx 10rpx;
+			}
+			>view:nth-of-type(3){
+				border-radius: 0rpx 10rpx 10rpx 0rpx;
+			}
+			.tiem_quick_a{
+				background: #0183FA;
+				color: #FFFFFF;
+				
+			}
+			.tiem_quick_b{
+				background: #F5F5F5;
+				color: #333333;
+			}
+		}
+		.scope{
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 26rpx;
+			.scope_l{
+				width: 146rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				text-align: left;
+			}
+			.scope_r{
+				flex: 1;
+				.scope_r_n{
+					width: 490rpx;
+					height: 80rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #E0E0E0;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					>view{
+						flex:1;
+						line-height:80rpx;
+						margin-left:20rpx;
+						color: #999999;
+						font-size:28rpx;
+					}
+					>img{
+						width: 14rpx;
+						height: 8rpx;
+						margin-right: 30rpx;
+					}
+				}
+			}
+		}
+		.scope_btn{
+			display: inline-block;
+			background: #0183FA;
+			border-radius: 10rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #FFFFFF;
+			line-height: 80rpx;
+			text-align: center;
+			padding: 0 16rpx;
+			box-sizing: border-box;
+			margin-top: 40rpx;
+			margin-left: 146rpx;
+		}
+		.scope_text{
+			margin-left: 146rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			margin-top: 32rpx;
+			line-height: 42rpx;
+			>text{
+				color: #0183FA;
+			}
+		}
+	}
+	.patrol_group{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 20rpx;
+		padding: 40rpx 30rpx 64rpx;
+		box-sizing: border-box;
+		.patrol{
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 26rpx;
+			.patrol_l{
+				width: 146rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				text-align: left;
+			}
+			.patrol_r_n{
+				width: 490rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view{
+					flex:1;
+					line-height:80rpx;
+					margin-left:20rpx;
+					color: #999999;
+					font-size:28rpx;
+				}
+				>img{
+					width: 14rpx;
+					height: 8rpx;
+					margin-right: 30rpx;
+				}
+			}
+		}
+		.list{
+			margin-top: 42rpx;
+			.list_title{
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				height: 80rpx;
+				background: #F5F5F5;
+				border-radius: 10rpx 10rpx 0rpx 0rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				>img{
+					width: 30rpx;
+					height: 30rpx;
+					margin: 0 20rpx;
+				}
+			}
+			.list_header{
+				display: flex;
+				justify-content: flex-start;
+				>text{
+					flex: 1;
+					height: 80rpx;
+					background: #F5F5F5;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+					text-align: center;
+					border: 1rpx solid #E0E0E0;
+				}
+				>text:nth-of-type(1){
+					border-right: none;
+				}
+			}
+			.list_li{
+				display: flex;
+				justify-content: flex-start;
+				>text{
+					flex: 1;
+					height: 80rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+					text-align: center;
+					border: 1rpx solid #E0E0E0;
+				}
+				>text:nth-of-type(1){
+					border-right: none;
+					border-top: none;
+				}
+				>text:nth-of-type(2){
+					border-top: none;
+				}
+			}
+			.list_bottom{
+				flex: 1;
+				height: 80rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #999999;
+				line-height: 80rpx;
+				text-align: center;
+				border: 1rpx solid #E0E0E0;
+				border-top: none;
+			}
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+	/* 指纹采集 */
+	.shade {
+	  height: 100%;
+	  width: 100%;
+	  position: fixed;
+	  display: flex;
+	  flex-direction: column;
+	  z-index: 10;
+	  background: rgba(0, 0, 0, 0.2);
+	  .null-box {
+		flex: 1;
+	  }
+	  .shade_n {
+		  position: absolute;
+		  bottom: 0;
+		  left: 0;
+		  width: 750rpx;
+		  height: 560rpx;
+		  background: #FFFFFF;
+		  border-radius: 20rpx 20rpx 0rpx 0rpx;
+		  .shade_n_title{
+			  height: 100rpx;
+			  padding: 0 30rpx;
+			  box-sizing: border-box;
+			  display: flex;
+			  justify-content:space-between;
+			  border-bottom: 1rpx solid #E0E0E0;
+			  >text:nth-of-type(1){
+				  font-size: 30rpx;
+				  font-family: PingFang SC-Medium, PingFang SC;
+				  font-weight: 400;
+				  color: #333333;
+				  line-height: 100rpx;
+			  }
+			  >text:nth-of-type(2){
+				  font-size: 30rpx;
+				  font-family: PingFang SC-Medium, PingFang SC;
+				  font-weight: 400;
+				  color: #0183FA;
+				  line-height: 100rpx;
+				  
+			  }
+		  }
+		  .shade_n_b{
+			  height: 460rpx;
+			  padding: 0 30rpx;
+			  box-sizing: border-box;
+			  overflow-y: auto;
+			  .shade_n_b_li{
+				   display: flex;
+				   justify-content:space-between;
+				   align-items: center;
+				   height: 80rpx;
+				   border-bottom: 1rpx solid #E0E0E0;
+				 >text{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					line-height: 80rpx;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+				 }
+				 >img{
+					 width: 24rpx;
+					 height: 16rpx;
+					 margin-right: 14rpx;
+				 } 
+			  }
+			  .color_A{
+				  color: #333333;
+			  }
+			  .color_B{
+				  color: #0183FA;
+			  }
+			  
+			 
+		  }
+	  }
+	}
+}
+</style>

+ 348 - 0
pages_safetyExamine/patrolPlan/patrolPlanAddLab.vue

@@ -0,0 +1,348 @@
+<!-- 安全检查-发起巡查计划-选择实验室 -->
+<template>
+  <view class="examine">
+	  <view class="lab_title">
+		<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="lab_title_l">
+			<view class="lab_title_l_n">
+				<view>{{getData.deptName?getData.deptName:'选择学院'}}</view>
+				<img src="@/pages_safetyExamine/images/icon_06.png">
+			</view>
+		</picker>
+		<view class="lab_title_r">
+			<view class="lab_title_r_btn" @click="searchBtn">
+				<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+			</view>
+			<input type="text" v-model="getData.searchValue" placeholder="请输入实验室名称" maxlength="50" placeholder-style="color: #CCCCCC;font-size:26rpx;">
+			<view class="clear" @click="clearBtn">清除</view>
+		</view>
+	  </view>
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view>
+			
+			<view class="list">
+				<view class="list_li" v-for="(item,index) in  dataList" :key="index" @click="labSelete(index)">
+					<text :class="item.type?'color_B':'color_A'">{{item.subjectName}}-{{item.roomNumber}}</text>
+					<img v-if="item.type" src="@/pages_safetyExamine/images/icon_xzwt_xz.png">
+				</view>
+			</view>
+		</view>
+	</scroll-view>	
+	<view class="bottom_btn" @click="submitForm">保存</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {conditionCollegeInfo,conditionSubjectInfo} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+	  pageType:0,
+      //列表请求参数
+      getData:{
+        pageNum:1,
+        pageSize:20,
+		deptId:'',//学院id
+		deptName:'',
+		searchValue:'',
+		selectedSubIds:[],
+		subIds:[],
+      },
+	  total:0,
+	  collegeIndex :0,
+	  collegeArray:[],
+	  collegeList:[],
+	  dataList:[],
+	  seleteListLab:[],//临时存储选中的 
+	  form:{},
+	}
+  },
+  onLoad(option) {
+      this.form=JSON.parse(decodeURIComponent(option.form));
+	  if(this.form.seleteListLab.length>0){
+		  this.seleteListLab=this.form.seleteListLab;
+	  }
+	  if(option.pageType){//pageType=1添加页面进入2编辑页面进入
+	  	 this.pageType=option.pageType
+	  }
+  },
+  onShow() {
+      
+  },
+  mounted(){
+	  this.conditionCollegeInfo();
+	  this.getList(); 
+  },
+  methods: {
+	  //滚动事件
+	  scrollGet(){
+		  let self=this;
+	      if(self.total/self.getData.pageSize<=self.getData.pageNum){
+	          console.log('没有更多数据!')
+	      }else{
+			  setTimeout(function(){
+				  self.getData.pageNum += 1;
+				  self.getList(); 
+			  },1000)
+			 
+		  }
+	  },
+	  //选择学院
+	  collegeChange(e){
+		  this.collegeIndex = e.target.value;
+		  this.getData.deptId=this.collegeList[e.target.value].deptId
+		  this.getData.deptName=this.collegeList[e.target.value].deptName
+		  this.getData.pageNum=1;
+		  this.dataList=[];
+		  this.getList();
+	  },
+	  //点击选择实验室
+	  labSelete(index){
+	  	this.dataList[index].type = !this.dataList[index].type
+		
+		if(this.dataList[index].type){//判断是选中还是取消
+			if(this.seleteListLab.length>0){
+				if(this.seleteListLab.findIndex((item)=>item.subId===this.dataList[index].subId) ==-1){//等于-1说明数组里没有当前选中元素,可以添加
+					this.seleteListLab.push(this.dataList[index])
+				}
+			}else{
+				this.seleteListLab.push(this.dataList[index])
+			}
+		}else{
+			this.seleteListLab.splice(this.seleteListLab.indexOf(this.dataList[index]),1);
+		}
+	  },
+	  //实验室搜索
+	  searchBtn(){
+		  this.dataList=[];
+		  this.getList();
+	  },
+	  //清除
+	  clearBtn(){
+		  this.getData.pageNum=1;
+		  this.collegeIndex=0;
+		  this.getData.deptId='';
+		  this.getData.deptName='';
+		  this.getData.searchValue='';
+		  this.dataList=[];
+		  this.getList();
+	  },
+	  handleClick(doType){
+		  let self=this;
+		  if( doType=='subBtn'){//保存数据
+			
+		  }
+	  },
+	  //实验室-保存
+	  async submitForm(){
+	  	let _this = this;
+		let subIds=[];
+		this.$set(this.form,'subjectNum', this.seleteListLab.length)
+		this.$set(this.form,'seleteListLab', this.seleteListLab)
+		if(this.seleteListLab.length>0){
+			this.seleteListLab.forEach(function(item){
+				subIds.push(item.subId)
+			})
+			this.$set(this.form,'subIds', subIds.join(','))
+		}
+		if(this.pageType==1){
+			uni.redirectTo({
+				url: '/pages_safetyExamine/patrolPlan/patrolPlanAdd?form='+encodeURIComponent(JSON.stringify(this.form))
+			});
+		}else if(this.pageType==2){
+			uni.redirectTo({
+				url: '/pages_safetyExamine/patrolPlan/patrolPlanEdit?form='+encodeURIComponent(JSON.stringify(this.form))
+			});
+		}
+		
+	  		
+	  },
+	 
+	  //查询学院列表
+	  async conditionCollegeInfo(){
+	  	let _this = this;
+	  	const {data} = await conditionCollegeInfo();
+	  	if(data.code == 200){
+			
+			for(let i=0;i<data.data.length;i++){
+				_this.collegeArray.push(data.data[i].deptName)
+			}
+			_this.collegeList=data.data;
+			console.log()
+	  	}
+	  },
+	  async getList(){
+	      let _this = this;
+	      const {data} = await conditionSubjectInfo(_this.getData);
+	      if(data.code==200){
+			  data.rows.forEach(function(item){
+				  item.type=false;
+			  })
+			  this.dataList=[...this.dataList,...data.rows]
+			  _this.total=data.total;
+			  if(this.seleteListLab.length>0){//如果有选中的数据
+			  		for(let i=0;i<this.dataList.length;i++){
+			  			if(this.seleteListLab.findIndex((item)=>item.subId===this.dataList[i].subId) !=-1){//不等于-1说明数组里有当前元素,可以改为选中
+			  				this.dataList[i].type=true;
+			  			}else{
+			  					  
+			  			}
+			  		}
+			  }
+		  }
+      }
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding: 120rpx 0rpx 30rpx;
+		box-sizing: border-box;
+	}
+	.lab_title{
+		width: 750rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		position: fixed;
+		top: 0;
+		padding: 10rpx 30rpx;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: flex-start;
+		
+		.lab_title_l{
+			width: 250rpx;
+			height: 80rpx;
+			margin-right: 20rpx;
+			.lab_title_l_n{
+				width: 250rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view{
+					flex:1;
+					line-height:80rpx;
+					margin-left:20rpx;
+					color: #999999;
+					font-size:28rpx;
+			        white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				>img{
+					width: 14rpx;
+					height: 8rpx;
+					margin-right: 30rpx;
+				}
+			}
+		}
+		.lab_title_r{
+			width: 420rpx;
+			height: 80rpx;
+			position:relative;
+			border-radius: 10rpx;
+			border: 1rpx solid #E0E0E0;
+			.lab_title_r_btn{
+				width: 60rpx;
+				height: 80rpx
+				position: absolute;
+				top: 0rpx;
+				left:0rpx;
+				>img{
+					width: 20rpx;
+					height: 20rpx;
+					position: absolute;
+					top: 30rpx;
+					left: 24rpx;
+				}
+			}
+			>input{
+				width: 274rpx;
+				height: 80rpx;
+				position: absolute;
+				top: 0rpx;
+				left: 60rpx;
+			}
+			.clear{
+				width: 60rpx;
+				height: 80rpx
+				position: absolute;
+				top: 0rpx;
+				right:20rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 80rpx;
+			}
+		}
+	}
+	.list{
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 0rpx 0rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin: 0 30rpx;
+		.list_li{
+			display: flex;
+			justify-content:space-between;
+			align-items: center;
+			height: 80rpx;
+			border-bottom: 1rpx solid #E0E0E0;
+			>text{
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				line-height: 80rpx;
+				overflow: hidden;
+				text-overflow:ellipsis;
+				white-space: nowrap;
+			}
+			>img{
+				width: 24rpx;
+				height: 16rpx;
+				margin-right: 14rpx;
+			} 
+		}
+		.list_li:last-child{
+			border: none;
+		}
+		.color_A{
+			color: #333333;
+		}
+		.color_B{
+			color: #0183FA;
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 283 - 0
pages_safetyExamine/patrolPlan/patrolPlanAddMember.vue

@@ -0,0 +1,283 @@
+<!-- 安全检查-发起巡查计划-巡查组 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view>
+			<view class="lab_title">
+				<view class="lab_title_n">
+					<view class="lab_title_r_btn" @click="searchBtn">
+						<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+					</view>
+					<input type="text" v-model="getData.groupName" placeholder="请输入巡查组名称" maxlength="50" placeholder-style="color: #CCCCCC;font-size:26rpx;">
+				</view>
+			</view>
+			<view class="list">
+				<view class="list_li" v-for="(item,index) in  dataList" :key="index" @click="labSelete(index)">
+					<text :class="item.type?'color_B':'color_A'">{{item.groupName}}</text>
+					<img v-if="item.type" src="@/pages_safetyExamine/images/icon_xzwt_xz.png">
+				</view>
+			</view>
+		</view>
+	</scroll-view>	
+	<view class="bottom_btn" @click="submitForm">保存</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { checkGroupList,checkGroupDetail} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+	  pageType:0,
+      //列表请求参数
+      getData:{
+		checkLevel:'0',
+		groupName:'',
+		checkLevel:'',
+		
+		
+      },
+	  total:0,
+	  dataList:[],
+	  seleteListMember:[],//临时存储选中巡查组
+	  checkMemberDtoList:[],//临时存储选中的 
+	  form:{},
+	}
+  },
+  onLoad(option) {
+	  if(option.form){
+		  this.form=JSON.parse(decodeURIComponent(option.form));
+		  if(this.form.seleteListMember.length>0){
+		  	 this.seleteListMember=this.form.seleteListMember;
+		  }
+		  this.getData.checkLevel=this.form.groupDataType
+	  }
+	  if(option.pageType){//pageType=1添加页面进入2编辑页面进入
+		  this.pageType=option.pageType
+	  }
+  },
+  onShow() {
+      this.getList(); 
+  },
+  mounted(){
+	  
+  },
+  methods: {
+	  //滚动事件
+	  scrollGet(){
+		  let self=this;
+	      if(self.total<=self.getData.pageNum){
+	          console.log('没有更多数据!')
+	      }else{
+			  setTimeout(function(){
+				  self.getData.pageNum += 1;
+				  self.getList(); 
+			  },1000)
+			 
+		  }
+	  },
+	  //点击选择实验室
+	  labSelete(index){
+		let _this = this;
+	  	this.dataList[index].type = !this.dataList[index].type
+		if (_this.dataList[index].type == true) {
+			_this.dataList.forEach(function(item2) {
+			  if (item2.id == _this.dataList[index].id) {
+				item2.type = true
+			  } else {
+				item2.type = false
+			  }
+			})
+		}
+		if(this.dataList[index].type){//判断是选中还是取消
+			this.seleteListMember.push(this.dataList[index])
+		}else{
+			this.seleteListMember=[];
+		}
+	  },
+	  //实验室搜索
+	  searchBtn(){
+		  this.dataList=[];
+		  this.getList();
+	  },
+	  handleClick(doType){
+		  let self=this;
+		  if( doType=='subBtn'){//保存数据
+			  
+		  }
+	  },
+	  //巡查组-保存
+	  async submitForm(){
+	  	let _this = this;
+		let id=this.seleteListMember[0].id
+		this.form.checkMemberDtoList=[];
+		
+		this.$set(this.form,'checkGroupId',this.seleteListMember[0].id)
+		this.$set(this.form,'checkGroupName',this.seleteListMember[0].groupName)
+	  	const {data} = await checkGroupDetail({id:id,selectEnable:'1'});
+	  	if(data.code == 200){
+			let obj={};
+			for(let i=0;i<data.data.checkGroupMemberList.length;i++){
+				 obj={
+					"deptId":data.data.checkGroupMemberList[i].deptId,
+					"deptName":data.data.checkGroupMemberList[i].deptName,
+					"enable":data.data.checkGroupMemberList[i].enable,
+					"jobNum":data.data.checkGroupMemberList[i].jobNum,
+					"name":data.data.checkGroupMemberList[i].name,
+					"userId":data.data.checkGroupMemberList[i].userId,
+					"userType":data.data.checkGroupMemberList[i].userType
+				}
+				this.form.checkMemberDtoList.push(obj)	
+			}
+			
+			
+			
+			if(this.pageType==1){
+				uni.redirectTo({
+				    url: '/pages_safetyExamine/patrolPlan/patrolPlanAdd?form='+encodeURIComponent(JSON.stringify(this.form))
+				});
+			}else if(this.pageType==2){
+				uni.redirectTo({
+				    url: '/pages_safetyExamine/patrolPlan/patrolPlanEdit?form='+encodeURIComponent(JSON.stringify(this.form))
+				});
+			}
+			
+	  	}
+		
+	  },
+	  
+	  async getList(){
+		 
+	      let _this = this;
+	      const {data} = await checkGroupList(_this.getData);
+	      if(data.code==200){
+			  
+			  if(data.data){
+				  data.data.forEach(function(item){
+					  item.type=false
+				  })
+			  }
+			  this.dataList=[...this.dataList,...data.data]	
+			  //如果有选中的数据
+			  if(this.seleteListMember.length>0){
+					for(let i=0;i<this.dataList.length;i++){
+						if(this.seleteListMember[0].id==this.dataList[i].id){
+							this.dataList[i].type=true;
+						}
+					}
+			  }
+			  this.total=data.data.total;
+		  }
+      }
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding: 120rpx 0rpx 30rpx;
+		box-sizing: border-box;
+	}
+	.lab_title{
+		width: 750rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		position: fixed;
+		top: 0;
+		padding: 10rpx 30rpx;
+		box-sizing: border-box;
+		.lab_title_n{
+			width: 690rpx;
+			height: 80rpx;
+			position:relative;
+			border-radius: 10rpx;
+			border: 1rpx solid #E0E0E0;
+			.lab_title_r_btn{
+				width: 60rpx;
+				height: 80rpx
+				position: absolute;
+				top: 0rpx;
+				left:0rpx;
+				>img{
+					width: 20rpx;
+					height: 20rpx;
+					position: absolute;
+					top: 30rpx;
+					left: 24rpx;
+				}
+			}
+			>input{
+				width: 360rpx;
+				height: 80rpx;
+				position: absolute;
+				top: 0rpx;
+				left: 60rpx;
+			}
+		}
+	}
+	.list{
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 0rpx 0rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin: 0 30rpx;
+		.list_li{
+			display: flex;
+			justify-content:space-between;
+			align-items: center;
+			height: 80rpx;
+			border-bottom: 1rpx solid #E0E0E0;
+			>text{
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				line-height: 80rpx;
+				overflow: hidden;
+				text-overflow:ellipsis;
+				white-space: nowrap;
+			}
+			>img{
+				width: 24rpx;
+				height: 16rpx;
+				margin-right: 14rpx;
+			} 
+		}
+		.list_li:last-child{
+			border: none;
+		}
+		.color_A{
+			color: #333333;
+		}
+		.color_B{
+			color: #0183FA;
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 877 - 0
pages_safetyExamine/patrolPlan/patrolPlanDetail.vue

@@ -0,0 +1,877 @@
+<!-- 安全检查-发起巡查计划 -->
+<template>
+  <view class="examine">
+	<view class="tabTitle">
+		<view class="tabTitle_li" @tap="tabClick(index)"  :key="index" v-for="(item,index) in tabText">
+			<view :class="{on:curTab==index}" class="tabTitle_text">{{item}}</view>
+		    <view :class="{on:curTab==index}" class="tabTitle_across"></view>
+		</view>
+	</view>
+	<view class="header" v-if="pageType==1">
+		<view class="line"></view>
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(index)"  :key="index" v-for="(item,index) in tabTextTow">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item}}</view>
+			    <view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view>
+		<view class="lab_title">
+			<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="lab_title_l">
+				<view class="lab_title_l_n">
+					<view>{{collegeArray[collegeIndex]}}</view>
+					<img src="@/pages_safetyExamine/images/icon_06.png">
+				</view>
+			</picker>
+			<view class="lab_title_r">
+				<view class="lab_title_r_btn" @click="searchBtn">
+					<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+				</view>
+				<input type="text" v-model="getData.name" placeholder="请输入实验室名称" maxlength="50" placeholder-style="color: #CCCCCC;font-size:26rpx;">
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view v-if="pageType==0" style="padding: 0 30rpx;box-sizing: border-box;">
+			<view class="delay_inspect" >
+				<view class="delay_inspect_l" v-if="inspectState==0">待检查实验室:<text>22间</text></view>
+				<view class="delay_inspect_r" v-if="inspectState==0">未开始</view>
+				<view class="delay_inspect_l" v-if="inspectState==1">检查进度:<text>待检查2/检查中2/已检查1</text></view>
+				<view class="delay_inspect_r_tow" v-if="inspectState==1">进行中</view>
+			</view>
+			<view class="basics">
+				<view class="basics_li">
+					<text>计划标题:</text>
+					<text>2023年度4月份安全检查</text>
+				</view>
+				<view class="basics_li">
+					<text>检查类型:</text>
+					<text>校院巡查</text>
+				</view>
+				<view class="basics_li">
+					<text>检查周期:</text>
+					<text>2023-04-01至2023-04-01</text>
+				</view>
+				<view class="basics_li" style="border:none;">
+					<text>检查范围:</text>
+					<text>全校</text>
+				</view>
+				<view class="scope_text">已选择<text>{{form.inspectScope.length}}</text>个学院,共<text>0</text>间实验室</view>
+			</view>
+			
+			<view class="attachment">
+				<view class="attachment_t">
+					<text>材料附件</text>
+					<text>点击文件标题查看</text>
+				</view>
+				<view class="attachment_li">
+					<img src="@/pages_safetyExamine/images/icon_djc_wj.png"/>
+					<text>文件标题文件标题</text>
+					<img class="attachment_li_del" src="@/pages_safetyExamine/images/icon_fjgk_sc.png"/>
+				</view>
+			</view>
+			<view class="patrol_group">
+				<view class="patrol">
+					<view class="patrol_l">巡查组:</view>
+					<view class="patrol_r">校级巡查组</view>
+				</view>
+				<view class="list">
+					<view class="list_title"><img src="@/pages_safetyExamine/images/icon_jcjh_cy.png">成员</view>
+					<view class="list_header"><text>工号</text><text>姓名</text></view>
+					<view class="list_li"><text>12345678</text><text>刘洋</text></view>
+					<view class="list_li"><text>12345678</text><text>刘洋</text></view>
+					<view class="list_li"><text>12345678</text><text>刘洋</text></view>
+					<view class="list_bottom">无数据</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="pageType==1">
+			<view class="list_three">
+				<view class="list_three_li" v-for="(item,index) in  dataList" :key="index">
+					<view class="list_three_li_t">
+						<view class="list_three_li_t_l">
+							<img v-if="item.checkRange==1" src="@/pages_safetyExamine/images/icon_xyxc_qx.png"/>
+							<img v-if="item.checkRange==2" src="@/pages_safetyExamine/images/icon_xyxc_xy.png"/>
+							<img v-if="item.checkRange==3" src="@/pages_safetyExamine/images/icon_xyxc_sys.png"/>
+							<text></text>
+						</view>
+						<view class="list_three_li_t_c">实验室名称-房间号</view>
+						<view class="list_three_li_t_c2">已逾期</view>
+						<view class="list_three_li_t_r"></view>
+					</view>
+					<view class="list_three_li_m">
+						<view class="list_three_li_m_t">计划标题计划标题计划标题计划标题计划标题计划...</view>
+						<view class="list_three_li_m_b">
+							<text class="blue_color">未开始</text>
+							<text>校院巡查</text>
+							<text>环境与测绘学院</text>
+						</view>
+					</view>
+					<view class="list_three_li_b">
+						<img src="@/pages_safetyExamine/images/icon_djcsys.png"/>
+						<text>整改进度:</text>
+						<text>待检查22/待复核1/已完成/暂无法整改</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+	
+	</scroll-view>	
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { } from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+		 pageNum:1,
+		 pageSize:20,
+		},
+		inspectState:0,//检查状态 0 未开始 1进行中
+		tabText:['检查计划','检查管理'],
+		curTab:0,
+		tabTextTow:['全部','未开始','进行中','已结束'],
+		curTabTow:0,
+		form:{
+			name:'',
+			type:'校院巡查',
+			startTime:'',
+			endTime:'',
+			inspectScope:[],
+			tiemQuickList:[],
+			scopeIndex:'',
+			seleteListLab:[],
+			patrolIndex:'',
+			seleteListMember:[],
+		},
+		collegeIndex :0,
+		collegeArray:['选择学院','学院名称1','学院名称2','学院名称3',],
+		dataList:[{name:'计划标题计划标题计划标题计划标题',},{name:'计划标题计划标题计划标题计划标题',},{name:'计划标题计划标题计划标题计划标题',},{name:'计划标题计划标题计划标题计划标题',},{name:'计划标题计划标题计划标题计划标题',}],
+	}
+  },
+  onLoad(option) {
+	 if(option.form){
+		this.form=JSON.parse(decodeURIComponent(option.form)); 
+		console.log(this.form)
+	 }
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  
+  },
+  methods: {
+		//顶部tab点击
+		tabClick(index) {
+			this.curTab = index;
+			this.pageType = index;
+		},
+		//顶部tab点击
+		tabClickTow(index) {
+			this.curTabTow = index;
+		},
+		//选择学院
+		collegeChange(e){
+			this.collegeIndex = e.target.value;
+			this.dataList=[];
+			this.getList();  
+		},
+		//实验室搜索
+		searchBtn(){
+			this.dataList=[];
+			this.getList();
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+			if(self.total<=self.getData.pageNum){
+			    console.log('没有更多数据!')
+			}else{
+					setTimeout(function(){
+						self.getData.pageNum += 1;
+						self.getList(); 
+					},1000)
+						 
+			}
+		},
+	    handleClick(doType){
+		  let self=this;
+		  
+		  
+	    },
+		async getList(){
+				  let list=[{name:'实验室名称-房间号',type:false,id:4},{name:'实验室名称-房间号',type:false,id:5}]
+				  this.total=5;
+				  this.dataList=[...this.dataList,...list]
+				
+				  
+		 //    let self = this;
+		 //    let obj = {
+		 //        pageNum:this.getData.page,
+		 //        pageSize:this.getData.pageSize,
+		 //    };
+		 //    const {data} = await groupList(obj);
+		 //    if(data.code==200){
+					 //  this.total=data.total;
+					 //  this.dataList=[...this.dataList,...data.data]
+				  // }
+		},
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 30rpx;
+	box-sizing: border-box;
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	/* 切换按钮 */
+	.tabTitle{
+		width:100%;
+		height: 100rpx;
+		background: #fff;
+		display flex;
+		justify-content: center;
+		align-items: center;
+		position: fixed;
+		top: 0;
+		z-index: 100;
+		box-shadow: 0rpx 3rpx 8rpx 0rpx rgba(0,0,0,0.16);
+		.tabTitle_li{
+			position: relative;
+			width:372rpx;
+			text-align center;
+			.tabTitle_text{
+				display: inline-block;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 46rpx;
+				position: relative;
+				>text{
+					position:absolute;
+					min-width: 30rpx;
+					min-height: 30rpx;
+					border-radius:54%;
+					background: #E80000;
+					font-size: 18rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FFFFFF;
+					text-align: center;
+					line-height: 30rpx;
+					margin-left: 6rpx;
+					padding:2rpx;
+					box-sizing: border-box;
+				}
+				&.on{
+					color:#0183FA;
+				}
+			}
+			.tabTitle_across{
+				width: 50rpx;
+				height: 4rpx;
+				background: #0183FA;
+				border-radius: 2rpx;
+				margin-left 162rpx;
+				display none;
+				&.on{
+					display block;
+				}
+			}
+	
+		}
+		.tabTitle_li:nth-of-type(1)::after{
+			content: '';
+			position: absolute;
+			top: 0rpx;
+			right:  0rpx;
+			width: 1rpx;
+			height: 50rpx;
+			background: #E0E0E0;
+		}
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+	}
+	/* 检查计划---------------------------------------------------------------------------------- */
+	.delay_inspect{
+		width: 690rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.delay_inspect_l{
+			font-size: 28rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 100rpx;
+			>text{
+				color: #0183FA;
+			}
+		}
+		.delay_inspect_r{
+			font-size: 26rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #0183FA;
+			line-height: 40rpx;
+			width: 120rpx;
+			height: 40rpx;
+			border-radius: 6rpx;
+			text-align: center;
+			border: 1rpx solid #0183FA;
+		}
+		.delay_inspect_r_tow{
+			font-size: 26rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #FF4545;
+			line-height: 40rpx;
+			width: 120rpx;
+			height: 40rpx;
+			border-radius: 6rpx;
+			text-align: center;
+			border: 1rpx solid rgba(255,69,69,0.898);
+		}
+	}
+	
+	.basics{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 20rpx;
+		padding: 30rpx 30rpx 32rpx;
+		box-sizing: border-box;
+		.basics_li{
+			height: 80rpx;
+			display: flex;
+			justify-content: space-between;
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 80rpx;
+				width: 140rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				text-align: right;
+			}
+		}
+		.scope_text{
+			width: 100%;
+			font-size: 26rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #999999;
+			line-height: 36rpx;
+			text-align: right;
+			>text{
+				color: #0183FA;
+			}
+		}
+	}
+	.attachment{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 20rpx;
+		padding-bottom: 32rpx;
+		box-sizing: border-box;
+		.attachment_t{
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 110rpx;
+				margin-left: 28rpx;
+			}
+			>text:nth-of-type(2){
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #999999;
+				line-height: 110rpx;
+				margin-left: 24rpx;
+			}
+		}
+		.attachment_li{
+			height: 40rpx;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 32rpx;
+			>img{
+				width: 30rpx;
+				height: 26rpx;
+				margin-right: 20rpx;
+				margin-left: 50rpx;
+			}
+			>text{
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 40rpx;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+			}
+			.attachment_li_del{
+				width: 30rpx;
+				height: 30rpx;
+			}
+		}
+	}
+	.patrol_group{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		margin-top: 20rpx;
+		padding: 40rpx 30rpx 64rpx;
+		box-sizing: border-box;
+		.patrol{
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 26rpx;
+			.patrol_l{
+				width: 146rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 42rpx;
+				text-align: left;
+			}
+			.patrol_r{
+				flex: 1;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				text-align: right;
+			}
+		}
+		.list{
+			margin-top: 42rpx;
+			.list_title{
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				height: 80rpx;
+				background: #F5F5F5;
+				border-radius: 10rpx 10rpx 0rpx 0rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				>img{
+					width: 30rpx;
+					height: 30rpx;
+					margin: 0 20rpx;
+				}
+			}
+			.list_header{
+				display: flex;
+				justify-content: flex-start;
+				>text{
+					flex: 1;
+					height: 80rpx;
+					background: #F5F5F5;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+					text-align: center;
+					border: 1rpx solid #E0E0E0;
+				}
+				>text:nth-of-type(1){
+					border-right: none;
+				}
+			}
+			.list_li{
+				display: flex;
+				justify-content: flex-start;
+				>text{
+					flex: 1;
+					height: 80rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+					text-align: center;
+					border: 1rpx solid #E0E0E0;
+				}
+				>text:nth-of-type(1){
+					border-right: none;
+					border-top: none;
+				}
+				>text:nth-of-type(2){
+					border-top: none;
+				}
+			}
+			.list_bottom{
+				flex: 1;
+				height: 80rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #999999;
+				line-height: 80rpx;
+				text-align: center;
+				border: 1rpx solid #E0E0E0;
+				border-top: none;
+			}
+		}
+	}
+	/* 检查管理----------------------------------------------------------------------------------- */
+	/* 切换按钮 */
+	.header{
+		width:100%;
+		position: fixed;
+		top: 100rpx;
+		z-index: 100;
+		.line{
+			width: 100%;
+			height: 20rpx;
+			background: #F5F5F5;
+		}
+		.tabTitle_tow{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: flex-start;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			.tabTitle_tow_li{
+				position: relative;
+				width:146rpx;
+				text-align center;
+				.tabTitle_tow_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_tow_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left: 46rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+		}
+		.lab_title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			padding: 20rpx 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: flex-start;
+			
+			.lab_title_l{
+				width: 250rpx;
+				height: 60rpx;
+				margin-right: 20rpx;
+				.lab_title_l_n{
+					width: 250rpx;
+					height: 60rpx;
+					border-radius: 10rpx;
+					border: 1rpx solid #E0E0E0;
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					>view{
+						flex:1;
+						line-height:60rpx;
+						margin-left:20rpx;
+						color: #999999;
+						font-size:28rpx;
+					}
+					>img{
+						width: 14rpx;
+						height: 8rpx;
+						margin-right: 30rpx;
+					}
+				}
+			}
+			.lab_title_r{
+				width: 420rpx;
+				height: 60rpx;
+				position:relative;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				.lab_title_r_btn{
+					width: 60rpx;
+					height: 60rpx
+					position: absolute;
+					top: 0rpx;
+					left:0rpx;
+					>img{
+						width: 20rpx;
+						height: 20rpx;
+						position: absolute;
+						top: 20rpx;
+						left: 24rpx;
+					}
+				}
+				>input{
+					width: 360rpx;
+					height: 60rpx;
+					position: absolute;
+					top: 0rpx;
+					left: 60rpx;
+				}
+			}
+		}
+		
+	}
+	.list_three{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin-top: 340rpx;
+		.list_three_li{
+			position: relative;
+			width: 690rpx;
+			height: 360rpx;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_three_li_t{
+				width: 100%;
+				position: absolute;
+				left: 0;
+				top: 0;
+				.list_three_li_t_l{
+					>img{
+						width: 70rpx;
+						height: 70rpx;
+					}
+					>text{
+						position: absolute;
+						left: -15rpx;
+						top: 76rpx;
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						background: #F5F5F5;
+						border-radius: 15rpx;
+					}
+				}
+				.list_three_li_t_c{
+					width: 630rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 60rpx;
+					box-sizing: border-box;
+				}
+				.list_three_li_t_c2{
+					position: absolute;
+					right: 20rpx;
+					top: 38rpx;
+					width: 120rpx;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF5757;
+					line-height: 40rpx;
+					border: 1rpx solid #FF5757;
+					border-radius: 6rpx;
+					text-align: center;
+				}
+				.list_three_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_three_li_m{
+				position: absolute;
+				top: 110rpx;
+				left: 0;
+				width: 690rpx;
+				height: 158rpx;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_three_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+				}
+				.list_three_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #0183FA;
+						line-height: 40rpx;
+						padding: 0 8rpx;
+						border-radius: 6rpx;
+						background: rgba(1,131,250,0.1);
+						margin-right: 24rpx;
+					}
+					>text:nth-of-type(3){
+						display: inline-block;
+						width: 380rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 26rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						
+					}
+				}
+			}
+			.list_three_li_b{
+				height: 80rpx;
+				position: absolute;
+				top: 278rpx;
+				left: 0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				border-top: 1rpx solid #E0E0E0;
+				>img{
+					width: 24rpx;
+					height: 30rpx;
+					margin-right: 26rpx;
+					margin-left: 30rpx;
+				}
+				>text:nth-of-type(1){
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 28rpx;
+				}
+				>text:nth-of-type(2){
+					flex:1;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 28rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+			}
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1538 - 0
pages_safetyExamine/patrolPlan/patrolPlanEdit.vue


+ 431 - 0
pages_safetyExamine/patrolPlan/patrolPlanList.vue

@@ -0,0 +1,431 @@
+<!-- 安全检查-发起巡查计划 -->
+<template>
+  <view class="examine">
+	  <view class="tabTitle">
+		<view class="tabTitle_li" @tap="tabClick(index)"  :key="index" v-for="(item,index) in tabText">
+			<view :class="{on:curTab==index}" class="tabTitle_text">{{item}}</view>
+			<view :class="{on:curTab==index}" class="tabTitle_across"></view>
+		</view>
+	  </view>
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view>
+			<view class="search">
+				<view class="search_btn"  @click="searchBtn">
+					<img src="@/pages_safetyExamine/images/icon_aqjc_ss.png"/>
+				</view>
+				<input type="text" v-model="getData.searchValue" placeholder="计划标题" maxlength="50" placeholder-style="color: #CCCCCC;font-size:26rpx;">
+			</view>
+			<view class="list">
+				<view class="list_li" v-for="(item,index) in  dataList" :key="index" @click="handleClick(item,'edit')">
+					<view class="list_li_t">
+						<view class="list_li_t_l">
+							<img v-if="item.checkRange==1" src="@/pages_safetyExamine/images/icon_xyxc_qx.png"/>
+							<img v-if="item.checkRange==2" src="@/pages_safetyExamine/images/icon_xyxc_xy.png"/>
+							<img v-if="item.checkRange==3" src="@/pages_safetyExamine/images/icon_xyxc_sys.png"/>
+							<text></text>
+						</view>
+						<view class="list_li_t_c">{{item.title}}</view>
+						<view class="list_li_t_c2" v-if="item.isOverdue==1">已逾期</view>
+						<view class="list_li_t_r"></view>
+					</view>
+					<view class="list_li_m">
+						<view class="list_li_m_t">计划周期:{{item.cycleStartTime}}至{{item.cycleEndTime}}</view>
+						<view class="list_li_m_b">
+							<text class="blue_color" v-if="item.checkStatus==1">未开始</text>
+							<text class="red_color" v-if="item.checkStatus==2">进行中</text>
+							<text class="green_color" v-if="item.checkStatus==3">已结束</text>
+							<text>{{item.checkType==1?'校院巡查':'实验室自查'}}</text>
+						</view>
+					</view>
+					<view class="list_li_b">
+						<img src="@/pages_safetyExamine/images/icon_djcsys.png"/>
+						<text v-if="item.checkStatus==1">待检查实验室:</text>
+						<text v-if="item.checkStatus==1">{{item.subjectNum}}间</text>
+						<text v-if="item.checkStatus==2 || item.checkStatus==3">检查进度:</text>
+						<text v-if="item.checkStatus==2 || item.checkStatus==3">{{item.checkSchedule}}间</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+	</scroll-view>	
+	<view class="bottom_btn" @click="handleClick('','subBtn')">{{subBtnTitle}}</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkPlanList} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+	  pageType:0,
+      //列表请求参数
+      getData:{
+        pageNum:1,
+        pageSize:20,
+		searchValue:'',
+		checkType:'',
+      },
+	  total:0,
+	  tabText:['全部','未开始','进行中','已结束'],
+	  curTab:0,
+	  dataList:[],
+	  subBtnTitle:'发起巡查计划',
+    }
+  },
+  onLoad(option) {
+	  console.log(option.pageType)
+	  if(option.pageType==1){
+		  this.getData.checkType=option.pageType
+		  uni.setNavigationBarTitle({
+		  		title:'校院巡查计划'
+		  })
+		  this.subBtnTitle='发起巡查计划';
+	  }else if(option.pageType==2){
+		   this.getData.checkType=option.pageType
+		  uni.setNavigationBarTitle({
+		  		title:'实验室自查计划'
+		  })
+		  this.subBtnTitle='发起自查计划';
+	  }
+		
+  },
+  onShow() {
+      this.getList(); 
+  },
+  mounted(){
+	  
+  },
+  methods: {
+	  //滚动事件
+	  scrollGet(){
+		  let self=this;
+	      if(self.total/self.getData.pageSize<=self.getData.pageNum){
+	          console.log('没有更多数据!')
+	      }else{
+			  setTimeout(function(){
+				  self.getData.pageNum += 1;
+				  self.getList(); 
+			  },1000)
+			 
+		  }
+	  },
+	  //实验室搜索
+	  searchBtn(){
+		  console.log(1)
+		  this.dataList=[];
+		  this.getList();
+	  },
+	  //顶部tab点击
+	  tabClick(index) {
+	  	this.curTab = index;
+		this.getData.pageNum=1;
+		this.dataList=[];
+		this.getData.checkStatus=index;
+		this.getList()
+	  },
+	  handleClick(row,doType){
+		  let self=this;
+		  
+		  if( doType=='subBtn'){//发起巡查计划	
+			 uni.redirectTo({
+			     url: '/pages_safetyExamine/patrolPlan/patrolPlanAdd?pageType='+this.getData.checkType
+			 });
+		  }else if(doType=='edit'){//编辑
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/patrolPlan/patrolPlanEdit?pageType='+row.checkType+'&id='+row.id
+			  });
+		  }
+		  
+	  },
+	  async getList(){
+		  let self = this;
+		  const {data} = await checkPlanList(this.getData);
+		  if(data.code==200){
+			  this.dataList=[...this.dataList,...data.data.records]
+			  this.total=data.data.total;
+		  }
+      }
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding-bottom: 128rpx;
+		padding-top: 100rpx;
+	}
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	/* 切换按钮 */
+	.tabTitle{
+		width:100%;
+		height: 100rpx;
+		background: #fff;
+		display flex;
+		justify-content: flex-start;
+		align-items: center;
+		position: fixed;
+		top: 0;
+		z-index: 100;
+		.tabTitle_li{
+			position: relative;
+			width:146rpx;
+			text-align center;
+			.tabTitle_text{
+				display: inline-block;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 46rpx;
+				position: relative;
+				&.on{
+					color:#0183FA;
+				}
+			}
+			.tabTitle_across{
+				width: 50rpx;
+				height: 4rpx;
+				background: #0183FA;
+				border-radius: 2rpx;
+				margin-left: 46rpx;
+				display none;
+				&.on{
+					display block;
+				}
+			}
+	
+		}
+	}
+	.search{
+		width: 750rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		padding: 20rpx 30rpx;
+		box-sizing: border-box;
+		position: relative;
+		margin-top: 20rpx;
+		.search_btn{
+			width: 70rpx;
+			height: 60rpx;
+			position: absolute;
+			top: 20rpx;
+			left: 30rpx;
+			z-index: 200;
+			>img{
+				width: 20rpx;
+				height: 20rpx;
+				position: absolute;
+				top: 20rpx;
+				left: 24rpx;
+			}
+		}
+		
+		>input{
+			position: absolute;
+			top: 20rpx;
+			left: 30rpx;
+			width: 690rpx;
+			height: 60rpx;
+			border-radius: 50rpx;
+			opacity: 1;
+			border: 1rpx solid #E0E0E0;
+			padding-left: 74rpx;
+			box-sizing: border-box;
+		}
+	}
+	.list{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		margin-top: 20rpx;
+		.list_li{
+			position: relative;
+			width: 690rpx;
+			height: 360rpx;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_li_t{
+				width: 100%;
+				position: absolute;
+				left: 0;
+				top: 0;
+				.list_li_t_l{
+					>img{
+						width: 70rpx;
+						height: 70rpx;
+					}
+					>text{
+						position: absolute;
+						left: -15rpx;
+						top: 76rpx;
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						background: #F5F5F5;
+						border-radius: 15rpx;
+					}
+				}
+				.list_li_t_c{
+					width: 570rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 60rpx;
+					box-sizing: border-box;
+				}
+				.list_li_t_c2{
+					position: absolute;
+					right: 20rpx;
+					top: 38rpx;
+					width: 120rpx;
+					height: 40rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF5757;
+					line-height: 40rpx;
+					border: 1rpx solid #FF5757;
+					border-radius: 6rpx;
+					text-align: center;
+				}
+				.list_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_li_m{
+				position: absolute;
+				top: 110rpx;
+				left: 0;
+				width: 690rpx;
+				height: 168rpx;
+				border-bottom: 1rpx solid #E0E0E0;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+				}
+				.list_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #0183FA;
+						line-height: 40rpx;
+						padding: 0 8rpx;
+						border-radius: 6rpx;
+						background: rgba(1,131,250,0.1);
+					}
+				}
+			}
+			.list_li_b{
+				height: 80rpx;
+				position: absolute;
+				top: 278rpx;
+				left: 0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>img{
+					width: 24rpx;
+					height: 30rpx;
+					margin-right: 26rpx;
+					margin-left: 30rpx;
+				}
+				>text:nth-of-type(1){
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 28rpx;
+				}
+				>text:nth-of-type(2){
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #0183FA;
+					line-height: 28rpx;
+				}
+			}
+		}
+	}
+	
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+	
+}
+</style>

+ 639 - 0
pages_safetyExamine/snapshotManage/snapshotAdd.vue

@@ -0,0 +1,639 @@
+<!-- 随手拍-添加 -->
+<template>
+  <view class="examine">
+	  <view class="header"  @click="handleClick('manage')">
+	  	<text>随手拍管理</text>
+	  	<img src="@/pages_safetyExamine/images/icon_04.png">
+	  </view>
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		
+		<view class="basics">
+			<view class="basics_li">
+				<view class="basics_li_l">学院</view>
+				<picker @change="collegeChange" :value="collegeIndex" :range="collegeArray" class="scope_r">
+					<view class="basics_li_r college_r">
+						<view>{{form.deptName?form.deptName:'选择学院'}}</view>
+						<img src="@/pages_safetyExamine/images/icon_06.png">
+					</view>
+				</picker>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">实验室</view>
+				<view class="basics_li_r lab_r">
+					<input class="picker-text" @click="popupClick(1)" type="text" disabled v-model="form.subName" placeholder="请输入实验室关键词查询" placeholder-style="font-size: 30rpx;color:#333;">
+					<view class="img-box" @click.stop="saoCode">
+						<img src="@/pages_safetyExamine/images/icon_aqjc_sm.png">
+					</view>
+				</view>
+			</view>
+			<view class="check-for-input-max-box">
+				<view class="left-title-p">隐患描述:</view>
+				<textarea type="text" v-model="form.hazardDescribe" maxlength="50" placeholder="请输入隐患描述" placeholder-style="font-size:28rpx;color:#999;"></textarea>
+			</view>
+			<view class="check-for-img-max-box">
+				<view class="left-title-p">隐患照片(最多上传5张):</view>
+				<view class="right-img-box">
+					<view class="img-box" v-for="(imgUrl,imgIndex) in form.imgDtoList" :key="imgIndex">
+						<img class="img-data" :src="configURL+imgUrl.fileUrl">
+						<img class="position-img" src="@/pages_manage/images/icon_ssp_closure.png" @click="delImg(imgIndex)">
+					</view>
+					<img class="add-button" src="@/pages_manage/images/icon_07.png" @click="selectImage()" v-if="form.imgDtoList.length<5">
+				</view>
+			</view>
+		</view>
+		<view class="record" ><text  @click="handleClick('self')">随手拍上报记录</text></view>
+	</scroll-view>
+	<!-- 房间选择弹出层 -->
+	<view class="popup-max-box" v-if="popupType">
+		<view class="popup-null" @click="popupClick(2)"></view>
+		<view class="popup-big-box">
+			<view class="popup-input-box">
+				<input type="text" maxlength="10" v-model="room" placeholder="请输入关键字">
+				<view @click="buildBySub">搜索</view>
+			</view>
+			<view class="popup-for-max-box">
+				<view class="popup-for-null" v-if="!roomList[0]">暂无数据</view>
+				<view class="popup-for-box" v-for="(item,index) in roomList" :key="index">
+					<view class="name-p">{{item.name}} ({{item.room}})</view>
+					<view class="button-p" @click="popupClickItem(item)">确定</view>
+				</view>
+			</view>
+		</view>
+	</view>	
+	<view class="bottom_btn" @click="submitForm()">提交</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { buildBySub,conditionCollegeInfo,checkClapAdd,subjectList,getUserCollegCheck,listDepartments} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		configURL:config.base_url,
+		pageType:0,
+		//列表请求参数
+		getData:{
+		 pageNum:1,
+		 pageSize:20,
+		},
+		form:{
+			deptId:'',
+			deptName:'',
+			subId:'',
+			subName:'',
+			hazardDescribe:'',
+			imgDtoList:[],
+		},
+		collegeIndex :0,
+		collegeArray:[],
+		categoryIndex :0,
+		collegeList:[],
+		categoryArray:['校级巡查','院级巡查'],
+		planIndex :0,
+		planArray:['请选择巡查计划标题','2023年3月份校级督导检查','2023年4月份校级督导检查'],
+		resultIndex :0,
+		resultArray:['不符合','符合'],
+		informIndex:0,
+		informArray:['整改告知书','整改通知书'],
+		
+		
+		//房间弹层 状态
+		popupType:false,
+		//房间搜索字段
+		room:"",
+		roomList:[],
+		
+	}
+  },
+  onLoad(option) {
+	 
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.listDepartments();
+	 // this.getUserCollegCheck();
+  },
+  methods: {
+		//滚动事件
+		scrollGet(){},
+	    handleClick(doType){
+		  let self=this;
+		  if( doType=='manage'){//随手拍管理
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/snapshotManage/snapshotList?pageType=1'
+			  });
+		  }else if(doType=='self'){//随手拍上报记录
+			  uni.redirectTo({
+			      url: '/pages_safetyExamine/snapshotManage/snapshotList?pageType=2'
+			  });
+		  }else if(doType=='subBtn'){//提交
+			  
+		  }
+		  
+	    },
+		collegeChange(e){
+			this.collegeIndex = e.target.value;
+			 this.form.deptId=this.collegeList[e.target.value].deptId
+			 this.form.deptName=this.collegeList[e.target.value].deptName
+		},
+		// 图片上传
+		selectImage() {
+		    let self = this;
+		    if(this.form.imgDtoList.length>4){
+		        uni.showToast({
+		            title: '最多上传5张图片',
+		            icon:"none",
+		            mask:true,
+		            duration: 2000
+		        });
+		        return
+		    }
+		    wx.chooseImage({
+		        count: 5,
+		        sizeType: ["original", "compressed"],
+		        sourceType: ["album", "camera"],
+		        success: function(res) {
+		            //let tempFilePaths = res.tempFilePaths[0];
+		            self.uploadImg(res.tempFilePaths);
+		        }
+		    });
+		},
+		async uploadImg(tempFilePaths){
+		    var self = this;
+		    uni.showLoading({
+		        title: '上传中',
+		        mask: true
+		    });
+			for(let i=0;i<tempFilePaths.length;i++){
+				console.log(tempFilePaths[i])
+				uni.uploadFile({
+				    url: config.base_url+'/base/file/upload', //仅为示例,非真实的接口地址
+				    header:{'Authorization':uni.getStorageSync('token')},
+				    filePath: tempFilePaths[i],
+				    name: 'file',
+				    formData: {
+				        'user': 'test'
+				    },
+				    success: (uploadFileRes) => {
+				        let res = JSON.parse(uploadFileRes.data);
+						console.log(res.data)
+						if(res.code == 200){
+							this.form.imgDtoList.push({'fileUrl':res.data.url,'fileName':res.data.name});
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+				    },
+				    fail: err => {},
+				    complete: () => {
+				        uni.hideLoading()
+				    }
+				});
+			}
+		    
+		},
+		//删除图片
+		delImg(minIndex){
+		    this.form.imgDtoList.splice(minIndex,1);
+			this.$forceUpdate();
+		},
+		//搜索房间弹层开关
+		popupClick(type){
+			if(type == 1){
+				this.room = "";
+				this.roomList = [];
+				this.popupType = true;
+				this.buildBySub();
+			}else if(type == 2){
+				this.popupType = false;
+			}
+		},
+		//搜索房间接口
+		async buildBySub(){
+			let self = this;
+			const {data} = await buildBySub({'searchValue':this.room,'deptId':this.form.deptId});
+			if(data.code==200){
+				if(data.data[0]){
+					this.roomList = data.data;
+				}else{
+					uni.showToast({
+						title: '未找到相关实验室',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}
+			}
+		},
+		//确认搜索房间
+		popupClickItem(item){
+			console.log(item)
+			this.$set(this.form,"subId",item.id)
+			this.$set(this.form,"subName",item.name)
+			this.$set(this.form,"deptId",item.deptId)
+			for(let i=0;i<this.collegeList.length;i++){
+				if(item.deptId==this.collegeList[i].deptId){
+					this.$set(this.form,"deptName",this.collegeList[i].deptName)
+				}
+			}
+			this.popupType = false;
+		},
+		//调用摄像头
+		saoCode(){
+			let self = this;
+			uni.scanCode({
+				onlyFromCamera: true,
+				success: function (res) {
+					if(res.result.indexOf("code") != -1 && res.result.indexOf("-") != -1 && res.result.indexOf("&") != -1){
+						let codeRoom = "";
+						let newList = res.result.split("?")[1].split("&")
+						let list = newList[0].split("=")[1].split("-")
+						codeRoom = list[1];
+						if(codeRoom){
+							self.roomList = [];
+							self.room = codeRoom;
+							self.buildBySub();
+							self.popupType = true;
+						}else{
+							uni.showToast({
+								title: '请扫描正确的二维码',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+					}else{
+						uni.showToast({
+							title: '请扫描正确的二维码',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+					}
+				}
+			});
+		},
+		
+		//查询用户身份信息
+		async getUserCollegCheck(){
+			let _this = this;
+			const {data} = await getUserCollegCheck();
+			if(data.code == 200){
+				this.form.deptId=data.data.dept.deptId;
+				this.form.deptName=data.data.dept.deptName;
+				
+			}
+		},
+		//查询学院列表
+		async listDepartments(){
+			let _this = this;
+			const {data} = await listDepartments();
+			if(data.code == 200){
+					
+				for(let i=0;i<data.data.length;i++){
+					_this.collegeArray.push(data.data[i].deptName)
+				}
+				_this.collegeList=data.data;
+				
+			}
+		},
+		//添加
+		async submitForm(){
+			let _this = this;
+			if(!this.form.deptId){
+				uni.showToast({
+					title: '请选择学院!',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				});
+				return
+			}
+			if(!this.form.subId){
+				uni.showToast({
+					title: '请选择实验室!',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				});
+				return
+			}
+			if(this.form.imgDtoList.length==0){
+				uni.showToast({
+					title: '请上传隐患照片!',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				});
+				return
+			}
+			const {data} = await checkClapAdd(_this.form);
+			if(data.code == 200){
+			    uni.showToast({
+			        title: '提交成功',
+			        icon:"none",
+			        mask:true,
+			        duration: 2000
+			    });
+				uni.redirectTo({
+					  url: '/pages_safetyExamine/snapshotManage/snapshotList?pageType=2'
+				});
+			   
+			}
+		},
+		
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding: 120rpx 0rpx 128rpx;
+		box-sizing: border-box;
+	}
+	.header{
+		width: 749rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		padding:0 40rpx 0 30rpx;
+		box-sizing: border-box;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		position: fixed;
+		left: 0;
+		top: 0;
+		>text{
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 42rpx;
+		}
+		>img{
+			width: 8rpx;
+			height: 14rpx;
+		}
+	}
+	.basics{
+		margin: 0 30rpx;
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 30rpx 28rpx 30rpx;
+		box-sizing: border-box;
+		.basics_li{
+			display: flex;
+			justify-content: flex-start;
+			margin-bottom: 24rpx;
+			.basics_li_l{
+				width: 146rpx;
+				text-align: left;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.basics_li_r{
+				width: 486rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				opacity: 1;
+				border: 1rpx solid #E0E0E0;
+				padding-left: 20rpx;
+				box-sizing: border-box;
+				
+				
+			}
+			/* 学院 */
+			.college_r{
+				width: 486rpx;
+				height: 80rpx;
+				border-radius: 10rpx;
+				border: 1rpx solid #E0E0E0;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view{
+					flex:1;
+					line-height:80rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+				}
+				>img{
+					width: 14rpx;
+					height: 8rpx;
+					margin-right: 30rpx;
+				}
+			}
+			/* 实验室 */
+			.lab_r{
+				width: 486rpx;
+				height: 80rpx;
+				display: flex;
+				justify-content: flex-start;
+				.picker-text{
+					width: 438rpx;
+					height: 80rpx;
+				}
+				.img-box{
+					width: 48rpx;
+					>img{
+						width:30rpx;
+						height:28rpx;
+						margin:26rpx 18rpx 0 0;
+					}
+				}
+			}
+		}
+		/* 隐患描述 */
+		.check-for-input-max-box{
+			.left-title-p{
+				width:150rpx;
+				line-height:80rpx;
+				text-align right
+				font-size:30rpx;
+			}
+			textarea{
+				width: 630rpx;
+				height: 158rpx;
+				border-radius: 20rpx 20rpx 20rpx 20rpx;
+				border: 1rpx solid #E0E0E0;
+				padding: 20rpx 14rpx;
+				box-sizing: border-box;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 34rpx;
+			}
+		}
+		/* 隐患照片 */
+		.check-for-img-max-box{
+			.left-title-p{
+				width: 100%;
+				text-align: left;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.right-img-box{
+				.img-box{
+					display inline-block;
+					height:200rpx;
+					width:200rpx;
+					position relative
+					margin:0 14rpx 20rpx 0;
+					border-radius 10rpx;
+					overflow hidden;
+					.img-data{
+						height:200rpx;
+						width:200rpx;
+					}
+					.position-img{
+						position absolute
+						right:0;
+						top:0;
+						width:36rpx;
+						height:36rpx;
+					}
+				}
+				.img-box:nth-of-type(3n+3){
+					margin-right: 0rpx;
+				}
+				.add-button{
+					 margin:0 0rpx 20rpx 0;
+					border-radius 10rpx;
+					overflow hidden;
+					display inline-block
+					height:200rpx;
+					width:200rpx;
+				}
+			}
+		}
+	}
+	.record{
+		overflow: hidden;
+		>text{
+			display: block;
+			width: 220rpx;
+			height: 40rpx;
+			background: #E0E0E0;
+			border-radius: 60rpx 60rpx 60rpx 60rpx;
+			margin: 122rpx 0 90rpx 266rpx;
+			font-size: 26rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #0183FA;
+			line-height: 40rpx;
+			text-align: center;
+		}
+	}
+	.popup-max-box{
+		z-index:10;
+		height:100%;
+		width:100%;
+		position fixed;
+		background rgba(0,0,0,0.2)
+		display flex;
+		flex-direction column
+		.popup-null{
+			flex:1;
+		}
+		.popup-big-box{
+			border-top-left-radius:20rpx;
+			border-top-right-radius:20rpx;
+			background #fff
+			.popup-input-box{
+				padding:30rpx 20rpx;
+				display:flex;
+				input{
+					flex:1;
+					height:70rpx;
+					border:1rpx solid #e0e0e0;
+					border-radius:10rpx;
+					margin-right:20rpx;
+					padding:0 20rpx;
+				}
+				view{
+					background #0183FA
+					color:#fff;
+					border-radius:10rpx;
+					width:140rpx;
+					line-height:70rpx;
+					text-align center;
+					font-size:28rpx;
+				}
+			}
+			.popup-for-max-box{
+				margin:0 20rpx 30rpx;
+				height:600rpx;
+				overflow-y scroll;
+				.popup-for-null{
+					line-height:100rpx;
+					text-align center
+					color:#999;
+				}
+				.popup-for-box{
+					display:flex;
+					padding:10px 0;
+					.name-p{
+						flex:1;
+						line-height:60rpx;
+					}
+					.button-p{
+						background #0183FA
+						color:#fff;
+						text-align center
+						width:100rpx;
+						line-height:60rpx;
+						height:60rpx;
+						border-radius:10rpx;
+					}
+				}
+			}
+		}
+	}
+	.bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 552 - 0
pages_safetyExamine/snapshotManage/snapshotDetail.vue

@@ -0,0 +1,552 @@
+<!-- 随手拍-详情 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view  class="basics">
+			<view class="grade">
+				<text>学院:</text>
+				<text>{{item.deptName}}</text>
+			</view>
+			<view class="grade">
+				<text>实验室:</text>
+				<text>{{item.subName}}</text>
+			</view>
+			<view class="project">
+				<view class="project_t">隐患描述:</view>
+				<view class="project_b">{{item.hazardDescribe}}</view>
+			</view>
+			<view class="picture">
+				<view class="picture_t">隐患照片:</view>
+				<view class="picture_b" @click="lockImg(item.yhDtoList)">
+					<img  :src="baseUrl+item.fileUrl" v-for="(item,index) in item.yhDtoList"/>
+				</view>
+			</view>
+			<view class="grade">
+				<text>上报时间:</text>
+				<text>{{item.createTime}}</text>
+			</view>
+			<view class="grade" style="border:none;">
+				<text>上报人:</text>
+				<text >{{item.createName}}</text>
+			</view>
+		</view>
+		<!-- 待整改 -->
+		<view v-if="rectifyStatus==0 && item.rectifyGentle">
+			<view class="await">
+				<view class="result">
+					<view class="result_l">整改结果</view>
+					<view class="result_r"> 
+						<view v-for="(item,index) in resultArray" :key="index" @click="tabClick(index)">
+							<text :class="resultIndex==index?'checked':'result_r_l' "></text>
+							<text class="result_r_r">{{item}}</text>
+						</view>
+					</view>
+				</view>
+				<view class="describe">
+					<view class="describe_l">{{describeTitle}}:</view>
+					<textarea class="describe_r" type="text" v-model="form.rectifyDescribe" maxlength="50" placeholder="请输入描述内容" placeholder-style="font-size:28rpx;color:#999;"></textarea>
+				</view>
+				<view class="check-for-img-max-box">
+					<view class="left-title-p">隐患照片(最多上传5张):</view>
+					<view class="right-img-box">
+						<view class="img-box" v-for="(imgUrl,imgIndex) in form.imgDtoList" :key="imgIndex">
+							<img class="img-data" :src="baseUrl+imgUrl.fileUrl">
+							<img class="position-img" src="@/pages_manage/images/icon_ssp_closure.png" @click="delImg(imgIndex)">
+						</view>
+						<img class="add-button" src="@/pages_manage/images/icon_07.png" @click="selectImage()" v-if="form.imgDtoList.length<5">
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 隐患整改 -->
+		<view  class="basics"  v-if="rectifyStatus==1 || rectifyStatus==2">
+			<view class="small_title">隐患整改</view>
+			<view class="grade">
+				<text>整改结果:</text>
+				<text style="color: #0183FA;">{{item.rectifyStatus==1?'已整改':'暂无法整改'}}</text>
+			</view>
+			<view class="project">
+				<view class="project_t">整改措施:</view>
+				<view class="project_b">{{item.rectifyDescribe}}</view>
+			</view>
+			<view class="picture">
+				<view class="picture_t">上传照片:</view>
+				<view class="picture_b" @click="lockImg(item.zgDtoList)">
+					<img  :src="baseUrl+item.fileUrl" v-for="(item,index) in item.zgDtoList"/>
+				</view>
+			</view>
+			<view class="grade">
+				<text>整改时间:</text>
+				<text>{{item.rectifyTime}}</text>
+			</view>
+			<view class="grade" style="border:none;">
+				<text>整改人:</text>
+				<text >{{item.rectifyPeople}}</text>
+			</view>
+		</view>
+	</scroll-view>
+	<view v-if="rectifyStatus==0 && item.rectifyGentle" class="bottom_btn" @click="submitForm()">提交</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import { getSelectInfoByRoom,checkClapById,checkClapRectify} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		baseUrl:config.base_url,
+		id:'',
+		rectifyStatus:'',//整改状态,0是待整改,1是已整改,2是暂无法整改
+		pageType:0,
+		form:{
+			id:'',
+			rectifyStatus:1,//0待整改 1已整改 2暂无法整改
+			rectifyDescribe:'',
+			imgDtoList:[],
+		},
+		item:{},
+		describeTitle:'整改措施',
+		resultIndex:0,
+		resultArray:['已整改','暂无法整改'],
+	}
+  },
+  onLoad(option) {
+	  console.log(option.id)
+	  if(option.id){
+		this.id=option.id
+	  }
+	  if(option.pageType){
+	  	this.pageType=option.pageType
+	  }
+	  if(option.rectifyStatus){
+		  this.rectifyStatus=option.rectifyStatus
+		  if(option.rectifyStatus==0){
+			  uni.setNavigationBarTitle({
+			  	 title:'待整改'
+			  })
+		  }else if(option.rectifyStatus==1){
+			  uni.setNavigationBarTitle({
+			  	 title:'已整改'
+			  })
+		  }else if(option.rectifyStatus==2){
+			  uni.setNavigationBarTitle({
+			  	 title:'暂无法整改'
+			  })
+		  }
+	  }
+	
+	 
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	  this.checkClapById();
+  },
+  methods: {
+		//整改结果
+		tabClick(index) {
+			this.resultIndex = index;
+			if(index==0){
+				this.describeTitle='整改措施';
+				this.form.rectifyStatus=1;
+			}else if(index==1){
+				this.describeTitle='原因描述';
+				this.form.rectifyStatus=2;
+			}
+		},
+		//滚动事件
+		scrollGet(){},
+	    handleClick(doType){
+		  let self=this;
+		  if(doType=='subBtn'){//提交
+			  
+		  }
+		  
+	    },
+		//查看图片
+		lockImg(list){
+			console.log(list)
+			if(!list[0]){
+				return
+			}
+			let urlList=[];
+			for(let i=0;i<list.length;i++){
+				urlList.push(this.baseUrl+list[i].fileUrl)
+			}
+			wx.previewImage({
+				urls: urlList, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+				current: '', // 当前显示图片的http链接,默认是第一个
+				success: function(res) {},
+				fail: function(res) {},
+				complete: function(res) {},
+			})
+		},
+		
+		// 图片上传
+		selectImage() {
+		    let self = this;
+		    if(this.form.imgDtoList.length>4){
+		        uni.showToast({
+		            title: '最多上传5张图片',
+		            icon:"none",
+		            mask:true,
+		            duration: 2000
+		        });
+		        return
+		    }
+		    wx.chooseImage({
+		        count: 1,
+		        sizeType: ["original", "compressed"],
+		        sourceType: ["album", "camera"],
+		        success: function(res) {
+		            let tempFilePaths = res.tempFilePaths[0];
+		            self.uploadImg(tempFilePaths);
+		        }
+		    });
+		},
+		async uploadImg(tempFilePaths){
+		    var self = this;
+		    uni.showLoading({
+		        title: '上传中',
+		        mask: true
+		    });
+		    uni.uploadFile({
+		        url: config.base_url+'/base/file/upload', //仅为示例,非真实的接口地址
+		        header:{'Authorization':uni.getStorageSync('token')},
+		        filePath: tempFilePaths,
+		        name: 'file',
+		        formData: {
+		            'user': 'test'
+		        },
+		        success: (uploadFileRes) => {
+		            let res = JSON.parse(uploadFileRes.data);
+					if(res.code == 200){
+						this.form.imgDtoList.push({'fileUrl':res.data.url,'fileName':res.data.name});
+						console.log(res.data.url)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+					}
+		        },
+		        fail: err => {},
+		        complete: () => {
+		            uni.hideLoading()
+		        }
+		    });
+		},
+		//删除图片
+		delImg(minIndex){
+		     this.form.imgDtoList.splice(minIndex,1);
+			this.$forceUpdate();
+		},
+		//随手拍详情
+		async checkClapById(){
+			let _this = this;
+			const {data} = await checkClapById({id:this.id});
+			if(data.code == 200){
+					_this.item=data.data;
+					_this.form.id=data.data.id;
+			
+			}
+		},
+		//提交
+		async submitForm(){
+			let _this = this;
+			const {data} = await checkClapRectify(_this.form);
+			if(data.code == 200){
+			    uni.showToast({
+			        title: '提交成功',
+			        icon:"none",
+			        mask:true,
+			        duration: 2000
+			    }); 
+				uni.redirectTo({
+					url: '/pages_safetyExamine/snapshotManage/snapshotList?pageType='+this.pageType
+				});
+			   
+			}
+		},
+		
+		
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding-bottom: 128rpx;
+		box-sizing: border-box;
+	}
+	.basics{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 30rpx 30rpx 32rpx;
+		box-sizing: border-box;
+		margin: 20rpx 30rpx ;
+		.small_title{
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 80rpx;
+			border-bottom: 1rpx solid #D8D8D8;
+		}
+		.grade{
+			height: 80rpx;
+			display: flex;
+			justify-content: space-between;
+			border-bottom: 1rpx solid #D8D8D8;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 80rpx;
+				width: 140rpx;
+			}
+			>text:nth-of-type(2){
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+				text-align: right;
+			}
+		}
+		.project{
+			.project_t{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.project_b{
+				min-height: 158rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 40rpx;
+				padding: 20rpx 14rpx;
+				box-sizing: border-box;
+				background: #F5F5F5;
+				border-radius: 20rpx 20rpx 20rpx 20rpx;
+			}
+			.project_b2{
+				font-size: 26rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 26rpx;
+				margin-top: 14rpx;
+				text-align: right;
+			}
+		}
+		.picture{
+			.picture_t{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.picture_b{
+				display: flex;
+				justify-content: flex-start;
+				flex-wrap: wrap;
+				>img{
+					width: 200rpx;
+					height: 200rpx;
+					border-radius: 10rpx 10rpx 10rpx 10rpx;
+					margin-right: 14rpx;
+					margin-bottom: 10rpx;
+				}
+				>img:nth-of-type(3n+3){
+					margin-right: 0rpx;
+				}
+			}
+		}
+	}
+	/* 待整改 */
+	.await{
+		width: 690rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx;
+		padding: 30rpx 30rpx 32rpx;
+		box-sizing: border-box;
+		margin: 20rpx 30rpx ;
+		/* 整改结果 */
+		.result{
+			display: flex;
+			justify-content: flex-start;
+			border-bottom: 1rpx solid #D8D8D8;
+			.result_l{
+				width: 146rpx;
+				text-align: left;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.result_r{
+				width: 486rpx;
+				height: 80rpx;
+				padding-left: 20rpx;
+				box-sizing: border-box;
+				display: flex;
+				justify-content: flex-end;
+				align-items: center;
+				>view{
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					margin-right: 24rpx;
+					.result_r_l{
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						border-radius: 50%;
+						border: 1rpx solid #E0E0E0;
+						margin-right: 14rpx;
+					}
+					.result_r_r{
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 80rpx;
+					}
+					.checked{
+						display: inline-block;
+						width: 30rpx;
+						height: 30rpx;
+						border-radius: 50%;
+						border: 1rpx solid #0183FA;
+						margin-right: 14rpx;
+						position: relative;
+					}
+					.checked::after{
+						content: '';
+						position: absolute;
+						top: 5rpx;
+						left:5rpx;
+						width: 20rpx;
+						height: 20rpx;
+						border-radius: 50%;
+						background: #0183FA;
+					}
+				}
+			}
+		}
+		/* 原因描述 */
+		.describe{
+			.describe_l{
+				width: 158rpx;
+				text-align: left;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.describe_r{
+				width: 630rpx;
+				height: 158rpx;
+				border-radius: 20rpx 20rpx 20rpx 20rpx;
+				opacity: 1;
+				border: 1rpx solid #E0E0E0;
+				padding: 20rpx 14rpx;
+				box-sizing: border-box;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 34rpx;
+			}
+		}
+		/* 上传照片 */
+		.check-for-img-max-box{
+			.left-title-p{
+				width: 100%;
+				text-align: left;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 80rpx;
+			}
+			.right-img-box{
+				.img-box{
+					display inline-block;
+					height:200rpx;
+					width:200rpx;
+					position relative
+					margin:0 14rpx 20rpx 0;
+					border-radius 10rpx;
+					overflow hidden;
+					.img-data{
+						height:200rpx;
+						width:200rpx;
+					}
+					.position-img{
+						position absolute
+						right:0;
+						top:0;
+						width:36rpx;
+						height:36rpx;
+					}
+				}
+				.img-box:nth-of-type(3n+3){
+					margin-right: 0rpx;
+				}
+				.add-button{
+					margin:0 0rpx 20rpx 0;
+					border-radius 10rpx;
+					overflow hidden;
+					display inline-block
+					height:200rpx;
+					width:200rpx;
+				}
+			}
+		}
+}	
+    .bottom_btn{
+		position: fixed;
+		bottom: 26rpx;
+		left: 30rpx;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFFFFF;
+		line-height: 90rpx;
+		width: 690rpx;
+		height: 90rpx;
+		background: #0183FA;
+		border-radius: 20rpx;
+		text-align: center;
+		
+	}
+}
+</style>

+ 390 - 0
pages_safetyExamine/snapshotManage/snapshotList.vue

@@ -0,0 +1,390 @@
+<!-- 随手拍-列表 -->
+<template>
+  <view class="examine">
+	<view class="header">
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(index)"  :key="index" v-for="(item,index) in tabTextTow">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item}}</view>
+			    <view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view>
+	</view>
+	
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="list_three">
+			<view class="list_three_li" v-for="(item,index) in  dataList" :key="index" @click="handleClick(item,'detail')">
+				<view class="list_three_li_t">
+					<view class="list_three_li_t_l"></view>
+					<view class="list_three_li_t_c">{{item.subName}}</view>
+					<view class="list_three_li_t_r"></view>
+				</view>
+				<view class="list_three_li_m">
+					<view class="list_three_li_m_t">{{item.hazardDescribe}}</view>
+					<view class="list_three_li_m_b">
+						<text class="blue_color" v-if="item.rectifyStatus==0">待整改</text>
+						<text class="green_color" v-if="item.rectifyStatus==1">已整改</text>
+						<text class="orange_color" v-if="item.rectifyStatus==2">暂无法整改</text>
+						<text>{{item.deptName}}</text>
+					</view>
+				</view>
+				<view class="list_three_li_b">
+					<view class="list_three_li_b_l">
+						<img src="@/pages_safetyExamine/images/icon_ssp_ry.png"/>
+						<text>上报人:{{item.createName}}</text>
+					</view>
+					<view class="list_three_li_b_r">{{item.timeFlag}}</view>
+				</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {checkClapList,checkClapMylist} from '@/api/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		pageType:0,
+		//列表请求参数
+		getData:{
+		 pageNum:1,
+		 pageSize:20,
+		 rectifyStatus:0,
+		},
+		tabTextTow:['待整改','已整改','暂无法整改'],
+		curTabTow:0,
+		form:{
+			name:'',
+			type:'校院巡查',
+			startTime:'',
+			endTime:'',
+			inspectScope:[],
+			tiemQuickList:[],
+			scopeIndex:'',
+			seleteListLab:[],
+			patrolIndex:'',
+			seleteListMember:[],
+		},
+		collegeList:[{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},{name:'学院名称',type:false},],
+		collegeIndex :0,
+		collegeArray:['选择学院','学院名称1','学院名称2','学院名称3',],
+		dataList:[],
+	}
+  },
+  onLoad(option) {
+	 if(option.form){
+		this.form=JSON.parse(decodeURIComponent(option.form)); 
+		console.log(this.form)
+	 }
+	 if(option.pageType){
+		 this.pageType=option.pageType
+		if(option.pageType==1){
+		  uni.setNavigationBarTitle({
+				title:'随手拍管理'
+		  })
+		}else if(option.pageType==2){
+		  uni.setNavigationBarTitle({
+				title:'随手拍上报记录'
+		  })
+		} 
+	 }
+	 
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	 this.getList()
+  },
+  methods: {
+		//顶部tab点击
+		tabClickTow(index) {
+			this.dataList=[];
+			this.curTabTow = index;
+			this.getData.pageNum=1;
+			this.getData.rectifyStatus=index;
+			this.getList()
+		},
+		
+		//滚动事件
+		scrollGet(){
+			let self=this;
+			if(self.total/self.getData.pageSize<=self.getData.pageNum){
+			    console.log('没有更多数据!')
+			}else{
+					setTimeout(function(){
+						self.getData.pageNum += 1;
+						self.getList(); 
+					},1000)
+						 
+			}
+		},
+	    handleClick(item,doType){
+		  let self=this;
+		  if( doType=='subBtn'){//	
+		  
+		  }else if(doType=='detail'){//详情
+			  uni.redirectTo({
+			  	 url: '/pages_safetyExamine/snapshotManage/snapshotDetail?id='+item.id+'&rectifyStatus='+this.getData.rectifyStatus+'&pageType='+this.pageType
+			  })
+		  }
+		  
+	    },
+		async getList(){
+		    let _this = this;
+			if(this.pageType==1){//随手拍管理
+				const {data} = await checkClapList(this.getData);
+				if(data.code==200){
+					  this.total=data.data.total;
+					  this.dataList=[...this.dataList,...data.data.records]
+				}
+			}else if(this.pageType==2){//随手拍记录
+				const {data} = await checkClapMylist(this.getData);
+				if(data.code==200){
+					  this.total=data.data.total;
+					  this.dataList=[...this.dataList,...data.data.records]
+				}
+			}
+		   
+		},
+	  
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.examine{
+	height:100%;
+	display flex;
+	// padding: 0 30rpx;
+	// box-sizing: border-box;
+	padding-bottom: 20rpx;
+	box-sizing: border-box;
+	.blue_color{
+		color: #0183FA;
+		border: 1rpx solid #0183FA;
+	}
+	.red_color{
+		color: #FF4545;
+		border: 1rpx solid #FF4545;
+	}
+	.green_color{
+		color: #1FA50D;
+		border: 1rpx solid #1FA50D;
+	}
+	.orange_color{
+		color: #FA8E1B;
+		border: 1rpx solid #FA8E1B;
+	}
+	.gray_color{
+		color: #A2A2A2;
+		border: 1rpx solid #A2A2A2;
+	}
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		
+		padding: 120rpx 0rpx 0;
+		box-sizing: border-box;
+	}
+	/* 切换按钮 */
+	.header{
+		width:100%;
+		position: fixed;
+		top: 0rpx;
+		z-index: 100;
+		.tabTitle_tow{
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			display flex;
+			justify-content: flex-start;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			.tabTitle_tow_li{
+				flex:1;
+				position: relative;
+				text-align center;
+				.tabTitle_tow_text{
+					display: inline-block;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 46rpx;
+					position: relative;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_tow_across{
+					width: 50rpx;
+					height: 4rpx;
+					background: #0183FA;
+					border-radius: 2rpx;
+					margin-left: 38%;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+		
+			}
+		}
+	}
+	.list_three{
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.list_three_li{
+			position: relative;
+			width: 690rpx;
+			height: 336rpx;
+			background: #fff;
+			border-radius: 10rpx;
+			overflow: hidden;
+			margin-bottom: 20rpx;
+			.list_three_li_t{
+				width: 100%;
+				position: absolute;
+				left: 0;
+				top: 0;
+				.list_three_li_t_l{
+					position: absolute;
+					left: -15rpx;
+					top: 76rpx;
+					display: inline-block;
+					width: 30rpx;
+					height: 30rpx;
+					background: #F5F5F5;
+					border-radius: 15rpx;
+				}
+				.list_three_li_t_c{
+					width: 630rpx;
+					height: 110rpx;
+					position: absolute;
+					left: 30rpx;
+					top: 0;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 110rpx;
+					border-bottom: 1rpx dashed #D8D8D8;
+					overflow: hidden;
+					text-overflow:ellipsis;
+					white-space: nowrap;
+					padding-right: 60rpx;
+					box-sizing: border-box;
+				}
+				.list_three_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_three_li_m{
+				position: absolute;
+				top: 110rpx;
+				left: 0;
+				width: 690rpx;
+				height: 158rpx;
+				padding-left: 30rpx;
+				box-sizing: border-box;
+				.list_three_li_m_t{
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #666666;
+					line-height: 40rpx;
+					margin-top:22rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.list_three_li_m_b{
+					margin-top:26rpx;
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						line-height: 40rpx;
+						border-radius: 6rpx;
+						padding: 0 20rpx;
+						box-sizing: border-box;
+						margin-right: 14rpx;
+					}
+					>text:nth-of-type(2){
+						display: inline-block;
+						width: 380rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 26rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+					}
+				}
+			}
+			.list_three_li_b{
+				height: 76rpx;
+				width: 100%;
+				position: absolute;
+				top: 258rpx;
+				left: 0;
+				padding:0 30rpx;
+				box-sizing: border-box;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				.list_three_li_b_l{
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					
+					>img{
+						width: 28rpx;
+						height: 30rpx;
+						margin-right: 14rpx;
+					}
+					>text{
+						font-size: 28rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						line-height: 76rpx;
+					}
+				}
+				.list_three_li_b_r{
+					font-size: 24rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #999999;
+					line-height: 76rpx;
+				}
+			}
+			
+		}
+	}
+	
+}
+</style>