heyang 1 년 전
부모
커밋
f1eaea94ec

+ 51 - 2
api/basicsModules/index.js

@@ -29,15 +29,64 @@ export const configInfo = (data) => {
 		data: data,
 	})
 };
+//获取公共配置的图片
+export const getLogoInfo  = (data) => {
+    return apiResquest({
+        url: `/system/config/info/getConfigByType`,
+        method: 'GET',
+        data: data,
+    })
+};
+//消息列表
+export const systemNoticeGetNoticeList = (data) => {
+	return apiResquest({
+		url: `/system/notice/getNoticeList`,
+		method: 'GET',
+		data: data,
+	})
+};
 
 //获取实验室列表
-export const systemAppletSubjectList = (data) => {
+export const laboratoryAppletSubList = (data) => {
 	return apiResquest({
-		url: `/system/applet/subject/list`,
+		url: `/laboratory/applet/subList`,
 		method: 'POST',
 		data: { ...data }
 	})
 };
+//获取实验室-详情
+export const laboratoryAppletGetSubDetailInfo = (data) => {
+	return apiResquest({
+		url: `/laboratory/applet/getSubDetailInfo`,
+		method: 'GET',
+		data: data,
+	})
+};
+
+//扫码-查询化学品详情
+export const chemicalAppletCabinetDetail = (data) => {
+	return apiResquest({
+		url: `/chemical/applet/cabinetDetail`,
+		method: 'GET',
+		data: data,
+	})
+};
+//查询化学品目录清单
+export const chemicalAppletGetCabinetByChemical = (data) => {
+	return apiResquest({
+		url: `/chemical/applet/getCabinetByChemical`,
+		method: 'GET',
+		data: data,
+	})
+};
+//扫码-查询化学品信息
+export const chemicalAppletGetStockDetail = (data) => {
+	return apiResquest({
+		url: `/chemical/applet/getStockDetail`,
+		method: 'GET',
+		data: data,
+	})
+};
 
 
 /*                分类获取公共配置

+ 2 - 3
api/request/config.js

@@ -1,6 +1,6 @@
 const config = {
-	//base_url: 'http://192.168.1.8/api',//V3
-	 base_url: 'http://192.168.1.9:8080',//柴
+	base_url: 'http://192.168.1.8/api',//V3
+	// base_url: 'http://192.168.1.9:8080',//柴
 	//base_url: 'http://192.168.1.24:8080',//林总
 	// base_url: 'http://192.168.1.7:8080',//刘波
 	// base_url: 'http://192.168.1.17:8080',//小飞
@@ -9,7 +9,6 @@ const config = {
 	// base_url: 'http://192.168.1.29:8080',//何成
     // base_url: 'http://192.168.1.43:9800',//43服务器
 	// 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/appTest/',//88服务器线上

BIN
images/basicsModules/icon_aqbj.png


BIN
images/basicsModules/icon_glpt_dbqd.png


BIN
images/basicsModules/icon_glpt_gqhsjl.png


BIN
images/basicsModules/icon_xgzl_shz.png


BIN
images/basicsModules/icon_xq_kt.png


BIN
images/basicsModules/icon_xq_spjk.png


BIN
images/basicsModules/icon_xq_xy.png


BIN
images/basicsModules/img_gysglpt_bg.png


BIN
images/basicsModules/img_gysglpt_icom.png


BIN
images/basicsModules/img_xgzl_zgty.png


BIN
images/basicsModules/img_ysrygl_zwsj.png


+ 38 - 7
pages.json

@@ -1,5 +1,7 @@
 {
 	"pages": [
+		
+		
 		{
 			"path": "pages/login/login",//登录
 			"style": {
@@ -8,6 +10,7 @@
 				"navigationStyle":"custom"  //关闭原生导航
 			}
 		},
+		
 		{
 			"path": "pages/mine/mine",//我的
 			"style": {
@@ -31,6 +34,39 @@
 				"navigationStyle": "custom"
 			}
 		},
+		/*化学品和课程扫码进入页面*/
+		{
+			"path": "pages/pages_patrolInspector/chemicalDetail",
+			"style": {
+				"navigationBarTitleText": "化学品详情",
+				"navigationBarTextStyle": "white", //导航文字颜色
+				"navigationBarBackgroundColor": "#0183FA" //导航背景色
+			}
+		},
+		{
+			"path": "pages/pages_patrolInspector/chemicalCabinetQRcode",
+			"style": {
+				"navigationBarTitleText": "化学品柜详情",
+				"navigationBarTextStyle": "white", //导航文字颜色
+				"navigationBarBackgroundColor": "#0183FA" //导航背景色
+			}
+		},
+		{
+			"path": "pages/pages_patrolInspector/chemicalCatalogue",
+			"style": {
+				"navigationBarTitleText": "化学品柜详情",
+				"navigationBarTextStyle": "white", //导航文字颜色
+				"navigationBarBackgroundColor": "#0183FA" //导航背景色
+			}
+		},
+		{
+			"path": "pages/pages_patrolInspector/courseQRcode",
+			"style": {
+				"navigationBarTitleText": "课程详情",
+				"navigationBarTextStyle": "white", //导航文字颜色
+				"navigationBarBackgroundColor": "#0183FA" //导航背景色
+			}
+		},
 		/*供应商*/
 		{
 			"path": "pages/supplier/forbidden",
@@ -525,18 +561,13 @@
 						"navigationBarTitleText": "我的实验室"
 					}
 				},
+				/* 实验室详情 */
 				{
-					"path": "laboratory/laboratoryInfo",//实验室详情
+					"path": "laboratory/infoPage",//详情
 					"style": {
 						"navigationBarTitleText": "实验室详情"
 					}
 				},
