heyang 1 рік тому
батько
коміт
841355f8da
100 змінених файлів з 16679 додано та 24 видалено
  1. 2350 0
      api/apiDemo/index.js
  2. 4 3
      api/request/config.js
  3. 90 0
      api/safetyExamine/index.js
  4. 83 10
      component/homeConfigurationSlot.vue
  5. BIN
      images/basicsModules/for_min_bg.png
  6. BIN
      images/basicsModules/icon_06.png
  7. BIN
      images/basicsModules/icon_07.png
  8. BIN
      images/basicsModules/icon_5.png
  9. BIN
      images/basicsModules/icon_6.png
  10. BIN
      images/basicsModules/icon_aqbj_sj.png
  11. BIN
      images/basicsModules/icon_aqjc_sm.png
  12. BIN
      images/basicsModules/icon_aqjc_ss.png
  13. BIN
      images/basicsModules/icon_bjzp_spbof.png
  14. BIN
      images/basicsModules/icon_hxpyj_sj.png
  15. BIN
      images/basicsModules/icon_hy_yc.png
  16. BIN
      images/basicsModules/icon_hy_zc.png
  17. BIN
      images/basicsModules/icon_mh.png
  18. BIN
      images/basicsModules/icon_sczl_sc.png
  19. BIN
      images/basicsModules/icon_sskz_azsh.png
  20. BIN
      images/basicsModules/icon_sskz_skfs.png
  21. BIN
      images/basicsModules/icon_sskz_xz.png
  22. BIN
      images/basicsModules/icon_sskz_zc.png
  23. BIN
      images/basicsModules/icon_ssp_closure.png
  24. BIN
      images/basicsModules/icon_sy_mhwc.png
  25. BIN
      images/basicsModules/icon_sy_wt.png
  26. BIN
      images/basicsModules/icon_wd_yc.png
  27. BIN
      images/basicsModules/icon_wd_zc.png
  28. BIN
      images/basicsModules/icon_wtzg_sj.png
  29. BIN
      images/basicsModules/icon_wtzg_xx.png
  30. BIN
      images/basicsModules/icon_yjxx_ytz.png
  31. BIN
      images/basicsModules/icon_yw_yc.png
  32. BIN
      images/basicsModules/icon_yw_zc.png
  33. BIN
      images/basicsModules/icon_yyt.png
  34. BIN
      images/evacuation3_2/icon_aqtd_m.png
  35. BIN
      images/evacuation3_2/icon_shang_hs.png
  36. BIN
      images/evacuation3_2/icon_sjt.png
  37. BIN
      images/evacuation3_2/icon_sysbjt_m.png
  38. BIN
      images/evacuation3_2/icon_xia_hs.png
  39. BIN
      images/evacuation3_2/icon_xjt.png
  40. BIN
      images/evacuation3_2/icon_yjtd.png
  41. BIN
      images/evacuation3_2/icon_you_hs.png
  42. BIN
      images/evacuation3_2/icon_yuo.png
  43. BIN
      images/evacuation3_2/icon_zou_hs.png
  44. BIN
      images/evacuation3_2/icon_zuo.png
  45. 333 0
      page_basics/accessQualification/accessQualification.vue
  46. 440 0
      page_basics/accessQualification/accessQualificationInfo.vue
  47. 152 0
      page_basics/accessQualification/approve.vue
  48. 175 0
      page_basics/component/compress.vue
  49. 690 0
      page_basics/earlyWarningManage/earlyWarningDetail.vue
  50. 268 0
      page_basics/earlyWarningManage/earlyWarningList.vue
  51. 607 0
      page_basics/earlyWarningManage/videoMonitoring.vue
  52. 334 0
      page_basics/photoInspection.vue
  53. 340 2
      pages.json
  54. 1 1
      pages/home/supplierWorkbench.vue
  55. 1 1
      pages/information/information.vue
  56. 3 3
      pages/information/informationInfo.vue
  57. 1 1
      pages/information/notPassInfo.vue
  58. 3 3
      pages/login/login.vue
  59. 2310 0
      pages_manage/emergencyEvacuationBig.vue
  60. 677 0
      pages_manage/emergencyEvacuationBigFullScreen.vue
  61. 268 0
      pages_manage/gasBottle/aptitudeAudit/aptitudeAudit.vue
  62. 474 0
      pages_manage/gasBottle/aptitudeAudit/aptitudeAuditCheck.vue
  63. 259 0
      pages_manage/gasBottle/aptitudeAudit/aptitudeAuditDetail.vue
  64. 200 0
      pages_manage/gasBottle/examination/examination.vue
  65. 743 0
      pages_manage/gasBottle/examination/examinationAdd.vue
  66. 286 0
      pages_manage/gasBottle/examination/examinationDetail.vue
  67. 407 0
      pages_manage/gasBottle/examination/examinationSelect.vue
  68. 528 0
      pages_manage/gasBottle/gasApply/awaitStorage.vue
  69. 203 0
      pages_manage/gasBottle/gasApply/gasApply.vue
  70. 469 0
      pages_manage/gasBottle/gasApply/gasApplyAdd.vue
  71. 311 0
      pages_manage/gasBottle/gasApply/gasApplyList.vue
  72. 256 0
      pages_manage/gasBottle/gasApply/gasApplyReject.vue
  73. 168 0
      pages_manage/gasBottle/gasList/gasList.vue
  74. 211 0
      pages_manage/gasBottle/gasList/gasListBinding.vue
  75. 351 0
      pages_manage/gasBottle/gasList/gasListDetail.vue
  76. 242 0
      pages_manage/gasBottle/gasList/gasUseDetail.vue
  77. 358 0
      pages_manage/gasBottle/gasManage/gasManage.vue
  78. BIN
      pages_manage/gasBottle/images/icon_qpgl_syl.png
  79. BIN
      pages_manage/gasBottle/images/icon_sqqp_sqys.png
  80. BIN
      pages_manage/gasBottle/images/icon_sqxq_jsyy.png
  81. BIN
      pages_manage/gasBottle/images/icon_sydj_sqyqzg.png
  82. BIN
      pages_manage/gasBottle/images/icon_sydj_yubz.png
  83. BIN
      pages_manage/gasBottle/images/icon_xgzl_shz.png
  84. BIN
      pages_manage/gasBottle/images/icon_yqsq_sys.png
  85. BIN
      pages_manage/gasBottle/images/icon_ysclgl_cl.png
  86. BIN
      pages_manage/gasBottle/images/icon_zgsh_sysmph.png
  87. BIN
      pages_manage/gasBottle/images/icon_zgsq_dhh.png
  88. BIN
      pages_manage/gasBottle/images/icon_zgsq_j.png
  89. BIN
      pages_manage/gasBottle/images/icon_zgsq_jian.png
  90. BIN
      pages_manage/gasBottle/images/icon_zgsq_sqr.png
  91. BIN
      pages_manage/gasBottle/images/img_sydj_sltp.png
  92. BIN
      pages_manage/gasBottle/images/img_ysrygl_zwsj.png
  93. 210 0
      pages_manage/gasBottle/leaveConfirm/amendAir.vue
  94. 356 0
      pages_manage/gasBottle/leaveConfirm/leaveConfirm.vue
  95. 201 0
      pages_manage/gasBottle/useGasApply/useGasApply.vue
  96. 612 0
      pages_manage/gasBottle/useGasApply/useGasApplyAdd.vue
  97. 290 0
      pages_manage/gasBottle/useGasApply/useGasApplyDetail.vue
  98. 171 0
      pages_manage/gasBottle/useRecord/useRecord.vue
  99. 243 0
      pages_manage/gasBottle/useRecord/useRecordDetail.vue
  100. 0 0
      pages_manage/gasBottle/useRegister/giveRegister.vue

Різницю між файлами не показано, бо вона завелика
+ 2350 - 0
api/apiDemo/index.js


+ 4 - 3
api/request/config.js

@@ -1,9 +1,10 @@
 const config = {
-	// base_url: 'http://192.168.1.9:8080',//柴
-	base_url: 'http://192.168.1.24: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',//小飞
-	// base_url: 'http://192.168.1.20:8080',//志伟
+	 base_url: 'http://192.168.1.20:8080',//志伟
     // base_url: 'http://192.168.1.8:8080',//高升
 	// base_url: 'http://192.168.1.29:8080',//何成
     // base_url: 'http://192.168.1.43:9800',//43服务器

+ 90 - 0
api/safetyExamine/index.js

@@ -0,0 +1,90 @@
+import { apiResquest } from '../request/request.js'
+import { apiResquestForm } from '../request/request.js'
+import { apiResquestJsonList } from '../request/request.js'
+import { apiResquestFormVideo } from '../request/request.js'
+import { apiResquestTimer } from '../request/request.js'
+
+
+//登录
+export const login = (data) => {
+	return apiResquest({
+		url: `/auth/appletLogin`,
+		method: 'POST',
+		data: { ...data }
+	})
+};
+
+//查询公共配置
+export const configInfo = (data) => {
+	return apiResquest({
+		url: `/auth/configInfo`,
+		method: 'GET',
+		data: data,
+	})
+};
+
+/*                分类获取公共配置
+* category        1.系统参数 2.公共配置
+* configType      1.基础配置 2.管控一体机 3.化学品终端 4.小程序配置 5.开发配置 6.首页配置
+*/
+export function getConfigByType(data) {
+	return apiResquest({
+		url: '/system/config/info/getConfigByType',
+		method: 'post',
+		data: {
+			...data
+		}
+	})
+}
+
+//查询人员身份标识
+export const getGentleIdentifier = (data) => {
+	return apiResquest({
+		url: `/security/checkSet/getGentle`,
+		method: 'GET',
+		data: data,
+	})
+};
+
+//查询小程序布局配置
+export const systemAppletLayoutSelect = (data) => {
+	return apiResquest({
+    url: '/system/applet/layout/select',
+		method: 'GET',
+		data: data,
+	})
+};
+//查询权限字段
+export const systemAppletRolePermission = (data) => {
+	return apiResquest({
+    url: '/system/applet/role/permission',
+		method: 'GET',
+		data: data,
+	})
+};
+
+
+
+
+
+/************************未调试************************/
+
+
+
+//获取离开检查配置
+export const outSubjectPhoto  = (id,data) => {
+    return apiResquestForm({
+        url: `/base/app/lab/api/outSubjectPhoto`,
+        method: 'GET',
+        data: data,
+    })
+};
+
+//分级管控未完成工作列表
+export const gradingControl  = (data) => {
+    return apiResquest({
+        url: `/base/app/lab/manage/havingList`,
+        method: 'POST',
+        data: {...data}
+    })
+};

+ 83 - 10
component/homeConfigurationSlot.vue

@@ -72,6 +72,7 @@
 		outSubjectPhoto,
 		gradingControl
 	} from '@/api/basicsModules/index.js'
+	import {} from '@/api/safetyExamine/index.js'
 	export default {
 		name: "homeConfigurationSlot",
 		props: {
@@ -101,11 +102,49 @@
 			},
 			//按钮点击事件
 			buttonClick(item) {
-				if (item.buttonType === 'page') {
-					uni.navigateTo({
-						url: item.routeUrl,
-					});
-				} else if (item.buttonType === 'button') {
+				if (item.buttonType === 'page') {//随手拍
+					if (item.route === 'snapshotManage') {//安全检查
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+					}
+					if (item.route === 'safetyExamine') {//安全检查
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+						//this.getGentleIdentifier(item.routeUrl)
+					}
+					if (item.route === 'leaveInspection') {//离开检查
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+						//this.outSubjectPhoto(item.routeUrl);
+					}
+					if (item.route === 'accessQualification') {//准入审核
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+						//this.outSubjectPhoto(item.routeUrl);
+					}
+					if (item.route === 'gasBottle') {//气瓶管理
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+					}
+					if (item.route === 'warningRecording') {//安全报警
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+					}
+					if (item.route === 'emergencyEvacuation') {//应急处置
+						uni.navigateTo({
+							url: item.routeUrl,
+						});
+					}
+					
+					
+					
+				}else if (item.buttonType === 'button') {
 					if (item.route === 'photoInspection') {
 						this.outSubjectPhoto();
 					}
@@ -118,8 +157,44 @@
 					});
 				}
 			},
+			//获取用户身份标识"adminGentle": false,   管理员身份 "rectifyGentle": false, 院级管理员collegeGentle   整改身份"applyGentle": false    检查者身份
+			async getGentleIdentifier(routeUrl){
+				let self = this;
+				const {data} = await getGentleIdentifier();
+				if(data.code==200){
+					let pageType = null
+				   // 如果是管理员 检查者和整改者
+				   let list=[];
+			  if(data.data.adminGentle || data.data.collegeGentle){//校级管理员
+				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})
+			  }
+			  if(!data.data.adminGentle && !data.data.applyGentle && !data.data.myApplyGentle  && !data.data.rectifyGentle && !data.data.collegeGentle){
+		
+			  }
+			  uni.setStorageSync('gentleIdentifier',list)
+			  uni.setStorageSync('gentleIdentifierData',data.data)
+			  if(list.length>0){
+				  uni.navigateTo({
+					url: routeUrl,
+				  });
+			  }else{
+				  uni.showToast({
+					title: '没有相关权限',
+					icon:"none",
+					mask:true,
+					duration: 2000
+				  });
+			  }
+			}
+			},
 			//获取拍照检查配置
-			async outSubjectPhoto() {
+			async outSubjectPhoto(routeUrl) {
 				const {
 					data
 				} = await outSubjectPhoto();
@@ -137,8 +212,7 @@
 							sourceRiskUrl: "",
 						};
 						uni.navigateTo({
-							url: '/pages_student/workbench/photoInspection?newData=' + encodeURIComponent(JSON
-								.stringify(obj)),
+							url: routeUrl+'?newData=' + encodeURIComponent(JSON.stringify(obj)),
 						});
 					} else if (data.data == false) {
 						//不需要检查
@@ -162,8 +236,7 @@
 							sourceRiskUrl: data.data.sourceRiskUrl,
 						};
 						uni.navigateTo({
-							url: '/pages_student/workbench/photoInspection?newData=' + encodeURIComponent(JSON
-								.stringify(obj)),
+							url: routeUrl+'?newData=' + encodeURIComponent(JSON.stringify(obj)),
 						});
 					}
 				}

BIN
images/basicsModules/for_min_bg.png


BIN
images/basicsModules/icon_06.png


BIN
images/basicsModules/icon_07.png


BIN
images/basicsModules/icon_5.png


BIN
images/basicsModules/icon_6.png


BIN
images/basicsModules/icon_aqbj_sj.png


BIN
images/basicsModules/icon_aqjc_sm.png


BIN
images/basicsModules/icon_aqjc_ss.png


BIN
images/basicsModules/icon_bjzp_spbof.png


BIN
images/basicsModules/icon_hxpyj_sj.png


BIN
images/basicsModules/icon_hy_yc.png


BIN
images/basicsModules/icon_hy_zc.png


BIN
images/basicsModules/icon_mh.png


BIN
images/basicsModules/icon_sczl_sc.png


BIN
images/basicsModules/icon_sskz_azsh.png


BIN
images/basicsModules/icon_sskz_skfs.png


BIN
images/basicsModules/icon_sskz_xz.png


BIN
images/basicsModules/icon_sskz_zc.png


BIN
images/basicsModules/icon_ssp_closure.png


BIN
images/basicsModules/icon_sy_mhwc.png


BIN
images/basicsModules/icon_sy_wt.png


BIN
images/basicsModules/icon_wd_yc.png


BIN
images/basicsModules/icon_wd_zc.png


BIN
images/basicsModules/icon_wtzg_sj.png


BIN
images/basicsModules/icon_wtzg_xx.png


BIN
images/basicsModules/icon_yjxx_ytz.png


BIN
images/basicsModules/icon_yw_yc.png


BIN
images/basicsModules/icon_yw_zc.png


BIN
images/basicsModules/icon_yyt.png


BIN
images/evacuation3_2/icon_aqtd_m.png


BIN
images/evacuation3_2/icon_shang_hs.png


BIN
images/evacuation3_2/icon_sjt.png


BIN
images/evacuation3_2/icon_sysbjt_m.png


BIN
images/evacuation3_2/icon_xia_hs.png


BIN
images/evacuation3_2/icon_xjt.png


BIN
images/evacuation3_2/icon_yjtd.png


BIN
images/evacuation3_2/icon_you_hs.png


BIN
images/evacuation3_2/icon_yuo.png


BIN
images/evacuation3_2/icon_zou_hs.png


BIN
images/evacuation3_2/icon_zuo.png


+ 333 - 0
page_basics/accessQualification/accessQualification.vue

@@ -0,0 +1,333 @@
+<!-- 准入资格证书 -->
+<template>
+    <view id="accessQualification">
+		<view class="top-picker-max-box">
+			<view class="top-picker-left-box">审核状态</view>
+			<picker class="top-picker-right-box" @change="buttonChange"
+			:range-key="'name'" :value="id" :range="buttonArray">
+				<view>{{buttonArray[buttonArrayIndex].name}}</view>
+			</picker>
+		</view>
+        <scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+			<view class="for-big-box" v-for="(item,index) in infoList" :key="index">
+			    <view class="for-time-p">{{item.creatTime}}</view>
+			    <img class="for-back-img" src="@/images/basicsModules/for_min_bg.png">
+			    <view class="for-list-box" @click="goPageInfo(minItem)"
+				v-for="(minItem,indexTwo) in item.applyList" :key="indexTwo">
+			        <view class="min-for-box-one">
+						<view :class="minItem.auditStatus==1?'titleType1':(minItem.auditStatus==0?'titleType2':(minItem.auditStatus==2?'titleType3':''))">{{minItem.auditStatus==1?'未通过':(minItem.auditStatus==0?'待审核':(minItem.auditStatus==2?'已通过':''))}}</view>
+						<view>{{minItem.subjectName}}</view>
+					</view>
+					<view class="min-for-box-two">
+						<view></view>
+						<view>申请人:{{minItem.userName}}</view>
+						<view>{{minItem.hi}}</view>
+					</view>
+			    </view>
+			</view>
+            <view class="get-null-box" v-if="getData.nullDataType">暂无更多数据</view>
+        </scroll-view>
+		<view class="tip">请联系管理员开通<text>白名单</text>来获取实验室准入资格</view>
+       <!-- <view class="bottom-button-box" @click="goSafeAccess">我的准入</view> -->
+    </view>
+</template>
+
+<script>
+    import { applyList } from '@/api/apiDemo/index.js'
+    export default {
+        data() {
+            return {
+				//选项
+				buttonArray:[
+					{name:"全部",id:""},
+					{name:"待审核",id:"0"},
+					{name:"已通过",id:"2"},
+					{name:"未通过",id:"1"},
+				],
+				buttonArrayIndex:0,
+				auditStatus:"",
+                //列表请求参数
+                getData:{
+                    page:1,
+                    pageSize:20,
+                    getType:true,
+                    nullDataType:true,
+                },
+                infoList:[],
+            }
+        },
+        onLoad() {
+
+        },
+        onShow(){
+            this.clearData();
+            this.getList();
+        },
+        methods: {
+			goSafeAccess(){
+				uni.navigateTo({
+					url: '/pages_student/workbench/safeAccess/safeAccess',
+				});
+			},
+            //清除
+            clearData(){
+                this.infoList = [];
+                this.getData.page = 1;
+                this.getData.getType = true;
+                this.getData.nullDataType = true;
+            },
+            //去详情页
+            goPageInfo(item){
+                // uni.navigateTo({
+                //     url:'/pages_manage/workbench/accessQualification/accessQualificationInfo?item='+encodeURIComponent(JSON.stringify(item))+'&type='+encodeURIComponent(JSON.stringify(this.tabIndex))
+                // })
+                uni.navigateTo({
+                    url:'/page_basics/accessQualification/accessQualificationInfo?item='+encodeURIComponent(JSON.stringify(item))
+                })
+            },
+            //滚动事件
+            scrollGet(){
+                if(this.getData.getType){
+                    this.getData.page += 1;
+                    this.getList();
+                }
+            },
+            //获取头部数量数据
+            async getTabData(){
+                console.log("123")
+                const {data} = await getApprovalCount()
+                if(data.code == 200){
+                    this.tabData = data.data;
+                }
+            },
+			//选择
+			buttonChange(e){
+				this.buttonArrayIndex = e.detail.value;
+                this.infoList = [];
+                this.getData.page = 1;
+                this.getData.getType = true;
+                this.getData.nullDataType = true;
+				this.$set(this,'auditStatus',this.buttonArray[this.buttonArrayIndex].id);
+				this.getList();
+			},
+            //获取列表数据
+            async getList(){
+                let self = this;
+                let obj = {
+                    pageNum:this.getData.page,
+                    pageSize:this.getData.pageSize,
+					auditStatus:this.auditStatus
+                }
+                const {data} = await applyList(obj)
+                if(data.code==200){
+                    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;
+                        }
+                    }
+                }
+
+            },
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #accessQualification{
+        height:100%;
+        display flex
+        flex-direction column
+		.top-picker-max-box{
+			height:100rpx;
+			display flex;
+			height:150rpx;
+			background #fff;
+			overflow hidden
+			margin-bottom:15rpx;
+			.top-picker-left-box{
+				margin-top:34rpx;
+				line-height:82rpx;
+				width:145rpx;
+				text-align center;
+			}
+			.top-picker-right-box{
+				margin-top:34rpx;
+				width:586rpx;
+				height:82rpx;
+				border:1rpx solid #A2A2A2;
+				line-height:82rpx;
+				border-radius:6rpx;
+				view{
+					padding:0 20rpx;
+					color:#999999;
+				}
+			}
+		}
+        .top-max-box{
+            height:100rpx;
+            display flex
+            background #fff
+            margin-bottom:20rpx;
+            .top-button-box{
+                width:200rpx;
+                padding-top:3rpx;
+                view:nth-child(1){
+                    font-size:30rpx;
+                    text-align center;
+                    color:#333;
+                    line-height:95rpx;
+                }
+                view:nth-child(2){
+                    width:100rpx;
+                    height:5rpx;
+                    margin:0 auto;
+                }
+                .colorA{
+                    color:#0183FA!important;
+                }
+                .backA{
+                    background:#0183FA;
+                }
+            }
+        }
+        .info-max-box{
+            flex:1;
+            overflow: scroll
+			.for-big-box:last-child{
+			    margin-bottom:180rpx;
+			}
+			.for-big-box{
+			    margin:0 20rpx 20rpx;
+			    overflow hidden
+				border-radius:20rpx;
+			    // border-bottom-left-radius :20rpx;
+			    // border-bottom-right-radius :20rpx;
+				background #fff;
+			    .for-time-p{
+			        background #fff
+			        line-height:57rpx;
+			        font-size:30rpx;
+			        padding:14rpx 22rpx 0;
+			        // border-top-left-radius:20rpx;
+			        // border-top-right-radius:20rpx;
+			    }
+			    .for-back-img{
+			        height:30rpx;
+			        width:710rpx;
+			    }
+				.for-list-box:nth-child(3){
+					border:none;
+				}
+			    .for-list-box{
+					border-top:1rpx solid #E0E0E0;
+					margin:0 24rpx;
+					padding:20rpx 0;
+					.min-for-box-one{
+						display:flex;
+						view{
+							height:36rpx;
+							line-height:36rpx;
+							margin:10rpx 0;
+						}
+						view:nth-child(1){
+							width:100rpx;
+							margin-right:20rpx;
+							line-height:36rpx;
+							text-align center;
+							font-size:20rpx;
+						}
+						view:nth-child(2){
+							flex:1;
+							font-size:28rpx;
+						}
+						.titleType1{
+							border-radius:6rpx;
+							color:#FF5555;
+							background rgba(255,85,85,0.2)
+						}
+						.titleType2{
+							border-radius:6rpx;
+							color:#F6A71D;
+							background rgba(246,167,29,0.2)
+						}
+						.titleType3{
+							border-radius:6rpx;
+							color:#30A23D;
+							background rgba(48,162,61,0.2)
+						}
+					}
+					.min-for-box-two{
+						display:flex;
+						view{
+							height:36rpx;
+							line-height:36rpx;
+							margin:10rpx 0;
+						}
+						view:nth-child(1){
+							width:100rpx;
+							margin-right:20rpx;
+							line-height:36rpx;
+							text-align center;
+							font-size:20rpx;
+						}
+						view:nth-child(2){
+							flex:1;
+							font-size:26rpx;
+						}
+						view:nth-child(3){
+							font-size:26rpx;
+						}
+					}
+			    }
+			}
+            .get-null-box{
+                height:100rpx;
+                line-height:100rpx;
+                color:#999;
+                text-align center
+            }
+        }
+        .bottom-button-box{
+			border-radius:20rpx;
+			margin:20rpx 50rpx;
+            width: 650rpx;
+            height: 100rpx;
+            line-height: 100rpx;
+            background: #0183FA;
+            font-size: 30rpx;
+            color: #FFFFFF;
+            text-align center;
+        }
+		.tip{
+			width: 750rpx;
+			height: 100rpx;
+			line-height :100rpx;
+			border-top: 1rpx solid #e0e0e0;
+			background: #fff;
+			font-size: 30rpx;
+			color: #333;
+			text-align center;
+			>text{
+				color:red;
+			}
+		}
+    }
+</style>

+ 440 - 0
page_basics/accessQualification/accessQualificationInfo.vue

@@ -0,0 +1,440 @@
+<!-- 准入资格申请详情 -->
+<template>
+    <view id="accessQualificationInfo" v-if="pageType">
+		<view class="user-info-box">
+			<view class="user-info-box-min">
+				<view>实验室:</view>
+				<view>{{subjectData.labSecurityApply.subjectName}}</view>
+			</view>
+			<view class="user-info-box-min">
+				<view>申请人:</view>
+				<view>{{subjectData.labSecurityApply.userName}}</view>
+			</view>
+			<view class="user-info-box-min">
+				<view>申请时限:</view>
+				<view>{{subjectData.labSecurityApply.validBeginTime}}至{{subjectData.labSecurityApply.validEndTime}}</view>
+			</view>
+			<view class="user-info-box-min">
+				<view>申请备注:</view>
+				<view>{{subjectData.labSecurityApply.applyCause==null?'':subjectData.labSecurityApply.applyCause}}</view>
+			</view>
+		</view>
+		<view class="user-info-box">
+			<view class="user-info-box_title"><view style="color: red;">*</view>身份信息:(关联学生信息材料)</view>
+			<view class="user-info-box-min">
+				<view>申请人:</view>
+				<view>{{subjectData.sysUser.nickName}}</view>
+			</view>
+			<view class="user-info-box-min">
+				<view>联系电话:</view>
+				<view>{{subjectData.sysUser.phonenumber}}</view>
+			</view>
+			<view class="user-info-box-min" >
+				<view>学号:</view>
+				<view>{{subjectData.sysUser.userName}}</view>
+			</view>
+			<view class="user-info-box-min">
+				<view>物理卡号:</view>
+				<view>{{subjectData.sysUser.cardNum}}</view>
+			</view>
+			<view class="user-info-box-min" >
+				<view>班级:</view>
+				<view>{{subjectData.sysUser.grade}}</view>
+			</view>
+			<view class="user-info-box-min" >
+				<view>导师:</view>
+				<view>{{subjectData.sysUser.tutorUserName}}</view>
+			</view>
+		</view>
+		<view v-for="(item,index) in subjectData.listTemp" :key="index" style="overflow: hidden;">
+			<view class="img-box" v-if="item.materialType==2&&item.relationType==2">
+				<view class="img-title">安全考试证书</view>
+				<img v-if="subjectData.listcert[0]" class="item-img-box" :src="subjectData.listcert[0].cert_url">
+				<view v-if="!subjectData.listcert[0]" style="margin-left:40px;color:#999;font-size:14px;">暂无证书</view>
+			</view>
+			<view class="word-box" v-if="item.materialType==1">
+				<view class="word-box-title">{{item.materialName}}</view>
+				<view class="word-box-min" v-for="(minItem,minIndex) in item.upList" :key="minIndex" @click="lookItem(minItem)">
+					<img src="@/pages_manage/images/Version2.3/icon_pdf.png" v-if="minItem.type == 'pdf'">
+					<img src="@/pages_manage/images/Version2.3/icon_word.png" v-if="minItem.type == 'doc' || minItem.type == 'docx'">
+					<img :src="baseUrl+minItem.url" v-if="minItem.type == 'png' || minItem.type == 'jpg' || minItem.type == 'jpeg' || minItem.type == 'gif'">
+					<view>{{minItem.name}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="bottom-button-box" v-if="subjectData.labSecurityApply.auditStatus == 0">
+			<view @click="goReviewFailed">审核未通过</view>
+			<view @click="accessButtonClick">审核通过</view>
+		</view>
+    </view>
+</template>
+
+<script>
+
+     import { config } from '@/api/request/config.js'
+    import { getDetails,laboratoryApply } from '@/api/apiDemo/index.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				pageType:false,
+				//获取数据
+				subjectData:{},
+				newData:{
+					text1:"甲烷监测实验室",
+					text2:"曹秀康",
+					text3:"学生",
+					text4:"2022-01-11  14:56",
+					text5:"曹秀康",
+					text6:"24141534553",
+					text7:"安全工程学院",
+					text8:"安全科学与工程专业",
+					textlist1:[
+						'https://img1.baidu.com/it/u=1349023829,1710986137&fm=253&fmt=auto&app=138&f=JPEG?w=786&h=500',
+						'https://img1.baidu.com/it/u=1349023829,1710986137&fm=253&fmt=auto&app=138&f=JPEG?w=786&h=500',
+						'https://img1.baidu.com/it/u=1349023829,1710986137&fm=253&fmt=auto&app=138&f=JPEG?w=786&h=500',
+					],
+					textlist2:[
+						{
+							type:1,
+							name:"信息照片副本.pdf",
+						},
+						{
+							type:2,
+							name:"信息照片副本.word",
+						},
+					],
+				},
+                itemData:{},
+                type:0,
+            }
+        },
+        onLoad(option) {
+            this.infoData = JSON.parse(decodeURIComponent(option.item));
+            //修改页面title
+            uni.setNavigationBarTitle({
+                title:this.infoData.auditStatus==0?'待审核':(this.infoData.auditStatus==1?'未通过':(this.infoData.auditStatus==2?'已通过':''))
+            });
+        },
+		onShow(){
+			this.getDetails()
+		},
+        methods: {
+			//审核按钮
+			accessButtonClick(){
+				let self = this;
+				uni.showModal({
+				    content: '确认审核吗?',
+				    cancelColor:"#999",
+				    confirmColor:"#0183FA",
+				    success: function (res) {
+				        if (res.confirm) {
+				            self.laboratoryApply();
+				        } else if (res.cancel) {
+				        }
+				    }
+				});
+			},
+			//审核接口
+			async laboratoryApply(){
+				let obj = {
+				  id:this.subjectData.labSecurityApply.id,
+				  auditStatus:2,
+				};
+				const {data} = await laboratoryApply(obj)
+				if(data.code == 200){
+					uni.showToast({
+						title: '审核成功',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					setTimeout(function(){
+						uni.navigateBack();
+					},2000);
+				}
+
+			},
+			lookItem(minItem){
+				let self = this;
+				if(minItem.type == 'png' || minItem.type == 'jpg' || minItem.type == 'jpeg' || minItem.type == 'gif'){
+					//查看图片
+					wx.previewImage({
+						urls: [self.baseUrl+minItem.url], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+						current: '', // 当前显示图片的http链接,默认是第一个
+						success: function(res) {},
+						fail: function(res) {},
+						complete: function(res) {},
+					})
+				}else if(minItem.type == 'pdf' || minItem.type == 'doc' || minItem.type == 'docx'){
+					uni.showLoading({
+					    title: '下载中'
+					});
+					//下载文档
+					wx.downloadFile({
+						url: minItem.url,
+						header: {
+							Authorization: uni.getStorageSync('token')
+						},
+						success: function (res) {
+							const fileManager = wx.getFileSystemManager()
+							const filePath = wx.env.USER_DATA_PATH + '/' + minItem.name + '.docx'
+							fileManager.saveFile({
+								tempFilePath: res.tempFilePath,
+								filePath,
+								success: () => {
+									uni.hideLoading();
+									wx.openDocument({
+									filePath: filePath,
+									showMenu: true,
+									fileType: minItem.type
+									})
+								},
+								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
+							});
+						}
+					})
+				}
+			},
+            //获取安全准入审批记录详细信息(用户端)
+            async getDetails() {
+                let self = this;
+                const {data} = await getDetails({id:this.infoData.id})
+                if(data.code==200){
+				  for(let i=0;i<data.data.listTemp.length;i++){
+					if(data.data.listTemp[i].materialType == 1){
+					  let maxList = [];
+					  for(let o=0;o<data.data.listTemp[i].listMr.length;o++){
+						let bigList = data.data.listTemp[i].listMr[o].dataUrl.split(',');
+						for(let x=0;x<bigList.length;x++){
+						  if(bigList[x]){
+							let minList = bigList[x].split(';');
+							let minListTwo = minList[0].split('.')
+							let obj = {
+							  name:minList[0],
+							  url:minList[1],
+							  type:minListTwo[1]
+							};
+							maxList.push(obj);
+						  }
+						}
+					  }
+					  data.data.listTemp[i].upList = maxList;
+					}
+				  }
+				  this.$set(this,"subjectData",data.data);
+				  this.pageType = true;
+                }
+            },
+			goReviewFailed(){
+				let obj = {
+				  id:this.subjectData.labSecurityApply.id,
+				  rejectCause:this.subjectData.listTemp,
+				}
+				uni.navigateTo({
+				    url:'/page_basics/accessQualification/approve?item='+encodeURIComponent(JSON.stringify(obj))
+				})
+			},
+			//查看图片
+			lockImg(list){
+				if(!list[0]){
+					return
+				}
+				wx.previewImage({
+					urls: list, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+            approveClick(){
+                let self = this;
+                uni.showModal({
+                    // title: '确认要退出吗?',
+                    content: '确认审核通过吗?',
+                    cancelColor:"#999",
+                    confirmColor:"#0183FA",
+                    success: function (res) {
+                        if (res.confirm) {
+                            self.appOperation();
+                        } else if (res.cancel) {
+                        }
+                    }
+                });
+            },
+            async appOperation(){
+                let self = this;
+                let obj = {
+                    id:this.itemData.id,
+                    recordContent:1,
+                };
+                const {data} = await appOperation(obj);
+                if(data.code == 200){
+                    uni.showToast({
+                        title: '提交成功',
+                        icon:"none",
+                        mask:true,
+                        duration: 2000
+                    });
+                    setTimeout(function(){
+                        uni.navigateBack();
+                    },2000);
+                }
+            },
+            async approvalDetailManage(){
+                let obj = {
+                    ids:this.itemData.id
+                }
+                const {data} = await approvalDetailManage(obj)
+                if(data.code == 200){
+                    this.newData = data.data;
+                }
+            },
+            //去不通过原因页面
+            goPageInfo(item){
+                uni.navigateTo({
+                    url:'/pages_manage/workbench/accessQualification/approve?item='+encodeURIComponent(JSON.stringify(this.itemData))
+                })
+            },
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #accessQualificationInfo{
+        height:100%;
+		overflow-y scroll;
+		.user-info-box{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			.user-info-box_title{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 30rpx;
+				margin-left: 24rpx
+				margin-bottom :10px;
+				>view{
+					display inline-block;
+				}
+			}
+			.user-info-box-min{
+				margin:0 26rpx;
+				display flex;
+				view{
+					line-height:66rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					width:140rpx;
+					color:#999;
+				}
+				view:nth-child(2){
+					flex:1;
+					text-align right;
+					color:#333;
+				}
+			}
+		}
+		.user-card-box{
+			background #fff;
+			border-radius:20rpx;
+			margin:0 20rpx 20rpx;
+			padding:20rpx 0;
+			.user-card-title{
+				padding-left:24rpx;
+				font-size:30rpx;
+				font-weight:700;
+				margin-bottom:20rpx;
+			}
+			.user-card-text{
+				line-height:66rpx;
+				font-size:28rpx;
+				color:#999;
+				padding:0 24rpx;
+			}
+		}
+		.img-box{
+			background #fff;
+			border-radius:20rpx;
+			margin:0 20rpx 20rpx;
+			padding:20rpx 0;
+			.img-title{
+				padding-left:24rpx;
+				font-size:30rpx;
+				font-weight:700;
+				margin-bottom:20rpx;
+			}
+			img{
+				display block;
+				width:640rpx;
+				margin:0 auto 10rpx;
+			}
+		}
+		.word-box{
+			background #fff;
+			border-radius:20rpx;
+			margin:0 20rpx 20rpx;
+			padding:20rpx 0;
+			.word-box-title{
+				padding-left:24rpx;
+				font-size:30rpx;
+				font-weight:700;
+				margin-bottom:20rpx;
+			}
+			.word-box-min{
+				display flex;
+				margin:0 20rpx 20rpx;
+				img{
+					height:60rpx;
+					width:60rpx;
+				}
+				view{
+					margin-left:20rpx;
+					line-height:60rpx;
+				}
+			}
+		}
+		.bottom-button-box{
+			display flex;
+			width:650rpx;
+			margin:40rpx auto;
+			view{
+				height:100rpx;
+				text-align center;
+				line-height:100rpx;
+				color:#fff;
+				width:325rpx;
+			}
+			view:nth-child(1){
+				background: linear-gradient(-45deg, #FA9901, #F28E26);
+				border-radius: 50rpx 0 0 50rpx;
+			}
+			view:nth-child(2){
+				background: linear-gradient(-35deg, #309CFF, #0183FA);
+				border-radius: 0 50rpx 50rpx 0;
+			}
+		}
+    }
+</style>

+ 152 - 0
page_basics/accessQualification/approve.vue

@@ -0,0 +1,152 @@
+<!-- 不通过原因 -->
+<template>
+    <view id="approve">
+		<view class="approve-title">驳回原因</view>
+        <textarea v-model="rejectCause" placeholder="请输入未通过原因" maxlength="50"></textarea>
+        <view class="button-view" @click="accessButtonClick">提交</view>
+    </view>
+</template>
+
+<script>
+    import { laboratoryApply } from '@/api/apiDemo/index.js'
+    export default {
+        data() {
+            return {
+                itemData:{},
+				rejectCause:"",
+				checkList:[],
+            }
+        },
+        onLoad(option) {
+			let self = this;
+            this.itemData = JSON.parse(decodeURIComponent(option.item));
+			for(let i=0;i<self.itemData.rejectCause.length;i++){
+				self.itemData.rejectCause[i].type = false
+			}
+            // this.itemData = JSON.parse(decodeURIComponent(option.item));
+        },
+        methods: {
+			accessButtonClick(){
+				let self = this;
+				let num = 0;
+				this.$set(this,'checkList',[])
+				for(let i=0;i<self.itemData.rejectCause.length;i++){
+					if(self.itemData.rejectCause[i].type){
+						num++
+						this.checkList.push(self.itemData.rejectCause[i].id);
+					}
+				}
+				/* if(num == 0){
+					uni.showToast({
+						title: '请勾选未通过材料',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				} */
+				if(!self.rejectCause){
+					uni.showToast({
+						title: '请输入驳回原因',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				uni.showModal({
+				    content: '确认拒绝通过吗?',
+				    cancelColor:"#999",
+				    confirmColor:"#0183FA",
+				    success: function (res) {
+				        if (res.confirm) {
+				            self.laboratoryApply();
+				            console.log('用户点击确定');
+				        } else if (res.cancel) {
+				            console.log('用户点击取消');
+				        }
+				    }
+				});
+			},
+			//审核接口
+			async laboratoryApply(){
+				let obj = {
+				  id:this.itemData.id,
+				  auditStatus:1,
+				  rejectCause:this.rejectCause,
+				  rejectMaterial:this.checkList + '',
+				};
+				const {data} = await laboratoryApply(obj)
+				if(data.code == 200){
+					uni.showToast({
+						title: '审核成功',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					setTimeout(function(){
+						uni.navigateBack({
+						    delta: 2
+						});
+					},2000);
+				}
+
+			},
+			checkItem(item){
+				item.type = !item.type;
+				this.$forceUpdate();
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #approve{
+        height:100%;
+        background #fff
+        overflow hidden
+        textarea{
+            width:670rpx;
+            height:200rpx;
+            margin:20rpx 30rpx 0;
+            font-size:28rpx;
+            border: 1rpx solid #E0E0E0;
+            border-radius:10rpx;
+            padding:20rpx;
+        }
+		.approve-title{
+			font-weight:700;
+			color:#333;
+			font-size:30rpx;
+			font-weight:700;
+			margin:20rpx 30rpx ;
+
+		}
+		.approve-for-box{
+			display flex;
+			height:60rpx;
+			padding-left:40rpx;
+			img{
+				width:30rpx;
+				height:30rpx;
+				margin:15rpx;
+			}
+			view{
+				font-size:28rpx;
+				height:60rpx;
+				line-height:60rpx;
+			}
+		}
+        .button-view{
+            width: 600rpx;
+            height: 80rpx;
+            background: #0183FA;
+            border-radius: 20rpx;
+            font-size:30rpx;
+            line-height:80rpx;
+            text-align center;
+            color: #fff;
+            margin:90rpx auto;
+        }
+    }
+</style>

+ 175 - 0
page_basics/component/compress.vue

@@ -0,0 +1,175 @@
+<template>
+	<view class="compress">
+		<canvas :style="{ width: canvasSize.width,height: canvasSize.height}" canvas-id="myCanvas"></canvas>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				pic:'',
+				canvasSize: {
+					width: 0,
+					height: 0
+				}
+			}
+		},
+		methods: {
+			// 压缩
+			compress(params) {
+				return new Promise(async (resolve, reject) => {
+					// 等待图片信息
+					let info = await this.getImageInfo(params.src).then(info=>info).catch(err=>err);
+					
+					if(!info){
+						reject('获取图片信息异常');
+						return;
+					}
+					
+					// 设置最大 & 最小 尺寸
+					const maxSize = params.maxSize || 1080;
+					const minSize = params.minSize || 640;
+					
+					// 当前图片尺寸
+					let {width,height} = info;
+					
+					// 非 H5 平台进行最小尺寸校验
+					// #ifndef H5
+					if(width <= minSize && height <= minSize){
+						resolve(params.src);
+						return;
+					}
+					// #endif
+					
+					// 最大尺寸计算
+					if (width > maxSize || height > maxSize) {
+						if (width > height) {
+							height = Math.floor(height / (width / maxSize));
+							width = maxSize;
+						} else {
+							width = Math.floor(width / (height / maxSize));
+							height = maxSize;
+						}
+					}
+
+					// 设置画布尺寸
+					this.$set(this,"canvasSize",{
+						width: `${width}rpx`,
+						height: `${height}rpx`
+					});
+					
+					// Vue.nextTick 回调在 App 有异常,则使用 setTimeout 等待DOM更新
+					setTimeout(() => {
+						const ctx = uni.createCanvasContext('myCanvas', this);
+						ctx.clearRect(0,0,width, height)
+						ctx.drawImage(info.path, 0, 0, uni.upx2px(width), uni.upx2px(height));
+						ctx.draw(false, () => {
+							uni.canvasToTempFilePath({
+								x: 0,
+								y: 0,
+								width: uni.upx2px(width),
+								height: uni.upx2px(height),
+								destWidth: width,
+								destHeight: height,
+								canvasId: 'myCanvas',
+								fileType: params.fileType || 'png',
+								quality: params.quality || 0.9,
+								success: (res) => {
+									// 在H5平台下,tempFilePath 为 base64
+									resolve(res.tempFilePath);
+								},
+								fail:(err)=>{
+									reject(null);
+								}
+							},this);
+						});
+					}, 300);
+				});
+			},
+			// 获取图片信息
+			getImageInfo(src){
+				return new Promise((resolve, reject)=>{
+					uni.getImageInfo({
+						src,
+						success: (info)=> {
+							resolve(info);
+						},
+						fail: () => {
+							reject(null);
+						}
+					});
+				});
+			},
+			// 批量压缩
+			batchCompress(params){
+				// index:进度,done:成功,fail:失败
+				let [index,done,fail] = [0,0,0];
+				// 压缩完成的路径集合
+				let paths = [];
+				// 批量压缩方法
+				let batch = ()=>{
+					return new Promise((resolve, reject)=>{
+						// 开始
+						let start = async ()=>{
+							params.progress && params.progress({
+								done,
+								fail,
+								count:params.batchSrc.length
+							});
+							// 等待图片压缩方法返回
+							let path = await next();
+							if(path){
+								done++;
+								paths.push(path);
+							}else{
+								fail++;
+							}
+							
+							index++;
+							// 压缩完成
+							if(index >= params.batchSrc.length){
+								resolve(true);
+							}else{
+								start();
+							}
+						}
+						start();
+					});
+				}
+				// 依次调用压缩方法
+				let next = ()=>{
+					return this.compress({
+						src:params.batchSrc[index],
+						maxSize:params.maxSize,
+						fileType:params.fileType,
+						quality:params.quality,
+						minSize:params.minSize
+					})
+				}
+				
+				// 全部压缩完成后调用
+				return new Promise(async (resolve, reject)=>{
+					// 批量压缩方法回调
+					let res = await batch();
+					if(res){
+						resolve(paths);
+					}else{
+						reject(null);
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.compress{
+		position: fixed;
+		width: 12px;
+		height: 12px;
+		overflow: hidden;
+		top: -99999px;
+		left: 0;
+	}
+</style>

+ 690 - 0
page_basics/earlyWarningManage/earlyWarningDetail.vue

@@ -0,0 +1,690 @@
+<!-- 预案报警信息 -->
+<template>
+  <view class="earlyWarning">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<!-- 预案报警 -->
+		<view class="header" v-if="form.warningType==4">{{form.warningContent}}</view>
+		<!-- 化学品 -->
+		<view class="header_tow" v-if="form.warningType==2">{{form.warningContent}}</view>
+		<!-- 气瓶 -->
+		<view class="header_three" v-if="form.warningType==3">{{form.warningContent}}</view>
+		<!-- 算法识别 -->
+		<view class="header_four" v-if="form.warningType==1">{{form.warningContent}}</view>
+		<!-- 预案报警 -->
+		<view class="site" v-if="form.warningType==4">
+			<img src="@/images/basicsModules/icon_wtzg_xx.png"/>
+			<view>{{form.subName}}</view>
+			<view></view>
+			<view>{{form.buildName}}{{form.floorName}}{{form.roomNum}}</view>
+		</view>
+		<!-- 化学品 -->
+		<view class="site_tow" v-if="form.warningType==2 || form.warningType==3 || form.warningType==1">
+			<view class="site_tow_t">
+				<img src="@/images/basicsModules/icon_hxpyj_sj.png"/>
+				<text>{{form.warningTime}}</text>
+			</view>
+			<view class="site_tow_b">
+				<img src="@/images/basicsModules/icon_wtzg_xx.png"/>
+				<text>{{form.subName}}</text>
+				<text></text>
+				<text>{{form.buildName}}{{form.floorName}}{{form.roomNum}}</text>
+			</view>
+		</view>
+		<!-- 预案报警 -->
+		<view class="basics" v-if="form.warningType==4">
+			<view class="small_title"><text></text><text>风险概况</text></view>
+			<view class="basics_li" style="margin-top:20rpx;">
+				<text>发生时间:</text>
+				<text v-if="form.everyDay" style="position: absolute;right: 10rpx;top:-33rpx;">+{{form.everyDayNum}}</text>
+				<text>{{form.startTime}}-{{form.endTime?form.endTime:'-'}}</text>
+			</view>
+			<view class="basics_li">
+				<text>持续时间:</text>
+				<text>{{form.riskDuration?form.riskDuration:'-'}}秒</text>
+			</view>
+			<view class="basics_li">
+				<text>风险响应人员:</text>
+				<text>{{form.responder?form.responder:'-'}}</text>
+			</view>
+			<view class="basics_li">
+				<text>实验室内人员:</text>
+				<text>{{form.indoorUser?form.indoorUser:'-'}}</text>
+			</view>
+		</view>
+		<!-- 化学品 -->
+		<view class="basics" v-if="form.warningType==2">
+			<view class="small_title"><text></text><text>化学品信息</text></view>
+			<view class="basics_li" style="margin-top:20rpx;">
+				<text>{{form.name}}</text>
+				<text></text>
+			</view>
+			<view class="basics_li">
+				<text>存放位置:</text>
+				<text>{{form.deposit}}</text>
+			</view>
+			<view class="basics_li">
+				<text>化学品余量:</text>
+				<text>{{form.margin}}</text>
+			</view>
+			<view class="basics_li" v-if="form.warningSubType==2">
+				<text>申领人:</text>
+				<text>{{form.applyUser}}</text>
+			</view>
+			<view class="basics_li" v-if="form.warningSubType==2">
+				<text>申领时间:</text>
+				<text>{{form.applyTime}}</text>
+			</view>
+			<view class="basics_li" v-if="form.warningSubType==3||form.warningSubType==4">
+				<text>过期时间:</text>
+				<text>{{form.expirationTime}}</text>
+			</view>
+		</view>
+		<!-- 气瓶 -->
+		<view class="basics" v-if="form.warningType==3">
+			<view class="small_title"><text></text><text>气瓶信息</text></view>
+			<view class="basics_li" style="margin-top:20rpx;">
+				<text>{{form.name}}</text>
+				<text></text>
+			</view>
+			<view class="basics_li">
+				<text>气体余量:</text>
+				<text>{{form.margin}}</text>
+			</view>
+			<view class="basics_li">
+				<text>气瓶规格:</text>
+				<text>{{form.specification}}</text>
+			</view>
+			<view class="basics_li">
+				<text>所有人:</text>
+				<text>{{form.holder}}</text>
+			</view>
+			<view class="basics_li">
+				<text>入库时间:</text>
+				<text>{{form.entryTime}}</text>
+			</view>
+			<view class="basics_li" v-if="form.warningSubType==2">
+				<text>申领人:</text>
+				<text>{{form.applyUser}}</text>
+			</view>
+			<view class="basics_li" v-if="form.warningSubType==2">
+				<text>申领时间:</text>
+				<text>{{form.applyTime}}</text>
+			</view>
+		</view>
+		<!-- 通知短信 -->
+		<view class="note" v-if="form.warningType==4 || form.warningType==1" >
+			<view class="small_title"><text></text><text>通知短信</text></view>
+			<view class="note_li" style="margin-top:20rpx;" v-for="(item,index) in form.messageVOList">
+				<text>{{item.name}}</text>
+				<view class="note_li_r" v-if="item.isSuccess==1"><img  src="@/images/basicsModules/icon_yjxx_ytz.png"/><text>已通知</text></view>
+			</view>
+		</view>
+		<!-- 预警通知 -->
+		<view class="note" v-if="(form.warningType==4 || form.warningType==1) && form.warningSubType!=2 && form.warningSubType!=3 && form.warningSubType!=4 && form.voiceBroadcast==1">
+			<view class="small_title"><text></text><text>预警通知</text></view>
+			<view class="note_li" style="margin-top:20rpx;" >
+				<text>语音播报</text>
+				<view class="note_li_r"><img  src="@/images/basicsModules/icon_yjxx_ytz.png"/><text>已通知</text></view>
+			</view>
+		</view>
+		<view class="note" v-if="(form.warningType==2 || form.warningType==3) && form.warningSubType!=2 && form.warningSubType!=3 && form.warningSubType!=4 && form.voiceBroadcast==1">
+			<view class="small_title"><text></text><text>预警通知</text></view>
+			<view class="note_li" style="margin-top:20rpx;" >
+				<text>声光报警通知</text>
+				<view class="note_li_r" ><img  src="@/images/basicsModules/icon_yjxx_ytz.png"/><text>已通知</text></view>
+			</view>
+		</view>
+		<view v-if="form.warningSubType!=2 && form.warningSubType!=3 && form.warningSubType!=4" class="picture">
+			<view class="small_title"><text></text><text>报警抓拍</text></view>
+			<view class="picture_b" >
+				<view class="video" v-if="form.warningType!=1">
+					<video id="myvideo" class="video_t" :bindloadedmetada="onLoadedMetadata" :src="configUrl+form.recordVideo"></video>
+					<img  class="video_b" @click="lockVideo()" src="@/images/basicsModules/icon_bjzp_spbof.png"/>
+					<canvas id="myCanvas" canvas-id="myCanvas"></canvas>
+				</view>
+				<view v-if="form.warningType==1" class="img" @click="lockImg(form.warningDetailList)">
+					<img v-for="item in form.warningDetailList"  :src="configUrl+item.photoUrl"/>
+				</view>
+			</view>
+		</view>
+		<view  class="bottom_btn" v-if="timeStatus && (form.warningSubType!=2 && form.warningSubType!=3 && form.warningSubType!=4)" @click="handleClick('','monitor')">查看监控</view>
+
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {warningNoticeLogDetail} from '@/api/apiDemo/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+		configUrl:config.base_url,
+		//列表请求参数
+		getData:{
+			pageNum:1,
+			pageSize:20,
+		},
+		total:0,
+		warningId:'',
+		form:{},
+		currentTime:'',
+		timeStatus:false,
+		videoType:false,
+
+	}
+  },
+  onLoad(option) {
+	  let self = this;
+
+	  //先判断是否是通过点击列表进入
+	  if(option.warningId){
+		  this.warningId=option.warningId;
+	  }else{
+		//通过短信外链跳转进来
+		if(option.id){
+			console.log(11)
+			if(!uni.getStorageSync('token')){
+				console.log(22)
+			    uni.setStorageSync('warningId',option.id);
+				console.log(uni.getStorageSync('warningId'))
+			    uni.redirectTo({
+			        url: '/pages/login',
+			    });
+			}else{
+				this.warningId = option.id;
+				uni.removeStorageSync('warningId');
+		    }
+		}
+	  }
+
+  },
+  onShow() {
+	this.$set(this,'videoType',false);
+  },
+  mounted(){
+	this.getInfo();
+
+  },
+  methods: {
+		//截取封面
+		videoCover(){
+		  let video = document.getElementById('#myvideo');
+		  let canvas = document.createElement("canvas");
+		  let width = video.width; //canvas的尺寸和图片一样
+		  let height = video.height;
+		  canvas.width = width;
+		  canvas.height = height;
+		  canvas.getContext("2d").drawImage(video, 0, 0, width, height); //绘制canvas
+		  let videoImg = canvas.toDataURL('image/jpeg'); //转换为base64
+		},
+		onLoadedMetadata(e){
+			console.log(1111)
+			const duration=e.duration;
+			const width=e.videoWidth;
+			const heigth=e.videoHeight;
+
+			const canvas=uni.createCanvasContext('myCanvas')
+			canvas.canvas.width=width;
+			canvas.canvas.height=heigth;
+
+			canvas.drawImage('myVideo',0,0,width,heigth)
+			canvas.draw();
+
+			const that=this;
+
+			setTimeout(function(){
+				uni.canvasToTempFilePath({
+					canvasId:'myCanvas',
+					success:function(res) {
+						const imagePath=res.tempFilePath;
+						console.log(imagePath)
+					}
+				})
+			},1000)
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+
+		},
+		//判断预警时间是否超过30分钟
+		compareTime (gettime){
+			let timeOut = 30 * 60 * 1000;
+			let currentTime = new Date().getTime()  //获取当前时间
+			let endTime = new Date(gettime).getTime() //预警时间
+			if(currentTime-endTime>timeOut){
+				console.log('预警时间超过30分钟')
+				this.timeStatus=false;
+			}else{
+				console.log('预警没超过30分钟')
+				this.timeStatus=true;
+			}
+
+		},
+		//查看图片
+		lockImg(list){
+			if(!list[0]){
+				return
+			}
+			let urlList=[];
+			for(let i=0;i<list.length;i++){
+				urlList.push(this.configUrl+list[i].photoUrl)
+			}
+			wx.previewImage({
+				urls: urlList, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+				current: '', // 当前显示图片的http链接,默认是第一个
+				success: function(res) {},
+				fail: function(res) {},
+				complete: function(res) {},
+			})
+		},
+		//视频全屏播放
+		lockVideo(){
+			let videoContext = uni.createVideoContext("myvideo", this);
+			videoContext.requestFullScreen({ direction: 90 });
+			// this.videoContext.play();
+		},
+		//计算两个日期差值(天)
+		datedifference(sDate1, sDate2) {    //sDate1和sDate2是2006-12-18格式
+			let dateSpan,tempDate,iDays
+			sDate1 = Date.parse(sDate1)
+			sDate2 = Date.parse(sDate2)
+			dateSpan = sDate2 - sDate1
+			dateSpan = Math.abs(dateSpan)
+			iDays = Math.floor(dateSpan / (24 * 3600 * 1000))
+			return iDays
+		 },
+		//获取详情
+		async getInfo(){
+		    let _this = this;
+			const {data} = await warningNoticeLogDetail({id:this.warningId})
+			if(data.code==200){
+				let res=data.data
+				this.form=res;
+				if(this.form.startTime!='' && this.form.startTime!=null && this.form.endTime !=''&& this.form.endTime !=null){
+
+					if(this.form.startTime.split(' ')[0] != this.form.endTime.split(' ')[0]){
+						this.form.everyDay=true;
+						this.form.everyDayNum=this.datedifference(this.form.endTime.split(' ')[0],this.form.startTime.split(' ')[0])
+					}
+				}
+				if(this.form.endTime !=''&& this.form.endTime !=null){
+					this.form.endTime =this.form.endTime.split(' ')[1]
+				}
+				if(res.warningType==1){
+					uni.setNavigationBarTitle({
+						title:'算法识别预警信息'
+					})
+				}else if(res.warningType==2){
+					uni.setNavigationBarTitle({
+						title:'化学品预警信息'
+					})
+				}else if(res.warningType==3){
+					uni.setNavigationBarTitle({
+						title:'气瓶预警信息'
+					})
+				}else if(res.warningType==4){
+					uni.setNavigationBarTitle({
+						title:'预案报警信息'
+					})
+				}
+				setTimeout(function(){
+					let videoplay = wx.createVideoContext('myvideo')
+					videoplay.play()
+					setTimeout(function(){
+						videoplay.pause()
+						_this.$set(_this,'videoType',true);
+					},200)
+				},1000)
+				this.compareTime(res.warningTime);
+			}
+		},
+		handleClick(row,doType){
+		  let self=this;
+		  if( doType=='monitor'){//监控
+			  uni.navigateTo({
+			    url: '/page_basics/earlyWarningManage/videoMonitoring?subId='+this.form.subId+'&floorId='+this.form.floorId//我的实验室
+			  });
+		  }
+
+		},
+
+
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.earlyWarning{
+	height:100%;
+	display flex;
+	padding-bottom: 30rpx;
+	box-sizing: border-box;
+	.red_color{
+		color: #D40000;
+		border: 1rpx solid #D40000;
+	}
+	.orange_color{
+		color: #FF4800;
+		border: 1rpx solid #FF4800;
+	}
+	.yellow_color{
+		color: #FFA34E;
+		border: 1rpx solid #FFA34E;
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+	}
+	.header{
+		width: 750rpx;
+		height: 80rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #D40000;
+		line-height: 80rpx;
+		text-align: center;
+		background: rgba(212,0,0,0.2);
+	}
+	.header_tow{
+		width: 750rpx;
+		height: 80rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FF4800;
+		line-height: 80rpx;
+		text-align: center;
+		background: rgba(255,72,0,0.2);
+	}
+	.header_three{
+		width: 750rpx;
+		height: 80rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FF4800;
+		line-height: 80rpx;
+		text-align: center;
+		background: rgba(255,72,0,0.2);
+	}
+	.header_four{
+		width: 750rpx;
+		height: 80rpx;
+		font-size: 28rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #FFA34E;
+		line-height: 80rpx;
+		text-align: center;
+		background: rgba(255,163,78,0.2);
+	}
+	.site{
+		padding:26rpx;
+		background: #FFFFFF;
+		display: flex;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		margin:20rpx 30rpx;
+		>img{
+			width: 30rpx;
+			height: 30rpx;
+			margin:auto 22rpx auto 30rpx;
+		}
+		>view:nth-of-type(1){
+			font-size: 28rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			flex:1;
+			color: #333333;
+			line-height: 32rpx;
+		}
+		>view:nth-of-type(2){
+			display: inline-block;
+			width: 2rpx;
+			background: #E0E0E0;
+			margin: 0 24rpx;
+		}
+		>view:nth-of-type(3){
+			font-size: 28rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			flex:1;
+			color: #333333;
+			line-height: 32rpx;
+		}
+	}
+	.site_tow{
+		width: 690rpx;
+		height: 170rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		margin:20rpx 30rpx;
+		overflow: hidden;
+		.site_tow_t{
+			height: 40rpx;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 32rpx;
+			>img{
+				width: 30rpx;
+				height: 30rpx;
+				margin-right: 22rpx;
+				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;
+			}
+		}
+		.site_tow_b{
+			height: 40rpx;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			margin-top: 20rpx;
+			>img{
+				width: 30rpx;
+				height: 30rpx;
+				margin-right: 22rpx;
+				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){
+				display: inline-block;
+				width: 2rpx;
+				height: 20rpx;
+				background: #E0E0E0;
+				margin: 0 24rpx 0 28rpx;
+			}
+			>text:nth-of-type(3){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 28rpx;
+			}
+		}
+
+	}
+	.small_title{
+		height: 90rpx;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		border-bottom: 1rpx solid #E0E0E0;
+		>text:nth-of-type(1){
+			display: inline-block;
+			width: 4rpx;
+			height: 30rpx;
+			background: #0183FA;
+			margin: 0 22rpx 0 28rpx;
+		}
+		>text:nth-of-type(1){
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #333333;
+			line-height: 30rpx;
+		}
+	}
+	.basics{
+		margin-left: 30rpx;
+		width: 690rpx;
+		height: auto;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		padding-bottom: 16rpx;
+		box-sizing: border-box;
+		.basics_li{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin: 0 30rpx;
+			position: relative;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 60rpx;
+			}
+			>text:nth-of-type(2){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 60rpx;
+				flex: 1;
+				text-align: right;
+			}
+		}
+	}
+	.note{
+		margin-left: 30rpx;
+		margin-top: 20rpx;
+		width: 690rpx;
+		height: auto;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		padding-bottom: 16rpx;
+		box-sizing: border-box;
+		.note_li{
+			display: flex;
+			justify-content: space-between;
+			margin: 0 30rpx;
+			>text:nth-of-type(1){
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 60rpx;
+			}
+			.note_li_r{
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>img{
+					width: 28rpx;
+					height: 28rpx;
+					margin-right: 10rpx;
+				}
+				font-size: 28rpx;
+				font-family: PingFang SC-Medium, PingFang SC;
+				font-weight: 400;
+				color: #0183FA;
+				line-height: 60rpx;
+
+			}
+		}
+	}
+	.picture{
+		margin-left: 30rpx;
+		width: 690rpx;
+		height: auto;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 20rpx 20rpx;
+		margin-top: 20rpx;
+		.picture_b{
+			display: flex;
+			justify-content: flex-start;
+			flex-wrap: wrap;
+			padding: 40rpx 30rpx 10rpx;
+			box-sizing: border-box;
+			.videoOpacity1{
+				opacity:1;
+			}
+			.videoOpacity0{
+				opacity:0;
+			}
+			.video{
+				position: relative;
+				width: 150rpx;
+				height: 150rpx;
+				border-radius: 10rpx 10rpx 10rpx 10rpx;
+				margin-right: 38rpx;
+				margin-bottom: 10rpx;
+				.video_t{
+					width: 150rpx;
+					height: 150rpx;
+					border-radius: 10rpx 10rpx 10rpx 10rpx;
+					position: absolute;
+				}
+				.video_b{
+					width: 40rpx;
+					height: 40rpx;
+					position: absolute;
+					left: 55rpx;
+					top: 55rpx;
+				}
+			}
+			.img{
+				display: flex;
+				justify-content:flex-start;
+				flex-wrap: wrap;
+				>img{
+					width: 180rpx;
+					height: 180rpx;
+					border-radius: 10rpx 10rpx 10rpx 10rpx;
+					margin-right: 38rpx;
+					margin-bottom: 20rpx;
+				}
+				>img:nth-child(3n+3){
+					margin-right: 0;
+				}
+			}
+
+		}
+	}
+	.bottom_btn{
+		width: 690rpx;
+		height: 90rpx;
+		border-radius: 10rpx 10rpx 10rpx 10rpx;
+		opacity: 1;
+		border: 1rpx solid #0183FA;
+		font-size: 30rpx;
+		font-family: PingFang SC-Medium, PingFang SC;
+		font-weight: 400;
+		color: #0183FA;
+		line-height: 90rpx;
+		text-align: center;
+		background: #F5F5F5;
+		margin: 90rpx 30rpx 30rpx;
+
+	}
+}
+</style>

+ 268 - 0
page_basics/earlyWarningManage/earlyWarningList.vue

@@ -0,0 +1,268 @@
+<!-- 安全检查-校院巡查管理 -->
+<template>
+  <view class="earlyWarning">
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<viw class="list" v-for="(item,index) in dataList" :key="index">
+			<view class="list_t">{{item[0].createDate}}</view>
+			<view class="list_li" v-for="(item2,index2) in item" :key="index2" @click="handleClick(item2,'detail')">
+				<view class="list_li_t">
+					<view class="list_li_t_l"></view>
+					<view class="list_li_t_c orange_color" v-if="item2.warningType==1">算法识别</view>
+					<view class="list_li_t_c yellow_color" v-if="item2.warningType==2">化学品</view>
+					<view class="list_li_t_c yellow_color" v-if="item2.warningType==3">气瓶</view>
+					<view class="list_li_t_c red_color" v-if="item2.warningType==4">预案</view>
+					<view class="list_li_t_c2">{{item2.warningContent}}</view>
+					<view class="list_li_t_r"></view>
+				</view>
+				<view class="list_li_b">
+					<view class="list_li_b_t">
+						<text>{{item2.subName}}</text>
+						<text>{{item2.warningTime.split(' ')[1]}}</text>
+					</view>
+					<view class="list_li_b_b">
+						<img src="@/images/basicsModules/icon_wtzg_xx.png"/>
+						<text>{{item2.buildName}}-{{item2.floorName}}{{item2.roomNum}}</text>
+					</view>
+				</view>
+			</view>
+		</viw>
+		<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 {warningNoticeLogList} from '@/api/apiDemo/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+		//列表请求参数
+		getData:{
+			pageNum:1,
+			pageSize:10,
+		},
+		dataList:[],
+		dataArr:[],//临时存储
+		total:0,
+		timeStatus:false,//判断是否超过当前时间30分钟
+
+	}
+  },
+  onLoad(option) {
+
+  },
+  onShow() {
+
+  },
+  mounted(){
+	 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)
+
+			}
+
+		},
+
+		handleClick(row,doType){
+		  let self=this;
+		  if( doType=='detail'){//详情
+			  uni.navigateTo({
+			    url: '/page_basics/earlyWarningManage/earlyWarningDetail?warningId='+row.id,//安全警报
+			  });
+		  }
+
+		},
+		//排序
+		sortClass(sortData){
+		  const groupBy = (array, f) => {
+		    let groups = {};
+		    array.forEach((o) => {
+		      let group = JSON.stringify(f(o));
+
+		      groups[group] = groups[group] || [];
+		      groups[group].push(o);
+		    });
+		    return Object.keys(groups).map((group) => {
+		      return groups[group];
+		    });
+		  };
+		  const sorted = groupBy(sortData, (item) => {
+		    return item.createDate; // 返回需要分组的对象
+		  });
+		  return sorted;
+		},
+		async getList(){
+			let self = this;
+			const {data} = await warningNoticeLogList(this.getData);
+			if(data.code==200){
+				this.dataArr=[...this.dataArr,...data.data.records]
+				this.dataList=this.sortClass(this.dataArr)
+				console.log(this.dataList)
+				this.total=data.data.total;
+			}
+		},
+
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.earlyWarning{
+	height:100%;
+	display flex;
+	padding: 0 30rpx;
+	box-sizing: border-box;
+	.red_color{
+		color: #D40000;
+		border: 1rpx solid #D40000;
+	}
+	.orange_color{
+		color: #FF4800;
+		border: 1rpx solid #FF4800;
+	}
+	.yellow_color{
+		color: #FFA34E;
+		border: 1rpx solid #FFA34E;
+	}
+	.null-img{
+		display block
+		width:276rpx;
+		height:321rpx;
+		margin:100rpx 0 0 274rpx;
+	}
+	.list{
+		.list_t{
+			height: 80rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC-Medium, PingFang SC;
+			font-weight: 400;
+			color: #666666;
+			line-height: 80rpx;
+		}
+		.list_li{
+			width: 690rpx;
+			height:auto;
+			background: #FFFFFF;
+			border-radius: 10rpx;
+			padding-bottom: 52rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			.list_li_t{
+				position: relative;
+				height: 110rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.list_li_t_l{
+					position: absolute;
+					left:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+				.list_li_t_c{
+					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: 0 20rpx;
+					box-sizing: border-box;
+
+				}
+				.list_li_t_c2{
+					font-size: 30rpx;
+					font-family: PingFang SC-Medium, PingFang SC;
+					font-weight: 400;
+					color: #333333;
+					line-height: 30rpx;
+					white-space: nowrap;
+					overflow: hidden;
+				    text-overflow: ellipsis;
+					flex: 1;
+				}
+				.list_li_t_r{
+					position: absolute;
+					right:-15rpx;
+					top: 76rpx;
+					width: 30rpx;
+					height: 30rpx;
+					background:#F5F5F5;
+					border-radius: 15rpx;
+				}
+			}
+			.list_li_b{
+				margin: 0 30rpx;
+				border-top: 1rpx dotted #D8D8D8;
+
+				.list_li_b_t{
+					display: flex;
+					justify-content: space-between;
+					margin-top:28rpx;
+					>text:nth-of-type(1){
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #333333;
+						line-height: 30rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 30rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						line-height: 30rpx;
+					}
+				}
+				.list_li_b_b{
+					display: flex;
+					justify-content: flex-start;
+					margin-top:30rpx;
+					>img{
+						width: 30rpx;
+						height: 30rpx;
+						margin-right: 22rpx;
+					}
+					>text{
+						font-size: 28rpx;
+						font-family: PingFang SC-Medium, PingFang SC;
+						font-weight: 400;
+						color: #666666;
+						line-height: 28rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						flex: 1;
+					}
+				}
+			}
+		}
+	}
+	.info-max-box{
+		flex: 1;
+		overflow: scroll;
+	}
+}
+</style>

+ 607 - 0
page_basics/earlyWarningManage/videoMonitoring.vue

@@ -0,0 +1,607 @@
+<!-- 视频监控-->
+<template>
+  <view class="earlyWarning">
+	<scroll-view scroll-x @scrolltolower="scrollGet"  class="header">
+		<view class="tabTitle_tow">
+			<view class="tabTitle_tow_li" @tap="tabClickTow(item,index)"  :key="index" v-for="(item,index) in videoHardwareList">
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_text">{{item.name}}</view>
+				<view :class="{on:curTabTow==index}" class="tabTitle_tow_across"></view>
+			</view>
+		</view>
+	</scroll-view>
+	<scroll-view scroll-y @scrolltolower="scrollGet" class="info-max-box">
+		<!-- 视频部分 -->
+		<view class="video-max-box">
+		  <video v-for="(item,index) in urlList" :key="index" ref="videoRef" :src="item.url"
+		         :poster="videoCover" :custom-cache='false' :autoplay="true" :controls="true"
+		         :enable-danmu="false" :muted="true" :show-fullscreen-btn="true" :show-center-play-btn="false"
+		         :show-play-btn="false" @error="videoErrorCallback">
+		  </video>
+		</view>
+
+		<view class="broadcast">
+		  <view class="broadcast_t">语音广播<label>选择喇叭位置</label></view>
+		  <!-- 按钮部分 -->
+		  <view class="trumpet-max-box">
+		    <view @click="trumpetClick(index)" class="trumpet-for-box"
+		          :class="item.type?'trumpet-color-a':'trumpet-color-b'" v-for="(item,index) in trumpetList"
+		          :key="index">
+		      <img src="@/images/basicsModules/icon_sskz_zc.png" v-if="!item.type">
+		      <img src="@/images/basicsModules/icon_sskz_xz.png" v-if="item.type">
+		      {{item.name}}
+		    </view>
+		  </view>
+		  <view class="broadcast_m">
+		    <view class="broadcast_m_t" :class="liveType?'broadcast_m_t_back_a':'broadcast_m_t_back_b'"
+		          @longpress.stop="recordButton" @touchmove.stop="cancelButton" @touchend.stop="sendButton">
+
+		      {{liveType?'松开发送':'按住说话'}}
+		    </view>
+		    <view class="broadcast_m_b" v-if="!liveType">按住说话,录入广播内容</view>
+		    <view class="broadcast_m_b" v-if="liveType">松开发送,向上滑动取消发送</view>
+		  </view>
+		</view>
+	</scroll-view>
+  </view>
+
+</template>
+
+<script>
+import { config } from '@/api/request/config.js'
+import {laboratoryInfo,getCameraByFloor,GetStartList,getDeviceListBySub,sparseHardwareList,textParseUrlIps} from '@/api/apiDemo/index.js'
+export default {
+  name: "rectifyList",
+  components: {
+
+  },
+  data() {
+    return {
+		videoCover: uni.getStorageSync('videoCover'),
+		tabTextTow:[{name:'RFID摄像头'},{name:'房间内监控1'},{name:'房间内监控2'},{name:'房间内监控3'},{name:'房间内监控3'},{name:'房间内监控3'},],
+		curTabTow:0,
+		//视频数据
+		urlList: [{}],
+		videoHardwareNUM:[], //实验室和楼道摄像头编码
+		trumpetList:[],
+		//广播相关
+		liveType: false,
+		sendLock: true, //发送锁,当为true时上锁,false时解锁发送
+		recorderManager: wx.getRecorderManager(),
+		videoHardwareList:[],//获取所有摄像头编码
+		hardwareList:[],//硬件列表
+		subId:'',
+		floorId:'',
+
+	}
+  },
+  onLoad(option) {
+	  if(option.subId || option.floorId){
+		this.subId=option.subId
+		this.floorId=option.floorId
+	  }
+  },
+  onShow() {
+
+  },
+  mounted(){
+	  this.getDeviceList()//喇叭接口
+	  this.sparseHardwareList()//摄像头接口
+  },
+  methods: {
+		//顶部tab点击
+		tabClickTow(item,index) {
+			this.curTabTow = index;
+			console.log(item)
+			this.GetStartList(item)
+
+		},
+		//滚动事件
+		scrollGet(){
+			let self=this;
+
+		},
+		videoErrorCallback(e){
+		  console.log("播放失败",e);
+		},
+		//获取实验室摄像头
+		async laboratoryInfo() {
+
+		  let _this = this;
+		  const {
+		    data
+		  } = await laboratoryInfo(_this.subId);
+		  if (data.code == 200) {
+		    let list = data.data[0];
+		    list.labHardwareVOList.forEach(function(item) {
+		      if (item.hardwareTypeEnum.enumName == 'VIDEO_MONITOR') {
+				_this.videoHardwareList.push({name:item.hardwareName,num:item.hardwareNUM})
+		      }
+		    })
+		    _this.GetStartList(_this.videoHardwareList[0])
+			console.log(_this.videoHardwareList)
+		  }
+		},
+
+		//获取疏散硬件列表
+		async sparseHardwareList() {
+		  let _this = this;
+		  const {
+		    data
+		  } = await sparseHardwareList()
+		  if (data.code == 200) {
+			if(data.rows[0]){
+			   this.hardwareList=data.rows;
+			   this.getCameraByFloor();
+			}else{
+			  this.laboratoryInfo();
+			}
+		  }
+		},
+		//获取楼层摄像头列表
+		async getCameraByFloor() {
+		  let _this = this;
+		  const {
+		    data
+		  } = await getCameraByFloor({
+		    floorId: this.floorId
+		  })
+		  if (data.code == 200) {
+			  for(let i=0;i<data.data.length;i++){
+				for(let k=0;k<_this.hardwareList.length;k++){
+					if(data.data[i]==_this.hardwareList[k].hardwareNum){
+						_this.videoHardwareList.push({name:_this.hardwareList[k].name,num:_this.hardwareList[k].hardwareNum})
+					}
+				}
+			  }
+			  this.laboratoryInfo()
+		  }
+		},
+		async GetStartList(numData) {
+		  let self = this;
+		  if(!numData){
+			return
+		  }
+		  console.log()
+		  let obj = {
+		    page: "1",
+		    count: "100",
+		    deviceIds: numData.num,
+		  };
+		  const {
+		    data
+		  } = await GetStartList(obj)
+		  if (data.code == 200) {
+		    let list = [];
+		   for(let i=0;i<data.data.length;i++){
+		      let text = uni.getStorageSync('cameraUrl');
+		       let url = data.data[i].hls;
+		      url = url.split("rtp/");
+		      let newUrl = text + 'rtp/' + url[1];
+		      let obj = {
+		        name: "楼道监控" + (i + 1),
+		        id:data.data[i].deviceID,
+		        url: newUrl,
+				videoContext:wx.createVideoContext(data.data[i].deviceID)
+		      }
+		      list.push(obj)
+		    }
+		    this.urlList = list;
+		  }
+		},
+		//获取喇叭列表
+		async getDeviceList() {
+		  let obj = {
+		    subId: this.subId,
+		    floorId: this.floorId,
+		    page: 1,
+		    pageSize: 100,
+		  };
+		  const {
+		    data
+		  } = await getDeviceListBySub(obj)
+		  if (data.code == 200) {
+		    for (let i = 0; i < data.data.length; i++) {
+		      data.data[i].type = false;
+		    }
+		    this.$set(this, 'trumpetList', data.data)
+		  }
+		},
+		//点击选择喇叭
+		trumpetClick(index) {
+		  this.trumpetList[index].type = !this.trumpetList[index].type
+		},
+		//录制
+		recordButton(e) {
+		  console.log("按下")
+		  let self = this;
+		  let num = 0;
+		  for (let i = 0; i < self.trumpetList.length; i++) {
+		    if (self.trumpetList[i].type) {
+		      num++
+		    }
+		  }
+		  if (num == 0) {
+		    uni.showToast({
+		      title: '请选择喇叭',
+		      icon: "none",
+		      mask: true,
+		      duration: 2000
+		    });
+		    return
+		  }
+		  this.liveType = true;
+		  console.log('录制', e)
+		  this.startPoint = e.touches[0]; //记录长按时开始点信息,后面用于计算上划取消时手指滑动的距离。
+		  const options = {
+		    duration: 10000,
+		    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;
+		  let num = 0;
+		  for (let i = 0; i < self.trumpetList.length; i++) {
+		    if (self.trumpetList[i].type) {
+		      num++
+		    }
+		  }
+		  if (num == 0) {
+		    return
+		  }
+		  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(e) {
+		  console.log("松开")
+		  let self = this;
+		  let num = 0;
+		  for (let i = 0; i < self.trumpetList.length; i++) {
+		    if (self.trumpetList[i].type) {
+
+		      num++
+		    }
+		  }
+		  if (num == 0) {
+		    return
+		  }
+		  this.liveType = false;
+		  console.log('发送', e)
+		  wx.hideToast(); //结束录音、隐藏Toast提示框
+		  this.recorderManager.stop(); //结束录音
+		  this.recorderManager.onStop((res) => {
+		    if (!this.sendLock) {
+		      console.log('1', this.recorderManager)
+		      this.uploadImg(res.tempFilePath);
+		    }
+		    console.log('停止录音', res.tempFilePath)
+		    console.log("sendLock", this.sendLock);
+		  })
+		},
+		//上传MP3
+		async uploadImg(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)
+		        self.textParseUrlIps(config.base_url + '/' + res.data.url);
+		      } else {
+		        uni.showToast({
+		          title: res.msg,
+		          icon: "none",
+		          mask: true,
+		          duration: 2000
+		        });
+		      }
+		    },
+		    fail: err => {
+		      uni.hideLoading()
+		    },
+		    complete: () => {}
+		  });
+		},
+		//发送语音
+		async textParseUrlIps(text) {
+		  let self = this;
+		  let newList = [];
+		  for (let i = 0; i < self.trumpetList.length; i++) {
+		    if (self.trumpetList[i].type) {
+		      let obj = {
+		        sn: self.trumpetList[i].deviceSn,
+		        port: self.trumpetList[i].port,
+		        deviceIp: self.trumpetList[i].deviceIp,
+		        type: "",
+		        name: "",
+		        speed: "",
+		        params: {
+		          tid: "",
+		          vol: self.trumpetList[i].deviceVol,
+		          urls: []
+		        }
+		      };
+		      newList.push(obj);
+		    }
+		  }
+		  const {
+		    data
+		  } = await textParseUrlIps(newList, text)
+		  if (data.code == 200) {
+		    uni.showToast({
+		      title: '发送成功',
+		      icon: "none",
+		      mask: true,
+		      duration: 2000
+		    });
+		  }
+		},
+		handleClick(row,doType){
+		  let self=this;
+		  if( doType=='detail'){//详情
+
+		  }
+
+		},
+
+
+  }
+}
+</script>
+
+<style lang="stylus" scoped>
+.earlyWarning{
+	height:100%;
+	display flex;
+	padding-bottom: 30rpx;
+	box-sizing: border-box;
+	.header{
+		width:750rpx;
+		height: 100rpx;
+		position: fixed;
+		top: 0rpx;
+		z-index: 100;
+		background: #fff;
+		.tabTitle_tow{
+			height: 100rpx;
+			 white-space: nowrap;
+			display: inline-flex;
+			.tabTitle_tow_li{
+
+				position: relative;
+				width:210rpx;
+				height: 100rpx;
+				text-align center;
+				padding-top: 26rpx;
+				box-sizing: border-box;
+				.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: 33%;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+
+			}
+		}
+
+	}
+	.video-max-box {
+	  width: 690rpx;
+	  height: 420rpx;
+	  margin: 116rpx 30rpx 20rpx;
+	  video {
+	    width: 690rpx;
+	    height: 420rpx;
+	  }
+	}
+	.broadcast {
+	  width: 690rpx;
+	  background: #FFFFFF;
+	  border-radius: 20rpx;
+	  padding:22rpx 30rpx 30rpx;
+	  box-sizing: border-box;
+	  margin: 20rpx 30rpx 0;
+
+	  .broadcast_t {
+	    font-size: 30rpx;
+	    font-family: PingFang SC;
+	    font-weight: 500;
+	    color: #333333;
+	    line-height: 30rpx;
+
+	    >label {
+	      font-size: 24rpx;
+	      font-family: PingFang SC;
+	      font-weight: 500;
+	      color: #999999;
+	      line-height: 30rpx;
+	      margin-left: 16rpx;
+	    }
+	  }
+
+	  .trumpet-max-box {
+	    display: flex;
+	    justify-content: flex-start;
+	    margin-top: 22rpx;
+	    flex-wrap: wrap;
+
+	    .trumpet-for-box {
+	      display: inline-block;
+	       width: auto;
+	      height: 60rpx;
+	      line-height: 60rpx;
+	      font-size: 24rpx;
+	      text-align: center;
+	      cursor: pointer;
+	      overflow: hidden;
+	      border: 1rpx solid #E0E0E0;
+	      border-radius: 10rpx;
+	      color: #E0E0E0;
+	      display: flex;
+	      justify-content: center;
+	      margin-right: 20rpx;
+	      margin-bottom: 10rpx;
+				padding: 0 12rpx;
+			  box-sizing: border-box;
+	      >img {
+	        width: 36rpx;
+	        height: 34rpx;
+	        margin: 12rpx 20rpx 0 25rpx;
+	      }
+	    }
+
+	    .trumpet-color-a {
+	      border: 1px solid #0183FA;
+	      color: #0183FA;
+	    }
+
+	    .trumpet-color-b {
+	      border: 1px solid #CCCCCC;
+	      color: #999;
+	    }
+	  }
+
+	  .broadcast_m {
+	    width: 100%;
+
+	    .broadcast_m_t {
+	      width: 142rpx;
+	      height: 142rpx;
+	      margin: 30rpx 0 0 258rpx;
+	      position: relative;
+	      font-size: 24rpx;
+	      font-family: PingFang SC;
+	      font-weight: 500;
+	      line-height: 170rpx;
+	      text-align: center;
+
+	      >img {
+	        width: 142rpx;
+	        height: 142rpx;
+	        position: absolute;
+
+	      }
+
+	      >label {
+	        width: 100%;
+	        font-size: 24rpx;
+	        font-family: PingFang SC;
+	        font-weight: 500;
+	        color: #0183FA;
+	        line-height: 24rpx;
+	        display: inline-block;
+	        text-align: center;
+	        position: absolute;
+	        top: 76rpx;
+	      }
+
+	      /* 按下 */
+	      .press_color {
+	        color: #FFFFFF;
+	      }
+
+	      /* 松开 */
+	      .slip_color {
+	        color: #0183FA;
+	      }
+	    }
+
+	    .broadcast_m_t_back_a {
+	      background: url(@/images/basicsModules/icon_sskz_skfs.png);
+	      background-size: 100%;
+	      color: #FFFFFF;
+	    }
+
+	    .broadcast_m_t_back_b {
+	      background: url(@/images/basicsModules/icon_sskz_azsh.png);
+	      background-size: 100%;
+	      color: #0183FA;
+	    }
+
+	    .broadcast_m_b {
+	      font-size: 24rpx;
+	      font-family: PingFang SC;
+	      font-weight: 500;
+	      color: #999999;
+	      line-height: 24rpx;
+	      text-align: center;
+	      margin-top: 14rpx;
+	    }
+	  }
+
+	  /* 疏散按钮 */
+	  .evacuation-button-box {
+	    width: 650rpx;
+	    height: 100rpx;
+	    background: #0183FA;
+	    color: #fff;
+	    text-align center;
+	    line-height: 100rpx;
+	    font-size: 28rpx;
+	    margin: 88rpx auto 0;
+	    border-radius: 20rpx;
+	  }
+	}
+}
+</style>

+ 334 - 0
page_basics/photoInspection.vue

@@ -0,0 +1,334 @@
+<!-- 拍照检查 -->
+<template>
+    <view id="photoInspection">
+		<view class="photInspection-max">
+			<view class="picker-max-box">
+				<view class="picker-title-box">
+					<view>*</view>
+					<view>实验室:</view>
+				</view>
+				<picker @change="buttonChange"
+					:range-key="'subjectName'" :value="subjectId" :range="buttonArray">
+					<view class="picker-min-box">
+						<view>{{buttonArrayIndex?buttonArray[buttonArrayIndex].subjectName:'请选择'}}</view>
+						<img src="@/images/basicsModules/icon_06.png">
+					</view>
+				</picker>
+			</view>
+			<view class="photo-max-box">
+			    <view class="photo-button" v-if="!newData.subUrl" @click="upImg('subUrl')">+ 添加</view>
+			    <img :src="baseUrl+newData.subUrl" v-else @click="upImg('subUrl')">
+			    <view class="photo-title">{{newData.sub}}</view>
+			</view>
+			<view class="photo-max-box">
+			    <view class="photo-button" v-if="!newData.garbageUrl" @click="upImg('garbageUrl')">+ 添加</view>
+			    <img :src="baseUrl+newData.garbageUrl" v-else @click="upImg('garbageUrl')">
+			    <view class="photo-title">{{newData.garbage}}</view>
+			</view>
+			<view class="photo-max-box">
+			    <view class="photo-button" v-if="!newData.dangerousUrl" @click="upImg('dangerousUrl')">+ 添加</view>
+			    <img :src="baseUrl+newData.dangerousUrl" v-else @click="upImg('dangerousUrl')">
+			    <view class="photo-title">{{newData.dangerous}}</view>
+			</view>
+			<view class="photo-max-box">
+			    <view class="photo-button" v-if="!newData.sourceRiskUrl" @click="upImg('sourceRiskUrl')">+ 添加</view>
+			    <img :src="baseUrl+newData.sourceRiskUrl" v-else @click="upImg('sourceRiskUrl')">
+			    <view class="photo-title">{{newData.sourceRisk}}</view>
+			</view>
+		</view>
+		<view class="up-data-button" @click="upButton">提交</view>
+		<helang-compress ref="helangCompress"></helang-compress>
+    </view>
+	
+</template>
+
+<script>
+	import helangCompress from './component/compress.vue';
+    import { config } from '@/api/request/config.js'
+    import { addPhotoInspection,outSubjectList } from '@/api/apiDemo/index.js'
+    export default {
+		components: {
+			helangCompress
+		},
+        data() {
+            return {
+				baseUrl:config.base_url,
+                newData:{},
+				buttonArray:[],
+				buttonArrayIndex:"",
+				
+				params: {
+					maxSize: 400,
+					fileType: 'png',
+					quality: 0.85,
+					minSize: 320
+				}
+
+            }
+        },
+        onLoad(option) {
+			this.newData = JSON.parse(decodeURIComponent(option.newData));
+			console.log(this.newData)
+        },
+        onShow(){
+			this.outSubjectList();
+        },
+        methods: {
+			buttonChange(e){
+				console.log("e",e.mp.detail.value);
+				this.buttonArrayIndex = e.mp.detail.value;
+			},
+			async outSubjectList(){
+				const {data} = await outSubjectList();
+				if(data.code == 200){
+					this.buttonArray = data.data;
+				}
+			},
+            upButton(){
+                let self = this;
+				if(!this.buttonArrayIndex){
+					uni.showToast({
+						title: '请选择实验室',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.newData.subUrl){
+					uni.showToast({
+						title: '请上传实验室照片',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.newData.garbageUrl){
+					uni.showToast({
+						title: '请上传垃圾桶清理后照片',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+                uni.showModal({
+                    // title: '确认要退出吗?',
+                    content: '确认提交吗?',
+                    cancelColor:"#999",
+                    confirmColor:"#0183FA",
+                    success: function (res) {
+                        if (res.confirm) {
+                            self.addPhotoInspection();
+                            console.log('用户点击确定');
+                        } else if (res.cancel) {
+                            console.log('用户点击取消');
+                        }
+                    }
+                });
+            },
+            //拍照检查提交
+            async addPhotoInspection(){
+				let obj = {
+					subjectId:this.buttonArray[this.buttonArrayIndex].subjectId,
+					subUrl:this.newData.subUrl,
+					garbageUrl:this.newData.garbageUrl,
+					dangerousUrl:this.newData.dangerousUrl,
+					sourceRiskUrl:this.newData.sourceRiskUrl,
+				}
+				if(this.newData.id){
+					obj.id = this.newData.id
+				}
+                const {data} = await addPhotoInspection(obj);
+                if(data.code == 200){
+                    uni.showToast({
+                        title: '提交成功',
+                        icon:"none",
+                        mask:true,
+                        duration: 2000
+                    });
+                    setTimeout(function(){
+                        uni.navigateBack();
+                    },2000);
+                }
+            },
+            upImg(name){
+                let self = this;
+                wx.chooseImage({
+                    count: 1,
+                    sizeType: ["original", "compressed"],
+                    sourceType: ["album", "camera"],
+                    success: function(res) {
+                        //let tempFilePaths = res.tempFilePaths[0];
+                        //self.uploadImg(tempFilePaths,name);
+						self.compress(res.tempFilePaths,name);
+                    }
+                });
+            },
+			//图片压缩
+			compress(tempFilePaths,name) {
+				 let self = this;
+				uni.showLoading({
+					title: '压缩中',
+					mask: true
+				});
+			
+				this.$refs.helangCompress.compress({
+					src: tempFilePaths[0],
+					maxSize: this.params.maxSize,
+					fileType: this.params.fileType,
+					quality: this.params.quality,
+					minSize: this.params.minSize
+				}).then((res) => {
+					uni.hideLoading();
+					console.log('压缩成功')
+					self.uploadImg(res,name);
+					
+				}).catch((err) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: "压缩失败,请重新上传",
+						icon: "none"
+					})
+				})
+			},
+            async uploadImg(tempFilePaths,name){
+                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){
+							self.$set(self.newData,name,res.data.url);
+							self.$set(self.newData,"real"+name,res.data.url);
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+                    },
+                    fail: err => {},
+                    complete: () => {
+                        uni.hideLoading()
+                    }
+                });
+            },
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #photoInspection{
+        height:100%;
+        width:100%;
+		display:flex;
+		flex-direction:column;
+		.photInspection-max{
+			flex:1;
+			padding-bottom:40rpx;
+			overflow-y:scroll;
+			.photo-max-box{
+			    width:702rpx;
+			    height:422rpx;
+			    border-radius: 20rpx;
+			    background: #FFFFFF;
+			    border:4rpx dashed #E0E0E0;
+			    margin:20rpx 20rpx 0;
+			    .photo-button{
+			        height:336rpx;
+			        width:702rpx;
+			        color: #999999;
+			        font-size:30rpx;
+			        line-height 336rpx
+			        text-align center
+			    }
+			    img{
+			        height:336rpx;
+			        width:702rpx;
+			        border-top-left-radius :20rpx
+			        border-top-right-radius :20rpx
+			    }
+			    .photo-title{
+			        border-top:4rpx dashed #E0E0E0;
+			        line-height:82rpx;
+			        color: #333333;
+			        font-size: 30rpx;
+			        padding-left:28rpx;
+			    }
+			}
+			.null-view-box{
+			    text-align center;
+			    line-height:100rpx;
+			    color:#999;
+			    font-size:26rpx;
+			}
+			.picker-max-box{
+				margin:20px 0;
+				display:flex;
+				.picker-title-box{
+					padding:0 20rpx;
+					display flex
+					view{
+						line-height:80rpx;
+						font-size:28rpx;
+					}
+					view:nth-child(1){
+						color:red;
+					}
+					view:nth-child(2){
+
+					}
+					view:nth-child(3){
+						color:#999;
+					}
+				}
+				.picker-min-box{
+					display flex;
+					height:80rpx;
+					width:556rpx;
+					border:1rpx solid #a2a2a2;
+					border-radius:10rpx;
+					margin:0 20rpx;
+					view{
+						flex:1;
+						line-height:80rpx;
+						padding:0 20rpx;
+						color:#999;
+						font-size:28rpx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+					}
+					img{
+						width:24rpx;
+						height:12rpx;
+						margin:35rpx 23rpx;
+					}
+				}
+			}
+		}
+		.up-data-button{
+			width: 750rpx;
+			height: 120rpx;
+			background: #0183FA;
+			line-height:120rpx;
+			text-align center
+			color:#fff;
+			font-size: 30rpx;
+		}
+    }
+</style>

+ 340 - 2
pages.json

@@ -41,6 +41,45 @@
 				
 			]
 		},
+		{
+			/* 基础分包 */
+			"root": "page_basics",  //分包根路径
+			"name": "basics", //分包名字可写可不写
+			"pages": [
+				{
+					"path": "photoInspection",
+					"style": {
+						"navigationBarTitleText": "离开检查"
+					}
+				},
+				{
+					"path": "accessQualification/accessQualification",
+					"style": {
+						"navigationBarTitleText": "准入审核"
+					}
+				},
+				/* 预警信息 */
+				{
+					"path": "earlyWarningManage/earlyWarningDetail",
+					"style": {
+						"navigationBarTitleText": "预案预警信息"
+					}
+				},
+				{
+					"path": "earlyWarningManage/earlyWarningList",
+					"style": {
+						"navigationBarTitleText": "预警记录"
+					}
+				},
+		
+				{
+					"path": "earlyWarningManage/videoMonitoring",
+					"style": {
+						"navigationBarTitleText": "监控信息"
+					}
+				}
+			]
+		},
 		{
 			/* 学生端分包 */
 			"root": "pages_student",  //分包根路径
@@ -53,7 +92,186 @@
 			"root": "pages_manage",  //分包根路径
 			"name": "manage", //分包名字可写可不写
 			"pages": [
-				
+				//应急处置
+				{
+					"path": "emergencyEvacuationBig",//应急疏散
+					"style": {
+						"navigationBarTitleText": "应急处置"
+					}
+				},
+				{
+					"path": "emergencyEvacuationBigFullScreen",//应急疏散
+					"style": {
+						"navigationBarTitleText": "应急处置",
+						"pageOrientation": "landscape"
+					}
+				},
+				/* 用气申请 */
+				{
+					"path": "gasBottle/useGasApply/useGasApply",
+					"style": {
+						"navigationBarTitleText": "用气申请"
+					}
+				},
+				{
+					"path": "gasBottle/useGasApply/useGasApplyAdd",
+					"style": {
+						"navigationBarTitleText": "申请用气"
+					}
+				},
+				{
+					"path": "gasBottle/useGasApply/useGasApplyDetail",
+					"style": {
+						"navigationBarTitleText": "申请详情"
+					}
+				},
+				/* 资质审核 */
+				{
+					"path": "gasBottle/aptitudeAudit/aptitudeAudit",
+					"style": {
+						"navigationBarTitleText": "资格审核"
+					}
+				},
+				{
+					"path": "gasBottle/aptitudeAudit/aptitudeAuditDetail",
+					"style": {
+						"navigationBarTitleText": "资格审核"
+					}
+				},
+				{
+					"path": "gasBottle/aptitudeAudit/aptitudeAuditCheck",
+					"style": {
+						"navigationBarTitleText": "资格审核"
+					}
+				},
+				/* 气瓶归还登记 */
+				{
+					"path": "gasBottle/leaveConfirm/amendAir",
+					"style": {
+						"navigationBarTitleText": "修改气压"
+					}
+				},
+				{
+					"path": "gasBottle/leaveConfirm/leaveConfirm",
+					"style": {
+						"navigationBarTitleText": "出库确认"
+					}
+				},
+				/* 气瓶归还登记 */
+				{
+					"path": "gasBottle/useRegister/giveRegister",
+					"style": {
+						"navigationBarTitleText": "归还登记"
+					}
+				},
+				/* 气瓶使用登记 */
+				{
+					"path": "gasBottle/useRegister/useRegister",
+					"style": {
+						"navigationBarTitleText": "使用登记"
+					}
+				},
+				/* 气瓶使用记录 */
+				{
+					"path": "gasBottle/useRecord/useRecordDetail",
+					"style": {
+						"navigationBarTitleText": "使用详情"
+					}
+				},
+				{
+					"path": "gasBottle/useRecord/useRecord",
+					"style": {
+						"navigationBarTitleText": "使用记录"
+					}
+				},
+				/* 气瓶列表 */
+				{
+					"path": "gasBottle/gasList/gasListBinding",
+					"style": {
+						"navigationBarTitleText": "气瓶详情"
+					}
+				},
+				{
+					"path": "gasBottle/gasList/gasUseDetail",
+					"style": {
+						"navigationBarTitleText": "使用详情"
+					}
+				},
+				{
+					"path": "gasBottle/gasList/gasListDetail",
+					"style": {
+						"navigationBarTitleText": "气瓶详情"
+					}
+				},
+				{
+					"path": "gasBottle/gasList/gasList",
+					"style": {
+						"navigationBarTitleText": "气瓶列表"
+					}
+				},
+				/* 气瓶申请 */
+				{
+					"path": "gasBottle/gasApply/awaitStorage",
+					"style": {
+						"navigationBarTitleText": "待入库"
+					}
+				},
+				{
+					"path": "gasBottle/gasApply/gasApplyReject",
+					"style": {
+						"navigationBarTitleText": "拒收气瓶"
+					}
+				},
+				{
+					"path": "gasBottle/gasApply/gasApplyList",
+					"style": {
+						"navigationBarTitleText": "申请详情"
+					}
+				},
+				{
+					"path": "gasBottle/gasApply/gasApplyAdd",//添加
+					"style": {
+						"navigationBarTitleText": "申请气瓶"
+					}
+				},
+				{
+					"path": "gasBottle/gasApply/gasApply",
+					"style": {
+						"navigationBarTitleText": "气瓶申请"
+					}
+				},
+
+				/* 资格申请 */
+				{
+					"path": "gasBottle/examination/examinationSelect",//添加
+					"style": {
+						"navigationBarTitleText": "选择气瓶"
+					}
+				},
+				{
+					"path": "gasBottle/examination/examinationAdd",//添加
+					"style": {
+						"navigationBarTitleText": "资格申请"
+					}
+				},
+				{
+					"path": "gasBottle/examination/examinationDetail",
+					"style": {
+						"navigationBarTitleText": "资格申请"
+					}
+				},
+				{
+					"path": "gasBottle/examination/examination",
+					"style": {
+						"navigationBarTitleText": "资格申请"
+					}
+				},
+				{
+					"path": "gasBottle/gasManage/gasManage",
+					"style": {
+						"navigationBarTitleText": "用气管理"
+					}
+				}
 			]
 		},
 		{
@@ -61,9 +279,129 @@
 			"root": "pages_safetyExamine",  //分包根路径
 			"name": "safetyExamine", //分包名字可写可不写
 			"pages": [
-				
+				{
+					"path": "safetyExamineWorkbench",
+					"style": {
+						"navigationBarTitleText": "安全检查"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanAdd",
+					"style": {
+						"navigationBarTitleText": "发起巡查计划"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanAddLab",
+					"style": {
+						"navigationBarTitleText": "选择实验室"
+					}
+				},
+				{
+					"path": "patrolPlan/patrolPlanAddContent",
+					"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/examineAddContent",
+					"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": "安全信息牌"
+					}
+				}
 			]
 		}
+		
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "white", //导航文字颜色

+ 1 - 1
pages/home/supplierWorkbench.vue

@@ -49,7 +49,7 @@
             </view>
           </view>
         </view>
-        <img class="null-img" v-if="!dataList[0]" src="@/images/null-data-1.png">
+        <img class="null-img" v-if="!dataList[0]" src="@/images/basicsModules/null-data-1.png">
       </scroll-view>
       <img class="supernatant"  @click="handleClick('recycle')"  src="@/images/Version3.0/icon_glpt_gqhsjl.png">
     </view>

+ 1 - 1
pages/information/information.vue

@@ -24,7 +24,7 @@
 </template>
 
 <script>
-    import { groupList,queryByMessage } from '@/api/index.js'
+    import { groupList,queryByMessage } from '@/api/apiDemo/index.js'
     import { tabBar } from '@/component/tabBar.vue'
 	export default {
         components: {

+ 3 - 3
pages/information/informationInfo.vue

@@ -22,7 +22,7 @@
 </template>
 
 <script>
-    import { groupIdList,groupListRead} from '@/api/index.js'
+    import { groupIdList,groupListRead} from '@/api/apiDemo/index.js'
     export default {
         data() {
             return {
@@ -39,7 +39,7 @@
         },
         onLoad(option) {
             this.itemData = JSON.parse(decodeURIComponent(option.item));
-			
+
             //修改页面title
             if(this.itemData.sendUserId == '-2'){
                 uni.setNavigationBarTitle({
@@ -73,7 +73,7 @@
 				let self = this;
 				const {data} = await groupListRead({messageId:this.itemData.messageId})
 				if(data.code==200){
-					
+
 				}
 			},
             //获取列表数据

+ 1 - 1
pages/information/notPassInfo.vue

@@ -64,7 +64,7 @@
 </template>
 
 <script>
-    import { getDetails,groupListRead} from '@/api/index.js'
+    import { getDetails,groupListRead} from '@/api/apiDemo/index.js'
 	import { config } from '@/api/request/config.js'
     export default {
         data() {

+ 3 - 3
pages/login/login.vue

@@ -46,8 +46,8 @@ export default {
       identityStatus:1,
       // username:"superadmin",
       // password:"zd123456",
-      username:"xiongmiao",
-      password:"zd123456",
+      username:"heyang",
+      password:"123456",
       checkedType:false,
       loginBanner:uni.getStorageSync('loginBanner'),
       infoList:[],//模板消息Id
@@ -108,7 +108,7 @@ export default {
 			this.systemAppletRolePermission()
 		]).then((result)=>{
 			uni.redirectTo({
-				url: '/pages/mine/mine',
+				url: '/pages/home/home',
 			});
 		}).catch((error) => {
 			wx.showToast({

Різницю між файлами не показано, бо вона завелика
+ 2310 - 0
pages_manage/emergencyEvacuationBig.vue


+ 677 - 0
pages_manage/emergencyEvacuationBigFullScreen.vue

@@ -0,0 +1,677 @@
+<template>
+	<view id="emergencyEvacuationBigFullScreen">
+		<view class="emergencyEvacuationBigFullScreen-page" v-if="mapType"
+			:style="'width:'+mapWidth+'px;height:'+mapHeight+'px;transform: scale('+zoomData+');margin-top:-'+mapHeight/2+'px;margin-left:-'+mapWidth/2+'px;'">
+			<view class="map-max-box" :style="'width:'+mapWidth+'px;height:'+mapHeight+'px;'">
+				<!-- :style="'width:'+mapW+'px;height:'+mapH+'px;'" -->
+				<view class="map-max-for-box for-map-box" v-if="item.type == 1" v-for="(item,index) in mapList"
+					:key="index" :class="!item.policeType && checkSubId ==item.subId ? 'room-type-one':(
+                           item.policeType && checkSubId !=item.subId ? 'room-type-two':(
+                           item.policeType && checkSubId ==item.subId ? 'room-type-three':(
+                           !item.loginAdmin ? 'room-type-noe':''
+					   )))" :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+(item.w-4)+'px;height:'+(item.h-4)+'px;'">
+					<view class="map-max-for-min-box">
+						<view class="map-for-name-p" :style="'margin-top:'+((item.h/2)-20)+'px;'">
+							{{item.roomType == '-99'?item.roomName:item.subName}}</view>
+						<view class="map-for-num-p">({{item.roomNum}})</view>
+						<view class="position-box" src="@/images/evacuation3_2/icon_sysbjt_m.png"
+							:class="minItem.toward=='top'?'center-move-door-p-t':(minItem.toward=='bottom'?'center-move-door-p-b':(minItem.toward=='left'?'center-move-door-p-l':(minItem.toward=='right'?'center-move-door-p-r':'')))"
+							v-for="(minItem,minIndex) in item.doorList" :key="minIndex"
+							:style="'top:'+minItem.y+'px;left:'+minItem.x+'px;width:'+minItem.w+'px;height:'+minItem.h+'px;'">
+						</view>
+					</view>
+				</view>
+				<view class="map-max-for-box for-map-box-one" v-if="item.type == 2" v-for="(item,index) in mapList"
+					:key="index" :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
+					<view class="map-max-for-min-box">
+						<view class="position-box" @click="lighButton(minItem)"
+							:class="minItem.state=='1'&&minItem.openType?'lightTopOn':(minItem.state=='1'&&!minItem.openType?'lightTopOff':
+									(minItem.state=='2'&&minItem.openType?'lightBottomOn':(minItem.state=='2'&&!minItem.openType?'lightBottomOff':
+									(minItem.state=='3'&&minItem.openType?'lightLeftOn':(minItem.state=='3'&&!minItem.openType?'lightLeftOff':
+									(minItem.state=='4'&&minItem.openType?'lightRightOn':(minItem.state=='4'&&!minItem.openType?'lightRightOff':'')))))))"
+							v-for="(minItem,minIndex) in item.lightList" :key="minIndex"
+							:style="'top:'+minItem.y+'px;left:'+minItem.x+'px;width:'+minItem.w+'px;height:'+minItem.h+'px;'">
+						</view>
+					</view>
+				</view>
+				<view class="map-max-for-box for-map-box-two" v-if="item.type == 3" v-for="(item,index) in mapList"
+					@click="checkRoom(item)"
+					:key="index" :class="item.roomCheckType?'for-map-box-two-check':''"
+					:style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
+				</view>
+			</view>
+		</view>
+		<view class="position-button" @click="backButton">退出全屏</view>
+		<view class="position-button-two" @click="executeEvacuation">已确定疏散出口,立即执行疏散</view>
+	</view>
+</template>
+
+<script>
+	import $mqtt from '@/utils/mqtt.min.js';
+	import {
+		getFloorData,
+		getRedisEvacuation,
+		openLight,
+		closeLight,
+		executeEvacuation
+	} from '@/api/apiDemo/index.js'
+	export default {
+		data() {
+			return {
+				// 楼栋id
+				buildingId: null,
+				//楼层id
+				floorId: null,
+				//实验室ID
+				subId:null,
+				//当前选中实验室
+				checkSubId: null,
+				//页面开关
+				mapType: false,
+				mapList: [],
+				//缩放相关数据
+				zoomData: null,
+				mapWidth: null, //40边框距离
+				mapHeight: null, //40边框距离
+				//弹层地图数据
+				buildingOptions: {},
+				//mqtt
+				floorClient: {},
+				evacuationTopic: "lab/newexit/line", //疏散
+				//疏散按钮
+				buttonType:false
+			}
+		},
+		onLoad(option) {
+			if(option.item){
+				let obj = JSON.parse(decodeURIComponent(option.item));
+				this.$set(this,'buildingId',obj.buildingId);
+				this.$set(this,'floorId',obj.floorId);
+				this.$set(this,'subId',obj.subId);
+				this.$set(this,'checkSubId',obj.subId);
+				if(obj.type == 2){
+					this.$set(this,'buttonType',true);
+				}else{
+					this.$set(this,'buttonType',false);
+				}
+			}
+		},
+		onShow() {
+			// this.offMQTT('on');
+			this.getBuildingData();
+		},
+		methods: {
+			mqttPageFunction(type){
+				let self = this;
+				if (type == 'FLOOR_EXITLINE') {
+					this.getRedisEvacuation();
+				} else if (type == 'FLOOR_OVER_EXITLINE') {
+					uni.showToast({
+						title: '疏散已结束',
+						icon: "none",
+						mask: true,
+						duration: 2000
+					});
+					setTimeout(function() {
+						self.getBuildingData();
+					}, 2000);
+				}
+			},
+			checkRoom(item){
+				if(this.buttonType){
+					item.roomCheckType = !item.roomCheckType;
+					this.$forceUpdate();
+				}
+			},
+			//开始疏散
+			async executeEvacuation(){
+				let self = this;
+				let list = [];
+				let doorPointNames = [];
+				for(let i=0;i<self.mapList.length;i++){
+					if(self.mapList[i].type == 3){
+						if(!self.mapList[i].roomCheckType){
+							list.push(self.mapList[i].key)
+						}else{
+							doorPointNames.push(self.mapList[i].key)
+						}
+					}
+				}
+				if(!doorPointNames[0]){
+					uni.showToast({
+						title: '请选择疏散出口',
+						icon: "none",
+						mask: true,
+						duration: 2000
+					});
+					return
+				}
+				let obj = {
+				buildId:this.buildingId,
+				floorId:this.floorId,
+				subId: this.subId,
+				badPointNames:list,
+				doorPointNames:doorPointNames,
+				}
+				const {	data } = await executeEvacuation(obj)
+				if (data.code == 200) {
+					uni.showToast({
+						title: '执行成功',
+						icon: "none",
+						mask: true,
+						duration: 2000
+					});
+					setTimeout(function(){
+						uni.navigateBack();
+					},2000);
+				}
+			},
+			//疏散页面
+			backButton() {
+				uni.navigateBack()
+			},
+			//地图数据
+			async getBuildingData() {
+				let self = this;
+				const {
+					data
+				} = await getFloorData(this.floorId)
+				if (data.code == 200) {
+					if (data.data.buildFloorLayoutVoList[0]) {
+						let list = JSON.parse(data.data.labExitLineVertex.layoutJoinData)
+						this.getWXSystemInfo(list);
+						for (let i = 0; i < list.length; i++) {
+							if (list[i].type == '2') {
+								//楼道
+								for (let o = 0; o < list[i].lightList.length; o++) {
+									list[i].lightList[o].openType = false;
+								}
+							} else if (list[i].type == '1') {
+								for (let o = 0; o < data.data.buildFloorLayoutVoList.length; o++) {
+									if (list[i].key == data.data.buildFloorLayoutVoList[o].pointName) {
+										list[i].id = data.data.buildFloorLayoutVoList[o].id;
+										list[i].buildId = data.data.buildFloorLayoutVoList[o].buildId;
+										list[i].floorId = data.data.buildFloorLayoutVoList[o].floorId;
+										list[i].roomType = data.data.buildFloorLayoutVoList[o].roomType;
+										list[i].roomName = data.data.buildFloorLayoutVoList[o].roomName;
+										list[i].roomNum = data.data.buildFloorLayoutVoList[o].roomNum;
+										list[i].subName = data.data.buildFloorLayoutVoList[o].subName;
+										list[i].subId = data.data.buildFloorLayoutVoList[o].subId;
+										list[i].online = data.data.buildFloorLayoutVoList[o].online;
+										list[i].loginAdmin = data.data.buildFloorLayoutVoList[o].loginAdmin;
+										list[i].policeType = false;
+									}
+								}
+							} else if (list[i].type == 3) {
+								list[i].roomCheckType = false;
+							}
+						}
+						this.$set(this, 'mapList', JSON.parse(JSON.stringify(list)));
+						this.$set(this, 'mapType', true);
+						setTimeout(function() {
+							self.getRedisEvacuation();
+						}, 500);
+
+					}
+				}
+			},
+			//获取疏散数据
+			async getRedisEvacuation() {
+				let self = this;
+				let obj = {
+					buildId: this.buildingId,
+					floorId: this.floorId,
+				}
+				const {
+					data
+				} = await getRedisEvacuation(obj)
+				if (data.code == 200) {
+					if (data.data.doorPointNames) {
+						for (let o = 0; o < self.mapList.length; o++) {
+							if (self.mapList[o].type == 2) {
+								for (let x = 0; x < self.mapList[o].lightList.length; x++) {
+									let num = 0;
+									for (let i = 0; i < data.data.lightPointSet.length; i++) {
+										if (data.data.lightPointSet[i]) { //处理后端返回的异常的NULL
+											if (self.mapList[o].lightList[x].key == data.data.lightPointSet[i].key) {
+												num++
+											}
+										}
+									}
+									self.mapList[o].lightList[x].openType = num != 0;
+								}
+							}
+						}
+						for (let i = 0; i < data.data.doorPointNames.length; i++) {
+							for (let o = 0; o < self.mapList.length; o++) {
+								if (self.mapList[o].type == 3) {
+									if (data.data.doorPointNames[i] == self.mapList[o].key) {
+										self.mapList[o].roomCheckType = true;
+									}
+								}
+							}
+						}
+						this.$forceUpdate();
+					}
+				};
+			},
+			//灯点击事件
+			lighButton(item) {
+				let self = this;
+				uni.showModal({
+					content: '确定' + (item.openType ? '关闭' : '开启') + '该疏散灯?',
+					cancelColor: "#999",
+					confirmColor: "#0183FA",
+					success: function(res) {
+						if (res.confirm) {
+							if (item.openType) {
+								self.closeLight(item);
+							} else {
+								self.openLight(item);
+							}
+						} else if (res.cancel) {
+						}
+					}
+				});
+			},
+			//开灯
+			async openLight(item) {
+				let obj = {
+					buildId: this.buildingId,
+					floorId: this.floorId,
+					pointName: item.key
+				};
+				const {
+					data
+				} = await openLight(obj)
+				if (data.code == 200) {
+					uni.showToast({
+						title: '操作成功',
+						icon: "none",
+						mask: true,
+						duration: 2000
+					});
+				}
+			},
+			//关灯
+			async closeLight(item) {
+				let obj = {
+					buildId: this.buildingId,
+					floorId: this.floorId,
+					pointName: item.key
+				};
+				const {
+					data
+				} = await closeLight(obj)
+				if (data.code == 200) {
+					uni.showToast({
+						title: '操作成功',
+						icon: "none",
+						mask: true,
+						duration: 2000
+					});
+				}
+			},
+			//计算缩放率
+			getWXSystemInfo(list) {
+				let self = this;
+				wx.getSystemInfo({
+					success: function(res) {
+						self.zoomCalculate(list, res.windowHeight, res.windowWidth);
+					}
+				})
+			},
+			zoomCalculate(list, height, width) {
+				let num = 0;
+				let zoomType = 0;
+				let maxWidth = 0
+				let maxHeight = 0
+				let zoomData = 1;
+				if (height > width) {
+					num = height / width
+				} else {
+					num = width / height
+				}
+				for (let i = 0; i < list.length; i++) {
+					if ((list[i].x + list[i].w) > maxWidth) {
+						maxWidth = list[i].x + list[i].w
+					}
+					if ((list[i].y + list[i].h) > maxHeight) {
+						maxHeight = list[i].y + list[i].h
+					}
+				}
+				this.$set(this, 'mapWidth', maxWidth);
+				this.$set(this, 'mapHeight', maxHeight);
+				  let zoomNumOne = height / maxHeight;
+				  if(parseInt(this.accMul(zoomNumOne,maxHeight)) <= height && parseInt(this.accMul(zoomNumOne,maxWidth)) <= width){
+				    zoomData = zoomNumOne;
+				    this.$set(this,'zoomData',zoomNumOne);
+				  }
+				  let zoomNumTwo = width / maxWidth;
+				  if(parseInt(this.accMul(zoomNumTwo,maxHeight)) <= height && parseInt(this.accMul(zoomNumTwo,maxWidth)) <= width){
+				    zoomData = zoomNumTwo;
+				    this.$set(this,'zoomData',zoomNumTwo);
+				  }
+				// if (maxWidth > maxHeight) {
+				// 	if ((maxWidth / maxHeight) > num) {
+				// 		// 以宽度缩放
+				// 		zoomType = 1;
+				// 	} else {
+				// 		// 以高度缩放
+				// 		zoomType = 2;
+				//  }
+				// } else {
+				// 	if ((maxHeight / maxWidth) > num) {
+				// 		// 以高度缩放
+				// 		zoomType = 2;
+				// 	} else {
+				// 		// 以宽度缩放
+				// 		zoomType = 1;
+				// 	}
+				// }
+
+				// if (zoomType == 1) {
+				// 	if (width > maxWidth) {
+				// 		zoomData = maxWidth / width;
+				// 	} else {
+				// 		zoomData = width / maxWidth;
+				// 	}
+				// 	if (width > maxWidth) {
+				// 		this.$set(this, 'zoomData', maxWidth / width);
+				// 	} else {
+				// 		this.$set(this, 'zoomData', width / maxWidth);
+				// 	}
+				// } else if (zoomType == 2) {
+				//  if (height > maxHeight) {
+				// 		zoomData = maxHeight / height;
+				// 	} else {
+				// 		zoomData = height / maxHeight;
+				// 	}
+				// 	if (height > maxHeight) {
+				// 		this.$set(this, 'zoomData', maxHeight / height);
+				// 	} else {
+				// 		this.$set(this, 'zoomData', height / maxHeight);
+				// 	}
+				// }
+			},
+			  accMul(arg1,arg2){
+				var m=0,s1=arg1.toString(),s2=arg2.toString();
+				try{m+=s1.split(".")[1].length}catch(e){}
+				try{m+=s2.split(".")[1].length}catch(e){}
+				return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
+			  },
+			/*MQTT*/
+			//订阅
+			onMQTT() {
+				let self = this;
+				const mqttOptions = {
+					keepalive: 30,
+					clean: true, //保留会话
+					connectTimeout: 600000, // 超时时间
+					reconnectPeriod: 5000, // 重连间隔
+					clientId: uni.getStorageSync('token') + 'lab/function/data',
+          username: uni.getStorageSync('mqttUser'),
+          password: uni.getStorageSync('mqttPassword'),
+				}
+				const connectUrl = uni.getStorageSync('mqttUrl');
+				this.floorClient = $mqtt.connect('wxs://' + connectUrl, mqttOptions);
+				this.floorClient.on('connect', () => {
+					this.floorClient.subscribe(this.evacuationTopic + this.floorId, (err) => {
+						if (!err) {
+							console.log("疏散-订阅成功", )
+							this.getBuildingData();
+						}
+					});
+				});
+				// 自动重连
+				this.floorClient.on('reconnect', (msg) => {
+					console.log('自动重连-reconnect-1', msg)
+				});
+				// 错误
+				this.floorClient.on('error', () => {
+					console.log('错误-error-1')
+				});
+				// 断开
+				this.floorClient.on('end', () => {
+					console.log('断开-end-1')
+				});
+				// 掉线
+				this.floorClient.on('offline', (msg) => {
+					console.log('掉线-offline-1', msg)
+				});
+				// 收到消息
+				this.floorClient.on('message', (topic, message) => {
+					let data = JSON.parse(message)
+					if (data) {
+						if (topic == (this.evacuationTopic + this.floorId)) {
+							console.log('疏散通知', data)
+							//疏散消息
+							if (data.data == 'FLOOR_EXITLINE') {
+								this.getRedisEvacuation();
+							} else if (data.data == 'FLOOR_OVER_EXITLINE') {
+								uni.showToast({
+									title: '疏散已结束',
+									icon: "none",
+									mask: true,
+									duration: 2000
+								});
+								setTimeout(function() {
+									self.getBuildingData();
+								}, 2000);
+							}
+						}
+					}
+				});
+				// 全局监听是否有关闭mqtt的消息的事件
+				uni.$on('closeMqtt', () => {
+					this.floorClient.end(true); // 主动断开连接
+				})
+			},
+			//关闭MQTT连接
+			offMQTT(type) {
+				if (this.floorClient.unsubscribe) {
+					this.floorClient.unsubscribe(this.evacuationTopic + this.floorId, error => {
+						if (error) {
+							console.log('疏散连接-关闭错误', error)
+						}
+					});
+					this.floorClient.end(true);
+					this.$set(this, 'floorClient', {});
+				}
+				if (type) {
+					this.onMQTT();
+				}
+			},
+		},
+		beforeDestroy() {
+			//断开mqtt连接
+			this.offMQTT();
+		}
+	}
+</script>
+
+<style lang="stylus" scoped>
+	#emergencyEvacuationBigFullScreen {
+		height: 100%;
+		width: 100%;
+		display: flex;
+		overflow: hidden;
+
+		.emergencyEvacuationBigFullScreen-page {
+			// overflow: scroll;
+			overflow: hidden;
+			position: absolute;
+			top: 50%;
+			left: 50%;
+
+			.map-max-box {
+				position: relative;
+
+				.map-max-for-box {
+					position: absolute;
+					display: flex;
+					flex-direction: column;
+
+					.map-max-for-min-box {
+						position: relative;
+
+						.position-box {
+							position: absolute;
+						}
+
+						.map-for-name-p {
+							padding: 0 10px;
+							height: 20px;
+							line-height: 20px;
+							font-size: 14px;
+							text-align: center;
+							color: #333;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							white-space: nowrap;
+						}
+
+						.map-for-num-p {
+							padding: 0 10px;
+							height: 20px;
+							line-height: 20px;
+							font-size: 14px;
+							text-align: center;
+							color: #333;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							white-space: nowrap;
+						}
+
+						.center-move-door-p-t {
+							background: url("@/images/evacuation3_2/icon_sysbjt_m.png") !important;
+							background-size: 100% !important;
+							transform: rotate(180deg);
+						}
+
+						.center-move-door-p-b {
+							background: url("@/images/evacuation3_2/icon_sysbjt_m.png") !important;
+							background-size: 100% !important;
+						}
+
+						.center-move-door-p-l {
+							background: url("@/images/evacuation3_2/icon_sysbjt_m.png") !important;
+							background-size: 100% !important;
+							transform: rotate(90deg);
+						}
+
+						.center-move-door-p-r {
+							background: url("@/images/evacuation3_2/icon_sysbjt_m.png") !important;
+							background-size: 100% !important;
+							transform: rotateZ(270deg);
+						}
+
+						.lightTopOn {
+							background: url("@/images/evacuation3_2//icon_sjt.png");
+							background-size: 100%;
+						}
+
+						.lightTopOff {
+							background: url("@/images/evacuation3_2//icon_shang_hs.png");
+							background-size: 100%;
+						}
+
+						.lightBottomOn {
+							background: url("@/images/evacuation3_2//icon_xjt.png");
+							background-size: 100%;
+						}
+
+						.lightBottomOff {
+							background: url("@/images/evacuation3_2//icon_xia_hs.png");
+							background-size: 100%;
+						}
+
+						.lightLeftOn {
+							background: url("@/images/evacuation3_2//icon_zuo.png");
+							background-size: 100%;
+						}
+
+						.lightLeftOff {
+							background: url("@/images/evacuation3_2//icon_zou_hs.png");
+							background-size: 100%;
+						}
+
+						.lightRightOn {
+							background: url("@/images/evacuation3_2//icon_yuo.png");
+							background-size: 100%;
+						}
+
+						.lightRightOff {
+							background: url("@/images/evacuation3_2//icon_you_hs.png");
+							background-size: 100%;
+						}
+					}
+				}
+
+				.for-map-box {
+					border: 2px solid #fff;
+					background: #CEF2FD;
+				}
+
+				.for-map-box-one {
+					background: #CEFDD5;
+				}
+
+				.for-map-box-two {
+					background: url("@/images/evacuation3_2/icon_yjtd.png") center center no-repeat #006400;
+					background-size: 60px 60px;
+				}
+
+				.for-map-box-two-check {
+					background: url("@/images/evacuation3_2/icon_yjtd.png") center center no-repeat rgba(50, 205, 50, 1);
+					background-size: 80px 80px;
+				}
+
+				.room-type-one {
+					//选中
+					background: rgba(178, 235, 255, 1);
+				}
+
+				.room-type-two {
+					//报警
+					background: rgba(232, 0, 0, 0.4);
+					box-shadow: 0 0 10px 1px #E80000 inset;
+				}
+
+				.room-type-three {
+					//选中报警
+					background: rgba(178, 235, 255, 1);
+					box-shadow: 0 0 10px 1px #E80000 inset;
+				}
+			}
+		}
+
+		.position-button {
+			position: fixed;
+			top: 10px;
+			right: 10px;
+			width: 100px;
+			line-height: 30px;
+			font-size: 16px;
+			background: rgba(0, 0, 0, 0.5);
+			color: #fff;
+			text-align: center;
+			border-radius: 18px;
+			border: none;
+		}
+		.position-button-two{
+			position: fixed;
+			bottom: 20px;
+			left: 50%;
+			width: 240px;
+			line-height: 30px;
+			font-size: 16px;
+			text-align: center;
+			color: #fff;
+			background: #0183FA;
+			border-radius: 4px;
+			margin-left: -120px;
+			border: none;
+		}
+	}
+</style>

+ 268 - 0
pages_manage/gasBottle/aptitudeAudit/aptitudeAudit.vue

@@ -0,0 +1,268 @@
+<!--资质审核-->
+<template>
+    <view id="gasRecycle">
+		<view class="tabTitle" v-if="userType==1">
+			<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="scroll-box">
+		    <view class="list">
+				<view class="list_li" @click="goInfo(item)" v-for="(item,index) in dataList">
+					<view class="list_li_t">
+						<text v-if="curTab==1" :class="item.auditStatus==1?'colorA':'colorB'">{{item.auditStatus==1?'已通过':'未通过'}}</text>
+						<text>{{item.applyUser}}</text>
+						<text style="color: #0183FA;">{{item.remark=='yq'?'用气申请':'资格申请'}}</text>
+					</view>
+					<view class="list_li_b">
+						<img src="@/pages_manage/images/icon_zgsh_sysmph.png">
+						<text>{{item.room}}</text>
+						<img src="@/images/basicsModules/icon_wtzg_sj.png">
+						<text>{{item.createTime}}</text>
+					</view>
+				</view>
+			</view>
+			<view class="get-null-box" v-if="noData">暂无更多数据</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { auditList } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				params:{
+				    pageNum:1,
+					pageSize:10,
+					auditStatus:0,//0待审核  3已审核
+				},
+				userType:uni.getStorageSync('userType'),
+				pageType:0,
+				curTab:0,
+				tabText:['待审核','已审核',],
+                dataList:[],
+				noData:false,
+            }
+        },
+        onLoad() {
+
+        },
+        onShow() {
+
+        },
+        methods: {
+			goInfo(d){
+
+				if(this.curTab==0){//审核
+					uni.redirectTo({
+					    url:'/pages_manage/gasBottle/aptitudeAudit/aptitudeAuditCheck?item='+encodeURIComponent(JSON.stringify(d))
+					});
+				}else if(this.curTab==1){//详情
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/aptitudeAudit/aptitudeAuditDetail?item='+encodeURIComponent(JSON.stringify(d))
+					});
+				}
+
+			},
+			//顶部tab点击
+			tabClick(index) {
+				this.curTab = index;
+				this.pageType=index;
+				this.params.pageNum=1;
+
+				if(index==0){
+					this.params.auditStatus=0;
+				}else if(index==1){
+					this.params.auditStatus=3;
+				}
+				this.dataList=[];
+				this.getList();
+			},
+			//滚动加载事件
+			scrollGet(){
+			   this.params.pageNum += 1;
+			   this.getList();
+			},
+			//查询实验室
+			async getList(){
+				const {data} = await auditList(this.params)
+				if(data.code == 200){
+					let _this=this;
+					let res=data.rows
+					if(res && res.length>0){
+						if(_this.params.pageNum==1){
+							_this.dataList=res;
+						}else{
+							_this.dataList=_this.dataList.concat(res);
+
+						}
+					}else{
+						_this.noData=true;
+					}
+
+
+				}
+			},
+
+        },
+		mounted(){
+		   this.getList();
+
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden
+		.tabTitle{
+			display flex;
+			width:100%;
+			height: 100rpx;
+			background: #fff;
+			margin-bottom 16rpx;
+
+			.tabTitle_li{
+				width:146rpx;
+				text-align center;
+				.tabTitle_text{
+					display: inline-block;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 70rpx;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_across{
+					width: 50rpx;
+					height: 6rpx;
+					background: #0183FA;
+					border-radius: 3rpx;
+					margin-left 50rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+
+			}
+
+
+		}
+     .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+     	.list{
+			width: 710rpx;
+			background: #FFFFFF;
+			border-radius: 10rpx;
+			margin: 20rpx;
+			overflow: hidden;
+			.list_li{
+				height: 134rpx;
+				border-bottom: 1px solid #E0E0E0;
+				margin: 0 20rpx;
+				padding-top: 20rpx;
+				box-sizing: border-box;
+				.list_li_t{
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					.colorA{
+						display: inline-block;
+						background: rgba(48,162,61,0.2);
+						border-radius: 6rpx;
+						font-size: 22rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #30A23D;
+						padding: 6rpx 18rpx;
+						box-sizing: border-box;
+					}
+					.colorB{
+						display: inline-block;
+						background: rgba(165,25,25,0.2);
+						border-radius: 6rpx;
+						font-size: 22rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #A51919;
+						padding: 6rpx 18rpx;
+						box-sizing: border-box;
+					}
+					>text:nth-of-type(2){
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						line-height: 28rpx;
+						margin-left: 12rpx;
+					}
+					>text:nth-of-type(3){
+						flex: 1;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						line-height: 26rpx;
+						text-align: right;
+					}
+
+				}
+				.list_li_b{
+					margin-top: 30rpx;
+					display: flex;
+					>img:nth-of-type(1){
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 16rpx;
+					}
+					>img:nth-of-type(2){
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 20rpx;
+					}
+					>text:nth-of-type(1){
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+						width: 152rpx;
+					}
+					>text:nth-of-type(2){
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+
+					}
+				}
+			}
+		}
+		/*暂无数据*/
+		.get-null-box{
+		    height:100rpx;
+		    line-height:100rpx;
+		    color:#999;
+		    text-align center
+		}
+	 }
+	}
+</style>

+ 474 - 0
pages_manage/gasBottle/aptitudeAudit/aptitudeAuditCheck.vue

@@ -0,0 +1,474 @@
+<!-- 资质审核-->
+<template>
+    <view id="register">
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li" v-if="status=='zg'">
+			<view class="register_li_min" v-for="(item,index) in form.airBottlelist" style="border-bottom:0;" >
+				<view></view>
+				<view>{{item.airName}}-{{item.configName}}:</view>
+				<input v-model="'数量:'+item.bottleNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view></view>
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled type="text" >
+			</view>
+			<!-- 使用期限 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;"></text>使用期限:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form.startTime" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form.endTime" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions" disabled  type="text" >
+			</view>
+			<view  class="issue_li" style="border-bottom:0;"  @click="lookItem(form.applyCertificate)">
+				<view></view>
+				<view>用气申请表:</view>
+				<img class="issue_img" :src="baseUrl+form.applyCertificate">
+			</view>
+			<view  class="check_li" style="border-bottom:0;"
+				v-if="(status=='yq' && form.leadAuditStaus==0 && form.isAdmin && form.audit)||(status=='yq' && form.leadAuditStaus==1 && form.centerAuditStatus!=2 && form.audit)">
+				<view></view>
+				<view>审核意见:</view>
+				<textarea v-model="params.leadAuditCause" class="check_li_b"  placeholder="请输入审核意见"></textarea>
+			</view>
+			<view  class="check_li" style="border-bottom:0;"
+				v-if="(status=='zg' && form.leadAuditStatus==0 && form.isAdmin && form.audit)||(status=='zg' && form.leadAuditStatus==1 && form.centerAuditStatus!=2 && form.audit)">
+				<view></view>
+				<view>审核意见:</view>
+				<textarea v-model="params.leadAuditCause" class="check_li_b"  placeholder="请输入审核意见"></textarea>
+			</view>
+		</view>
+		<!-- 用气实验室 -->
+		<view  class="sub_btn" v-if="status=='yq' && form.leadAuditStaus==0  && form.isAdmin && form.audit">
+			<view class="sub_btn_l" @click="submitForm(2)">审核驳回</view>
+			<view class="sub_btn_r" @click="submitForm(1)">审核通过</view>
+		</view>
+		<!-- 用气实验中心 -->
+		<view  class="sub_btn" v-if="status=='yq' && form.leadAuditStaus==1 && form.centerAuditStatus!=2  && form.audit">
+			<view class="sub_btn_l" @click="submitForm2(2)">审核驳回</view>
+			<view class="sub_btn_r" @click="submitForm2(1)">审核通过</view>
+		</view>
+		<!-- 资格实验室 -->
+		<view  class="sub_btn" v-if="status=='zg' && form.leadAuditStatus==0 && form.isAdmin && form.audit">
+			<view class="sub_btn_l" @click="submitForm(2)">审核驳回</view>
+			<view class="sub_btn_r" @click="submitForm(1)">审核通过</view>
+		</view>
+		<!-- 资格实验中心 -->
+		<view  class="sub_btn" v-if="status=='zg' && form.leadAuditStatus==1 && form.centerAuditStatus!=2  && form.audit">
+			<view class="sub_btn_l" @click="submitForm2(2)">审核驳回</view>
+			<view class="sub_btn_r" @click="submitForm2(1)">审核通过</view>
+		</view>
+	</view>
+</template>
+
+<script>
+    import {auditDetail,qualificationDetail,auditCheck,auditCenterCheck,auditUseAgsCheck,auditUseAgsCenterCheck} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				form:{},
+				id:'',
+				status:null,//yq 用气申请 zg 资格申请
+				params:{
+					id:'',
+					leadAuditCause:'',
+					leadAuditStatus:'',//审核状态 0 未审核 1.审核通过 2.审核未通过
+				},
+            }
+        },
+        onLoad(option) {
+			if(decodeURIComponent(option.item)){
+				this.id=JSON.parse(decodeURIComponent(option.item)).id;
+				this.status=JSON.parse(decodeURIComponent(option.item)).remark;
+			}
+			if(this.status=='yq'){
+				wx.setNavigationBarTitle({
+				  title: '用气申请',
+				})
+			}else if(this.status=='zg'){
+				wx.setNavigationBarTitle({
+				  title: '资格申请',
+				})
+			}
+
+
+        },
+        onShow(){
+
+        },
+
+        methods: {
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+				if(this.status=='yq'){
+					const {data} = await auditDetail({id:this.id})
+					if(data.code==200){
+						let res=data.data
+						_this.form=res.apply;
+						_this.form.isAdmin=res.isAdmin;
+						_this.form.audit=res.audit;
+						_this.form.airBottlelist=res.airBottlelist;
+						_this.params.id=res.apply.id;
+
+					}
+				}else if(this.status=='zg'){
+					const {data} = await qualificationDetail({id:this.id})
+					if(data.code==200){
+						let res=data.data
+						_this.form=res.apply;
+						_this.form.isAdmin=res.isAdmin;
+						_this.form.audit=res.audit;
+						_this.form.airBottlelist=res.airBottlelist;
+						_this.params.id=res.apply.id;
+
+					}
+				}
+
+			},
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			//重新提交
+			//提交实验室
+			async submitForm(auditStatus){
+				let _this = this;
+
+				if(!_this.params.leadAuditCause){
+					uni.showToast({
+					    title: '请输入审核意见!',
+					    icon:"none",
+					    mask:true,
+					    duration: 2000
+					});
+					return
+				}
+				let obj={};
+				obj.leadAuditCause=_this.params.leadAuditCause;
+				obj.id=_this.params.id;
+				if(this.status=='yq'){
+					if(auditStatus==1){//通过
+						obj.leadAuditStaus=1
+					}else if(auditStatus==2){//驳回
+					    obj.leadAuditStaus=2
+					}
+					const {data} = await auditUseAgsCheck(obj);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '审核成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/aptitudeAudit/aptitudeAudit'
+					        });
+					    },2000);
+					}
+				}else if(this.status=='zg'){
+					obj.leadAuditCause=_this.params.leadAuditCause;
+					if(auditStatus==1){//通过
+						obj.leadAuditStatus=1
+					}else if(auditStatus==2){//驳回
+					    obj.leadAuditStatus=2
+					}
+					const {data} = await auditCheck(obj);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '审核成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/aptitudeAudit/aptitudeAudit'
+					        });
+					    },2000);
+					}
+				}
+
+			},
+			//实验中心
+			async submitForm2(auditStatus){
+				let _this = this;
+				let obj={};
+				obj.centerAuditCause=_this.params.leadAuditCause;
+				obj.id=_this.params.id;
+				if(this.status=='yq'){
+					if(auditStatus==1){//通过
+						obj.centerAuditStatus=1
+					}else if(auditStatus==2){//驳回
+					    obj.centerAuditStatus=2
+					}
+					const {data} = await auditUseAgsCenterCheck(obj);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '审核成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/aptitudeAudit/aptitudeAudit'
+					        });
+					    },2000);
+					}
+				}else if(this.status=='zg'){
+					if(auditStatus==1){//通过
+						obj.centerAuditStatus=1
+					}else if(auditStatus==2){//驳回
+					    obj.centerAuditStatus=2
+					}
+					const {data} = await auditCenterCheck(obj);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '审核成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/aptitudeAudit/aptitudeAudit'
+					        });
+					    },2000);
+					}
+				}
+
+
+			},
+        },
+		mounted() {
+			this.getInfo();
+
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 120rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+			/* 审核意见 */
+			.check_li{
+				margin:34rpx 26rpx 0;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.check_li_b{
+					width: 657rpx;
+					height: 211rpx;
+					background: #FFFFFF;
+					border: 1px solid #E0E0E0;
+					border-radius: 10rpx;
+					padding: 20rpx;
+					box-sizing: border-box;
+					margin-top: 20rpx;
+				}
+
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			display: flex;
+			position: fixed;
+			bottom: 30rpx;
+			left: 50rpx;
+			z-index: 1000;
+			.sub_btn_l{
+				width: 325rpx;
+				height: 100rpx;
+				background: linear-gradient(-45deg, #FA9901, #F28E26);
+				border-radius: 50rpx 0px 0px 50rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+			.sub_btn_r{
+				width: 325rpx;
+				height: 100rpx;
+			    background: linear-gradient(-35deg, #309CFF, #0183FA);
+			    border-radius: 0px 50rpx 50rpx 0px;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 259 - 0
pages_manage/gasBottle/aptitudeAudit/aptitudeAuditDetail.vue

@@ -0,0 +1,259 @@
+<!-- 资质审核-->
+<template>
+    <view id="register">
+		<viwe v-if="auditStatus==1" class="tip">已通过审核...</viwe>
+		<viwe v-if="auditStatus==2 || auditStatus==0" class="reject">{{form.centerAuditStatus==2?'提交的申请被驳回,驳回原因为:'+form.centerAuditCause:form.leadAuditCause}}</viwe>
+
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li" v-if="status=='zg'">
+			<view class="register_li_min" v-for="(item,index) in form.airBottlelist" style="border-bottom:0;" >
+				<view></view>
+				<view>{{item.airName}}-{{item.configName}}:</view>
+				<input v-model="'数量:'+item.bottleNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view></view>
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>使用期限-开始:</view>
+				<input v-model="form.startTime" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>使用期限-结束:</view>
+				<input v-model="form.endTime" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions" disabled  type="text" >
+			</view>
+			<view  class="issue_li" style="border-bottom:0;"  @click="lookItem(form.applyCertificate)">
+				<view></view>
+				<view>用气申请表:</view>
+				<img class="issue_img" :src="baseUrl+form.applyCertificate">
+			</view>
+		</view>
+
+		<view  class="sub_btn" v-if="status=='2'" @click="submitForm()">重新申请</view>
+	</view>
+</template>
+
+<script>
+    import {auditDetail,qualificationDetail} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				form:{},
+				id:'',
+				status:null,
+				auditStatus:null,// 0 未审核 1.通过 2.驳回)
+            }
+        },
+        onLoad(option) {
+			if(decodeURIComponent(option.item)){
+				this.id=JSON.parse(decodeURIComponent(option.item)).id;
+				this.status=JSON.parse(decodeURIComponent(option.item)).remark;
+				this.auditStatus=JSON.parse(decodeURIComponent(option.item)).auditStatus;
+			}
+			if(this.status=='yq'){
+				wx.setNavigationBarTitle({
+				  title: '用气申请',
+				})
+			}else if(this.status=='zg'){
+				wx.setNavigationBarTitle({
+				  title: '资格申请',
+				})
+			}
+
+        },
+        onShow(){
+        },
+
+        methods: {
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+				if(this.status=='yq'){
+					const {data} = await auditDetail({id:this.id})
+					if(data.code==200){
+						let res=data.data
+						_this.form=res.apply;
+						_this.form.airBottlelist=res.airBottlelist
+					}
+				}else if(this.status=='zg'){
+					const {data} = await qualificationDetail({id:this.id})
+					if(data.code==200){
+						let res=data.data
+						_this.form=res.apply;
+						_this.form.airBottlelist=res.airBottlelist
+					}
+				}
+			},
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			//重新提交
+			async submitForm(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/examination/examinationAdd?status=1&id='+this.id
+				});
+			},
+        },
+		mounted() {
+			this.getInfo();
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		/* 审核通过 */
+		.tip{
+			width: 750rpx;
+			background: rgba(1,204,39,0.2);
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #01CC27;
+			line-height: 28rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		/* 驳回 */
+		.reject{
+			width: 750rpx;
+			background: #F3DCDC;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #DC0000;
+			line-height: 36rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 200 - 0
pages_manage/gasBottle/examination/examination.vue

@@ -0,0 +1,200 @@
+<!--资格申请-->
+<template>
+    <view id="transportPerson">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in  dataList" @click="goInfo(item)">
+					<img class="for-back-img" src="@/pages_manage/images/icon_yqsq_sys.png">
+					<text class="list_li_text">{{item.room}}</text>
+					<text  :class="item.remark=='1'?'list_li_text2':(item.remark=='0'?'colorA':(item.remark=='2'?'colorB':''))">{{item.remark=='1'?'有效期:'+item.startTime+'至'+item.endTime+'':(item.remark=='0'?'审核中':(item.remark=='2'?'审核驳回':''))}}</text>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+		<view class="sub_btn" @click="subBtn()">申请资格</view>
+	</view>
+</template>
+
+<script>
+	import { qualificationList } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+                dataList:[],
+				status:0,
+            }
+        },
+        onLoad() {
+
+        },
+        onShow() {
+			//今天页面返回,清除存储气瓶信息
+			uni.removeStorageSync('listDetail');
+        },
+
+        methods: {
+			subBtn(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/examination/examinationAdd?status=0'
+				});
+			},
+			goInfo(d){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/examination/examinationDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//滚动加载事件
+			scrollGet(){
+			   this.getData.pageNum += 1;
+			   this.getList();
+			},
+			//查询实验室
+			async getList(){
+				const {data} = await qualificationList()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.rows
+					if(_this.getData.pageNum==1){
+						_this.dataList=res;
+						if(res.length>0){
+							_this.pageType=0;
+						}else{
+							_this.pageType=4;
+						}
+					}else{
+						_this.dataList=_this.dataList.concat(res);
+					}
+				}
+			},
+
+        },
+		mounted(){
+			this.getList();
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		padding-bottom: 220rpx;
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 20rpx 20rpx 0;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+				 height: 110rpx;
+				 display: flex;
+				 align-items: center;
+				 border-bottom:1px solid #f5f5f5;
+				 >img{
+					 width: 60rpx;
+					 height: 60rpx;
+				 }
+				 >text{
+					 font-size: 28rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #333333;
+					 line-height: 28rpx;
+					 display: inline-block;
+
+				 }
+				 .list_li_text{
+					 margin-left: 30rpx;
+					 width: 150rpx;
+					 font-size: 28rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #333333;
+					 line-height: 28rpx;
+				 }
+				 .list_li_text2{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #999999;
+					 line-height: 24rpx;
+				 }
+				 .colorA{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #FF8A00;
+					 line-height: 24rpx;
+				 }
+				 .colorB{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #FF6F6F;
+					 line-height: 24rpx;
+				 }
+
+			 }
+		 }
+     }
+		.empty{
+			text-align: center;
+			margin-top: 316rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+	}
+</style>