-				{
-					"path": "laboratory/broadcast",//开始广播
-					"style": {
-						"navigationBarTitleText": "开始广播"
-					}
-				},
 				{
 					"path": "laboratory/word",//播放文字
 					"style": {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 159 - 783
pages/home/manageWorkbench.vue


+ 33 - 127
pages/information/information.vue

@@ -2,19 +2,15 @@
 <template>
 	<view id="information">
 		<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
-			<view class="for-info-box" v-for="(item,index) in infoList" :key="index" @click="goInfoPage(item)">
-				<img v-if='item.isApply==1' src="@/images/basicsModules/icon_xx_tz.png">
-				<img v-if='item.isApply==2' src="@/images/basicsModules/icon_xx_tz.png">
-				<img v-if='item.isApply!=1 && item.isApply!=2' src="@/images/basicsModules/icon_01.png">
+			<view class="for-info-box" v-for="(item,index) in dataList" :key="index" @click="goInfoPage(item)">
+				<img  src="@/images/basicsModules/icon_xx_tz.png">
 				<view class="right-box">
 					<view class="top-box">
-						<view>{{item.isApply==1?'准入驳回':(item.isApply==2?item.remark:
-						(item.isApply==3||item.isApply==-1?item.sendName:(item.isApply==4||item.isApply==5?item.remark:'')))}}</view>
-						<view>{{item.isApply==1?item.subName:(item.isApply==2?'':
-						(item.isApply==3||item.isApply==-1?item.deptName:(item.isApply==4||item.isApply==5?'':'')))}}</view>
-						<view>{{item.newMessageDate}}</view>
+						<view>{{item.title}}</view>
+						<view>{{item.deptName}}</view>
+						<view>{{item.sendTime}}</view>
 					</view>
-					<view class="bottom">{{item.newMessage}}</view>
+					<view class="bottom">{{item.content}}</view>
 				</view>
 			</view>
 			<view class="get-null-box" v-if="getData.nullDataType">暂无更多数据</view>
@@ -24,7 +20,7 @@
 </template>
 
 <script>
-    import { groupList,queryByMessage } from '@/api/apiDemo/index.js'
+    import {systemNoticeGetNoticeList } from '@/api/basicsModules/index.js'
     import { tabBar } from '@/component/tabBar.vue'
 	export default {
         components: {
@@ -32,136 +28,46 @@
         },
 		data() {
 			return {
-				infoList:[],
-				//列表请求参数
-				getData:{
-				    page:1,
-					pageSize:20,
-                    getType:true,
-                    nullDataType:true,
-				}
+				queryParams: {
+				  page: 1,
+				  pageSize: 20,
+				},
+				total:0,
+				dataList:[],
 			}
 		},
 		onLoad() {
 
 		},
 		onShow(){
-
-            this.clearData();
-            this.getList();
-            this.$refs.infoAll.getTotalList();
-
+            
+		},
+		mounted() {
+			this.getList();
 		},
 		methods: {
-            //清除
-            clearData(){
-                this.infoList = [];
-                this.getData.page = 1;
-                this.getData.getType = true;
-                this.getData.nullDataType = true;
-            },
-            //去消息详情页面
-            goInfoPage(item){
-
-				if(item.isApply==1){
-
-					uni.navigateTo({
-					    url:'/pages/information/notPassInfo?item='+encodeURIComponent(JSON.stringify(item))
-					})
-				}else if(item.isApply==2){
-					uni.navigateTo({
-					    url: '/pages_manage/workbench/receiveCasuallyPat/casuallyPatInfo?item='+encodeURIComponent(JSON.stringify(item))
-					});
-				}else if(item.isApply==3 || item.isApply == -1){
-					uni.navigateTo({
-					    url:'/pages/information/informationInfo?item='+encodeURIComponent(JSON.stringify(item))
-					})
-				}else if(item.isApply==4){
-					//记录详情-未执行  dynamicId       4
-					let obj = {
-						messageUserId:item.messageUserId,
-						recordId:item.dynamicId
-					}
-					uni.navigateTo({
-					    url:'/pages_manage/gradingControl/gradingControlDetail?item='+encodeURIComponent(JSON.stringify(obj))
-					})
-				}else if(item.isApply==5){
-					//完成控制-页面   messageContext    5
-					let obj = JSON.parse(item.messageContext);
-					this.queryByMessage(obj,item.messageUserId)
-					// obj.messageUserId = item.messageUserId
-					// uni.navigateTo({
-					//     url:'/pages/gradingControl/gradingControlAdd?obj='+encodeURIComponent(JSON.stringify(obj))
-					// })
-				}
-            },
-			async queryByMessage(obj,messageUserId){
-				const {data} = await queryByMessage(obj);
-				if(data.code == 200){
-					uni.navigateTo({
-						url:'/pages_manage/gradingControl/gradingControlAdd?item='+encodeURIComponent(JSON.stringify(data.data))+'&item2='+encodeURIComponent(JSON.stringify(data.data.detailList[0]))+'&messageUserId='+messageUserId
-					})
+            //滚动事件
+			scrollGet(){
+				let self=this;
+				if(self.total/self.getData.pageSize<=self.getData.page){
+					console.log('没有更多数据!')
+				}else{
+						setTimeout(function(){
+							self.getData.page += 1;
+							self.getList();
+						},1000)
+	
 				}
+	
 			},
-            //滚动事件
-            scrollGet(){
-                if(this.getData.getType){
-                    this.getData.page += 1;
-                    this.getList();
-                }
-            },
             //获取列表数据
             async getList(){
                 let self = this;
-                let obj = {
-                    pageNum:this.getData.page,
-                    pageSize:this.getData.pageSize,
-                };
-                const {data} = await groupList(obj);
+                const {data} = await systemNoticeGetNoticeList(this.queryParams);
                 if(data.code==200){
-                    let newDataList = data.rows;
-                    for(let i=0;i<newDataList.length;i++){
-                        if(!newDataList[i].newMessageDate || newDataList[i].newMessageDate == null){
-                            newDataList[i].newMessageDate = '';
-						}else{
-                            let timeOne = (new Date(newDataList[i].newMessageDate)).getTime();
-                            newDataList[i].newMessageDate = self.formatDate(timeOne);
-                            newDataList[i].newMessage = unescape(newDataList[i].newMessage);
-                            let reg1 = RegExp(/<img/);
-                            let reg2 = RegExp(/<iframe/);
-                            if(newDataList[i].newMessage.match(reg1)){
-                                newDataList[i].newMessage = "[图片]"
-                            }if(newDataList[i].newMessage.match(reg2)){
-                                newDataList[i].newMessage = "[视频]"
-                            }else{
-                                newDataList[i].newMessage=newDataList[i].newMessage.replace(/<\/?.+?>/g,"");
-                            }
-						}
-					}
-                    if(self.page==1){
-                        if(data.rows.length > 0 && data.rows.length == self.getData.pageSize){
-                            self.infoList = data.rows;
-                        }else if(data.rows.length > 0 && data.rows.length != self.getData.pageSize){
-                            self.infoList = data.rows;
-                            self.getData.getType = false;
-                            self.getData.nullDataType = true;
-                        }else{
-                            self.getData.getType = false;
-                            self.getData.nullDataType = true;
-                        }
-                    }else{
-                        if(data.rows.length > 0 && data.rows.length == self.getData.pageSize){
-                            self.infoList = self.infoList.concat(data.rows)
-                        }else if(data.rows.length > 0 && data.rows.length != self.getData.pageSize){
-                            self.infoList = self.infoList.concat(data.rows);
-                            self.getData.getType = false;
-                            self.getData.nullDataType = true;
-                        }else{
-                            self.getData.getType = false;
-                            self.getData.nullDataType = true;
-                        }
-                    }
-                }
+					this.dataList=[...this.dataList,...data.data.records]
+					this.total=data.data.total;
+				}   
             },
             formatDate(date) {
                 let newDate = new Date(date);

+ 54 - 43
pages/login/login.vue

@@ -38,7 +38,7 @@
 <script>
 import md5 from '@/utils/md5.js'
 import { config } from '@/api/request/config.js'
-import { login,configInfo,getConfigByType,systemAppletRolePermission} from '@/api/basicsModules/index.js'
+import { login,configInfo,getLogoInfo,getConfigByType,systemAppletRolePermission} from '@/api/basicsModules/index.js'
 import { Encrypt,Decrypt} from '@/utils/secret.js'
 export default {
   data() {
@@ -73,53 +73,64 @@ export default {
   },
   onShow(){
     this.getConfigInfo();
+    this.getLogoInfo();
   },
   methods: {
     //顶部tab点击
     tabClick(index) {
       this.curTab = index;
     },
-	//登录
-	async login() {
-	  let self = this;
-	  let obj = {
-	    account:this.username,
-	    password:md5.hex_md5(this.password),
-	  }
-	  const {data} = await login(obj)
-	  if(data.code == 200){
-	    uni.setStorageSync('token',data.data.token);
-	    uni.setStorageSync('userId',data.data.userId);
-		// userType 0-系统 1-教职工 2-学生 3-大屏
-		uni.setStorageSync('userType',data.data.userType==0||data.data.userType==1?'1':
-		(data.data.userType==2?'2':(data.data.userType==3?'3':'none')));
-	    uni.setStorageSync('userType','1');
-	    if(this.checkedType){
-	      uni.setStorageSync('userName',this.username)
-	      uni.setStorageSync('password',this.password)
-	    }else{
-	      uni.removeStorageSync('userName')
-	      uni.removeStorageSync('password')
-	    }
-		//等待配置与字段获取到后跳转
-		Promise.all([
-			//获取开发配置
-			this.getConfigByType(),
-			//获取权限字段
-			this.systemAppletRolePermission()
-		]).then((result)=>{
-			uni.redirectTo({
-				url: '/pages/home/home',
-			});
-		}).catch((error) => {
-			wx.showToast({
-				title: '数据异常,请稍候再试!',
-				icon: "none",
-				duration: 3000
-			});
-		})
-	  }
-	},
+	  //登录
+    async login() {
+      let self = this;
+      let obj = {
+        account:this.username,
+        password:md5.hex_md5(this.password),
+      }
+      const {data} = await login(obj)
+      if(data.code == 200){
+        uni.setStorageSync('token',data.data.token);
+        uni.setStorageSync('userId',data.data.userId);
+         // userType 0-系统 1-教职工 2-学生 3-大屏
+        uni.setStorageSync('userType',data.data.userType==0||data.data.userType==1?'11':(data.data.userType==2?'22':(data.data.userType==3?'3':'none')));
+        uni.setStorageSync('userType','1');
+        if(this.checkedType){
+          uni.setStorageSync('userName',this.username)
+          uni.setStorageSync('password',this.password)
+        }else{
+          uni.removeStorageSync('userName')
+          uni.removeStorageSync('password')
+        }
+      //等待配置与字段获取到后跳转
+      Promise.all([
+        //获取开发配置
+        this.getConfigByType(),
+        //获取权限字段
+        this.systemAppletRolePermission()
+      ]).then((result)=>{
+        uni.redirectTo({
+          url: '/pages/home/home',
+        });
+      }).catch((error) => {
+        wx.showToast({
+          title: '数据异常,请稍候再试!',
+          icon: "none",
+          duration: 3000
+        });
+      })
+      }
+    },
+    //获取公共配置的图片
+	async getLogoInfo(){
+      const {data} = await getLogoInfo();
+      if(data.code == 200){
+        this.loginBanner = config.base_url + data.data.loginBanner;
+        uni.setStorageSync('circularLogo',config.base_url + data.data.circularLogo)
+        uni.setStorageSync('loginBanner',config.base_url + data.data.loginBanner)
+        uni.setStorageSync('homepageBanner',config.base_url + data.data.homepageBanner)
+        uni.setStorageSync('videoCover',config.base_url + data.data.videoCover)
+      }
+    },
 	//获取权限字段
 	async systemAppletRolePermission(){
 		let self = this;
@@ -398,4 +409,4 @@ export default {
     width:366rpx;
   }
 }
-</style>
+</style>

+ 376 - 0
pages/pages_patrolInspector/chemicalCabinetQRcode.vue

@@ -0,0 +1,376 @@
+<!-- 化学品柜-扫码 -->
+<template>
+  <view class="course">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="header">
+			<view class="header_l">
+				<img  :src="circularLogo">
+			</view>
+			<view class="header_r">
+				<view class="header_r_t">{{infoData.cabinetName}}</view>
+				<view class="header_r_b">规格:2门</view>
+			</view>
+		</view>
+		<view  class="basics">
+			<view class="basics_li">
+				<view class="basics_li_l">学院:</view>
+				<view class="basics_li_r">{{infoData.deptName}}</view>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">楼栋:</view>
+				<view class="basics_li_r">{{infoData.buildName?infoData.buildName:'-'}}</view>
+			</view>
+			<view class="basics_li" style="border: none;">
+				<view class="basics_li_l">实验室:</view>
+				<view class="basics_li_r">{{infoData.subName?infoData.subName:'-'}}</view>
+			</view>
+		</view>
+		<view class="cabinet_y">
+			<view class="cabinet">
+				<view class="cabinet_t" @click="handleClick('door')"><view></view><view>{{infoData.cabinetName}}</view></view>
+				<view class="cabinet_b">
+					<view class="cabinet_l"> 
+						<view class="cabinet_l_li" v-for="(item,index) in infoData.leftList">
+							<view class="cabinet_l_li_t">{{item.doorName}}</view>
+							<view class="cabinet_l_li_m">数 量:{{item.chemicalNum}}</view>
+							<view class="cabinet_l_li_b">
+								<view class="cabinet_l_li_b_l">管理员:</view>
+								<view class="cabinet_l_li_b_r">
+									<view v-for="(item2,index2) in item.cabinetAdminModelList">{{item2.userName}}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="cabinet_r">
+						<view class="cabinet_l_li" v-for="(item,index) in infoData.rightList">
+							<view class="cabinet_l_li_t">{{item.doorName}}</view>
+							<view class="cabinet_l_li_m">数 量:{{item.chemicalNum}}</view>
+							<view class="cabinet_l_li_b">
+								<view class="cabinet_l_li_b_l">管理员:</view>
+								<view class="cabinet_l_li_b_r">
+									<view v-for="(item2,index2) in item.cabinetAdminModelList">{{item2.userName}}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<img v-if="infoData.cabinetDoorModelList.length==1" class="left-handle" src="@/images/basicsModules/handle-icon.png">
+					<img v-if="infoData.cabinetDoorModelList.length<=2" class="right-handle" src="@/images/basicsModules/handle-icon.png">
+				</view>
+			</view>
+		</view>
+	</scroll-view>
+  </view>
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {chemicalAppletCabinetDetail} from '@/api/basicsModules/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+		circularLogo:uni.getStorageSync('circularLogo'),
+		baseUrl:config.base_url,
+		pageType:0,
+		form:{
+		},
+		id:'',//化学品柜id
+		infoData:{
+			cabinetDoorModelList:[],
+		},
+	}
+  },
+  onLoad(option) {
+	this.id=option.code;
+  },
+  onShow() {
+
+  },
+  mounted(){
+	  this.chemicalAppletCabinetDetail();
+  },
+  methods: {
+		//滚动事件
+		scrollGet(){},
+	    handleClick(doType){
+		  let self=this;
+		  if(doType=='door'){
+			 uni.navigateTo({
+			     url: '/pages/pages_patrolInspector/chemicalCatalogue'
+			 });
+		  }
+	    },
+		//详情
+		async chemicalAppletCabinetDetail(){
+			let _this = this;
+			const {data} = await chemicalAppletCabinetDetail({cabinetId:this.id});
+			if(data.code == 200){
+				let leftList=[];
+				let rightList=[];
+				if(data.data.cabinetDoorModelList.length<=2){
+					for(let i=0;i<data.data.cabinetDoorModelList.length;i++){
+						leftList.push(data.data.cabinetDoorModelList[i])
+					}
+				}
+				if(data.data.cabinetDoorModelList.length>2){
+					for(let i=0;i<data.data.cabinetDoorModelList.length;i++){
+						if(i%2==0){
+							leftList.push(data.data.cabinetDoorModelList[i])
+						}else{
+							rightList.push(data.data.cabinetDoorModelList[i])
+						}
+					}
+					
+				}
+				data.data.leftList=leftList;
+				data.data.rightList=rightList;
+				this.$set(this, 'infoData', data.data);
+			}
+		},
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.course{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+	}
+	.header{
+		width: 750rpx;
+		min-height: 275rpx;
+		background: #0096F3;
+		display: flex;
+		justify-content: flex-start;
+		.header_l{
+			width: 150rpx;
+			height: 150rpx;
+			background: #FFFFFF;
+			border-radius: 75rpx;
+			margin:62rpx 40rpx 62rpx 30rpx;
+			>img{
+				width: 150rpx;
+				height: 150rpx;
+			}
+
+		}
+		.header_r{
+			.header_r_t{
+				font-size: 34rpx;
+				font-family: PingFang SC-Bold, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 48rpx;
+				margin-top: 68rpx;
+			}
+			.header_r_b{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 42rpx;
+				margin-top: 36rpx;
+				margin-bottom: 20rpx;
+
+			}
+		}
+	}
+	.basics{
+		width: 750rpx;
+		background: #FFFFFF;
+		padding: 30rpx 30rpx 0rpx;
+		box-sizing: border-box;
+		.basics_li{
+			width: 690rpx;
+			height: auto;
+			border-bottom: 1rpx solid #D8D8D8;
+			padding: 20rpx 0;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: space-between;
+			.basics_li_l{
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 40rpx;
+			}
+			.basics_li_r{
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 40rpx;
+				text-align: right;
+			}
+		}
+
+	}
+	.cabinet_y{
+		width: 750rpx;
+		background: #FFFFFF;
+		padding: 40rpx 125rpx 78rpx;
+		box-sizing: border-box;
+		margin-top: 20rpx;
+		.cabinet{
+			position: relative;
+			width: 500rpx;
+			height: 650rpx;
+			background: url("@/images/basicsModules/doors-icon.png")  no-repeat center 0px;
+			background-position: center 0px;
+			background-size: cover;
+			padding: 12rpx 16rpx 0;
+			box-sizing: border-box;
+			.cabinet_t{
+				height: 86rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-of-type(1){
+					width: 24rpx;
+					height: 24rpx;
+					background: #FFFFFF;
+					border-radius: 12rpx;
+					margin-right: 16rpx;
+					margin-left: 26rpx;
+				}
+				>view:nth-of-type(2){
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #FFFFFF;
+					line-height: 43rpx;
+					text-align: left;
+					font-style: normal;
+					text-transform: none;
+				}
+			}	
+			.cabinet_b{
+				display: flex;
+				justify-content: flex-start;
+				.cabinet_l{
+					height: 516rpx;
+					padding: 40rpx 0 0 24rpx;
+					box-sizing: border-box;
+					overflow-y: auto;
+					.cabinet_l_li{
+						width: 198rpx;
+						padding: 0 20rpx 16rpx;
+						box-sizing: border-box;
+						background: rgba(255,255,255,0.2);
+						border-radius: 10rpx;
+						margin-bottom: 20rpx;
+						.cabinet_l_li_t{
+							font-weight: 500;
+							font-size: 24rpx;
+							color: #FFFFFF;
+							line-height: 60rpx;
+							text-align: center;
+							border-bottom: 2rpx solid #FFFFFF;
+						}
+						.cabinet_l_li_m{
+							font-weight: 400;
+							font-size: 20rpx;
+							color: #FFFFFF;
+							line-height: 29rpx;
+							margin-top: 26rpx;
+						}
+						.cabinet_l_li_b{
+							display: flex;
+							justify-content: flex-start;
+							margin-top: 22rpx;
+							.cabinet_l_li_b_l{
+								font-weight: 400;
+								font-size: 20rpx;
+								color: #FFFFFF;
+								line-height: 29rpx;
+							}
+							.cabinet_l_li_b_r{
+								>view{
+									font-weight: 400;
+									font-size: 20rpx;
+									color: #FFFFFF;
+									line-height: 29rpx;
+									margin-bottom: 10rpx;
+								}
+							}
+						}
+					}
+				}
+				.cabinet_r{
+					height: 516rpx;
+					padding: 40rpx 0 0 24rpx;
+					box-sizing: border-box;
+					overflow-y: auto;
+					.cabinet_l_li{
+						width: 198rpx;
+						padding: 0 20rpx 16rpx;
+						box-sizing: border-box;
+						background: rgba(255,255,255,0.2);
+						border-radius: 10rpx;
+						margin-bottom: 20rpx;
+						.cabinet_l_li_t{
+							font-weight: 500;
+							font-size: 24rpx;
+							color: #FFFFFF;
+							line-height: 60rpx;
+							text-align: center;
+							border-bottom: 2rpx solid #FFFFFF;
+						}
+						.cabinet_l_li_m{
+							font-weight: 400;
+							font-size: 20rpx;
+							color: #FFFFFF;
+							line-height: 29rpx;
+							margin-top: 26rpx;
+						}
+						.cabinet_l_li_b{
+							display: flex;
+							justify-content: flex-start;
+							margin-top: 22rpx;
+							.cabinet_l_li_b_l{
+								font-weight: 400;
+								font-size: 20rpx;
+								color: #FFFFFF;
+								line-height: 29rpx;
+							}
+							.cabinet_l_li_b_r{
+								>view{
+									font-weight: 400;
+									font-size: 20rpx;
+									color: #FFFFFF;
+									line-height: 29rpx;
+									margin-bottom: 10rpx;
+								}
+							}
+						}
+					}
+				}
+						
+			}
+			.left-handle{
+				width: 26rpx;
+				height: 100rpx;
+				position: absolute;
+				left: 210rpx;
+				top: 274rpx;
+			}
+			.right-handle{
+				width: 26rpx;
+				height: 100rpx;
+				position: absolute;
+				left: 262rpx;
+				top: 274rpx;
+			}
+		}
+	}
+}
+
+</style>

+ 146 - 0
pages/pages_patrolInspector/chemicalCatalogue.vue

@@ -0,0 +1,146 @@
+<!-- 化学品目录 -->
+<template>
+  <view class="examine">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="header">化学品目录清单</view>
+		<view class="list">
+			<view class="list_li" v-if="item.stockAppletList.length>0" v-for="(item,index) in  dataList" :key="index">
+				<view class="list_li_title">{{item.doorName}}</view>
+				<view class="list_li_li"  v-for="(item2,index2) in  item.stockAppletList">
+					<view class="list_li_li_t">{{item2.chemicalName}}</view>
+					<view class="list_li_li_b"><text>数量:</text><text>{{item2.chemicalNum}}</text></view>
+					<view class="list_li_li_b"><text>CAS号:</text><text>{{item2.casNum}}</text></view>
+					<view class="list_li_li_b"><text>类别:</text><text>{{item2.chemicalCategoryName}}</text></view>
+				</view>
+			</view>
+		</view>
+		<img class="null-img" v-if="!dataList[0]" src="@/images/basicsModules/null-data-1.png">
+	</scroll-view>
+  </view>
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {chemicalAppletGetCabinetByChemical} from '@/api/basicsModules/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+	  pageType:0,
+	  total:0,
+	  dataList:[],
+    }
+  },
+  onLoad(option) {
+
+  },
+  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)
+
+		  }
+	  },
+	  async getList(){
+		  let self = this;
+		  const {data} = await chemicalAppletGetCabinetByChemical({cabinetId:'1759051159650766849'});
+		  if(data.code==200){
+			  this.$set(this, 'dataList', data.data);
+		  }
+      }
+  }
+}
+</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:60rpx;
+		box-sizing: border-box;
+	}
+	.header{
+		width: 750rpx;
+		height: 100rpx;
+		background: #FFFFFF;
+		font-size: 36rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #333333;
+		line-height: 100rpx;
+		text-align: center;
+	}
+	/* 切换按钮 */
+	.list{
+		position: relative;
+		.list_li{
+			.list_li_title{
+				font-size: 36rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 100rpx;
+				padding: 0 30rpx;
+				box-sizing: border-box;
+			}
+			.list_li_li{
+				padding: 0 30rpx;
+				box-sizing: border-box;
+				background: #FFFFFF;
+				.list_li_li_t{
+					font-size: 36rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 100rpx;
+					border-bottom:1px dotted #D8D8D8;
+				}
+				.list_li_li_b{
+					display: flex;
+					justify-content: space-between;
+					margin-bottom: 20rpx;
+					>text:nth-of-type(1){
+						font-size: 36rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						line-height: 100rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 36rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 100rpx;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 451 - 0
pages/pages_patrolInspector/chemicalDetail.vue

@@ -0,0 +1,451 @@
+<!-- 化学品详情-扫码 -->
+<template>
+  <view class="course">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view class="header">
+			<view class="header-l">
+				<img  :src="circularLogo">
+			</view>
+			<view class="header-r">
+				<view class="header-r-t">
+					<view>{{newData.chemicalName}}</view>
+					<view>{{newData.chemicalLevel==1?'管控':'非管控'}}</view>
+					<view :class="newData.status==0?'color-A':(newData.status==1?'color-B':'color-C')">{{newData.statusTag}}</view>
+				</view>
+				<view class="header-r-b">编号:{{newData.tagCode}}</view>
+				<view class="header-r-b2">余量:{{newData.surplus}}{{newData.specUnit}}</view>
+			</view>
+		</view>
+		<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="list" v-if="pageType==0">
+			<view class="list-border">
+				<view class="list-li"><text>CAS:</text><text>{{newData.casNum}}</text></view>
+				<view class="list-li"><text>别名:</text><text>{{newData.anotherName}}</text></view>
+				<view class="list-li"><text>类别:</text><text>{{newData.chemicalCategoryName}}</text></view>
+				<view class="list-li"><text>规格:</text><text>{{newData.specNum}}{{newData.specUnit}}</text></view>
+				<view class="list-li"><text>归属人:</text><text>{{newData.belongName}}</text></view>
+			</view>
+			<view class="list-border">
+				<view class="list-li"><text>学院:</text><text>{{newData.deptName}}</text></view>
+				<view class="list-li"><text>楼栋:</text><text>{{newData.buildName}}-{{newData.floorName}}</text></view>
+				<view class="list-li"><text>实验室:</text><text>{{newData.subName}}({{newData.subRoom}})</text></view>
+				<view class="list-li"><text>存储位置:</text><text>{{newData.cabinetName}}-{{newData.doorName}}-{{newData.layers}}</text></view>
+			</view>
+		</view>
+		<viw class="list-tow" v-if="pageType==1" >
+			<view class="list-tow-li" v-for="(item,index) in newData.chemicalUseList">
+				<view class="list-tow-li-t">
+					<view class="list-tow-li-t-l"></view>
+					<view class="list-tow-li-t-c">{{item.collectTime}}</view>
+					<view class="list-tow-li-t-c2" :class="item.tagCode==1?'color-E':'color-D'">{{item.tagType}}</view>
+					<view class="list-tow-li-t-r"></view>
+				</view>
+				<!-- tagCode 1领用,0是归还,3是空瓶出库-->
+				<view class="list-tow-li-b">
+					<view class="list-tow-li-b-li" v-if="item.tagCode==1 || item.tagCode==3"><text>领用人:</text><text>{{item.userName}}</text></view>
+					<view class="list-tow-li-b-li" v-if="item.tagCode==1 || item.tagCode==3"><text>领用量:</text><text>{{item.collectNowNum}}</text></view>
+					<view class="list-tow-li-b-li"><text>双人认证:</text><text>{{item.doubleAuthen}}</text></view>
+					
+					<view class="list-tow-li-b-li" v-if="item.tagCode==0"><text>归还人:</text><text>{{item.userName}}</text></view>
+					<view class="list-tow-li-b-li" v-if="item.tagCode==0 || item.tagCode==3"><text>使用量:</text><text>{{item.useAmount}}</text></view>
+					<view class="list-tow-li-b-li" v-if="item.tagCode==0"><text>余 量:</text><text>{{item.returnStockNum}}</text></view>
+				</view>
+			</view>
+		</viw>
+		<view class="tip" v-if="pageType==1 || pageType==2">仅展示最近三个月的申购记录</view>
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {chemicalAppletGetStockDetail} from '@/api/basicsModules/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+   
+  },
+  data() {
+    return {
+		circularLogo:uni.getStorageSync('circularLogo'),
+		baseUrl:config.base_url,
+		pageType:0,//0基本信息 1使用记录 2申领记录
+		form:{
+		},
+		tabText:['基本信息','使用记录'],
+		curTab:0,
+		newData:{},
+		tagCode:'',
+		dataList:[],
+		nickName:'',
+	}
+  },
+  onLoad(option) {
+	 this.tagCode=option.code;
+	
+  },
+  onShow() {
+	  
+  },
+  mounted(){
+	 this.chemicalAppletGetStockDetail(); 
+  },
+  methods: {
+		//滚动事件
+		scrollGet(){},
+		tabClick(index) {
+			this.curTab = index;
+			this.pageType = index;
+		},
+		//详情
+		async chemicalAppletGetStockDetail(){
+			let self = this;
+			const {data} = await chemicalAppletGetStockDetail({tagCode:this.tagCode});
+			if(data.code == 200){
+				this.$set(this, 'newData', data.data);
+			}
+		}, 
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.course{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+	}
+	.header{
+		width: 750rpx;
+		min-height: 200rpx;
+		background: #fff;
+		display: flex;
+		justify-content: flex-start;
+		.header-l{
+			width: 120rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			border-radius: 60rpx;
+			margin:40rpx 40rpx 0 30rpx;
+			>img{
+				width: 120rpx;
+				height: 120rpx;
+			}
+		}
+		.header-r{
+			flex: 1;
+			.header-r-t{
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				margin-top: 24rpx;
+				>view:nth-of-type(1){
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #333333;
+					line-height: 42rpx;
+				}
+				>view:nth-of-type(2){
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #0183FA;
+					background: #FFFFFF;
+					border-radius: 6rpx;
+					border: 1rpx solid #0183FA;
+					padding: 6rpx 16rpx;
+					box-sizing: border-box;
+					margin: 0 10rpx 0 14rpx;
+				}
+				>view:nth-of-type(3){
+					font-size: 24rpx;
+					border-radius: 6rpx;
+					padding: 6rpx 14rpx;
+					box-sizing: border-box;
+				}
+				.color-A{
+					color: #999999;
+					background: #EDEDED;
+				}
+				.color-B{
+					color: #0183FA;
+					background: rgba(1,131,250,0.2);
+				}
+				.color-C{
+					color: #2B80FF;
+					background: rgba(43,128,255,0.2);
+				}
+				
+			}
+			.header-r-b{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				margin-top: 24rpx;
+				
+			}
+			.header-r-b2{
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 42rpx;
+				margin-top: 24rpx;
+				margin-bottom: 20rpx;
+				display: flex;
+				justify-content: space-between;
+				
+			    .risk{
+					width: 180rpx;
+					height: 50rpx;
+					border-radius: 80rpx;
+					opacity: 1;
+					border: 1rpx solid #FF0000;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #FF0000;
+					line-height: 50rpx;
+					text-align: center;
+					margin-right: 24rpx;
+				}
+				.ordinary{
+					width: 180rpx;
+					height: 50rpx;
+					border-radius: 80rpx;
+					opacity: 1;
+					border: 1rpx solid #2BCB1D;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #2BCB1D;
+					line-height: 50rpx;
+					text-align: center;
+					margin-right: 24rpx;
+				}
+				
+			}
+		}
+	}
+	.tabTitle{
+		width:100%;
+		height: 100rpx;
+		display flex;
+		justify-content: flex-start;
+		align-items: center;
+		margin-bottom:20rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.tabTitle-li{
+			position: relative;
+			width:120rpx;
+			text-align center;
+			margin-right: 48rpx;
+			.tabTitle-text{
+				display: inline-block;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 82rpx;
+				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: 92rpx;
+				height: 4rpx;
+				background: #0183FA;
+				border-radius: 2rpx;
+				margin-left: 10rpx;
+				display none;
+				&.on{
+					display block;
+				}
+			}
+	
+		}
+	}
+	.list{
+		width: 750rpx;
+		margin-top:20rpx;
+		padding: 0 30rpx;
+		box-sizing: border-box;
+		.list-border{
+			width: 690rpx;
+			height: auto;
+			background: #FFFFFF;
+			border-radius: 20rpx 20rpx 20rpx 20rpx;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			.list-li{
+				border-bottom: 1rpx solid #D8D8D8;
+				display: flex;
+				justify-content: space-between;
+				>text:nth-of-type(1){
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 80rpx;
+				}
+				>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;
+					overflow: hidden;//溢出隐藏
+					text-overflow: ellipsis;//省略号
+					white-space: nowrap;//强制文本不换行
+			
+				}
+			}
+			.list-li:last-child{
+				border-bottom: none;
+			}
+		}
+		
+		
+	}
+	.list-tow{	
+		.list-tow-li{
+			width: 690rpx;
+			height:auto;
+			background: #FFFFFF;
+			border-radius: 10rpx;
+			padding-bottom: 20rpx;
+			box-sizing: border-box;
+			margin: 0 30rpx 20rpx;
+			.list-tow-li-t{
+				position: relative;
+				min-height: 110rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				.list-tow-li-t-l{
+					position: absolute;
+					left:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+				.list-tow-li-t-c{
+					min-height: 40rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					line-height: 36rpx;
+					margin-left: 30rpx;
+					margin-right: 20rpx;
+					border-radius: 20rpx;
+					padding: 20rpx 20rpx;
+					box-sizing: border-box;
+					
+				}
+				.list-tow-li-t-c2{
+					background: rgba(31,165,13,0.2);
+					border-radius: 0rpx 6rpx 0rpx 6rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #1FA50D;
+					text-align: center;
+					padding: 6rpx 12rpx;
+					box-sizing: border-box;
+					position: absolute;
+					right: 0;
+					top: 0;
+				}
+				
+				.list-tow-li-t-r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+				.color-D{
+					color: #07BC11;
+					background: rgba(7,188,17,0.2);
+				}
+				.color-E{
+					color: #0183FA;
+					background: rgba(1,131,250,0.2);
+				}
+			}
+			.list-tow-li-b{
+				height:auto;
+				border-top:1px dotted #D8D8D8;
+				margin:0 30rpx;
+				padding-top:14rpx;
+				box-sizing: border-box;
+				.list-tow-li-b-li{
+					display: flex;
+					justify-content: space-between;
+					>text:nth-of-type(1){
+						font-size: 28rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						line-height: 74rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 28rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 74rpx;
+					}
+					
+				}
+			}
+		}	
+	}
+	.tip{
+		font-size: 26rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #999999;
+		line-height: 37rpx;
+		text-align: center;
+		margin-top: 42rpx;
+		
+	}
+}	
+
+</style>

+ 452 - 0
pages/pages_patrolInspector/courseQRcode.vue

@@ -0,0 +1,452 @@
+<!-- 课程-扫码 -->
+<template>
+  <view class="course">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<view  class="basics">
+			<view class="basics_li">
+				<view class="basics_li_l">课程名称:</view>
+				<view class="basics_li_r"><text>{{infoData.courseName}}</text></view>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">主讲老师:</view>
+				<view class="basics_li_r">{{infoData.lecturerName}}</view>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">上课日期:</view>
+				<view class="basics_li_r">{{infoData.coStartDate}}</view>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">上课时间:</view>
+				<view class="basics_li_r">{{infoData.coStartTime}}-{{infoData.coEndTime}}</view>
+			</view>
+			<view class="basics_li">
+				<view class="basics_li_l">上课地点:</view>
+				<view class="basics_li_r">{{(infoData.subId && infoData.subId !=-1)?infoData.subName+'-'+infoData.subRoom:infoData.position}}</view>
+			</view>
+			<view class="basics_li" style="border: none;">
+				<view class="basics_li_l">课程内容:</view>
+				<view class="basics_li_r2"><text>{{infoData.content?infoData.content:''}}</text></view>
+			</view>
+		</view>
+		<view class="statistics">
+			<view class="statistics_li">
+				<text>预约人数:</text>
+				<text>{{infoData.peopleCount}}人</text>
+			</view>
+			<view class="statistics_li" style="background: #0183FA;">
+				<text>签到人数:</text>
+				<text>{{signPeople}}人</text>
+			</view>
+		</view>
+	</scroll-view>
+	<!-- 遮罩 -->
+	<view class="shade" v-if="dialogVisible">
+		<view class="null-box" @click="dialogOutfire()"></view>
+		<view class="shade_n" v-if="shadeStatus==0">
+			<view class="shade_n_t" v-if="isCourse"><text>是否确认签到</text></view>
+			<view class="shade_n_t" v-if="!isCourse"><img src="@/images/basicsModules/icon_kcxq_ts.png"><text>您不在当前课程名单中,是否确定签到</text></view>
+			<view class="shade_n_b">
+				<text @click="dialogOutfire()">取消</text>
+				<text @click="handleClick('signSubmit')">确认</text>
+			</view>
+		</view>
+		<view class="shade_n_tow" v-if="shadeStatus==1">
+			<view class="shade_n_tow_t" v-if="isSucceed"><img src="@/images/basicsModules/icon_kcxq_cg.png"><text>签到成功</text></view>
+			<view class="shade_n_tow_t" v-if="!isSucceed"><img src="@/images/basicsModules/icon_kcxq_sb.png"><text>签到失败</text></view>
+			<view class="shade_n_tow_b" @click="dialogOutfire()">确认</view>
+		</view>
+	</view>
+	<view class="btn">
+		<view class="btn_l" @click="handleClick('cancel')">取消</view>
+		<view v-if="isSign" class="forbidden">签到</view>
+		<view v-if="!isSign" class="btn_r" @click="handleClick('sign')">签到</view>
+	</view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {courseQRcodeDetail,courseQRcodeSignCount,courseQRcodeIsSign,courseQRcodeIsPlanSign,courseQRcodeSign} from '@/api/apiDemo/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+		baseUrl:config.base_url,
+		pageType:0,
+		form:{
+		},
+		infoData:{},
+		dialogVisible:false,
+		isSign:false,//是否签到
+		isCourse:false,//是否在当前课程名单中
+		isSucceed:false,//签到成功失败
+		shadeStatus:0,//遮罩层状态 0是否确认签到 1签到成功或失败
+		courseId:'',//课程id
+		signPeople:0,//签到人数
+		userId:uni.getStorageSync('userId'),//用户id
+	}
+  },
+  onLoad(option) {
+	 this.courseId=option.code;
+  },
+  onShow() {
+	  wx.hideHomeButton()
+  },
+  mounted(){
+	  this.courseQRcodeIsSign();//是否签到
+	  this.courseQRcodeIsPlanSign();//是否计划内签到
+	  this.courseQRcodeSignCount();//签到人数
+	  this.courseQRcodeDetail();//签到详情
+  },
+  methods: {
+
+		//滚动事件
+		scrollGet(){},
+	    handleClick(doType){
+		  let self=this;
+		  if(doType=='sign'){//签到遮罩层
+			 this.dialogVisible=true;
+		  }else if(doType=='signSubmit'){//确认签到
+
+			  this.submitForm()
+
+		  }else if(doType=='cancel'){//取消返回小程序首页
+		        let data=uni.getStorageSync('gentleIdentifierData')
+				if(!data.adminGentle && !data.applyGentle && !data.rectifyGentle){
+					uni.redirectTo({
+						url: '/pages/mine',
+					});
+				}else{
+					uni.redirectTo({
+						url: '/pages/home',
+					});
+				}
+		  }
+
+	    },
+		//关闭弹窗
+		dialogOutfire() {
+		  this.dialogVisible = !this.dialogVisible
+		},
+		//是否签到
+		async courseQRcodeIsSign(){
+			let _this = this;
+			const {data} = await courseQRcodeIsSign({courseId:this.courseId,userId:this.userId});
+			if(data.code == 200){
+				this.isSign=data.data;
+			}
+		},
+		//是否计划内签到
+		async courseQRcodeIsPlanSign(){
+			let _this = this;
+			const {data} = await courseQRcodeIsPlanSign({courseId:this.courseId,userId:this.userId});
+			if(data.code == 200){
+				this.isCourse=data.data;
+			}
+		},
+
+		//详情
+		async courseQRcodeDetail(){
+			let _this = this;
+			const {data} = await courseQRcodeDetail(this.courseId);
+			if(data.code == 200){
+				this.infoData=data.data;
+				if(data.data.subId){
+					this.infoData.site=data.data.subName+data.data.subRoom
+				}else{
+					this.infoData.site=data.data.position
+				}
+			}
+		},
+		//获取签到人数
+		async courseQRcodeSignCount(){
+			let _this = this;
+			const {data} = await courseQRcodeSignCount({courseId:this.courseId,isSing:1});
+			if(data.code == 200){
+				this.signPeople=data.total
+			}
+		},
+
+		//提交
+		async submitForm(){
+			let _this = this;
+			let obj={
+				courseId:this.courseId,
+				userId:this.userId,
+				singType:this.isCourse?'0':'1',//0计划内 1计划外
+			}
+			const {data} = await courseQRcodeSign(obj);
+			if(data.code == 200){
+				 if(data.data==1){//签到成功
+					 this.isSucceed=true;
+				 }else{//签到失败
+					 this.isSucceed=false;
+				 }
+				 _this.shadeStatus=1;
+				 _this.courseQRcodeSignCount();//签到人数
+				 setTimeout(function () {
+				    _this.dialogVisible=false;
+				    _this.isSign=true;
+				 }, 3000);
+			}else{
+				_this.shadeStatus=1;
+				this.isSucceed=false;
+				setTimeout(function () {
+				   _this.dialogVisible=false;
+				}, 3000);
+			}
+		},
+
+
+
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.course{
+	height:100%;
+	display flex;
+	box-sizing: border-box;
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+		padding-bottom: 128rpx;
+		box-sizing: border-box;
+	}
+	/* 遮罩 */
+	.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{
+	    width: 550rpx;
+	    height: 350rpx;
+	    background: #FFFFFF;
+	    border-radius: 20rpx;
+	    position: absolute;
+	    top: 490rpx;
+	    left: 100rpx;
+		.shade_n_t{
+			width: 100%;
+			position: absolute;
+			top: 80rpx;
+			padding:0 48rpx 0 58rpx;
+			box-sizing: border-box;
+			display: flex;
+			text-align: center;
+			>img{
+				width: 48rpx;
+				height: 48rpx;
+				margin-right:22rpx;
+			}
+			>text{
+				flex: 1;
+				font-size: 34rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 48rpx;
+				display:inline-block;
+				text-align: justify;
+			}
+		}
+		.shade_n_b{
+			position: absolute;
+			top: 220rpx;
+			>text{
+				display: inline-block;
+				width: 230rpx;
+				height: 90rpx;
+				border-radius: 10rpx 10rpx 10rpx 10rpx;
+			}
+		    >text:nth-of-type(1){
+				border: 2rpx solid #E0E0E0;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 90rpx;
+				text-align: center;
+				margin-right: 20rpx;
+				margin-left: 34rpx;
+			}
+			>text:nth-of-type(2){
+				background: #0183FA;
+				font-size: 30rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 90rpx;
+				text-align: center;
+			}
+		}
+	  }
+	  .shade_n_tow{
+		 width: 550rpx;
+		 height: 528rpx;
+		 background: #FFFFFF;
+		  border-radius: 20rpx;
+		  position: absolute;
+		  top: 310rpx;
+		  left: 100rpx;
+		  .shade_n_tow_t{
+			  >img{
+				width: 230rpx;
+				height: 230rpx;
+				margin: 60rpx 0 0 160rpx;
+			  }
+			  >text{
+				display: block;
+				width: 100%;
+				font-size: 34rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 48rpx;
+				text-align: center;
+				margin-top:46rpx;
+			  }
+		  }
+		  .shade_n_tow_b{
+			  width: 100%;
+			  height: 100rpx;
+			  border-top: 1px solid #E0E0E0;
+			  font-size: 30rpx;
+			  font-family: PingFang SC-Medium, PingFang SC;
+			  font-weight: 400;
+			  color: #0183FA;
+			  line-height: 100rpx;
+			  text-align: center;
+			  margin-top: 42rpx;
+		  }
+	  }
+	}
+	.basics{
+		width: 750rpx;
+		background: #FFFFFF;
+		padding: 30rpx 30rpx 0rpx;
+		box-sizing: border-box;
+		.basics_li{
+			width: 690rpx;
+			height: auto;
+			border-bottom: 1rpx solid #D8D8D8;
+			padding: 20rpx 0;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: space-between;
+			.basics_li_l{
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #666666;
+				line-height: 40rpx;
+			}
+			.basics_li_r{
+				flex: 1;
+				text-align: right;
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 40rpx;
+			}
+			.basics_li_r2{
+				flex: 1;
+				text-align: right;
+				>text{
+					display:inline-block;
+					text-align: justify;
+					font-size: 28rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 40rpx;
+				}
+			}
+		}
+
+	}
+	.statistics{
+		display: flex;
+		justify-content: space-between;
+		margin: 70rpx 30rpx 0;
+		.statistics_li{
+			width: 330rpx;
+			height: 150rpx;
+			background: #FFBD4C;
+			border-radius: 10rpx 10rpx 10rpx 10rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 28rpx;
+				margin-right: 32rpx;
+			}
+			>text:nth-of-type(2){
+				font-size: 42rpx;
+				font-family: PingFang SC-Heavy, PingFang SC;
+				font-weight: 400;
+				color: #FFFFFF;
+				line-height: 42rpx;
+			}
+		}
+	}
+	.btn{
+		position: fixed;
+		bottom: 0;
+		display: flex;
+		justify-content: space-between;
+		.btn_l{
+			width: 375rpx;
+			height: 90rpx;
+			background: #FFFFFF;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 90rpx;
+			text-align: center;
+		}
+		.btn_r{
+			width: 375rpx;
+			height: 90rpx;
+			background: #0183FA;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color:#FFFFFF;
+			line-height: 90rpx;
+			text-align: center;
+		}
+		.forbidden{
+			width: 375rpx;
+			height: 90rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			line-height: 90rpx;
+			text-align: center;
+			background: #E0E0E0;
+			color: #FFFFFF;
+		}
+	}
+}
+
+</style>