+ 743 - 0
pages_manage/gasBottle/examination/examinationAdd.vue

@@ -0,0 +1,743 @@
+<!-- 资质申请/填写资料-->
+<template>
+    <view id="register">
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone"   type="text" >
+			</view style="border: none;">
+		</view>
+		<view class="add_gas">
+			<view class="add_gas_list">
+				<view class="add_gas_list_li" v-for="(item,index) in listDetailArr">
+					<text>{{item.airName}}-{{item.configName}}</text>
+					<text>X{{item.bottleNumber}}</text>
+					<view @click="deleteGas(item)"  class="icon_img"><img src="@/images/basicsModules/icon_sczl_sc.png"></view>
+					<text></text>
+					<text @click="addGas()">重新选择</text>
+				</view>
+			</view>
+			<view class="add_gas_btn" @click="addGas()">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_j.png">
+				添加气瓶
+			</view>
+		</view>
+		<view class="register_li2">
+			<picker @change="bindPickerChange" :value="pickerIndex" :range="pickerArray">
+				<view class="register_li_min">
+					<view>*</view>
+					<view>实验地点:</view>
+					<input v-model="form.location" disabled type="text" placeholder="请选择实验地点" placeholder-style="color:#999;">
+				</view>
+			</picker>
+			<!-- 使用期限 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;">*</text>使用期限:</view>
+				<picker mode="date" @change="startChange($event)">
+					<input class="picker-text" v-model="form.startTime" disabled  type="text"  placeholder="开始时间" placeholder-style="color:#999;">
+				</picker>
+				<view>-</view>
+				<picker mode="date" @change="endChange($event)">
+					<input class="picker-text2" v-model="form.endTime" disabled  type="text"  placeholder="结束时间" placeholder-style="color:#999;">
+				</picker>
+			</view>
+			<view class="register_li_min">
+			    <view>*</view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse"   type="text"  placeholder="请输入气体用途" placeholder-style="color:#999;">
+			</view>
+			<view class="register_li_min">
+			    <view>*</view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions"   type="text"  placeholder="请输入主要安全管理措施" placeholder-style="color:#999;">
+			</view>
+			<view  class="issue_li" style="border-bottom:0;">
+				<view>*</view>
+				<view>用气申请表:</view>
+				<view @click="selectImage">
+					<img :src="baseUrl+form.applyCertificate">
+					<text>+上传图片</text>
+				</view>
+			</view>
+		</view>
+
+		<view v-if="listType==0" class="sub_btn" @click="submitVerify()">提交</view>
+		<view v-if="listType==2" class="sub_btn">重新申请</view>
+	</view>
+</template>
+
+<script>
+    import {labList,getLoginUser,qualificationApplyManageAdd,qualificationDetail,qualificationApplyAmend,qualificationVerify,gasApplyVerify} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				listType:0,
+				form:{
+					applyUser:'',//申请人
+					applyUserid:'',//申请人id
+					phone:'',//	联系方式
+					location:'',//实验地点
+					subjectId:'',//实验地点Id
+					startTime:'',//期限开始
+					endTime:'',//期限结束
+					gasUse:'',//气体用途
+					safetyPrecautions:'',//安全措施
+					applyCertificate:'',//用气申请表
+					listDetail:[],
+				},
+				listDetailArr:[],
+				checkStatus:0,
+				pickerArray:[],
+				pickerArrayList:[],
+				status:null,//0添加1编辑
+				id:null,
+				amount:0,
+            }
+        },
+        onLoad(option) {
+			this.status=option.status;
+			this.id=option.id;
+			if(option.form){
+				this.form=JSON.parse(decodeURIComponent(option.form));
+			}
+			//气瓶数据
+			if(uni.getStorageSync('listDetail')){
+				this.listDetailArr=JSON.parse(decodeURIComponent(uni.getStorageSync('listDetail')));
+			}
+        },
+        onShow(){
+
+        },
+        methods: {
+			//添加气瓶按钮
+			addGas(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/examination/examinationSelect?status='+this.status+'&id='+this.id+'&form='+encodeURIComponent(JSON.stringify(this.form))
+				});
+			},
+			//删除气瓶
+			deleteGas(d){
+				let _this=this;
+				_this.listDetailArr.forEach(function(item){
+					if(d.id==item.id){
+						_this.listDetailArr.splice(item,1);
+						uni.setStorageSync('listDetail',encodeURIComponent(JSON.stringify(_this.listDetailArr)))
+					}
+				})
+			},
+			//查询实验室
+			async labList(){
+				const {data} = await labList()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.data
+					_this.pickerArrayList=res;
+					res.forEach(function(item){
+						_this.pickerArray.push(item.name);
+					})
+
+				}
+			},
+			//查询用户信息
+			async getLoginUser(){
+				const {data} = await getLoginUser()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.data;
+					_this.form.applyUser=res.nickName;
+					_this.form.applyUserid=res.id;
+					_this.form.phone=res.phonenumber;
+				}
+			},
+			//选择实验室
+			async bindPickerChange(e){
+				let _this=this;
+				let index=e.target.value
+				//获取实验室名称
+				_this.form.location=_this.pickerArray[index]
+				//循环获取实验室id
+				_this.pickerArrayList.forEach(function(item){
+					if(_this.pickerArray[index]==item.name){
+						_this.form.subjectId=item.id;
+					}
+				})
+				//校验当前用户有乜有当前实验室使用 权限
+				const {data} = await qualificationVerify({subjectId:_this.form.subjectId})
+				if(data.code==200){
+					let res=data.data
+					if(res.count>0){//有资格
+
+					}else{//没资格
+						uni.showToast({
+							title:'在申请资格前需要先申请对应实验地点的安全准人资格!',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						_this.form.location='';
+						_this.form.subjectId='';
+					}
+				}
+
+			},
+			//时间选中
+			startChange(e){
+				if(new Date(e.target.value).getTime()>=new Date(this.form.endTime).getTime()){
+					 uni.showToast({
+						title: '结束时间不能小于开始时间',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}else{
+					this.form.startTime = e.target.value
+				}
+			},
+			endChange(e){
+				if(new Date(this.form.startTime).getTime()>=new Date(e.target.value).getTime()){
+					 uni.showToast({
+						title: '结束时间不能小于开始时间',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}else{
+					this.form.endTime = e.target.value
+				}
+			},
+
+
+
+
+			// 图片上传
+			selectImage() {
+
+			    let self = this;
+			    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){
+							self.form.applyCertificate=res.data.url
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+			        },
+			        fail: err => {},
+			        complete: () => {
+			            uni.hideLoading()
+			        }
+			    });
+			},
+			//删除图片
+			delImg(index){
+			    this.newData.imgList.splice(index,1);
+			},
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+			    const {data} = await qualificationDetail({id:this.id})
+			    if(data.code==200){
+					let res=data.data
+					_this.form=res.apply;
+					//编辑的时候判断气瓶状态,是选择首次进入列表数据还是修改后的数据
+					if(uni.getStorageSync('listDetail')){
+
+					}else{
+						_this.listDetailArr=res.airBottlelist
+						uni.setStorageSync('listDetail',encodeURIComponent(JSON.stringify(_this.listDetailArr)))
+					}
+				}
+			},
+			//校验气瓶数量
+			async submitVerify(){
+				let _this=this;
+				if(_this.form.location==''){
+					uni.showToast({
+					    title: '请先选择实验室!',
+					    icon:"none",
+					    mask:true,
+					    duration: 2000
+					});
+					return;
+				}
+				_this.amount=0;
+				this.listDetailArr.forEach(function(item){
+					_this.amount+=item.bottleNumber;
+				})
+				const {data} = await gasApplyVerify({subjectId:_this.form.subjectId});
+				if(data.code == 200){
+					let res=data.data
+					if(!res.flgSubject){
+						uni.showToast({
+							title: '请先配置实验室气瓶总量数',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						return
+					}
+					if(!res.flgUser){
+						uni.showToast({
+							title: '请先配置实验室个人气瓶总量数',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						return
+					}
+					if(_this.amount>res.subjectNum){
+						uni.showToast({
+							title: '当前申请气瓶个数大于当前实验室气瓶存量!',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						return
+					}
+					if(_this.amount>res.userNum){
+						uni.showToast({
+							title: '当前申请气瓶个数大于个人气瓶存量!',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						return
+					}
+					_this.submitForm();
+				}else{
+					return
+				}
+			},
+			//提交
+			async submitForm(){
+				let _this = this;
+				if(!this.form.location){
+					uni.showToast({
+						title: '请选择实验地点',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.startTime || !this.form.endTime){
+					uni.showToast({
+						title: '请选择使用期限',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.gasUse){
+					uni.showToast({
+						title: '请输入气体有用途',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.safetyPrecautions){
+					uni.showToast({
+						title: '请输入安全措施',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.applyCertificate){
+					uni.showToast({
+						title: '请上传用气申请表',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(_this.listDetailArr.length<=0){
+					uni.showToast({
+						title: '请选择气瓶',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				// _this.listDetailArr.forEach(function(item){
+				// 	item.gasLevel=item.parent
+				// 	item.gasNorms=item.specValue
+				// })
+				_this.form.listDetailVo=_this.listDetailArr
+				if(_this.status==0){//添加
+					const {data} = await qualificationApplyManageAdd(_this.form);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '提交成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/examination/examination'
+					        });
+					    },2000);
+					}
+				}else if(_this.status==1){//编辑
+					const {data} = await qualificationApplyAmend(_this.form);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '提交成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+						uni.removeStorageSync('listDetail');
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/examination/examination'
+					        });
+					    },2000);
+					}
+				}
+
+			},
+
+        },
+		mounted(){
+		   this.labList()
+		   this.getLoginUser()
+		   if(this.status==1){
+		   	this.getInfo();
+		   }
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		/* 添加气瓶按钮 */
+		.add_gas{
+			width: 710rpx;
+			background: #FFFFFF;
+			border-radius: 20rpx;
+			margin: 20rpx;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			.add_gas_list{
+				.add_gas_list_li{
+					height: 100rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					border-bottom: 1px dotted #f5f5f5;
+					>text{
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						line-height: 28rpx;
+					}
+
+					>text:nth-of-type(1){
+						width: 260rpx;
+					}
+					>text:nth-of-type(2){
+
+					}
+					>text:nth-of-type(3){
+						width: 2rpx;
+						height: 30rpx;
+						background: #E0E0E0;
+						margin: 0 24rpx 0;
+					}
+					>text:nth-of-type(4){
+						color: #0183FA;
+					}
+					.icon_img{
+						width: 30rpx;
+						height: 30rpx;
+						margin-right: 12rpx;
+						>img{
+							width: 30rpx;
+							height: 30rpx;
+						}
+					}
+					>img{
+						width: 28rpx;
+						height: 30rpx;
+						margin-left: 128rpx;
+
+					}
+				}
+			}
+			.add_gas_btn{
+				height: 100rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #0183FA;
+				line-height: 28rpx;
+
+				>img{
+					width: 30rpx;
+					height: 30rpx;
+						margin-right: 14rpx;
+
+				}
+			}
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+
+		}
+		.register_li2{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+					line-height: 100rpx;
+					margin-right: 120rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+			.issue_li{
+				margin:34rpx 26rpx 0;
+
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+					display: inline-block;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+					display: inline-block;
+				}
+				view:nth-child(3){
+					width: 668rpx;
+					height: 270rpx;
+					border: 1px solid #E0E0E0;
+					border-radius: 10rpx;
+					text-align: center;
+					margin-top: 34rpx;
+					position: relative;
+					>img{
+						width: 668rpx;
+						height: 270rpx;
+						position: absolute;
+						z-index: 10;
+					}
+					>text{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 270rpx;
+						position: absolute;
+						left: 278rpx;
+						z-index: 20;
+
+					}
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 286 - 0
pages_manage/gasBottle/examination/examinationDetail.vue

@@ -0,0 +1,286 @@
+<!-- 资质审核-->
+<template>
+    <view id="register">
+		<viwe v-if="status==0" class="tip">信息正在审核中,请耐心等待...</viwe>
+		<viwe v-if="status==2" class="reject">{{form.centerAuditStatus==2?'您提交的审核被驳回,驳回原因为:'+form.centerAuditCause:'您提交的审核被驳回,驳回原因为:'+form.leadAuditCause}}</viwe>
+
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min" v-for="(item,index) in form.airBottlelist" style="border-bottom:0;" >
+				<view></view>
+				<view>{{item.airName}}-{{item.configName}}:</view>
+				<input v-model="'数量:'+item.bottleNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view></view>
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled type="text" >
+			</view>
+			<!-- 使用期限 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;"></text>使用期限:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form.startTime" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form.endTime" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions" disabled  type="text" >
+			</view>
+			<view  class="issue_li" style="border-bottom:0;"  @click="lookItem(form.applyCertificate)">
+				<view></view>
+				<view>用气申请表:</view>
+				<img class="issue_img" :src="baseUrl+form.applyCertificate">
+			</view>
+		</view>
+
+		<view  class="sub_btn" v-if="status=='2'" @click="submitForm()">重新申请</view>
+	</view>
+</template>
+
+<script>
+    import {qualificationDetail} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				form:{},
+				id:'',
+				status:null,
+            }
+        },
+        onLoad(option) {
+			if(decodeURIComponent(option.item)){
+				this.id=JSON.parse(decodeURIComponent(option.item)).id;
+				this.status=JSON.parse(decodeURIComponent(option.item)).remark;
+			}
+
+        },
+        onShow(){
+
+
+
+        },
+
+        methods: {
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+			    const {data} = await qualificationDetail({id:this.id})
+			    if(data.code==200){
+					let res=data.data
+					_this.form=res.apply;
+					_this.form.airBottlelist=res.airBottlelist
+			    }
+			},
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			//重新提交
+			async submitForm(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/examination/examinationAdd?status=1&id='+this.id
+				});
+			},
+        },
+		mounted() {
+			this.getInfo();
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		/* 审核中 */
+		.tip{
+			width: 750rpx;
+			background: rgba(255,144,0,0.2);
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FF9000;
+			line-height: 28rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		/* 驳回 */
+		.reject{
+			width: 750rpx;
+			background: #F3DCDC;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #DC0000;
+			line-height: 36rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 120rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 407 - 0
pages_manage/gasBottle/examination/examinationSelect.vue

@@ -0,0 +1,407 @@
+<!--资质申请-->
+<template>
+    <view id="transportPerson">
+		<view class="search">
+			<view class="search_t">
+				<view class="search_n">
+					<input v-model="params.searchValue" @blur="search()"   type="text" placeholder="请输入气体名称或供应商的关键字">
+					<img  class="icon_img" src="@/images/basicsModules/icon_aqjc_ss.png"/>
+				</view>
+			</view>
+		</view>
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in listDetail">
+					<view class="list_li_l">
+						<view class="list_li_l_t">{{item.airName}}-{{item.configName}}</view>
+						<view class="list_li_l_b">
+							<img  src="@/images/basicsModules/icon_14.png">
+							<text>{{item.companyName}}</text>
+						</view>
+					</view>
+					<view class="list_li_r">
+						<view class="minus"  @click="minus(item)"><img  src="@/pages_manage/images/icon_zgsq_jian.png"></view>
+						<input v-model="item.bottleNumber"  disabled  type="text" >
+						<view class="add"  @click="add(item)"><img  src="@/pages_manage/images/icon_zgsq_j.png"></view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+		<view v-if="amount>0" class="sub_btn">
+			<view class="sub_btn_l">已选择{{amount}}个气瓶</view>
+			<view class="sub_btn_r" @click="submitForm()">提交</view>
+		</view>
+		<view v-if="amount==0" class="sub_btn2">
+			<view class="sub_btn_l">暂未选择气瓶</view>
+			<view class="sub_btn_r">提交</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { taskListGood } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				params:{
+					searchValue:'',
+				},
+                listDetail:[],
+				form:{
+
+				},
+				amount:0,
+				status:null,//0添加1编辑
+				id:null,
+            }
+        },
+        onLoad(option) {
+			this.status=option.status;
+			this.id=option.id;
+
+			if(option.form){
+				this.form=JSON.parse(decodeURIComponent(option.form));
+			}
+        },
+        onShow() {
+
+        },
+        methods: {
+			search(){
+				 this.getList();
+			},
+			minus(d) {
+				let _this=this;
+				 if(d.bottleNumber>0){
+					 _this.amount=0;
+					d.bottleNumber--;
+					this.listDetail.forEach(function(item){
+						_this.amount+=item.bottleNumber;
+					})
+				 }
+
+			},
+			add(d) {
+				let _this=this;
+				_this.amount=0;
+				d.bottleNumber++;
+				this.listDetail.forEach(function(item){
+					_this.amount+=item.bottleNumber;
+				})
+
+			},
+			//滚动加载事件
+			scrollGet(){
+
+			},
+			//获取列表数据
+			async getList(){
+				    let _this = this;
+				    const {data} = await taskListGood(this.params);
+				    if(data.code==200){
+						let res=data.rows;
+						if(res){
+							let arr=[];
+							res.forEach(function(item){
+								item.bottleNumber=0;
+							})
+							_this.listDetail=res;
+							if(_this.status==0){//新增
+								//如果有值回显
+								if(uni.getStorageSync('listDetail')){
+									arr=JSON.parse(decodeURIComponent(uni.getStorageSync('listDetail')));
+
+									_this.listDetail.forEach(function(item){
+										arr.forEach(function(item2){
+											if(item.id==item2.id){
+												item.bottleNumber=item2.bottleNumber;
+												_this.amount+=item.bottleNumber
+											}
+										})
+									})
+								}
+							}else if(_this.status==1){//编辑
+								//如果有值回显
+								if(uni.getStorageSync('listDetail')){
+									arr=JSON.parse(decodeURIComponent(uni.getStorageSync('listDetail')));
+
+									_this.listDetail.forEach(function(item){
+										arr.forEach(function(item2){
+											if(item.id==item2.airBottleConfigId){
+												item.bottleNumber=item2.bottleNumber;
+												_this.amount+=item.bottleNumber
+											}
+										})
+									})
+								}
+							}
+						}
+
+				    }
+				},
+			//注册提交
+			async submitForm(){
+				let _this = this;
+				if(_this.listDetail){
+					let arr=[];
+					_this.listDetail.forEach(function(item){
+						if(item.bottleNumber>0){
+							arr.push(item)
+						}
+					})
+					uni.setStorageSync('listDetail',encodeURIComponent(JSON.stringify(arr)))
+				}
+				uni.redirectTo({
+					url: '/pages_manage/gasBottle/examination/examinationAdd?status='+this.status+'&id='+this.id+'&form='+encodeURIComponent(JSON.stringify(this.form)),
+				});
+			},
+
+        },
+		mounted(){
+		   this.getList()
+
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+
+		/* 搜索 */
+		.search{
+			.search_t{
+				background: #FFFFFF;
+				padding: 20rpx;
+				box-sizing: border-box;
+				.search_n{
+					width: 710rpx;
+					height: 80rpx;
+					border: 1px solid #E0E0E0;
+					border-radius: 40rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					padding:0 40rpx;
+					box-sizing: border-box;
+					>input{
+						width: 640rpx;
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #CCCCCC;
+						line-height: 30rpx;
+					}
+					>img{
+						width: 30rpx;
+						height: 30rpx;
+					}
+				}
+
+			}
+			.search_b{
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin: 20rpx 0;
+				>text{
+					display: inline-block;
+					width: 200rpx;
+					height: 60rpx;
+					background: #FFFFFF;
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 60rpx;
+					text-align: center;
+					margin-right: 20rpx;
+				}
+			}
+		}
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 padding-top: 30rpx;
+		 padding-bottom: 180rpx;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 0 20rpx;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+				 height: 180rpx;
+				 display: flex;
+				 justify-content: space-between;
+				 padding: 0 20rpx;
+				 box-sizing: border-box;
+				 border-bottom:1px solid #f5f5f5;
+				 .list_li_l{
+					 flex: 1;
+					 .list_li_l_t{
+						 font-size: 28rpx;
+						 font-family: PingFang SC;
+						 font-weight: 500;
+						 color: #333333;
+						 line-height: 28rpx;
+						 margin-top: 44rpx;
+					 }
+					 .list_li_l_b{
+						 display: flex;
+						 justify-content: flex-start;
+						 margin: 42rpx 0 34rpx 0;
+						 >img{
+							 width: 28rpx;
+							 height: 30rpx;
+							 margin-right: 18rpx;
+						 }
+						 >text{
+							font-size: 24rpx;
+							font-family: PingFang SC;
+							font-weight: 400;
+							color: #666666;
+							line-height: 24rpx;
+						 }
+					 }
+				 }
+				 .list_li_r{
+					 width: 222rpx;
+					 display: flex;
+					 justify-content: space-between;
+					 align-items: center;
+					 .minus{
+						 width: 96rpx;
+						 height: 96rpx;
+						 >img{
+							width: 36rpx;
+							height: 36rpx;
+							margin-top: 30rpx;
+							margin-left: 30rpx;
+						 }
+					 }
+					 .add{
+						 width: 96rpx;
+						 height: 96rpx;
+						>img{
+							width: 36rpx;
+							height: 36rpx;
+						    margin-top: 30rpx;
+						    margin-left: 30rpx;
+						}
+					 }
+					 >input{
+						 text-align: center;
+						 width: 90rpx;
+						 font-size: 28rpx;
+						 font-family: PingFang SC;
+						 font-weight: 500;
+						 color: #333333;
+						 line-height: 36rpx;
+					 }
+				 }
+
+			 }
+		 }
+     }
+		.empty{
+			text-align: center;
+			margin-top: 316rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 750rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 0 20rpx 0 40rpx;
+			box-sizing: border-box;
+			z-index: 1000;
+			.sub_btn_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 120rpx;
+				flex: 1;
+			}
+			.sub_btn_r{
+				width: 200rpx;
+				height: 70rpx;
+				background: #0183FA;
+				border-radius: 35rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 70rpx;
+				text-align: center;
+			}
+		}
+		.sub_btn2{
+			width: 750rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 0 20rpx 0 40rpx;
+			box-sizing: border-box;
+			z-index: 1000;
+			.sub_btn_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #CCCCCC;
+				line-height: 120rpx;
+				flex: 1;
+			}
+			.sub_btn_r{
+				width: 200rpx;
+				height: 70rpx;
+				background: #E0E0E0;
+				border-radius: 35rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+				line-height: 70rpx;
+				text-align: center;
+			}
+		}
+	}
+</style>

+ 528 - 0
pages_manage/gasBottle/gasApply/awaitStorage.vue

@@ -0,0 +1,528 @@
+<!-- 待入库 -->
+<template>
+    <view id="register">
+		<view class="title">{{item.airName}}-{{item.configName}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view></view>
+				<view>司机姓名:</view>
+				<input v-model="infoForm.user.userName"   type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>司机号牌:</view>
+				<input v-model="infoForm.car.carCode"   type="text" >
+			</view>
+			<view class="register_li_min" style="border-bottom:0;">
+				<view></view>
+				<view>联系方式:</view>
+				<input v-model="infoForm.user.phone"   type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min" v-for="(item,index) in list">
+				<view></view>
+				<view>{{item.name}}</view>
+				<view class="radio_group">
+					<view class="radio" v-for="(item2,index2) in item.radioList" @click="radioClick(item,item2)">
+						<img v-if="!item2.checked" src="@/images/basicsModules/icon_5.png">
+						<img v-if="item2.checked" src="@/images/basicsModules/icon_6.png">
+						<text>{{item2.name}}</text>
+					</view>
+				</view>
+			</view>
+			<view class="register_li_min">
+				<view>*</view>
+				<view>气表压力:</view>
+				<input v-model="form.gasPressure" maxlength="4"  type="text" placeholder-style="color:#999;" placeholder="请输入气表压力">
+			</view>
+			<!-- 检验有效期 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;">*</text>检验有效期:</view>
+				<picker mode="date" @change="startChange($event)">
+					<input class="picker-text" v-model="form.validateStartTime" disabled  type="text" placeholder-style="color:#999;"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" @change="endChange($event)">
+					<input class="picker-text2" v-model="form.validateEndTime" disabled  type="text"  placeholder-style="color:#999;" placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min" >
+				<view>*</view>
+				<view>电子标签:</view>
+				<input v-model="form.electronicTag"   type="text" placeholder-style="color:#999;" placeholder="请输入电子标签ID">
+				<img @click.stop="saoCode"  class="code_img" src="@/images/basicsModules/icon_aqjc_sm.png">
+			</view>
+			<view class="register_li_min" style="border: none;">
+			    <view>*</view>
+				<view>验收备注:</view>
+				<input v-model="form.validateRemark"   type="text" placeholder-style="color:#999;" placeholder="请输入验收备注">
+			</view>
+		</view>
+		<view class="sub_btn">
+			<view class="sub_btn_l" @click="rejection()">拒收</view>
+			<view class="sub_btn_r" @click="submitForm()">确认信息并入库</view>
+		</view>
+	</view>
+</template>
+
+<script>
+    import {gasApplyDetailDrkDetail,gasApplyStorageAdd} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				form:{
+					gasPressure:'',
+					validateStartTime:'',
+					validateEndTime:'',
+					electronicTag:'',
+					validateRemark:'',
+				},
+				infoForm:{},
+				item:{},
+				id:{},
+				list:[
+					{
+						id:'0',
+						name:'瓶身颜色:',
+						lab:'color',
+						radioList:[
+							{
+								id:1,
+								name:'灰',
+								checked:true,
+							},
+							{
+								id:2,
+								name:'白',
+								checked:false,
+							},
+							{
+								id:3,
+								name:'蓝',
+								checked:false,
+							},
+						]
+
+					},
+					{
+						id:'0',
+						name:'有无手轮:',
+						lab:'isHandwheel',
+						radioList:[
+							{
+								id:1,
+								name:'有',
+								checked:true,
+							},
+							{
+								id:0,
+								name:'无',
+								checked:false,
+							},
+						]
+
+					},
+					{
+						id:'0',
+						name:'是否固定:',
+						lab:'isFixed',
+						radioList:[
+							{
+								id:1,
+								name:'是',
+								checked:true,
+							},
+							{
+								id:0,
+								name:'否',
+								checked:false,
+							},
+						]
+
+					},
+					{
+						id:'0',
+						name:'电子标签:',
+						lab:'isElectronicTag',
+						radioList:[
+							{
+								id:1,
+								name:'有',
+								checked:true,
+							},
+							{
+								id:0,
+								name:'无',
+								checked:false,
+							},
+						]
+
+					},
+					{
+						id:'0',
+						name:'气瓶状态标牌:',
+						lab:'isStatusSign',
+						radioList:[
+							{
+								id:1,
+								name:'有',
+								checked:true,
+							},
+							{
+								id:0,
+								name:'无',
+								checked:false,
+							},
+						]
+
+					},
+					{
+						id:'0',
+						name:'标牌已拍照:',
+						lab:'isPhoto',
+						radioList:[
+							{
+								id:1,
+								name:'有',
+								checked:true,
+							},
+							{
+								id:0,
+								name:'无',
+								checked:false,
+							},
+						]
+
+					},
+				]
+            }
+        },
+        onLoad(option) {
+        	this.item=JSON.parse(decodeURIComponent(option.item));
+        },
+        onShow(){
+
+        },
+		mounted(){
+		  this.getInfo()
+
+		},
+        methods: {
+			//开始时间选中事件
+			startChange(e){
+				this.form.validateStartTime=e.target.value
+			},
+			//结束时间选中事件
+			endChange(e){
+				this.form.validateEndTime=e.target.value
+			},
+			//单选按钮
+			radioClick(p,d){
+				d.checked=!d.checked
+				if(d.checked){
+					//如果有选中的,循环把其他选中的取消
+					p.radioList.forEach(function(item){
+						if(item.id==d.id){
+
+						}else{
+							item.checked=false;
+						}
+					})
+				}else{
+
+				}
+
+			},
+			//调用摄像头
+			saoCode(){
+				let _this = this;
+			    uni.scanCode({
+			        onlyFromCamera: true,
+			        success: function (res) {
+			    		_this.form.electronicTag=res.result
+			        }
+			    });
+			},
+			//获取列表数据
+			async getInfo(){
+				let _this = this;
+				const {data} = await gasApplyDetailDrkDetail({id:_this.item.id});
+				if(data.code==200){
+					if(data.code==200){
+						let res = data.data;
+						_this.infoForm=res
+					}
+
+				}
+			},
+			//拒收
+			async rejection(){
+				uni.redirectTo({
+				     url: '/pages_manage/gasBottle/gasApply/gasApplyReject?item='+encodeURIComponent(JSON.stringify(this.item))+'&item2='+encodeURIComponent(JSON.stringify(this.infoForm))
+				 });
+			},
+			//提交
+			async submitForm(){
+				let _this = this;
+				if(!this.form.gasPressure){
+					uni.showToast({
+						title: '请输入气表压力',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.validateStartTime || !this.form.validateEndTime){
+					uni.showToast({
+						title: '请选择检验有效期',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.electronicTag){
+					uni.showToast({
+						title: '请输入电子标签',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.validateRemark){
+					uni.showToast({
+						title: '请输入验收备注',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				_this.list.forEach(function(item){
+					item.radioList.forEach(function(item2){
+						if(item.lab=='color' && item2.checked){
+							_this.form.color=item2.id;
+						}else if(item.lab=='isHandwheel' && item2.checked){
+							_this.form.isHandwheel=item2.id;
+						}else if(item.lab=='isFixed' && item2.checked){
+							_this.form.isFixed=item2.id;
+						}else if(item.lab=='isElectronicTag' && item2.checked){
+							_this.form.isElectronicTag=item2.id;
+						}else if(item.lab=='isStatusSign' && item2.checked){
+							_this.form.isStatusSign=item2.id;
+						}else if(item.lab=='isPhoto' && item2.checked){
+							_this.form.isPhoto=item2.id;
+						}
+					})
+				})
+				_this.form.driverName=_this.infoForm.user.userName
+				_this.form.driverId=_this.infoForm.user.id
+				_this.form.carCode=_this.infoForm.car.carCode
+				_this.form.carCodeId =_this.infoForm.car.id
+				_this.form.phone=_this.infoForm.user.phone
+				_this.form.airStatus=0;
+				_this.form.taskId=_this.item.taskId;
+				_this.form.taskDetailId=_this.item.id;
+				_this.form.airName=_this.item.airName;
+				_this.form.parent=_this.item.parent;
+				_this.form.specValue=_this.item.specValue;
+				_this.form.configName=_this.item.configName;
+				_this.form.companyName=_this.item.companyName;
+				_this.form.airConstituents=_this.item.airConstituents;
+				_this.form.airBottleConfigId=_this.item.airBottleConfigId;
+				_this.form.airBottleId =_this.item.airBottleId;
+
+				const {data} = await gasApplyStorageAdd(_this.form);
+				if(data.code == 200){
+				    uni.showToast({
+				        title: '提交成功',
+				        icon:"none",
+				        mask:true,
+				        duration: 2000
+				    });
+				    setTimeout(function(){
+				       uni.redirectTo({
+				            url: '/pages_manage/gasBottle/gasApply/gasApply'
+				        });
+				    },2000);
+				}
+			},
+
+
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex
+        flex-direction column;
+		padding-bottom: 220rpx;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					flex: 1;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				.picker-text{
+					text-align: right;
+					font-size: 28rpx;
+				}
+
+				>input{
+					width 400rpx;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				.code_img{
+					width: 30rpx;
+					height: 28rpx;
+					margin-left: 26rpx;
+				}
+				/* 单选按钮 */
+				.radio_group{
+					display: flex;
+					.radio{
+						display: flex;
+						margin-left: 80rpx;
+						margin-right: 0;
+						>img{
+							width: 30rpx;
+							height: 30rpx;
+						}
+						>text{
+							margin-left: 34rpx;
+							font-size: 28rpx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #333333;
+							line-height: 28rpx;
+						}
+					}
+				}
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					margin-right: 96rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			display: flex;
+			position: fixed;
+			bottom: 30rpx;
+			left: 50rpx;
+			z-index: 1000;
+			.sub_btn_l{
+				width: 325rpx;
+				height: 100rpx;
+				background: linear-gradient(-45deg, #FA9901, #F28E26);
+				border-radius: 50rpx 0px 0px 50rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+			.sub_btn_r{
+				width: 325rpx;
+				height: 100rpx;
+			    background: linear-gradient(-35deg, #309CFF, #0183FA);
+			    border-radius: 0px 50rpx 50rpx 0px;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 203 - 0
pages_manage/gasBottle/gasApply/gasApply.vue

@@ -0,0 +1,203 @@
+<!--气瓶申请-->
+<template>
+    <view id="transportPerson">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in dataList" @click="goInfo(item)">
+					<view class="list_li_t">
+						<img class="for-back-img" src="@/pages_manage/images/icon_ysclgl_cl.png">
+						<text>申请时间:{{item.createTime}}</text>
+						<text v-if="item.applyNum==item.storageNum">已全部入库</text>
+					</view>
+					<view class="list_li_b">
+						<view>申请:<text>{{item.applyNum}}</text></view>
+						<view>入库:<text>{{item.storageNum}}</text></view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+		<view class="sub_btn" @click="subBtn()">提交申请</view>
+	</view>
+</template>
+
+<script>
+	import { gasApplyList } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+				pageType:0,
+                dataList:[],
+            }
+        },
+        onLoad() {
+
+        },
+        onShow() {
+
+        },
+
+        methods: {
+
+			//滚动加载事件
+			scrollGet(){
+			   this.getData.pageNum += 1;
+			   this.getList();
+			},
+			subBtn(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/gasApply/gasApplyAdd?status=0'
+				});
+			},
+			goInfo(d){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/gasApply/gasApplyList?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//获取列表数据
+				async getList(){
+				   let _this=this;
+				    const {data} = await gasApplyList(this.getData);
+				    if(data.code==200){
+						let res=data.rows;
+						if(_this.getData.pageNum==1){
+							_this.dataList=res;
+							if(res.length>0){
+								_this.pageType=0;
+							}else{
+								_this.pageType=4;
+							}
+						}else{
+							_this.dataList=_this.dataList.concat(res);
+						}
+				    }
+				},
+
+        },
+		mounted(){
+			this.getList()
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		margin-top: 20rpx;
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 padding-bottom: 180rpx;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 0 20rpx;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+				 border-bottom:1px solid #f5f5f5;
+				 padding: 30rpx 0 20rpx 0;
+				 box-sizing: border-box;
+				.list_li_t{
+					display: flex;
+					align-items: center;
+					>img{
+						width: 30rpx;
+						height: 30rpx;
+						margin-right: 16rpx;
+					}
+					>text:nth-of-type(1){
+						width: 530rpx;
+						font-size: 28rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						line-height: 28rpx;
+					}
+					>text:nth-of-type(2){
+						width: 130rpx;
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #00CC26;
+						line-height: 24rpx;
+					}
+				}
+				.list_li_b{
+					display: flex;
+					margin-top: 42rpx;
+					>view{
+						width: 150rpx;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #333333;
+						line-height: 26rpx;
+						>text{
+							font-size: 26rpx;
+							color: #0183FA;
+						}
+					}
+					>view:nth-of-type(2){
+						>text{
+							font-size: 26rpx;
+							color: #00CC26;
+						}
+					}
+				}
+			 }
+		 }
+     }
+		.empty{
+			text-align: center;
+			margin-top: 316rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+	}
+</style>

+ 469 - 0
pages_manage/gasBottle/gasApply/gasApplyAdd.vue

@@ -0,0 +1,469 @@
+<!--申请气瓶-->
+<template>
+    <view id="transportPerson">
+		<picker @change="bindPickerChange" :value="pickerIndex" :range="pickerArray">
+			<view class="title">
+				<viwe class="title_l">实验地点:</viwe>
+				<input class="title_r" v-model="form.location" disabled type="text" placeholder="请选择实验地点">
+			</view>
+		</picker>
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in listDetail">
+					<view class="list_li_l">
+						<view class="list_li_l_t">{{item.airName}}-{{item.configName}}</view>
+						<view class="list_li_l_b">
+							<img  src="@/images/basicsModules/icon_14.png">
+							<text>{{item.companyName}}</text>
+						</view>
+					</view>
+					<view class="list_li_r">
+						<view class="minus"  @click="minus(item)"><img  src="@/pages_manage/images/icon_zgsq_jian.png"></view>
+						<input v-model="item.bottleNumber"  disabled  type="text" >
+						<view class="add"  @click="add(item)"><img  src="@/pages_manage/images/icon_zgsq_j.png"></view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/icon_sqqp_sqys.png">
+			<view>
+				<text>气瓶已全部向供应商申请运输</text>
+				<text>如需更多气瓶请重新提交资格申请</text>
+			</view>
+		</view>
+		<view v-if="amount>0" class="sub_btn">
+			<view class="sub_btn_l">已选择{{amount}}个气瓶</view>
+			<view class="sub_btn_r" @click="submitVerify()">提交</view>
+		</view>
+		<view v-if="amount==0" class="sub_btn2">
+			<view class="sub_btn_l">暂未选择气瓶</view>
+			<view class="sub_btn_r">提交</view>
+		</view>
+		<view class="sub_btn2" v-if="pageType==4">提交申请</view>
+	</view>
+</template>
+<script>
+	import { taskListGood,labList,gasApplyAdd,gasApplyVerify} from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				params:{
+					pageNum:1,
+					pageSize:20,
+					searchValue:'',
+				},
+                listDetail:[],
+				form:{
+					location:'',
+				},
+				pickerArray:[],
+				pickerArrayList:[],
+				amount:0,
+				status:null,//0添加1编辑
+            }
+        },
+        onLoad(option) {
+			this.status=option.status;
+        },
+        onShow() {
+
+        },
+        methods: {
+			search(){
+				 this.getList();
+			},
+			minus(d) {
+				let _this=this;
+				 if(d.bottleNumber>0){
+					 _this.amount=0;
+					d.bottleNumber--;
+					this.listDetail.forEach(function(item){
+						_this.amount+=item.bottleNumber;
+					})
+				 }
+
+			},
+			add(d) {
+				let _this=this;
+				_this.amount=0;
+				d.bottleNumber++;
+				this.listDetail.forEach(function(item){
+					_this.amount+=item.bottleNumber;
+				})
+
+			},
+			//滚动加载事件
+			scrollGet(){
+			   this.params.pageNum += 1;
+			   this.getList();
+			},
+			//选择实验室
+			bindPickerChange(e){
+				let _this=this;
+				let index=e.target.value
+				//获取实验室名称
+				_this.form.location=_this.pickerArray[index]
+				//循环获取实验室id
+				_this.pickerArrayList.forEach(function(item){
+					if(_this.pickerArray[index]==item.name){
+						_this.form.locationId=item.id;
+					}
+				})
+
+			},
+			//查询实验室
+			async labList(){
+				const {data} = await labList()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.data
+					_this.pickerArrayList=res;
+					res.forEach(function(item){
+						_this.pickerArray.push(item.name);
+					})
+
+				}
+			},
+			//获取列表数据
+				async getList(){
+				    let _this = this;
+
+				    const {data} = await taskListGood(this.params);
+				    if(data.code==200){
+						let res=data.rows;
+						if(res){
+
+							if(_this.params.pageNum==1){
+								res.forEach(function(item){
+									item.bottleNumber=0;
+								})
+								_this.listDetail=res;
+							}else{
+								res.forEach(function(item){
+									item.bottleNumber=0;
+								})
+								_this.listDetail=_this.listDetail.concat(res);
+
+							}
+
+						}
+
+				    }
+				},
+				async submitVerify(){
+
+					let _this=this;
+
+					if(_this.form.location==''){
+						uni.showToast({
+						    title: '请先选择实验室!',
+						    icon:"none",
+						    mask:true,
+						    duration: 2000
+						});
+						return;
+					}
+					const {data} = await gasApplyVerify({subjectId:_this.form.locationId});
+					if(data.code == 200){
+						let res=data.data
+						if(!res.flgSubject){
+							uni.showToast({
+								title: '请先配置实验室气瓶总量数',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}
+						if(!res.flgUser){
+							uni.showToast({
+								title: '请先配置实验室个人气瓶总量数',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}
+						if(_this.amount>res.subjectNum){
+							uni.showToast({
+								title: '当前申请气瓶个数大于当前实验室气瓶存量!',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}
+						if(_this.amount>res.userNum){
+							uni.showToast({
+								title: '当前申请气瓶个数大于个人气瓶存量!',
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+							return
+						}
+						_this.submitForm();
+					}else{
+						return
+					}
+				},
+			//注册提交
+			async submitForm(){
+				let _this = this;
+
+				if(_this.listDetail){
+					let arr=[];
+					let supplierId='';
+					_this.listDetail.forEach(function(item){
+						item.supplierId=item.companyId
+						supplierId=item.companyId
+						if(item.bottleNumber>0){
+							arr.push(item)
+						}
+					})
+					_this.form.detailListVO=arr;
+				}
+				const {data} = await gasApplyAdd(_this.form);
+				if(data.code == 200){
+				    uni.showToast({
+				        title: '提交成功',
+				        icon:"none",
+				        mask:true,
+				        duration: 2000
+				    });
+				    setTimeout(function(){
+				       uni.redirectTo({
+				            url: '/pages_manage/gasBottle/gasApply/gasApply'
+				        });
+				    },2000);
+				}
+			},
+
+        },
+		mounted(){
+		   this.getList()
+		   this.labList()
+
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		.title{
+			width: 750rpx;
+			height: 118rpx;
+			background: #FFFFFF;
+			padding: 0 40rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 20rpx;
+			.title_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+				line-height: 118rpx;
+			}
+			.title_r{
+				flex: 1;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				text-align: right;
+			}
+		}
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 padding-top: 30rpx;
+		 padding-bottom: 180rpx;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 0 20rpx;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+				 height: 180rpx;
+				 display: flex;
+				 justify-content: space-between;
+				 padding: 0 20rpx;
+				 box-sizing: border-box;
+				 border-bottom:1px solid #f5f5f5;
+				 .list_li_l{
+					 flex: 1;
+					 .list_li_l_t{
+						 font-size: 28rpx;
+						 font-family: PingFang SC;
+						 font-weight: 500;
+						 color: #333333;
+						 line-height: 28rpx;
+						 margin-top: 44rpx;
+					 }
+					 .list_li_l_b{
+						 display: flex;
+						 justify-content: flex-start;
+						 margin: 42rpx 0 34rpx 0;
+						 >img{
+							 width: 28rpx;
+							 height: 30rpx;
+							 margin-right: 18rpx;
+						 }
+						 >text{
+							font-size: 24rpx;
+							font-family: PingFang SC;
+							font-weight: 400;
+							color: #666666;
+							line-height: 24rpx;
+						 }
+					 }
+				 }
+				.list_li_r{
+					 width: 222rpx;
+					 display: flex;
+					 justify-content: space-between;
+					 align-items: center;
+					 .minus{
+						 width: 96rpx;
+						 height: 96rpx;
+						 >img{
+							width: 36rpx;
+							height: 36rpx;
+							margin-top: 30rpx;
+							margin-left: 30rpx;
+						 }
+					 }
+					 .add{
+						 width: 96rpx;
+						 height: 96rpx;
+						>img{
+							width: 36rpx;
+							height: 36rpx;
+							margin-top: 30rpx;
+							margin-left: 30rpx;
+						}
+					 }
+					 >input{
+						 text-align: center;
+						 width: 90rpx;
+						 font-size: 28rpx;
+						 font-family: PingFang SC;
+						 font-weight: 500;
+						 color: #333333;
+						 line-height: 36rpx;
+					 }
+				}
+
+			 }
+		 }
+     }
+		.empty{
+			width: 710rpx;
+			height: 700rpx;
+			background: #FFFFFF;
+			border-radius: 20px;
+			text-align: center;
+			margin:20rpx;
+			>img{
+				width: 430rpx;
+				height: 280rpx;
+				margin-left: 142rpx;
+				margin-top: 72rpx;
+			}
+			>view{
+				margin-top: 48rpx;
+				>text{
+					display: block;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 44rpx;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 750rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 0 20rpx 0 40rpx;
+			box-sizing: border-box;
+			z-index: 1000;
+			.sub_btn_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 120rpx;
+				flex: 1;
+			}
+			.sub_btn_r{
+				width: 200rpx;
+				height: 70rpx;
+				background: #0183FA;
+				border-radius: 35rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 70rpx;
+				text-align: center;
+			}
+		}
+		.sub_btn2{
+			width: 750rpx;
+			height: 120rpx;
+			background: #FFFFFF;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 0 20rpx 0 40rpx;
+			box-sizing: border-box;
+			z-index: 1000;
+			.sub_btn_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #CCCCCC;
+				line-height: 120rpx;
+				flex: 1;
+			}
+			.sub_btn_r{
+				width: 200rpx;
+				height: 70rpx;
+				background: #E0E0E0;
+				border-radius: 35rpx;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+				line-height: 70rpx;
+				text-align: center;
+			}
+		}
+	}
+</style>

+ 311 - 0
pages_manage/gasBottle/gasApply/gasApplyList.vue

@@ -0,0 +1,311 @@
+<!--申请详情-->
+<template>
+    <view id="transportPerson">
+		<view class="title">
+			<viwe class="title_l">申请时间:</viwe>
+			<viwe class="title_r">{{createTime}}</viwe>
+		</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>
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in dataList">
+					<view class="list_li_l" >
+						<view class="list_li_l_t">{{item.airName}}-{{item.configName}}</view>
+						<view class="list_li_l_b">
+							<img  src="@/images/basicsModules/icon_14.png">
+							<text>{{item.companyName}}</text>
+						</view>
+						<view v-if="pageType==2 || pageType==3" class="list_li_l_b">
+							<img  src="@/images/basicsModules/icon_aqbj_sj.png">
+							<text v-if="pageType==2">入库时间:{{item.createTime}}</text>
+							<text v-if="pageType==3">拒收时间:{{item.rejectionApplyTime}}</text>
+						</view>
+						<view  v-if="pageType==3" class="list_li_l_b">
+							<img  src="@/pages_manage/images/icon_sqxq_jsyy.png">
+							<view class="cause"><text>拒收原因:</text><text>{{item.rejectionApplyRemark}}</text></view>
+						</view>
+					</view>
+					<view v-if="pageType==0" class="list_li_r" @click="enterStockFun(item)">入库</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { gasApplyDetailDrk,gasApplyDetailWps,gasApplyDetailYrk,gasApplyDetailYjs} from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+				userType:uni.getStorageSync('userType'),
+				pageType:0,
+				curTab:0,
+				tabText:['待入库','未派送','已入库','已拒收'],
+                dataList:[],
+				status:null,//0添加1编辑
+				id:null,
+				createTime:'',
+            }
+        },
+        onLoad(option) {
+			let item=JSON.parse(decodeURIComponent(option.item));
+			this.createTime=item.createTime;
+			this.id=item.id;
+        },
+        onShow() {
+
+        },
+		mounted(){
+		  this.getList()
+		},
+        methods: {
+			//顶部tab点击
+			tabClick(index) {
+				this.curTab = index;
+				this.pageType=index;
+				this.dataList=[];
+				if(this.pageType==0){
+					this.getList()
+				}else if(this.pageType==1){
+					this.getList2()
+				}else if(this.pageType==2){
+					this.getList3()
+				}else if(this.pageType==3){
+					this.getList4()
+
+				}
+
+			},
+			//待审核入库按钮
+			enterStockFun(d){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/gasApply/awaitStorage?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//滚动加载事件
+			scrollGet(){
+
+			},
+			//待入库
+			async getList(){
+				let _this = this;
+				const {data} = await gasApplyDetailDrk({id:_this.id});
+				if(data.code==200){
+					if(data.code==200){
+						let res = data.data.list;
+						_this.dataList=res
+					}
+				}
+			},
+			//未派送
+			async getList2(){
+				let _this = this;
+				const {data} = await gasApplyDetailWps({id:_this.id});
+				if(data.code==200){
+					if(data.code==200){
+						let res = data.data.list;
+						_this.dataList=res
+					}
+				}
+			},
+			//已入库
+			async getList3(){
+				let _this = this;
+				const {data} = await gasApplyDetailYrk({id:_this.id});
+				if(data.code==200){
+					if(data.code==200){
+						let res = data.rows;
+						_this.dataList=res
+					}
+				}
+			},
+			//已拒收
+			async getList4(){
+				let _this = this;
+				const {data} = await gasApplyDetailYjs({id:_this.id});
+				if(data.code==200){
+					if(data.code==200){
+						let res = data.rows;
+						_this.dataList=res
+					}
+				}
+			},
+
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		.title{
+			width: 750rpx;
+			height: 118rpx;
+			background: #FFFFFF;
+			padding: 0 40rpx;
+			box-sizing: border-box;
+			display: flex;
+			justify-content: space-between;
+			.title_l{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+				line-height: 118rpx;
+			}
+			.title_r{
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				line-height: 118rpx;
+			}
+		}
+		.tabTitle{
+			display flex;
+			width:100%;
+			height: 100rpx;
+			.tabTitle_li{
+				width:146rpx;
+				text-align center;
+				.tabTitle_text{
+					display: inline-block;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 70rpx;
+					&.on{
+						color:#0183FA;
+					}
+				}
+				.tabTitle_across{
+					width: 50rpx;
+					height: 6rpx;
+					background: #0183FA;
+					border-radius: 3rpx;
+					margin-left 50rpx;
+					display none;
+					&.on{
+						display block;
+					}
+				}
+
+			}
+
+
+		}
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 0 20rpx;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+					 display: flex;
+					 justify-content: space-between;
+					 padding: 44rpx 0 28rpx 0;
+					 box-sizing: border-box;
+					 border-bottom:1px solid #f5f5f5;
+					 .list_li_l{
+						 flex: 1;
+						 .list_li_l_t{
+							 font-size: 28rpx;
+							 font-family: PingFang SC;
+							 font-weight: 500;
+							 color: #333333;
+							 line-height: 28rpx;
+
+						 }
+						 .list_li_l_b{
+							 display: flex;
+							 justify-content: flex-start;
+							 margin-top:38rpx;
+							 >img{
+								 width: 28rpx;
+								 height: 30rpx;
+								 margin-right: 18rpx;
+							 }
+							 >text{
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								font-weight: 400;
+								color: #666666;
+								line-height: 30rpx;
+							 }
+							 .cause{
+								 display: flex;
+								 flex: 1;
+								 >text{
+									font-size: 24rpx;
+									font-family: PingFang SC;
+									font-weight: 400;
+									color: #666666;
+									line-height: 30rpx;
+								 }
+								 >text:nth-of-type(1){
+								   width: 200rpx;
+								 }
+								 >text:nth-of-type(2){
+									display: block;
+								 }
+							 }
+						 }
+					 }
+					 .list_li_r{
+						 font-size: 28rpx;
+						 font-family: PingFang SC;
+						 font-weight: 500;
+						 color: #0183FA;
+						 line-height: 28rpx;
+						 margin-top: 26rpx;
+					 }
+				 }
+			 }
+     }
+		.empty{
+			text-align: center;
+			margin-top: 316rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+
+	}
+</style>

+ 256 - 0
pages_manage/gasBottle/gasApply/gasApplyReject.vue

@@ -0,0 +1,256 @@
+<!-- 拒收气瓶 -->
+<template>
+    <view id="register">
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>*</view>
+				<view>拒收原因:</view>
+				<input v-model="form.rejectionApplyRemark"   type="text" placeholder="请输入拒收原因">
+			</view>
+			<view class="up-img-box">
+			    <view class="title-view">问题照片:</view>
+			    <view class="img-max-box">
+			        <view class="img-box" v-for="(item,index) in imgList" :key="index">
+			            <img class="img-data" :src="baseUrl+item">
+			            <img class="position-img" src="@/images/basicsModules/icon_ssp_closure.png" @click="delImg(index)">
+			        </view>
+			        <img class="add-button" src="@/images/basicsModules/icon_07.png" @click="selectImage" v-if="imgList.length<5">
+			    </view>
+			</view>
+		</view>
+
+		<view class="sub_btn" @click="submitForm()">提交</view>
+	</view>
+</template>
+
+<script>
+    import {gasApplyYjsAdd } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				form:{
+					rejectionApplyRemark:'',
+					rejectionApplyImg:'',
+
+				},
+				imgList:[],
+				item:{},//从列表传过来的值
+				item2:{},//从列表传过来的值
+            }
+        },
+        onLoad(option) {
+			this.item=JSON.parse(decodeURIComponent(option.item));
+			this.item2=JSON.parse(decodeURIComponent(option.item2));
+        },
+        onShow(){
+        },
+
+        methods: {
+			// 图片上传
+			selectImage(index) {
+			    let self = this;
+			    if(self.imgList.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,index);
+			        }
+			    });
+			},
+			async uploadImg(tempFilePaths,index){
+			    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){
+
+							self.imgList.push(res.data.url);
+
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+			        },
+			        fail: err => {},
+			        complete: () => {
+			            uni.hideLoading()
+			        }
+			    });
+			},
+			//删除图片
+			delImg(index){
+			    this.imgList.splice(index,1);
+			},
+			//提交
+			async submitForm(){
+				let _this = this;
+				if(!_this.form.rejectionApplyRemark){
+					uni.showToast({
+						title: '请输入拒收原因',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				_this.form.carCode=_this.item2.car.carCode
+				_this.form.carCodeId =_this.item2.car.id
+				_this.form.phone=_this.item2.user.phone
+				_this.form.driverName=_this.item2.user.userName
+				_this.form.driverId=_this.item2.user.id
+
+				_this.form.airStatus=1;
+				_this.form.taskId=_this.item.taskId;
+				_this.form.taskDetailId=_this.item.id;
+
+				_this.form.rejectionApplyImg=_this.imgList.join(',')
+
+				const {data} = await gasApplyYjsAdd(_this.form);
+				if(data.code == 200){
+				    uni.showToast({
+				        title: '提交成功',
+				        icon:"none",
+				        mask:true,
+				        duration: 2000
+				    });
+				    setTimeout(function(){
+				       uni.redirectTo({
+				            url: '/pages_manage/gasBottle/gasApply/gasApply'
+				        });
+				    },2000);
+				}
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:100%;
+        width:100%;
+        display flex
+        flex-direction column;
+		padding-bottom: 220rpx;
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+				>input{
+					width 490rpx;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #CCCCCC;
+				}
+			}
+			.up-img-box{
+			    display flex
+			    margin:34rpx 26rpx;
+			    .title-view{
+			        width:160rpx;
+			        line-height:80rpx;
+			        font-size: 30rpx;
+			        color:#333;
+			    }
+			    .img-max-box{
+			        width:510rpx;
+			        .img-box{
+			            display inline-block
+			            height:146rpx;
+			            width:146rpx;
+			            position relative
+			            margin:0 20rpx 20rpx 0;
+			            .img-data{
+			                height:146rpx;
+			                width:146rpx;
+			            }
+			            .position-img{
+			                position absolute
+			                right:0;
+			                top:0;
+			                width:36rpx;
+			                height:36rpx;
+			            }
+			        }
+			        .add-button{
+			            display inline-block
+			            height:150rpx;
+			            width:150rpx;
+			        }
+			    }
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 168 - 0
pages_manage/gasBottle/gasList/gasList.vue

@@ -0,0 +1,168 @@
+<!--气瓶列表-->
+<template>
+    <view id="gasRecycle">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="for-big-box" v-for="(item,index) in dataList" :key="index">
+		        <view class="for-time-p">{{item.location}}</view>
+		        <img class="for-back-img" src="@/images/basicsModules/for_min_bg.png">
+		        <view class="for-box" @click="goInfo(item2)" v-for="(item2,index2) in item.airGoodsConfigRelationVo" :key="index2">
+		        	<view class="for-box_t">{{item2.airName}}-{{item2.configName}}</view>
+		        	<view class="for-box_b">
+						<img class="for-back-img" src="@/pages_manage/images/icon_qpgl_syl.png">
+						<text>余量: {{item2.pressure==null?'':item2.pressure}}Mpa</text>
+						<img class="for-back-img" src="@/images/basicsModules/icon_wtzg_sj.png">
+						<text>最近使用时间: {{item2.useTimeApp==null?'':item2.useTimeApp}}</text>
+					</view>
+		        </view>
+		    </view>
+			<view class="get-null-box" v-if="noData">暂无更多数据</view>
+		</scroll-view>
+
+	</view>
+</template>
+
+<script>
+	import { gasList  } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+					remark:'login',
+				},
+				userType:uni.getStorageSync('userType'),
+
+                dataList:[],
+				noData:false,
+            }
+        },
+        onLoad() {
+			 this.getList();
+        },
+        onShow() {
+
+        },
+		mounted(){
+
+
+		},
+        methods: {
+			goInfo(d){
+
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/gasList/gasListDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//滚动加载事件
+			scrollGet(){
+			    this.getData.pageNum += 1;
+			    this.getList();
+			},
+			//获取列表数据
+				async getList(){
+				   let _this = this;
+
+				    const {data} = await gasList(_this.getData);
+				    if(data.code==200){
+						let res = data.rows;
+						if(res && res.length>0){
+							if(_this.getData.pageNum==1){
+								_this.dataList=res;
+							}else{
+								_this.dataList=_this.dataList.concat(res);
+							}
+						}else{
+							_this.noData=true;
+						}
+				    }
+				},
+
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+     .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 margin-top: 20rpx;
+
+         .for-big-box:last-child{
+             margin-bottom:180rpx;
+         }
+         .for-big-box{
+             margin:0 20rpx 20rpx;
+             overflow hidden
+             border-bottom-left-radius :20rpx;
+             border-bottom-right-radius :20rpx;
+             .for-time-p{
+                 background #fff
+                 line-height:87rpx;
+                 font-size:30rpx;
+                 padding:0 22rpx;
+                 border-top-left-radius:20rpx;
+                 border-top-right-radius:20rpx;
+             }
+             .for-back-img{
+                 height:30rpx;
+                 width:710rpx;
+             }
+			.for-box{
+				overflow hidden;
+				background: #fff;
+
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				.for-box_t{
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 28rpx;
+					margin: 28rpx 0 40rpx 0;
+				}
+				.for-box_b{
+					border-bottom: 1px solid #E0E0E0;
+					display: flex;
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>text{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+						margin-bottom: 20rpx;
+					}
+					>text:nth-of-type(1){
+						width: 190rpx;
+					}
+				}
+			}
+		 }
+		 /*暂无数据*/
+		 .get-null-box{
+			 height:100rpx;
+			 line-height:100rpx;
+			 color:#999;
+			 text-align center
+		 }
+     }
+	}
+</style>

+ 211 - 0
pages_manage/gasBottle/gasList/gasListBinding.vue

@@ -0,0 +1,211 @@
+<!--气瓶列表-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{item.airName}}-{{item.configName}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>*</view>
+				<view>电子标签:</view>
+				<input v-model="form.electronicTag"   type="text" placeholder="请输入电子标签ID">
+				<img @click.stop="saoCode"  class="code_img" src="@/images/basicsModules/icon_aqjc_sm.png">
+			</view>
+		</view>
+		<view  class="sub_btn" @click="getBinding()">确认绑定</view>
+	</view>
+</template>
+
+<script>
+	import { gasTagBinding } from '@/api/apiDemo/index.js'
+    export default {
+        name: "gasRecycle",
+        data() {
+            return {
+				pageType:0,
+				form:{
+					id:'',
+					electronicTag:'',
+				},
+				item:{},
+            }
+        },
+        onLoad(option) {
+			this.item=JSON.parse(decodeURIComponent(option.item));
+			this.form.id=this.item.bottleStorageId;
+        },
+        onShow() {
+
+        },
+		mounted(){
+
+
+		},
+        methods: {
+			async getBinding(){
+				let _this=this;
+				if(!_this.form.electronicTag){
+					uni.showToast({
+						title: '请录入电子标签码!',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				const {data} = await gasTagBinding(this.form);
+				if(data.code==200){
+					let res = data.data;
+					if(data.code==200){
+						uni.showToast({
+							title: '绑定成功!',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						uni.redirectTo({
+						     url: '/pages_manage/gasBottle/gasList/gasListDetail?item='+encodeURIComponent(JSON.stringify(this.item))
+						 });
+					}else{
+						_this.form.electronicTag='';
+						uni.showModal({
+									showCancel:false,
+									confirmColor:'#0183FA',
+							content: '该RFID已被绑定,请重新选择 RFID标签',
+							success: function (res) {
+								if (res.confirm) {
+
+								}
+							}
+						});
+					}
+				}
+			},
+			//调用摄像头
+			saoCode(){
+				let _this = this;
+			    uni.scanCode({
+			        onlyFromCamera: true,
+			        success: function (res) {
+						_this.form.electronicTag=res.result
+						_this.getBinding();
+			        }
+			    });
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				height: 100rpx;
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				/* border-bottom: 1px solid #F5F5F5; */
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				.code_img{
+					width: 30rpx;
+					height: 28rpx;
+					margin-left: 26rpx;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				.binding{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #0183FA;
+					line-height: 24rpx;
+					margin-left: 24rpx;
+				}
+
+
+			}
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+
+	 /* 按钮 */
+	 .sub_btn{
+	 	width: 650rpx;
+	 	height: 100rpx;
+	 	background: #0183FA;
+	 	border-radius: 20rpx;
+	 	font-size: 28rpx;
+	 	font-family: PingFang SC;
+	 	font-weight: 500;
+	 	color: #FFFFFF;
+	 	line-height: 100rpx;
+	 	text-align: center;
+	 	margin-left: 50rpx;
+	 	position: fixed;
+	 	bottom:30rpx;
+	 }
+	}
+</style>

+ 351 - 0
pages_manage/gasBottle/gasList/gasListDetail.vue

@@ -0,0 +1,351 @@
+<!--气瓶列表-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{specificationName.airName}}-{{specificationName.gasLevel}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+				<view>编号:</view>
+				<input v-model="form.airNumber" disabled  type="text" >
+			</view>
+			<view class="register_li_min" v-if="form.electronicTag" style="border: none;">
+				<view>电子标签:</view>
+				<input v-model="form.electronicTag" disabled  type="text" >
+				<view class="binding" @click="binding()">更换</view>
+			</view>
+			<view class="register_li_min" v-if="!form.electronicTag" style="border: none;">
+				<view>电子标签:</view>
+				<input v-model="form.electronicTag" disabled  type="text" placeholder="暂未绑定电子标签">
+				<view class="binding" @click="binding()">去绑定</view>
+			</view>
+		</view>
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+			<view class="small_title" @click="handleClick('useRecord')">使用记录</view>
+		    <view class="register_li2" >
+		    	<viwe class="register_li2_min" @tap="useRecordInfo(item)" v-for="(item,index) in dataList">
+		    		<view class="register_li2_t">{{item.contacts}}</view>
+		    		<view class="register_li2_b">
+		    			<img src="@/pages_manage/images/icon_qpgl_syl.png">
+		    			<view>使用量: {{item.amount}}Mpa</view>
+		    		</view>
+					<view class="register_li2_b2">
+						<img src="@/images/basicsModules/icon_wtzg_sj.png">
+						<view>使用时间: {{item.useTimeApp==null?'':item.useTimeApp}}-{{item.backTimeApp==null?'':item.backTimeApp}}</view>
+					</view>
+		    	</viwe>
+		    </view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+		<view  class="sub_btn" @click="outStock()"> 申请出库</view>
+	</view>
+</template>
+
+<script>
+	import {gasDetail,gasDetailRecord } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:10,
+					storageId:'',
+				},
+				form:{
+				},
+                dataList:[],
+				id:'',
+				item:{},
+				specificationName:{},
+            }
+        },
+        onLoad(option) {
+			this.item=JSON.parse(decodeURIComponent(option.item));
+			this.id=this.item.bottleStorageId;
+			this.getData.storageId=this.item.bottleStorageId;
+
+        },
+        onShow() {
+
+        },
+		mounted(){
+		  this.getInfo();
+		  this.getList();
+		},
+        methods: {
+
+			//滚动加载事件
+			scrollGet(){
+			    if(this.getData.getType){
+			        this.getData.pageNum += 1;
+			        this.getList();
+			    }
+			},
+			//使用记录详情
+			useRecordInfo(d){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/gasList/gasUseDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//标签绑定
+			binding(){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/gasList/gasListBinding?item='+encodeURIComponent(JSON.stringify(this.item))
+				});
+			},
+			//出库申请
+			outStock(){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/leaveConfirm/leaveConfirm?item='+encodeURIComponent(JSON.stringify(this.item))
+				});
+			},
+			async getInfo(){
+				let _this=this;
+				const {data} = await gasDetail({id:_this.id});
+				if(data.code==200){
+					let res = data.data;
+					_this.form=res;
+					_this.specificationName=JSON.parse(res.specificationName)
+				}
+			},
+
+			//获取列表数据
+			async getList(){
+				let _this = this;
+				const {data} = await gasDetailRecord(this.getData);
+				if(data.code==200){
+					let res=data.rows
+					_this.dataList=res
+					if(_this.dataList.length<=0){
+						_this.pageType=4
+					}
+				}
+			},
+
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		padding-bottom: 220rpx;
+		.empty{
+			text-align: center;
+			margin-top: 46rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				height: 100rpx;
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				.binding{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #0183FA;
+					line-height: 24rpx;
+					margin-left: 24rpx;
+				}
+
+
+			}
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+     .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 margin-top: 20rpx;
+		 .small_title{
+		 	font-size: 30rpx;
+		 	font-family: PingFang SC;
+		 	font-weight: 500;
+		 	color: #333333;
+		 	line-height: 80rpx;
+		 	margin: 0 40rpx;
+		 	display: flex;
+		 	justify-content: space-between;
+		 	align-items: center;
+		 	>img{
+		 		width: 24rpx;
+		 		height: 24rpx;
+		 	}
+		 }
+     	.register_li2{
+			overflow: hidden
+     		background #fff;
+     		border-radius:20rpx;
+     		margin:0 20rpx 0;
+     		padding:0 20rpx;
+     		box-sizing: border-box;
+
+     		.register_li2_min{
+
+     			.register_li2_t{
+     				font-size: 28rpx;
+     				font-family: PingFang SC;
+     				font-weight: 500;
+     				color: #333333;
+     				line-height: 28rpx;
+     				margin-top: 28rpx;
+     			}
+     			.register_li2_b{
+     				display: flex;
+     				justify-content: flex-start;
+     				align-items: center;
+     				margin-top: 42rpx;
+     				padding-bottom: 28rpx;
+     				>img{
+     					width: 28rpx;
+     					height: 28rpx;
+     					margin-right: 10rpx;
+     				}
+     				>view{
+     					font-size: 26rpx;
+     					font-family: PingFang SC;
+     					font-weight: 500;
+     					color: #666666;
+     					line-height: 26rpx;
+     				}
+     				>view:nth-child(1){
+     					width: 200rpx;
+     				}
+     				>view:nth-child(2){
+     					flex: 1;
+     				}
+     			}
+				.register_li2_b2{
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					padding-bottom: 28rpx;
+					border-bottom: 1rpx solid #f5f5f5;
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>view{
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+					}
+					>view:nth-child(1){
+						width: 200rpx;
+					}
+					>view:nth-child(2){
+						flex: 1;
+					}
+				}
+     		}
+
+     	}
+     }
+	 /* 按钮 */
+	 .sub_btn{
+	 	width: 650rpx;
+	 	height: 100rpx;
+	 	background: #0183FA;
+	 	border-radius: 20rpx;
+	 	font-size: 28rpx;
+	 	font-family: PingFang SC;
+	 	font-weight: 500;
+	 	color: #FFFFFF;
+	 	line-height: 100rpx;
+	 	text-align: center;
+	 	margin-left: 50rpx;
+	 	position: fixed;
+	 	bottom:30rpx;
+	 }
+	}
+</style>

+ 242 - 0
pages_manage/gasBottle/gasList/gasUseDetail.vue

@@ -0,0 +1,242 @@
+<!--气瓶列表-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{specificationName.airName}}-{{specificationName.gasLevel}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<view>编号:</view>
+				<input v-model="form.storageVo.airNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>使用人:</view>
+				<input v-model="form.contacts" disabled  type="text" >
+			</view>
+			<!-- 使用时间 -->
+			<view class="register_li_min2">
+				<view>使用时间:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form.useTimeApp" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form.backTimeApp" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+				<view>使用量:</view>
+				<view>{{form.amount+'Mpa'}}</view>
+			</view>
+			<view v-if="form.beforeUse" class="register_li_min">
+				<view>使用前气压:</view>
+				<view>{{form.beforeUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form.beforeUsePic" class="meter_img" :style="!form.afterUse?'border:none;':''" @click="lookItem(form.beforeUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form.beforeUsePic" >
+			</view>
+			<view v-if="form.afterUse" class="register_li_min">
+				<view>使用后气压:</view>
+				<view>{{form.afterUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form.afterUsePic" class="meter_img" style="border:0;" @click="lookItem(form.afterUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form.afterUsePic" >
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { gasDetailRecordDetail } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+				baseUrl:config.base_url,
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+				userType:uni.getStorageSync('userType'),
+				form:{
+					name:'C123(第一实验室)',
+				},
+                dataList:[],
+				item:{},
+				specificationName:{},
+            }
+        },
+        onLoad(option) {
+			this.item=JSON.parse(decodeURIComponent(option.item));
+
+        },
+        onShow() {
+
+        },
+		mounted(){
+		   this.getInfo();
+		},
+        methods: {
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			async getInfo(){
+				let _this=this;
+				const {data} = await gasDetailRecordDetail(_this.item.id);
+				if(data.code==200){
+					let res = data.data;
+					_this.form=res;
+					_this.specificationName=JSON.parse(res.storageVo.specificationName)
+				}
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		padding-bottom: 220rpx;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>view:nth-child(2){
+					flex: 1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 46rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+					text-align: right;
+				}
+			}
+
+			.meter_img{
+				margin:0 26rpx;
+				display flex;
+				justify-content: space-between;
+				border-bottom: 1px solid #F5F5F5;
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>img{
+					width: 150rpx;
+					height: 150rpx;
+					border-radius: 10rpx;
+					margin:42rpx 0 20rpx 0;
+				}
+			}
+		}
+	}
+</style>

+ 358 - 0
pages_manage/gasBottle/gasManage/gasManage.vue

@@ -0,0 +1,358 @@
+<!-- 回收申请 -->
+<template>
+    <view id="register">
+		<view class="register_li" >
+			<view class="register_li_min" @click="handleClick('audit')" style="border-bottom:none;">
+				<view>资格审核</view>
+				<view></view>
+				<img src="@/images/basicsModules/icon_04.png">
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min" @click="handleClick('examination')">
+				<view>资格申请</view>
+				<view></view>
+				<img src="@/images/basicsModules/icon_04.png">
+			</view>
+			<view class="register_li_min" @click="handleClick('gas')" style="border: none;">
+				<view>用气申请</view>
+				<view></view>
+				<img src="@/images/basicsModules/icon_04.png">
+			</view>
+		</view>
+		<view v-if="dataList2.length>0" class="small_title" @click="handleClick('gasList')">气瓶信息<img src="@/images/basicsModules/icon_wdwg_gd.png"></view>
+		<view v-if="dataList2.length>0" class="register_li2" >
+			<viwe class="register_li2_min" @tap="goInfo2(item2)" v-for="(item2,index2) in dataList2" :key="index2">
+				<view class="register_li2_t">{{item2.airName}}-{{item2.configName}}</view>
+				<view class="register_li2_b">
+					<img src="@/pages_manage/images/icon_qpgl_syl.png">
+					<view>余量: {{item2.pressure==null?'-':item2.pressure}}Mpa</view>
+					<img src="@/images/basicsModules/icon_wtzg_sj.png">
+					<view>最近使用时间: {{item2.useTimeApp==null?'-':item2.useTimeApp}}</view>
+				</view>
+			</viwe>
+		</view>
+		<view v-if="dataList.length>0" class="small_title" @click="handleClick('useRecord')">使用记录<img src="@/images/basicsModules/icon_wdwg_gd.png"></view>
+		<view v-if="dataList.length>0" class="register_li2">
+			<viwe class="register_li2_min" @tap="goInfo(item)" v-for="(item,index) in dataList" :key="index">
+				<view class="register_li2_t">{{item.airName}}-{{item.configName}}</view>
+				<view class="register_li2_b" style="border:none">
+					<img src="@/pages_manage/images/icon_qpgl_syl.png">
+					<view>使用量: {{item.pressure==null?'-':item.pressure}}Mpa</view>
+				</view>
+				<view class="register_li2_b2" style="border-bottom: 1rpx solid #f5f5f5;">
+					<img src="@/images/basicsModules/icon_wtzg_sj.png">
+					<view>使用时间: {{item.useTimeApp==null?'-':item.useTimeApp}} - {{item.backTimeApp==null?'-':item.backTimeApp}}</view>
+				</view>
+			</viwe>
+		</view>
+		<view class="btn" v-if="userApplyNumberYq || userApplyNumberZg">
+			<view class="btn_l" @click="handleClick('gasApply')">气瓶申请</view>
+			<view class="btn_r" @click="handleClick('QRcode')">使用/归还</view>
+		</view>
+	</view>
+</template>
+
+<script>
+    import {useRecordList,listuseRecordByUserId,getUserApplyCount,useRegisterDetail } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				form:{
+					name:'',
+				},
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:3,
+				},
+				dataList:[],
+				dataList2:[],
+				yqCount:null,
+				zgCount:null,
+				userApplyNumberYq:null,//大于0显示使用人,等于零显示规格
+				userApplyNumberZg:null,//大于0显示使用人,等于零显示规格
+				electronicTag:'',
+            }
+        },
+        onLoad(option) {
+
+        },
+        onShow(){
+
+        },
+
+        methods: {
+
+			handleClick(doType) {
+				let _this=this;
+				if(doType=='examination'){//资格申请
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/examination/examination'
+					});
+				}else if(doType=='gas'){//用气申请
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/useGasApply/useGasApply'
+					});
+				}else if(doType=='audit'){//资格审核
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/aptitudeAudit/aptitudeAudit'
+					});
+				}else if(doType=='useRecord'){//使用记录
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/useRecord/useRecord'
+					});
+				}else if(doType=='gasApply'){//气瓶申请
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/gasApply/gasApply'
+					});
+				}else if(doType=='gasList'){//气瓶列表
+					uni.navigateTo({
+					    url:'/pages_manage/gasBottle/gasList/gasList'
+					});
+				}else if(doType=='QRcode'){//
+					uni.scanCode({
+						onlyFromCamera: true,
+						success: function (res) {
+							_this.electronicTag=res.result
+							_this.getInfo()
+						}
+					});
+
+				}
+
+
+			},
+			//使用记录跳转详情
+			goInfo(d){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/useRecord/useRecordDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//气瓶信息跳转详情
+			goInfo2(d){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/gasList/gasListDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			async getInfo(){
+				let _this=this;
+				const {data} = await useRegisterDetail({electronicTag:_this.electronicTag});
+				if(data.code==200 && data.data){
+					let res = data.data;
+					let userId=uni.getStorageSync('userId');
+					if(res.currentStatus==4 && res.currentUserId==userId){
+						uni.navigateTo({
+						    url:'/pages_manage/gasBottle/useRegister/giveRegister?code='+_this.electronicTag
+						});
+					}else{
+						uni.navigateTo({
+						    url:'/pages_manage/gasBottle/useRegister/useRegister?code='+_this.electronicTag
+						});
+					}
+				}else{
+					uni.showToast({
+					    title: '当前气瓶不存在!',
+					    icon:"none",
+					    mask:true,
+					    duration: 2000
+					});
+				}
+			},
+
+			//获取使用记录列表
+			async getList(){
+				let _this = this;
+				const {data} = await useRecordList(_this.getData)
+				if(data.code==200){
+					let res=data.rows
+					_this.dataList=res
+				}
+			},
+			//获取气瓶信息列表
+			async getList2(){
+				let _this = this;
+				const {data} = await listuseRecordByUserId(_this.getData)
+				if(data.code==200){
+					let res=data.rows
+					_this.dataList2=res
+				}
+			},
+			//获取数量
+			async getCount(){
+				let _this = this;
+				const {data} = await getUserApplyCount()
+				if(data.code==200){
+					let res=data.data
+					_this.yqCount=res.yqCount;
+					_this.zgCount=res.zgCount;
+					_this.userApplyNumberYq=res.userApplyNumberYq;
+					_this.userApplyNumberZg=res.userApplyNumberZg;
+				}
+			},
+
+        },
+		mounted() {
+			this.getList();
+			this.getList2();
+			this.getCount();
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				view{
+					line-height:100rpx;
+				}
+				view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height:100rpx;
+				}
+				view:nth-child(2){
+					flex:1;
+					color: #0183FA;
+					text-align: right;
+					margin-right: 38rpx;
+				}
+				>img{
+					width: 12rpx;
+					height: 24rpx;
+				}
+			}
+		}
+		.small_title{
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+			line-height: 100rpx;
+			margin: 0 40rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			>img{
+				width: 24rpx;
+				height: 24rpx;
+			}
+		}
+
+		.register_li2{
+			background #fff;
+			border-radius:20rpx;
+			margin:0 20rpx 0;
+			padding:0 20rpx;
+			box-sizing: border-box;
+			.register_li2_min{
+				.register_li2_t{
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 28rpx;
+					margin-top: 28rpx;
+				}
+				.register_li2_b{
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					margin-top: 42rpx;
+					padding-bottom: 28rpx;
+					border-bottom: 1rpx solid #f5f5f5;
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>view{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+					}
+					>view:nth-of-type(1){
+						width: 180rpx;
+					}
+					>view:nth-child(2){
+					}
+				}
+				.register_li2_b2{
+					display: flex;
+					justify-content: flex-start;
+					align-items: center;
+					padding-bottom: 28rpx;
+
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>view{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+					}
+					>view:nth-child(1){
+						width: 200rpx;
+					}
+					>view:nth-child(2){
+						flex: 1;
+					}
+				}
+			}
+
+		}
+		/* 按钮 */
+		.btn{
+			display: flex;
+			position: fixed;
+			bottom: 0;
+			.btn_l{
+				width: 250rpx;
+				background: #F28E26;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+			.btn_r{
+				width: 500rpx;
+				background: #0183FA;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #FFFFFF;
+				line-height: 100rpx;
+				text-align: center;
+			}
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

BIN
pages_manage/gasBottle/images/icon_qpgl_syl.png


BIN
pages_manage/gasBottle/images/icon_sqqp_sqys.png


BIN
pages_manage/gasBottle/images/icon_sqxq_jsyy.png


BIN
pages_manage/gasBottle/images/icon_sydj_sqyqzg.png


BIN
pages_manage/gasBottle/images/icon_sydj_yubz.png


BIN
pages_manage/gasBottle/images/icon_xgzl_shz.png


BIN
pages_manage/gasBottle/images/icon_yqsq_sys.png


BIN
pages_manage/gasBottle/images/icon_ysclgl_cl.png


BIN
pages_manage/gasBottle/images/icon_zgsh_sysmph.png


BIN
pages_manage/gasBottle/images/icon_zgsq_dhh.png


BIN
pages_manage/gasBottle/images/icon_zgsq_j.png


BIN
pages_manage/gasBottle/images/icon_zgsq_jian.png


BIN
pages_manage/gasBottle/images/icon_zgsq_sqr.png


BIN
pages_manage/gasBottle/images/img_sydj_sltp.png


BIN
pages_manage/gasBottle/images/img_ysrygl_zwsj.png


+ 210 - 0
pages_manage/gasBottle/leaveConfirm/amendAir.vue

@@ -0,0 +1,210 @@
+<!--修改气压-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{specificationName.airName}}-{{specificationName.gasLevel}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>实验地点:</view>
+				<input v-model="item.location" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<view>编号:</view>
+				<input v-model="item.airNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li2">
+			<view class="register_li_min">
+				<view></view>
+				<view>实际气压:</view>
+				<input v-model="form.afterEdit"   type="text" placeholder="请输入实际气压">
+			</view>
+		</view>
+		<view  class="sub_btn" @click="submitForm()">提交</view>
+	</view>
+</template>
+
+<script>
+	import { gasBottleError } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+				baseUrl:config.base_url,
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+				userType:uni.getStorageSync('userType'),
+				form:{
+
+				},
+                dataList:[],
+				imgList:[],
+				item:{},
+				item2:{},
+				specificationName:{},
+            }
+        },
+        onLoad(option) {
+
+			this.item=JSON.parse(decodeURIComponent(option.item));
+			this.item2=JSON.parse(decodeURIComponent(option.item2));
+			this.specificationName=JSON.parse(decodeURIComponent(option.specificationName));
+        },
+        onShow() {
+
+        },
+		mounted(){
+
+
+		},
+        methods: {
+			//提交
+			async submitForm(){
+				let _this = this;
+				_this.form.storageId=_this.item.id
+				_this.form.location=_this.item.location
+				_this.form.locationId=_this.item.locationId
+				_this.form.beforeEdit=_this.item2.beforeUse
+				const {data} = await gasBottleError(_this.form);
+				if(data.code == 200){
+				    uni.showToast({
+				        title: '修改气压成功!',
+				        icon:"none",
+				        mask:true,
+				        duration: 2000
+				    });
+				    setTimeout(function(){
+				       uni.redirectTo({
+				            url: '/pages_manage/gasBottle/gasManage/gasManage'
+				        });
+				    },2000);
+				}
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column;
+        overflow hidden;
+		padding-bottom: 400rpx;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+			}
+
+		}
+		.register_li2{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin:36rpx 0 20rpx 280rpx;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+		}
+
+
+	}
+</style>

+ 356 - 0
pages_manage/gasBottle/leaveConfirm/leaveConfirm.vue

@@ -0,0 +1,356 @@
+<!--出库确认-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{specificationName.airName}}-{{specificationName.gasLevel}}</view>
+		<view class="register_li" v-if="form3.isShow">
+			<view class="register_li_min">
+				<view>实际气压值:</view>
+				<view>{{form3.afterEdit+'Mpa'}}</view>
+			</view>
+			<view class="register_li_min">
+				<view>修改人:</view>
+				<input v-model="form3.createBy" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<view>修改时间:</view>
+				<input v-model="form3.opTime" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<view>编号:</view>
+				<input v-model="form.airNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li" v-if="form2.contacts">
+			<view class="register_li_min">
+				<view>使用人:</view>
+				<input v-model="form2.contacts" disabled  type="text" >
+			</view>
+			<!-- 使用时间 -->
+			<view class="register_li_min2">
+				<view>使用时间:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form2.useTimeApp" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form2.backTimeApp" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+				<view>使用量:</view>
+				<view>{{form2.amount+'Mpa'}}</view>
+			</view>
+			<view v-if="form2.beforeUse" class="register_li_min">
+				<view>使用前气压:</view>
+				<view>{{form2.beforeUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form2.beforeUsePic" class="meter_img" :style="!form2.afterUse?'border:none;':''" @click="lookItem(form2.beforeUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form2.beforeUsePic" >
+			</view>
+			<view v-if="form2.afterUse" class="register_li_min">
+				<view>使用后气压:</view>
+				<view>{{form2.afterUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form2.afterUsePic" class="meter_img" style="border:0;" @click="lookItem(form2.afterUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form2.afterUsePic" >
+			</view>
+		</view>
+		<view  class="sub_btn2" @click="barometer()">气压有误</view>
+		<view  class="sub_btn" @click="submitForm()">确认出库</view>
+	</view>
+</template>
+<script>
+	import { gasDetail,gasDetailRecord,gasBottleErrorList,gasStorageOut } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+				baseUrl:config.base_url,
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:1,
+					storageId:'',
+				},
+				form:{},
+				form2:{},
+				form3:{
+					opTime:'',
+				},
+                dataList:[],
+				imgList:[],
+				item:{},
+				specificationName:null,
+            }
+        },
+        onLoad(option) {
+        	this.item=JSON.parse(decodeURIComponent(option.item));
+			this.getData.storageId=this.item.id
+        },
+        onShow() {
+
+        },
+		mounted(){
+		  this.getInfo();
+		  this.getList();
+		  this.getList2();
+		},
+        methods: {
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			 //判断两个日期的大小
+			compareDate (d1, d2) {
+				let reg = new RegExp('-', 'g')
+				if(((new Date(d1.replace(reg, '/'))) > (new Date(d2.replace(reg, '/'))))){
+					return true;
+				}else{
+					return false;
+				}
+			},
+			//气压有误
+			barometer(){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/leaveConfirm/amendAir?item='+encodeURIComponent(JSON.stringify(this.form))+'&item2='+encodeURIComponent(JSON.stringify(this.form2))+'&specificationName='+encodeURIComponent(JSON.stringify(this.specificationName))
+				});
+			},
+			async getInfo(){
+				let _this=this;
+				const {data} = await gasDetail({id:_this.item.id});
+				if(data.code==200){
+					let res = data.data;
+					_this.form=res;
+					_this.specificationName=JSON.parse(res.specificationName)
+				}
+			},
+			//获取列表数据
+			async getList(){
+				let _this = this;
+				const {data} = await gasDetailRecord(this.getData);
+				if(data.code==200){
+					let res=data.rows
+					if(res){
+						_this.form2=res[0]
+					}
+				}
+			},
+			//获取气压修改列表数据
+			async getList2(){
+				let _this = this;
+				const {data} = await gasBottleErrorList(this.getData);
+				if(data.code==200){
+					let res=data.rows
+					if(res){
+						_this.form3=res[0]
+
+						_this.form3.isShow=_this.compareDate(_this.form3.opTime,_this.form2.createTime)
+
+					}
+				}
+			},
+			//提交
+			async submitForm(){
+				let _this = this;
+				let obj={
+					storageId:_this.item.id,
+				}
+				const {data} = await gasStorageOut(obj);
+				if(data.code == 200){
+				    uni.showToast({
+				        title: '出库成功!',
+				        icon:"none",
+				        mask:true,
+				        duration: 2000
+				    });
+				    setTimeout(function(){
+				       uni.redirectTo({
+				            url: '/pages_manage/gasBottle/gasManage/gasManage'
+				        });
+				    },2000);
+				}
+			},
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		padding-bottom: 300rpx;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>view:nth-child(2){
+					flex: 1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 46rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+					text-align: right;
+				}
+			}
+
+			.meter_img{
+				margin:0 26rpx;
+				display flex;
+				justify-content: space-between;
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>img{
+					width: 150rpx;
+					height: 150rpx;
+					border-radius: 10rpx;
+					margin:42rpx 0 20rpx 0;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+			z-index: 1000;
+		}
+		.sub_btn2{
+			width: 650rpx;
+			height: 100rpx;
+			border: 2rpx solid #0072DB;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0183FA;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:158rpx;
+			z-index: 1000;
+		}
+
+	}
+</style>

+ 201 - 0
pages_manage/gasBottle/useGasApply/useGasApply.vue

@@ -0,0 +1,201 @@
+<!--用气申请-->
+<template>
+    <view id="transportPerson">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="list">
+				<view class="list_li" v-for="(item,index) in  dataList" @click="goInfo(item)">
+					<img class="for-back-img" src="@/pages_manage/images/icon_yqsq_sys.png">
+					<text class="list_li_text">{{item.room}}</text>
+					<text  :class="item.remark=='1'?'list_li_text2':(item.remark=='0'?'colorA':(item.remark=='2'?'colorB':''))">{{item.remark=='1'?'有效期:'+item.startTime+'至'+item.endTime+'':(item.remark=='0'?'审核中':(item.remark=='2'?'审核驳回':''))}}</text>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="empty" v-if="pageType==4">
+			<img class="for-back-img" src="@/pages_manage/images/img_ysrygl_zwsj.png">
+			<view>暂无数据</view>
+		</view>
+		<view class="sub_btn" @click="subBtn()">申请用气</view>
+	</view>
+</template>
+
+<script>
+	import { useAgsApplyList } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "transportPerson",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+				},
+                dataList:[],
+				status:0,
+            }
+        },
+        onLoad() {
+
+        },
+        onShow() {
+			//今天页面返回,清除存储气瓶信息
+			uni.removeStorageSync('listDetail');
+        },
+
+        methods: {
+			subBtn(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/useGasApply/useGasApplyAdd?status=0'
+				});
+			},
+			goInfo(d){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/useGasApply/useGasApplyDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//滚动加载事件
+			scrollGet(){
+			    if(this.getData.getType){
+			        this.getData.pageNum += 1;
+			        this.getList();
+			    }
+			},
+			//查询实验室
+			async getList(){
+				const {data} = await useAgsApplyList(this.getData)
+				if(data.code == 200){
+					let _this=this;
+					let res=data.rows
+					if(_this.getData.pageNum==1){
+						_this.dataList=res;
+						if(res.length>0){
+							_this.pageType=0;
+						}else{
+							_this.pageType=4;
+						}
+					}else{
+						_this.dataList=_this.dataList.concat(res);
+					}
+				}
+			},
+
+        },
+		mounted(){
+			this.getList();
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #transportPerson {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		padding-bottom: 220rpx;
+        .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 .list{
+			 background: #FFFFFF;
+			 border-radius: 20rpx;
+			 margin: 20rpx 20rpx 0;
+			 padding: 0 20rpx;
+			 box-sizing: border-box;
+			 .list_li{
+				 height: 110rpx;
+				 display: flex;
+				 align-items: center;
+				 border-bottom:1px solid #f5f5f5;
+				 >img{
+					 width: 60rpx;
+					 height: 60rpx;
+				 }
+				 >text{
+					 font-size: 28rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #333333;
+					 line-height: 28rpx;
+					 display: inline-block;
+
+				 }
+				 .list_li_text{
+					 margin-left: 30rpx;
+					 width: 150rpx;
+					 font-size: 28rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #333333;
+					 line-height: 28rpx;
+				 }
+				 .list_li_text2{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #999999;
+					 line-height: 24rpx;
+				 }
+				 .colorA{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #FF8A00;
+					 line-height: 24rpx;
+				 }
+				 .colorB{
+					 flex: 1;
+					 text-align: right;
+					 font-size: 24rpx;
+					 font-family: PingFang SC;
+					 font-weight: 500;
+					 color: #FF6F6F;
+					 line-height: 24rpx;
+				 }
+
+			 }
+		 }
+     }
+		.empty{
+			text-align: center;
+			margin-top: 316rpx;
+			>img{
+				width: 336rpx;
+				height: 222rpx;
+				margin-left: 208rpx;
+			}
+			>view{
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #E0E0E0;
+				line-height: 30rpx;
+				margin-top: 48rpx;
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+		}
+	}
+</style>