+ 59 - 32
pages/saoCode/saoCode.vue

@@ -8,7 +8,7 @@
 <script>
 	import { config } from '@/api/request/config.js'
     export default {
-		
+
         name: "saoCode",
         data() {
             return {
@@ -18,40 +18,67 @@
             }
         },
 
-        onLoad(option) {
-            let self = this;
-            if(option.q){
-                let text = decodeURIComponent(option.q)
-                let list = text.split("?")[1].split("&");
-                for(let i=0;i<list.length;i++){
-                    let newList = list[i].split("=");
-                    if(newList[0] == 'code'){
-                        self.code = newList[1];
-                    }else if(newList[0] == 'type'){
-                        self.type = newList[1];
-                    }
-                }
-                if(!uni.getStorageSync('token')){
-                    uni.setStorageSync('saoCode',this.code);
-                    uni.setStorageSync('saoType',this.type);
-                    uni.redirectTo({
-                        url: '/pages/login',
-                    });
-                }
-            }else{
-                this.code = uni.getStorageSync('saoCode');
-                this.type = uni.getStorageSync('saoType');
-                uni.removeStorageSync('saoCode');
-                uni.removeStorageSync('saoType');
+      onLoad(option) {
+        let self = this;
+        if(option.q){
+          let text = decodeURIComponent(option.q)
+          let list = text.split("?")[1].split("&");
+          for(let i=0;i<list.length;i++){
+            let newList = list[i].split("=");
+            if(newList[0] == 'code'){
+              self.code = newList[1];
+            }else if(newList[0] == 'type'){
+              self.type = newList[1];
             }
-        },
-        mounted(){
+          }
+          if(!uni.getStorageSync('token')){
+            uni.setStorageSync('saoCode',this.code);
+            uni.setStorageSync('saoType',this.type);
+            uni.redirectTo({
+              url: '/pages/login',
+            });
+          }else{
+            if(this.type==7){//培训课程
+              uni.redirectTo({
+                url: '/pages/pages_patrolInspector/courseQRcode?code='+this.code,
+              });
+            }else if(this.type==8){//化学品柜
+              uni.redirectTo({
+                url: '/pages/pages_patrolInspector/chemicalCabinetQRcode?code='+this.code,
+              });
+            }else if(this.type==9){//化学品
+              uni.redirectTo({
+                url: '/pages/pages_patrolInspector/chemicalDetail?code='+this.code,
+              });
+            }
+          }
+        }else{
+          this.code = uni.getStorageSync('saoCode');
+          this.type = uni.getStorageSync('saoType');
+          uni.removeStorageSync('saoCode');
+          uni.removeStorageSync('saoType');
+          if(this.type==7){//培训课程
+            uni.redirectTo({
+              url: '/pages/pages_patrolInspector/courseQRcode?code='+this.code,
+            });
+          }else if(this.type==8){//化学品柜
+            uni.redirectTo({
+              url: '/pages/pages_patrolInspector/chemicalCabinetQRcode?code='+this.code,
+            });
+          }else if(this.type==9){//化学品
+            uni.redirectTo({
+              url: '/pages/pages_patrolInspector/chemicalDetail?code='+this.code,
+            });
+          }
+        }
+      },
+      mounted(){
 
-        },
+      },
 
-        methods:{
+      methods:{
 
-        },
+      },
     }
 </script>
 
@@ -59,4 +86,4 @@
     #saoCode{
         overflow scroll
     }