+ 612 - 0
pages_manage/gasBottle/useGasApply/useGasApplyAdd.vue

@@ -0,0 +1,612 @@
+<!-- 用气申请-->
+<template>
+    <view id="register">
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone"   type="text" >
+			</view>
+		</view>
+		<view class="register_li2">
+			<picker @change="bindPickerChange" :value="pickerIndex" :range="pickerArray">
+				<view class="register_li_min">
+					<view>*</view>
+					<view>实验地点:</view>
+					<input v-model="form.location" disabled type="text" placeholder="请选择实验地点" placeholder-style="color:#999;">
+				</view>
+			</picker>
+			<picker @change="bindPickerChange2" :value="pickerIndex2" :range="pickerArray2">
+				<view class="register_li_min">
+					<view>*</view>
+					<view>使用气体:</view>
+					<input v-model="form.useGasName" disabled type="text" placeholder="请选择使用气体" placeholder-style="color:#999;">
+				</view>
+			</picker>
+			<!-- 使用期限 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;">*</text>使用期限:</view>
+				<picker mode="date" @change="startChange($event)">
+					<input class="picker-text" v-model="form.startTime" disabled  type="text"  placeholder="开始时间" placeholder-style="color:#999;">
+				</picker>
+				<view>-</view>
+				<picker mode="date" @change="endChange($event)">
+					<input class="picker-text2" v-model="form.endTime" disabled  type="text"  placeholder="结束时间" placeholder-style="color:#999;">
+				</picker>
+			</view>
+			<view class="register_li_min">
+			    <view>*</view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse"   type="text"  placeholder="请输入气体用途" placeholder-style="color:#999;">
+			</view>
+			<view class="register_li_min">
+			    <view>*</view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions"   type="text"  placeholder="请输入主要安全管理措施" placeholder-style="color:#999;">
+			</view>
+			<view  class="issue_li" style="border-bottom:0;">
+				<view>*</view>
+				<view>用气申请表:</view>
+				<view @click="selectImage">
+					<img :src="baseUrl+form.applyCertificate">
+					<text>+上传图片</text>
+				</view>
+			</view>
+		</view>
+
+		<view v-if="listType==0" class="sub_btn" @click="submitForm()">提交</view>
+		<view v-if="listType==2" class="sub_btn">重新申请</view>
+	</view>
+</template>
+
+<script>
+    import {labList,getLoginUser,useAgsApplyAdd,useAgsApplyDetail,useAgsApplyAmend,qualificationVerify,googsList} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				listType:0,
+				form:{
+					applyUser:'',//申请人
+					applyUserid:'',//申请人id
+					phone:'',//	联系方式
+					location:'',//实验地点
+					useGasName:'',//气体名称
+					useGasId:'',//气体名称Id
+					subjectId:'',//实验地点Id
+					startTime:'',//期限开始
+					endTime:'',//期限结束
+					gasUse:'',//气体用途
+					safetyPrecautions:'',//安全措施
+					applyCertificate:'',//用气申请表
+				},
+				checkStatus:0,
+				pickerArray:[],
+				pickerArrayList:[],
+				pickerArray2:[],//气体名称
+				pickerArrayList2:[],//气体名称
+				status:null,//0添加1编辑
+				id:null,
+            }
+        },
+        onLoad(option) {
+			this.status=option.status;
+			this.id=option.id;
+
+        },
+        onShow(){
+
+        },
+        methods: {
+
+			//查询实验室
+			async labList(){
+				const {data} = await labList()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.data
+					_this.pickerArrayList=res;
+					res.forEach(function(item){
+						_this.pickerArray.push(item.name);
+					})
+
+				}
+			},
+			//获取气体名称列表
+			async googsList(){
+			    let _this = this;
+			    const {data} = await googsList({id:this.id})
+			    if(data.code==200){
+					let _this=this;
+					let res=data.rows
+					_this.pickerArrayList2=res;
+					res.forEach(function(item){
+						_this.pickerArray2.push(item.goodsName);
+					})
+				}
+			},
+			//查询用户信息
+			async getLoginUser(){
+				const {data} = await getLoginUser()
+				if(data.code == 200){
+					let _this=this;
+					let res=data.data;
+					_this.form.applyUser=res.nickName;
+					_this.form.applyUserid=res.id;
+					_this.form.phone=res.phonenumber;
+				}
+			},
+			//选择气体名称
+			async bindPickerChange2(e){
+				let _this=this;
+				let index=e.target.value
+				//获取实验室名称
+				_this.form.useGasName=_this.pickerArray2[index]
+				//循环获取实验室id
+				_this.pickerArrayList2.forEach(function(item){
+					if(_this.pickerArray2[index]==item.goodsName){
+						_this.form.useGasId=item.id;
+					}
+				})
+			},
+			//选择实验室
+			async bindPickerChange(e){
+				let _this=this;
+				let index=e.target.value
+				//获取实验室名称
+				_this.form.location=_this.pickerArray[index]
+				//循环获取实验室id
+				_this.pickerArrayList.forEach(function(item){
+					if(_this.pickerArray[index]==item.name){
+						_this.form.subjectId=item.id;
+					}
+				})
+
+				//校验当前用户有乜有当前实验室使用 权限
+				const {data} = await qualificationVerify({subjectId:_this.form.subjectId})
+				if(data.code==200){
+					let res=data.data
+					if(res.count>0){//有资格
+
+					}else{//没资格
+						uni.showToast({
+							title:'申请用气资格前需要先申请对应实验地点的安全准人资格!',
+							icon:"none",
+							mask:true,
+							duration: 2000
+						});
+						_this.form.location='';
+						_this.form.subjectId='';
+					}
+				}
+
+			},
+			//时间选中
+			startChange(e){
+				if(new Date(e.target.value).getTime()>=new Date(this.form.endTime).getTime()){
+					 uni.showToast({
+						title: '结束时间不能小于开始时间',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}else{
+					this.form.startTime = e.target.value
+				}
+			},
+			endChange(e){
+				if(new Date(this.form.startTime).getTime()>=new Date(e.target.value).getTime()){
+					 uni.showToast({
+						title: '结束时间不能小于开始时间',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+				}else{
+					this.form.endTime = e.target.value
+				}
+			},
+			// 图片上传
+			selectImage() {
+
+			    let self = this;
+			    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){
+							self.form.applyCertificate=res.data.url
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon:"none",
+								mask:true,
+								duration: 2000
+							});
+						}
+			        },
+			        fail: err => {},
+			        complete: () => {
+			            uni.hideLoading()
+			        }
+			    });
+			},
+			//删除图片
+			delImg(index){
+			    this.newData.imgList.splice(index,1);
+			},
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+			    const {data} = await useAgsApplyDetail({id:this.id})
+			    if(data.code==200){
+					let res=data.data
+					_this.form=res.apply;
+
+
+				}
+			},
+
+			//提交
+			async submitForm(){
+				let _this = this;
+				if(!this.form.applyUser){
+					uni.showToast({
+						title: '请输入申请人',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.phone){
+					uni.showToast({
+						title: '请输入联系方式',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.location){
+					uni.showToast({
+						title: '请输入实验地点',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.startTime){
+					uni.showToast({
+						title: '请输入期限开始',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.endTime){
+					uni.showToast({
+						title: '请输入期限结束',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.gasUse){
+					uni.showToast({
+						title: '请输入气体用途',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.safetyPrecautions){
+					uni.showToast({
+						title: '请输入安全措施',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				if(!this.form.applyCertificate){
+					uni.showToast({
+						title: '请输入用气申请表',
+						icon:"none",
+						mask:true,
+						duration: 2000
+					});
+					return
+				}
+				_this.form.listDetail=_this.listDetailArr;
+				if(_this.status==0){//添加
+					const {data} = await useAgsApplyAdd(_this.form);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '提交成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/useGasApply/useGasApply'
+					        });
+					    },2000);
+					}
+				}else if(_this.status==1){//编辑
+					const {data} = await useAgsApplyAmend(_this.form);
+					if(data.code == 200){
+					    uni.showToast({
+					        title: '提交成功',
+					        icon:"none",
+					        mask:true,
+					        duration: 2000
+					    });
+					    setTimeout(function(){
+					       uni.redirectTo({
+					            url: '/pages_manage/gasBottle/useGasApply/useGasApply'
+					        });
+					    },2000);
+					}
+				}
+
+			},
+
+        },
+		mounted(){
+		   this.googsList()
+		   this.labList()
+		   this.getLoginUser()
+		   if(this.status==1){
+		   	this.getInfo();
+		   }
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+
+		}
+		.register_li2{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+					line-height: 100rpx;
+					margin-right: 110rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+			.issue_li{
+				margin:34rpx 26rpx 0;
+
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+					display: inline-block;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333;
+					display: inline-block;
+				}
+				view:nth-child(3){
+					width: 668rpx;
+					height: 270rpx;
+					border: 1px solid #E0E0E0;
+					border-radius: 10rpx;
+					text-align: center;
+					margin-top: 34rpx;
+					position: relative;
+					>img{
+						width: 668rpx;
+						height: 270rpx;
+						position: absolute;
+						z-index: 10;
+					}
+					>text{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 270rpx;
+						position: absolute;
+						left: 278rpx;
+						z-index: 20;
+
+					}
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 290 - 0
pages_manage/gasBottle/useGasApply/useGasApplyDetail.vue

@@ -0,0 +1,290 @@
+<!-- 资质审核-->
+<template>
+    <view id="register">
+		<viwe v-if="status==0" class="tip">信息正在审核中,请耐心等待...</viwe>
+		<viwe v-if="status==2" class="reject">{{form.centerAuditStatus==2?'您提交的审核被驳回,驳回原因为:'+form.centerAuditCause:'您提交的审核被驳回,驳回原因为:'+form.leadAuditCause}}</viwe>
+
+		<view class="register_li">
+			<view class="register_li_min">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_sqr.png">
+				<view>申请人:</view>
+				<input v-model="form.applyUser" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<img class="icon_img" src="@/pages_manage/images/icon_zgsq_dhh.png">
+				<view>联系方式:</view>
+				<input v-model="form.phone" disabled  type="text" >
+			</view>
+		</view>
+		<!-- <view class="register_li">
+			<view class="register_li_min" v-for="(item,index) in form.airBottlelist" style="border-bottom:0;" >
+				<view></view>
+				<view>{{item.airConstituents}}-{{item.parent}}({{item.specValue}}):</view>
+				<input v-model="item.bottleNumber" disabled  type="text" >
+			</view>
+		</view> -->
+		<view class="register_li">
+			<view class="register_li_min">
+				<view></view>
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled type="text" >
+			</view>
+			<view class="register_li_min">
+				<view></view>
+				<view>使用气体:</view>
+				<input v-model="form.useGasName" disabled type="text" >
+			</view>
+			<!-- 使用期限 -->
+			<view class="register_li_min2">
+				<view><text  style="color: #f00;margin-right: 10rpx;"></text>使用期限:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form.startTime" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form.endTime" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>气体用途:</view>
+				<input v-model="form.gasUse" disabled  type="text" >
+			</view>
+			<view class="register_li_min">
+			    <view></view>
+				<view>安全措施:</view>
+				<input v-model="form.safetyPrecautions" disabled  type="text" >
+			</view>
+			<view  class="issue_li" style="border-bottom:0;"  @click="lookItem(form.applyCertificate)">
+				<view></view>
+				<view>用气申请表:</view>
+				<img class="issue_img" :src="baseUrl+form.applyCertificate">
+			</view>
+		</view>
+
+		<view  class="sub_btn" v-if="status=='2'" @click="submitForm()">重新申请</view>
+	</view>
+</template>
+
+<script>
+    import {useAgsApplyDetail} from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+        data() {
+            return {
+				baseUrl:config.base_url,
+				form:{},
+				id:'',
+				status:null,
+            }
+        },
+        onLoad(option) {
+			if(decodeURIComponent(option.item)){
+				this.id=JSON.parse(decodeURIComponent(option.item)).id;
+				this.status=JSON.parse(decodeURIComponent(option.item)).remark;
+			}
+
+        },
+        onShow(){
+
+
+
+        },
+
+        methods: {
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+			    const {data} = await useAgsApplyDetail({id:this.id})
+			    if(data.code==200){
+					let res=data.data
+					_this.form=res.apply;
+					_this.form.airBottlelist=res.airBottlelist
+			    }
+			},
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			//重新提交
+			async submitForm(){
+				uni.redirectTo({
+				    url:'/pages_manage/gasBottle/useGasApply/useGasApplyAdd?status=1&id='+this.id
+				});
+			},
+        },
+		mounted() {
+			this.getInfo();
+		}
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #register{
+        height:auto;
+        width:100%;
+        display flex;
+        flex-direction column;
+		padding-bottom: 220rpx;
+		/* 审核中 */
+		.tip{
+			width: 750rpx;
+			background: rgba(255,144,0,0.2);
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FF9000;
+			line-height: 28rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		/* 驳回 */
+		.reject{
+			width: 750rpx;
+			background: #F3DCDC;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #DC0000;
+			line-height: 36rpx;
+			padding: 36rpx 20rpx;
+			box-sizing: border-box;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					line-height:100rpx;
+					font-size:28rpx;
+				}
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 120rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 188rpx;
+					text-align: right;
+				}
+			}
+
+			.issue_li{
+				margin:34rpx 26rpx 0;
+				display flex;
+				border-bottom: 1px solid #F5F5F5;
+				view:nth-child(1){
+					color:red;
+					line-height:28rpx;
+					margin-right: 12rpx;
+				}
+				view:nth-child(2){
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.issue_img{
+					width: 210rpx;
+					height: 210rpx;
+					border-radius: 10rpx;
+					margin-left:250rpx;
+				}
+			}
+		}
+		/* 按钮 */
+		.sub_btn{
+			width: 650rpx;
+			height: 100rpx;
+			background: #0183FA;
+			border-radius: 20rpx;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			line-height: 100rpx;
+			text-align: center;
+			margin-left: 50rpx;
+			position: fixed;
+			bottom:30rpx;
+		}
+	}
+	/deep/.input-value-border{
+		display :none !important;
+	}
+</style>

+ 171 - 0
pages_manage/gasBottle/useRecord/useRecord.vue

@@ -0,0 +1,171 @@
+<!--气瓶列表-->
+<template>
+    <view id="gasRecycle">
+		<scroll-view scroll-y @scrolltolower="scrollGet" class="scroll-box">
+		    <view class="for-big-box" >
+		        <view class="for-box" @click="goInfo(item)" v-for="(item,index) in dataList" :key="index">
+		        	<view class="for-box_t">{{item.airName}}-{{item.configName}}</view>
+		        	<view class="for-box_b">
+						<img class="for-back-img" src="@/pages_manage/images/icon_qpgl_syl.png">
+						<text>使用量: {{item.pressure==null?'':item.pressure}}Mpa</text>
+					</view>
+					<view class="for-box_b2">
+						<img class="for-back-img" src="@/images/basicsModules/icon_wtzg_sj.png">
+						<view>使用时间: {{item.useTimeApp==null?'':item.useTimeApp}}-{{item.backTimeApp==null?'':item.backTimeApp}}</view>
+					</view>
+		        </view>
+		    </view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { useRecordList } from '@/api/apiDemo/index.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+					isCg:0,
+					zgStatus:"",
+				    getType:true,
+				    nullDataType:true,
+				},
+				userType:uni.getStorageSync('userType'),
+
+                dataList:[],
+            }
+        },
+        onLoad() {
+			 this.getList();
+        },
+        onShow() {
+
+        },
+		mounted(){
+
+
+		},
+        methods: {
+
+			//滚动加载事件
+			scrollGet(){
+			    if(this.getData.getType){
+			        this.getData.pageNum += 1;
+			        this.getList();
+			    }
+			},
+			goInfo(d){
+				uni.navigateTo({
+				    url:'/pages_manage/gasBottle/useRecord/useRecordDetail?item='+encodeURIComponent(JSON.stringify(d))
+				});
+			},
+			//获取列表
+			async getList(){
+				let _this = this;
+				const {data} = await useRecordList({id:this.id})
+				if(data.code==200){
+					let res=data.rows
+					_this.dataList=res
+				}
+			},
+
+        }
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: 100%;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+     .scroll-box{
+        // flex:1;
+         overflow-y scroll;
+		 margin-top: 20rpx;
+
+         .for-big-box:last-child{
+             margin-bottom:180rpx;
+         }
+         .for-big-box{
+             margin:0 20rpx 20rpx;
+             overflow hidden
+             border-bottom-left-radius :20rpx;
+             border-bottom-right-radius :20rpx;
+             .for-time-p{
+                 background #fff
+                 line-height:87rpx;
+                 font-size:30rpx;
+                 padding:0 22rpx;
+                 border-radius:20rpx;
+             }
+             .for-back-img{
+                 height:30rpx;
+                 width:710rpx;
+             }
+			.for-box{
+				overflow hidden;
+				background: #fff;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				.for-box_t{
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 28rpx;
+					margin: 28rpx 0 40rpx 0;
+				}
+				.for-box_b{
+					display: flex;
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>text{
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+						margin-bottom: 20rpx;
+					}
+					>text:nth-of-type(1){
+						width: 190rpx;
+					}
+				}
+				.for-box_b2{
+					border-bottom: 1px solid #E0E0E0;
+					display: flex;
+					>img{
+						width: 28rpx;
+						height: 28rpx;
+						margin-right: 10rpx;
+					}
+					>view{
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 26rpx;
+						margin-bottom: 20rpx;
+					}
+					>text:nth-of-type(1){
+						width: 190rpx;
+					}
+				}
+			}
+		 }
+     }
+	}
+</style>

+ 243 - 0
pages_manage/gasBottle/useRecord/useRecordDetail.vue

@@ -0,0 +1,243 @@
+<!--使用详情-->
+<template>
+    <view id="gasRecycle">
+		<view class="title">{{form.storageVo.airName}}-{{form.storageVo.configName}}</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>实验地点:</view>
+				<input v-model="form.location" disabled  type="text" >
+			</view>
+			<view class="register_li_min" style="border: none;">
+				<view>编号:</view>
+				<input v-model="form.storageVo.airNumber" disabled  type="text" >
+			</view>
+		</view>
+		<view class="register_li">
+			<view class="register_li_min">
+				<view>使用人:</view>
+				<input v-model="form.contacts" disabled  type="text" >
+			</view>
+			<!-- 使用时间 -->
+			<view class="register_li_min2">
+				<view>使用时间:</view>
+				<picker mode="date" disabled @change="startChange($event)">
+					<input class="picker-text" v-model="form.useTimeApp" disabled  type="text"  placeholder="开始时间">
+				</picker>
+				<view>-</view>
+				<picker mode="date" disabled @change="endChange($event)">
+					<input class="picker-text2" v-model="form.backTimeApp" disabled  type="text"  placeholder="结束时间">
+				</picker>
+			</view>
+			<view class="register_li_min">
+				<view>使用量:</view>
+				<view>{{form.amount+'Mpa'}}</view>
+			</view>
+			<view v-if="form.beforeUse" class="register_li_min">
+				<view>使用前气压:</view>
+				<view>{{form.beforeUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form.beforeUsePic" class="meter_img" :style="!form.afterUse?'border:none;':''" @click="lookItem(form.beforeUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form.beforeUsePic" >
+			</view>
+			<view v-if="form.afterUse" class="register_li_min">
+				<view>使用后气压:</view>
+				<view>{{form.afterUse+'Mpa'}}</view>
+			</view>
+			<view v-if="form.afterUsePic" class="meter_img" style="border:0;" @click="lookItem(form.afterUsePic)">
+				<view>气表照片:</view>
+				<img :src="baseUrl+form.afterUsePic" >
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { useRecordDetail } from '@/api/apiDemo/index.js'
+	import { config } from '@/api/request/config.js'
+    export default {
+
+        name: "gasRecycle",
+        data() {
+            return {
+				baseUrl:config.base_url,
+				pageType:0,
+				//列表请求参数
+				getData:{
+				    pageNum:1,
+					pageSize:20,
+
+				},
+				form:{
+				},
+                dataList:[],
+				id:'',
+				status:null,
+            }
+        },
+        onLoad(option) {
+			if(decodeURIComponent(option.item)){
+				this.id=JSON.parse(decodeURIComponent(option.item)).id;
+				this.status=JSON.parse(decodeURIComponent(option.item)).remark;
+			}
+        },
+        onShow() {
+
+        },
+
+        methods: {
+			lookItem(item){
+				//查看图片
+				wx.previewImage({
+					urls: [config.base_url+item], //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
+					current: '', // 当前显示图片的http链接,默认是第一个
+					success: function(res) {},
+					fail: function(res) {},
+					complete: function(res) {},
+				})
+			},
+			//获取详情
+			async getInfo(){
+			    let _this = this;
+			    const {data} = await useRecordDetail(this.id)
+			    if(data.code==200){
+					let res=data.data
+					_this.form=res;
+			    }
+			},
+        },
+		mounted(){
+			this.getInfo();
+		},
+    }
+</script>
+
+<style lang="stylus" scoped>
+    #gasRecycle {
+        height: auto;
+        width: 100%;
+		flex :1;
+        display flex;
+        flex-direction column
+        overflow hidden;
+		.title{
+			width: 750rpx;
+			height: 100rpx;
+			background: #FFFFFF;
+			font-size: 28rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #333333;
+			line-height: 100rpx;
+			padding-left: 40rpx;
+		}
+		.register_li{
+			background #fff;
+			border-radius:20rpx;
+			margin:20rpx 20rpx 0;
+			padding:20rpx 0;
+			box-sizing: border-box;
+			.register_li_min{
+				margin:0 26rpx;
+				display flex;
+				align-items center;
+				border-bottom: 1px solid #F5F5F5;
+				.icon_img{
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 12rpx;
+				}
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>view:nth-child(2){
+					flex: 1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+				>input{
+					flex:1;
+					text-align: right;
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+
+
+			}
+			/* 时间 */
+			.register_li_min2{
+				margin:0 26rpx;
+				border-bottom: 1px solid #f5f5f5;
+				height: 100rpx;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				>view:nth-child(1){
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+					margin-right: 46rpx;
+				}
+				.picker-text{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+
+				}
+				>view:nth-child(2){
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+				}
+				.picker-text2{
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					line-height: 100rpx;
+					width: 240rpx;
+					text-align: right;
+				}
+			}
+
+			.meter_img{
+				margin:0 26rpx;
+				display flex;
+				justify-content: space-between;
+				border-bottom: 1px solid #F5F5F5;
+				view{
+					//width:140rpx;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 100rpx;
+				}
+				>img{
+					width: 150rpx;
+					height: 150rpx;
+					border-radius: 10rpx;
+					margin:42rpx 0 20rpx 0;
+				}
+			}
+		}
+	}
+</style>

+ 0 - 0
pages_manage/gasBottle/useRegister/giveRegister.vue


Деякі файли не було показано, через те що забагато файлів було змінено