-</style>
+</style>

+ 0 - 28
pages_manage/laboratory/broadcast.vue

@@ -1,28 +0,0 @@
-<!-- 开始广播 -->
-<template>
-    <view id="broadcast">
-    </view>
-</template>
-
-<script>
-    export default {
-        data() {
-            return {
-
-            }
-        },
-        onLoad() {
-
-        },
-        methods: {
-
-        }
-    }
-</script>
-
-<style lang="stylus" scoped>
-    #broadcast{
-        height:100%;
-        display flex
-    }
-</style>

+ 239 - 0
pages_manage/laboratory/infoPage.vue

@@ -0,0 +1,239 @@
+<!-- 实验室详情 -->
+<template>
+  <view class="infoPage">
+    <view class="title">
+        <view class="title-t">
+          <view :style="'border:1rpx solid '+newData.levelColor+';color:'+newData.levelColor+';'">
+            {{newData.levelName}}
+          </view>
+          <view>{{newData.subName}}</view>
+        </view>
+        <view class="title-m">
+          <view v-for="(item,index) in newData.labClassTypeList">{{item.typeName}}</view>
+        </view>
+        <view class="title-m1">
+          <img src="@/images/basicsModules/icon_xq_xy.png">
+          <view>{{newData.deptName}}</view>
+        </view>
+        <view class="title-b">
+          <img src="@/images/basicsModules/icon_14.png">
+          <view>{{newData.buildName}}{{newData.floorName}}{{newData.subName}}{{ newData.roomNum}}</view>
+        </view>
+    </view>
+	<view class="tab-btn">
+		<view :class="currentIndex==index?'color-B':''" v-for="(item,index) in tabData" @click="tabFun(index)">{{item}}</view>
+	</view>
+	<!-- 物联控制 -->
+	<iotControl  v-if="pageType == 2" :subjectData="subjectData"></iotControl>
+	<!-- 安全信息牌 -->
+	<safetyCard  v-if="pageType == 3" :subjectData="subjectData"></safetyCard>
+	<!-- 进出记录 -->
+	<accessRecord  v-if="pageType == 4" :subjectData="subjectData"></accessRecord>
+	<!-- 语音广播弹窗 -->
+	<voiceBroadcast v-if="broadcastPage" :subjectData="subjectData"></voiceBroadcast>
+	<!-- 空调弹窗 -->
+	<airConditioning v-if="conditioningPage" :subjectData="subjectData"></airConditioning>
+  </view>
+</template>
+<<script>
+import {laboratoryAppletGetSubDetailInfo} from '@/api/basicsModules/index.js'
+import {iotControl} from '@/pages_manage/laboratory/iotControl.vue'
+import {safetyCard} from '@/pages_manage/laboratory/safetyCard.vue'
+import {accessRecord} from '@/pages_manage/laboratory/accessRecord.vue'
+import {voiceBroadcast} from '@/pages_manage/laboratory/voiceBroadcast.vue'
+import {airConditioning} from '@/pages_manage/laboratory/airConditioning.vue'
+export default {
+  name: 'infoPage',
+  components: {
+    iotControl,
+    safetyCard,
+    accessRecord,
+    voiceBroadcast,
+    airConditioning,
+  },
+  data() {
+    return {
+      newData:{},
+	  tabData:['物联控制','安全信息牌','进出记录'],
+	  currentIndex:0,
+	  pageType:2,
+	  //语音广播弹窗
+	  broadcastPage:false,
+	  //空调弹窗
+	  conditioningPage:false,
+      // 查询参数
+      queryParams: {
+        page: 1,
+        pageSize: 20,
+      },
+	  subjectData:null,
+    }
+  },
+  onLoad(option) {
+	  this.$set(this, 'newData',JSON.parse(decodeURIComponent(option.infoData)));
+	  this.$set(this, 'subjectData',JSON.parse(decodeURIComponent(option.infoData)));
+  },
+  created() {
+
+  },
+  mounted() {
+
+  },
+  methods: {
+
+	tabFun(index){
+		this.$set(this, 'currentIndex',index);
+		if(index==0){
+			//物联控制
+			this.$set(this, 'pageType',2);
+		}else if(index==1){
+			//安全信息牌
+			this.$set(this, 'pageType',3);
+		}else if(index==2){
+			//进出记录
+			this.$set(this, 'pageType',4);
+		}
+
+	},
+    buttonClick(type,row){
+      let self = this;
+      if(type == 'subDetail'){
+        //实验室详情
+      }else if(type == 'broadcastOpen'){
+		//语音弹窗开启
+		this.$set(this, 'broadcastPage',true);
+	  }else if(type == 'broadcastClose'){
+		//语音弹窗关闭
+		this.$set(this, 'broadcastPage',false);
+	  }else if(type == 'conditioningOpen'){
+		//空调弹窗开启
+		this.$set(this, 'conditioningPage',true);
+	  }else if(type == 'conditioningClose'){
+		//空调弹窗关闭
+		this.$set(this, 'conditioningPage',false);
+	  }else if(type == 'back'){
+		  this.$set(this, 'pageType',2);
+	  }
+    },
+  },
+}
+</script>
+
+<style lang="stylus" scoped>
+.infoPage{
+  height:100%;
+  display flex;
+  flex-direction column;
+  .title{
+    height: auto;
+    background: #FFFFFF;
+	padding: 0 20rpx;
+	box-sizing: border-box;
+    .title-t{
+      display:flex;
+      justify-content:flex-start;
+      align-items: center;
+      padding: 28rpx 0 20rpx 0;
+      box-sizing: border-box;
+      >view:nth-of-type(1){
+        background:#fff;
+        margin-right: 20rpx;
+        border-radius: 8px;
+        padding: 6rpx 16rpx;
+        box-sizing: border-box;
+      }
+      >view:nth-of-type(2){
+        font-family: PingFang SC;
+        font-weight: 500;
+        font-size: 30rpx;
+        color: #333333;
+        line-height: 36rpx;
+      }
+    }
+    .title-m{
+        display: flex;
+        justify-content: flex-start;
+		flex-wrap: wrap;
+        >view{
+          display: inline-block;
+          font-family: PingFang SC;
+          font-weight: 500;
+          font-size: 24rpx;
+          color: #0183FA;
+          background: rgba(1,131,250,0.2)
+          border-radius: 18rpx;
+          padding: 6rpx 12rpx;
+          box-sizing: border-box;
+		  margin-right: 12rpx;
+		  margin-bottom: 20rpx;
+        }
+    }
+    .title-m1{
+		display: flex;
+		justify-content: flex-start;
+		margin:0rpx 0 20rpx 0;
+		>img{
+			width: 30rpx;
+			height: 27rpx;
+			margin-right: 12rpx;
+		}
+		>view{
+			font-family: PingFang SC;
+			font-weight: 500;
+			font-size: 26rpx;
+			color: #666666;
+			line-height: 30rpx;
+		}
+
+    }
+    .title-b{
+		display: flex;
+		justify-content: flex-start;
+		margin-bottom: 22rpx;
+		>img{
+			width: 30rpx;
+			height: 27rpx;
+			margin-right: 12rpx;
+		}
+		>view{
+			font-family: PingFang SC;
+			font-weight: 500;
+			font-size: 26rpx;
+			color: #666666;
+			line-height: 30rpx;
+		}
+    }
+  }
+  .tab-btn{
+	width: 750rpx;
+	height: 80rpx;
+	border: 1px solid #E0E0E0;
+	background: #fff;
+	display:flex;
+	justify-content:flex-start;
+	margin-top: 20rpx;
+	>view{
+		width: 250rpx;
+		height: 80rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #222222;
+		line-height: 80rpx;
+		text-align: center;
+		border-right: 1px solid #E0E0E0;
+	}
+	.color-B{
+		width: 250rpx;
+		height: 80rpx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #FFFFFF;
+		line-height: 80rpx;
+		text-align: center;
+		background: #0183FA;
+	}
+  }
+}
+</style>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 1744
pages_manage/laboratory/laboratoryInfo.vue


+ 207 - 229
pages_manage/laboratory/safetyCard.vue

@@ -1,237 +1,215 @@
 <!-- 安全信息牌 -->
 <template>
-    <view id="safetyCard">
-        <view class="top-name-max-box">
-            <view class="name-box back-ff">
-                <view v-for="(minItem,index1) in subject" :key="index1" v-if="minItem.dictValue === itemData.subDept">{{minItem.dictLabel}}</view>
-                <view class="color-33">{{itemData.name}}</view>
-            </view>
-            <view class="address-box color-99">{{itemData.address}}</view>
-        </view>
-        <view class="text-max-box">
-            <view class="text-min-box">
-                <view>责任单位:</view>
-                <view>{{itemData.deptName}}</view>
-            </view>
-            <view class="text-min-box">
-                <view>实验室负责人:</view>
-                <view>{{itemData.adminName}}</view>
-            </view>
-            <view class="text-min-box">
-                <view>联系方式:</view>
-                <view>{{itemData.adminPhone}}</view>
-            </view>
-            <view class="text-min-box">
-                <view>安全负责人:</view>
-                <view>{{itemData.safeUserName?itemData.safeUserName:'无'}}</view>
-            </view>
-            <view class="text-min-box">
-                <view>联系方式:</view>
-                <view>{{itemData.safeUserPhone?itemData.safeUserPhone:'无'}}</view>
-            </view>
-        </view>
-        <view class="safety-max-box" v-if="itemData.hazardCategory[0]||itemData.riskMeasure[0]||itemData.outfire[0]">
-            <view class="max-for-box" v-if="itemData.hazardCategory[0]">
-                <view class="title-box">主要危险类别</view>
-                <view class="for-box" v-for="(item,index1) in itemData.hazardCategory" :key="index1">
-                    <view v-for="(minItem,index2) in hazardCategory" :key="index2" v-if="minItem.dictValue == item">● {{minItem.dictLabel}}</view>
-                </view>
-            </view>
-            <view class="max-for-box" v-if="itemData.riskMeasure[0]">
-                <view class="title-box">风控防控措施</view>
-                <view class="for-box" v-for="(item,index1) in itemData.riskMeasure" :key="index1">
-                    <view v-for="(minItem,index2) in riskMeasure" :key="index2" v-if="minItem.dictValue == item">● {{minItem.dictLabel}}</view>
-                </view>
-            </view>
-            <view class="max-for-box" v-if="itemData.outfire[0]">
-                <view class="title-box">灭火要点</view>
-                <view class="for-box" v-for="(item,index1) in itemData.outfire" :key="index1">
-                    <view v-for="(minItem,index2) in extinguishingKeyPoints" :key="index2" v-if="minItem.dictValue == item">● {{minItem.dictLabel}}</view>
-                </view>
-            </view>
-        </view>
-        <view class="img-bottom-box" v-if="itemData.safeSigns[0]||itemData.qrCode">
-            <view class="title-box">安全警示标识</view>
-            <view class="for-box" :key="index1">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_jzxy.png" v-if="item == 'xiyan'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_jzys.png" v-if="item == 'yinshi'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_dxaq.png" v-if="item == 'anquan'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_gzf.png" v-if="item == 'gongzuofu'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_gbmc.png" v-if="item == 'menchuang'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img class="img-ojb" src="@/pages_manage/images/icon_aqxxp_gbsd.png" v-if="item == 'shuidian'" v-for="(item,index) in itemData.safeSigns" :key="index">
-                <img v-if="itemData.qrCode" class="code-img" :src="itemData.qrCode">
-            </view>
-        </view>
-    </view>
+	<view class="safetyCard">
+		<view class="liability-unit">责任单位:{{newData.deptName}}</view>
+		<view class="small-title">实验室负责人</view>
+		<view class="sub-head" style="border:none;">
+			<view>{{newData.adminName}}</view>
+			<view>
+				<img src="@/images/basicsModules/icon_14.png">
+				<view>{{newData.adminPhone}}</view>
+			</view>
+		</view>
+		<view class="small-title">安全员</view>
+		<view class="sub-head" v-for="(item,index) in newData.safeUserList">
+			<view>{{item.safeUserName}}</view>
+			<view>
+				<img src="@/images/basicsModules/icon_14.png">
+				<view>{{item.safeUserPhone}}</view>
+			</view>
+		</view>
+		<view class="classify" v-for="(item,index) in newData.labInfoBrandModels">
+			<view v-if="item.privateList.length>0 && item.brandType==1" class="small-title">{{item.brandName}}</view>
+			<view v-if="item.privateList.length>0 && item.brandType==1" class="small-items" v-for="(item2,index2) in item.privateList">
+				<view>● </view>
+				<view>{{item2.infoName}}</view>
+			</view>
+			<view  v-if="item.privateList.length>0 && item.brandType==2" class="logotype">{{item.brandName}}</view>
+			<view  v-if="item.privateList.length>0 && item.brandType==2" class="logotype-img">
+				<img v-for="(item3,index3) in item.privateList" :src="baseUrl+item3.infoContent">
+			</view>
+		</view>
+		<!-- 二维码 -->
+		<img v-if="newData.qrCode" class="code-img" :src="newData.qrCode">
+	</view>
 </template>
 
 <script>
-    import { getDicts } from '@/api/apiDemo/index.js'
-    export default {
-        data() {
-            return {
-                itemData:{},
-                text:"",
-                subject:[],
-                safetyWarning:[],
-                hazardCategory:[],
-                riskMeasure:[],
-                extinguishingKeyPoints:[]
-            }
-        },
-        onLoad(option) {
-            this.getSafetyWarning();
-            this.getHazardCategory();
-            this.getRiskMeasure();
-            this.getExtinguishingKeyPoints();
-            this.itemData = JSON.parse(decodeURIComponent(option.item));
-            if(this.itemData.safeUserName){
-                this.itemData.safeUserName = this.itemData.safeUserName.replace(/,/,'、');
-            }
-            if(this.itemData.safeUserPhone){
-                this.itemData.safeUserPhone = this.itemData.safeUserPhone.replace(/,/,'、');
-            }
-            if(this.itemData.hazardCategory){
-                this.itemData.hazardCategory = this.itemData.hazardCategory.split(',')
-            }
-            if(this.itemData.riskMeasure){
-                this.itemData.riskMeasure = this.itemData.riskMeasure.split(',')
-            }
-            if(this.itemData.safeSigns){
-                this.itemData.safeSigns = this.itemData.safeSigns.split(',')
-            }
-            if(this.itemData.outfire){
-                this.itemData.outfire = this.itemData.outfire.split(',')
-            }
-            this.subject = JSON.parse(decodeURIComponent(option.subject));
-        },
-        methods: {
-            async getSafetyWarning(){
-                const {data} = await getDicts('sys_safety_warning');
-                if(data.code == 200){
-                    this.safetyWarning = data.data;
-                }
-            },
-            async getHazardCategory(){
-                const {data} = await getDicts('sys_hazard_category');
-                if(data.code == 200){
-                    this.hazardCategory = data.data;
-                }
-            },
-            async getRiskMeasure(){
-                const {data} = await getDicts('sys_risk_measure');
-                if(data.code == 200){
-                    this.riskMeasure = data.data;
-                }
-            },
-            async getExtinguishingKeyPoints(){
-                const {data} = await getDicts('sys_extinguishing_key_points');
-                if(data.code == 200){
-                    this.extinguishingKeyPoints = data.data;
-                }
-            },
-        }
-    }
+	import {} from '@/api/basicsModules/index.js'
+	import { config } from '@/api/request/config.js'
+	export default {
+		name: "safetyCard",
+		props: {
+			subjectData: {},
+		},
+		data() {
+			return {
+				baseUrl:config.base_url,
+				newData:{
+					data1:'学院名称',
+					data2:'曹秀康',
+					data3:'155222663355',
+					data4:[{name:'曹秀康',phone:'155222663355'},{name:'曹秀康',phone:'155222663355'},],
+					data5:[
+						{	type:1,
+							name:'主要危险类别',
+							child:[{name:'火灾'},{name:'盗窃'},{name:'高温'},{name:'化学试剂使用不当引发的燃烧、爆炸等风险化学试剂使用不当引发的燃烧、爆炸等风险'},]
+						},
+						{	type:1,
+							name:'风险防控措施',
+							child:[{name:'配备灭火器、灭火毯'},{name:'安装监控、无人时关闭门窗'}]
+						},
+						{	type:1,
+							name:'灭火要点',
+							child:[{name:'干粉灭火'},{name:'灭火毯灭火'}]
+						},
+						{	type:2,
+							name:'安全警示标识',
+							child:[
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								{img: require('@/images/basicsModules/icon_yw_yc.png')},
+								]
+						},
+					],
+					qrCode:require('@/images/basicsModules/icon_yw_yc.png'),
+				}
+			}
+		},
+		created() {
+
+		},
+		mounted() {
+			this.$set(this, 'newData',this.subjectData);
+		},
+		methods: {
+			
+		},
+	}
 </script>
 
 <style lang="stylus" scoped>
-    #safetyCard{
-        height:100%;
-        overflow-y:scroll;
-        overflow-x hidden
-        .top-name-max-box{
-            background #fff
-            overflow hidden
-            .name-box{
-                margin:27rpx 20rpx 0;
-                display:flex;
-                view:nth-child(1){
-                    background:#f95f5f;
-                    color:#fff;
-                    border-radius:6rpx;
-                    font-size:20rpx;
-                    padding:0 10rpx;
-					height:42rpx;
-					line-height:42rpx;
-                }
-                view:nth-child(2){
-                    color:#333;
-                    margin-left:20rpx;
-                    font-size:28rpx;
-                    height:30rpx;
-					line-height:42rpx;
-                    font-weight:700;
-                }
-            }
-            .address-box{
-                margin:22rpx 20rpx;
-                font-size:26rpx;
-            }
-        }
-        .text-max-box{
-            margin-top:20rpx;
-            background #fff
-            padding:8rpx 20rpx;
-            .text-min-box{
-                display:flex;
-                view{
-                    line-height:66rpx;
-                    height:66rpx;
-                    font-size:28rpx;
-                }
-                view:nth-child(1){
-                    width:220rpx;
-                    color:#333;
-                }
-                view:nth-child(2){
-                    flex:1;
-                    color:#999;
-                    text-align:right;
-                }
-            }
-        }
-        .safety-max-box{
-            margin-top:20rpx;
-            background #fff
-            padding:8rpx 20rpx;
-            .max-for-box{
-                .title-box{
-                    line-height:76rpx;
-                    font-size:28rpx;
-                    color:#333;
-                }
-                .for-box{
-                    line-height:48rpx;
-                    font-size:26rpx;
-                    color:#999;
-                }
-            }
-        }
-        .img-bottom-box{
-            margin-top:20rpx;
-            background #fff
-            padding:8rpx 20rpx 20rpx;
-            .title-box{
-                line-height:76rpx;
-                font-size:28rpx;
-                color:#333;
-            }
-            .for-box{
-                line-height:48rpx;
-                font-size:26rpx;
-                color:#999;
-                .img-ojb{
-                    display inline-block
-                    width:86rpx;
-                    height:114rpx;
-                    margin-right:20rpx;
-                }
-                .code-img{
-                    width:200rpx;
-                    height:200rpx;
-                    margin:20rpx auto 40rpx;
-                }
-            }
-        }
-    }
-</style>
+	.safetyCard {
+		width: 750rpx;
+		.liability-unit{
+			width: 750rpx;
+			height: 100rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			font-size: 30rpx;
+			color: #222222;
+			line-height: 100rpx;
+			padding-left: 20rpx;
+			box-sizing: border-box;
+			background: #fff;
+		}
+		.small-title{
+			width: 750rpx;
+			height: 100rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			line-height: 100rpx;
+			padding-left: 20rpx;
+			box-sizing: border-box;
+		}
+		.sub-head{
+			width: 750rpx;
+			height: 100rpx;
+			background: #fff;
+			padding:0 20rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			border-bottom: 1rpx solid #E0E0E0;
+			>view:nth-of-type(1){
+				font-family: PingFang SC;
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #999999;
+				line-height: 30rpx;
+			}
+			>view:nth-of-type(2){
+				display: flex;
+				justify-content: flex-end;
+				align-items: center;
+				>img{
+					width: 34rpx;
+					height: 34rpx;
+					margin-right: 14rpx;
+				}
+				>view{
+					font-family: PingFang SC;
+					font-weight: 500;
+					font-size: 28rpx;
+					color: #0183FA;
+					line-height: 30rpx;
+				}
+			}
+		}
+		.sub-head:last-child{
+			border-bottom: none;
+		}
+		.classify{
+			.small-items{
+				padding-left: 20rpx;
+				box-sizing: border-box;
+				background: #fff;
+				display: flex;
+				justify-content: flex-start;
+				padding: 20rpx;
+				box-sizing: border-box;
+				>view:nth-of-type(1){
+					color: #999999;
+					margin-right: 12rpx;
+				}
+				>view:nth-of-type(2){
+					display: block;
+					font-family: PingFang SC;
+					font-weight: 500;
+					font-size: 28rpx;
+					line-height: 34rpx;
+					color: #999999;
+				}
+				
+			}
+			.logotype{
+				width: 750rpx;
+				height: 100rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				font-size: 32rpx;
+				color: #333333;
+				line-height: 100rpx;
+				padding-left: 20rpx;
+				box-sizing: border-box;
+				background: #0183FA;
+			}
+			.logotype-img{
+				padding: 26rpx 0 34rpx 0;
+				box-sizing: border-box;
+				background: #fff;
+				>img{
+					display: inline-block;
+					width: 86rpx;
+					height: 114rpx;
+					margin-left: 30rpx;
+					margin-bottom: 20rpx;
+				}
+			}
+		}
+		.code-img{
+			width: 178rpx;
+			height: 178rpx;
+			margin: 22rpx 0 50rpx 276rpx;
+		}
+	}
+</style>

+ 2 - 1
pages_safetyExamine/dangerManage/dangerList.vue

@@ -34,7 +34,8 @@
 						<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_c"  v-if="item.checkCategory==1">{{item.subRoom}}</view>
+					<view class="list_three_li_t_c"  v-if="item.checkCategory==2">{{item.subRoom}}-{{item.hazardName}}{{item.code}}</view>
 					<view class="list_three_li_t_c2" v-if="item.overdueStatus==1">已逾期</view>
 					<view class="list_three_li_t_r"></view>
 				</view>