Преглед на файлове

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/projects/business/apis/HouseKeeper/control/guest.js
#	src/projects/business/apis/HouseKeeper/control/health.js
wgl преди 4 години
родител
ревизия
6eb6030bab

+ 1 - 1
src/assets/css/mui.min.css

@@ -2416,7 +2416,7 @@ input[type=url],
 input[type=week],
 select,
 textarea {
-	line-height: 38px;
+	line-height: 43px;
 	width: 100%;
 	padding: 0 15px;
 	-webkit-user-select: text;

+ 13 - 5
src/assets/css/xpwyfyy.css

@@ -913,7 +913,7 @@ h3 {
 .vongi-login-form .mui-input-row a {
 	position: absolute;
 	right: 15px;
-	top: 15px;
+	top: 11px;
 	color: #3385FF
 }
 
@@ -1423,7 +1423,9 @@ h3 {
 .vongi-qingjiadt .mui-input-group span {
 	text-align: right;
 	display: block;
-	padding: 11px 15px;
+	padding: 11px 15px 11px 0;
+	width:65%;
+	float:right
 }
 
 .vongi-yddk-dat-photo .flew {
@@ -1746,7 +1748,8 @@ h3 {
 
 .vongi-qingjiadt .mui-input-group .flew span {
 	padding: 0;
-	margin-left: 5px
+	margin-left: 5px;
+	width:auto
 }
 
 .vongi-fkdat-name h5 {
@@ -1780,7 +1783,7 @@ h3 {
 
 .vongi-yqma-ma img {
 	width: 100%;
-	display: flex
+	display: flex;
 }
 
 .vongi-yqma .mui-table-view-cell span {
@@ -1878,7 +1881,9 @@ h3 {
 .vongi-xzdw-city .mui-control-content {
 	display: block;
 }
-
+.vongi-xzdw-city .mui-control-content .mui-table-view-cell{
+	text-align: center;
+}
 .vongi-xzdw-city .mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {
 	background-color: #fff;
 }
@@ -1898,3 +1903,6 @@ h3 {
 .vongi-meform h5{
 	margin-bottom:10px
 }
+.vongi-xzyljg .mui-table-view-cell:after{
+	left:0
+}

+ 28 - 2
src/projects/business/apis/Guest/from.js

@@ -2,11 +2,37 @@ import request from '@/utils/request'
 import Qs from 'qs';
 
 //
-export function healthShowNumData(params) {
+export function pageList(params) {
     return request({
-        url: '/mobile/healthShowApi/numData',
+        url: '/mobile/guestInfoRecordApi/pageList',
         data: Qs.stringify(params),
         method: 'post',
     })
 }
 
+//获取设备列表
+export function getDeviceList() {
+    return request({
+        url: '/mobile/guestInfoRecordApi/deviceList',
+        data: Qs.stringify({}),
+        method: 'post',
+    })
+}
+
+//获取访客记录
+export function getDetail(id) {
+    return request({
+        url: '/mobile/guestInfoRecordApi/get/'+id,
+        //data: Qs.stringify({id:id}),
+        method: 'get',
+    })
+}
+
+//添加访客记录
+export function add(params) {
+    return request.post('/mobile/guestInfoRecordApi/add', params,{
+        headers: {
+            "Content-Type": "application/json"
+        }
+    });
+}

+ 15 - 5
src/projects/business/apis/Guest/to.js

@@ -1,12 +1,22 @@
 import request from '@/utils/request'
 import Qs from 'qs';
 
-//
-export function healthShowNumData(params) {
+//免登陆
+//获取访客记录(部分)
+export function getDetail(id) {
     return request({
-        url: '/mobile/healthShowApi/numData',
-        data: Qs.stringify(params),
-        method: 'post',
+        url: '/mobile/guestInfoRecordApi/detail/'+id,
+        //data: Qs.stringify({id:id}),
+        method: 'get',
     })
 }
 
+//免登陆
+//访客确认
+export function update(params) {
+    return request.post('/mobile/guestInfoRecordApi/update', params,{
+        headers: {
+            "Content-Type": "application/json"
+        }
+    });
+}

+ 11 - 0
src/projects/business/router/guest.js

@@ -31,6 +31,17 @@ const routesGuest = [
 							title: '邀请访客',
 						}
 					},
+					//邀请访客
+					{
+						path: 'info',
+						name: 'GuestFromInfo',
+						component: () => import('../views/Guest/From/Info.vue'),
+						meta: {
+							requireAuth: false,
+							role: [],
+							title: '访客详情',
+						}
+					},
 					//邀请访客勾选下发设备
 					{
 						path: 'device',

+ 234 - 18
src/projects/business/views/Guest/From/Add.vue

@@ -1,68 +1,284 @@
 <template>
 <div>
-    <header class="mui-bar mui-bar-nav">
-			<h1 class="mui-title">邀请访客</h1>
-			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
-		</header>
-		<div class="mui-content">			
+	<common @asynCallBack="asynCallBack"></common>
+	<top-header :pageTitle="pageTitle" v-if="step=='1'"  ></top-header>
+		<div class="mui-content" v-if="step=='1'">
 			<div class="mui-content-padded vongi-editme">
 				<form class="mui-input-group">
 					<div class="mui-input-row">
 						<label>受邀人<span class="colorfe616c">*</span></label>
-						<input type="text" class="mui-input-clear" placeholder="请输入姓名">
+						<input type="text" class="mui-input-clear" placeholder="请输入姓名" v-model="detail.name">
 					</div>
 					<div class="mui-input-row">
 						<label>手机号码<span class="colorfe616c">*</span></label>
-						<input type="text" class="mui-input-clear" placeholder="请输入手机号码">
+						<input type="text" class="mui-input-clear" placeholder="请输入手机号码"  v-model="detail.mobilePhone">
 					</div>
 					<div class="mui-input-row">
 						<label>受邀单位<span class="colorfe616c">*</span></label>
-						<input type="text" class="mui-input-clear" placeholder="请输入单位名称">
+						<input type="text" class="mui-input-clear" placeholder="请输入单位名称"  v-model="detail.unit">
 					</div>
 					<div class="mui-input-row">
 						<label>访问事由<span class="colorfe616c">*</span></label>
-						<input type="text" class="mui-input-clear" placeholder="请填写您的来访事由">
+						<input type="text" class="mui-input-clear" placeholder="请填写您的来访事由"  v-model="detail.visitReasons">
 					</div>
 				</form>
 			</div>
-			<div class="mui-content-padded vongi-editme">
+			<div class="mui-content-padded vongi-editme" >
 				<form class="mui-input-group">
 					<div class="mui-input-row">
 						<label>生效时间<span class="colorfe616c">*</span></label>					
-						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
+						<button  @click="selectStartTime()"  v-text="detail.visitDate" class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
 							2020-09-20 14:30:00
 						</button>						
 					</div>
 					<div class="mui-input-row">
 						<label>过期时间<span class="colorfe616c">*</span></label>					
-						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
+						<button  @click="selectEndTime()"  v-text="detail.expirationTime" class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
 							2020-09-20 14:30:00
 						</button>						
 					</div>
 					<div class="mui-input-row">
 						<label style="width:50%">需要上传登记照</label>					
-						<div id="autoLogin" class="mui-switch mui-active">
+						<div id="autoLogin" class="mui-switch " :class="detail.isUpPhoto?'mui-active':''" @click="detail.isUpPhoto=!detail.isUpPhoto">
 							<div class="mui-switch-handle"></div>
 						</div>						
 					</div>
 					<div class="mui-input-row">
-						<label style="width:40%">照片下发设备<span class="colorfe616c">*</span></label>					
-						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:60%">
-							共3
+						<label style="width:40%">照片下发设备<span class="colorfe616c"  v-if="detail.isUpPhoto" >*</span></label>
+						<button   class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:60%" @click="selectDevice">
+							已选{{indexDevice.length}}
 						</button>						
 					</div>
 				</form>
 			</div>
 		</div>
-		<div class="fyy-footer">
-			<div class="bindfyy-btn"><button type="submit" class="mui-btn mui-btn-primary ">发送短信邀请函</button></div>
+		<div class="fyy-footer"  v-if="step=='1'">
+			<div class="bindfyy-btn"><button type="submit" class="mui-btn mui-btn-primary " @click="submit()">发送短信邀请函</button></div>
+		</div>
+	<header class="mui-bar mui-bar-nav "  v-if="step=='2'"  >
+		<a  class="mui-title">{{pageTitle}}</a>
+		<a   class="mui-icon mui-icon-left-nav mui-pull-left"  @click="goBack"></a>
+	</header>
+	<div class="mui-content" v-if="step=='2'">
+		<div class="mui-content-padded">
+			<h5>请选择设备</h5>
+			<form class="mui-input-group">
+				<div class="mui-input-row mui-checkbox" v-for="(item,index) in deviceList">
+					<label>{{item.name}}</label>
+					<input name="checkbox1" v-model="indexDevice" :value="item.id" type="checkbox">
+				</div>
+
+			</form>
+		</div>
+	</div>
+	<div class="fyy-footer" v-if="step=='2'">
+		<div class="bindfyy-btn">
+			<button type="button" class="mui-btn mui-btn-primary " @click="goBack()">
+				保存
+			</button>
 		</div>
+	</div>
+
+	<loading :visible="isLoading"></loading>
+
 </div>
 </template>
 
+
 <script>
+	require('$project/assets/js/mui.js');
+
+	require('$project/assets/js/mui.picker.min.js');
+
+	import * as API_From from '@/apis/Guest/from'
+	import Common from '$project/components/Common.vue'
+	import Loading from '$project/components/Loading.vue'
+	import TopHeader from '$project/components/TopHeader.vue'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	import {
+		checkPhone,
+		currentTimeStamp,
+		parseUnixTime
+	} from '$project/utils'
+	export default {
+		name: 'GuestFromDeviceAdd',
+		components: {
+			Common,
+			Loading,
+			TopHeader
+		},
+		data() {
+			return {
+				pageTitle: '邀请访客',
+
+				id: '',
+				detail: {
+					id:'',
+					name:'',
+					mobilePhone:'',
+					unit:'',
+					visitReasons:'',
+
+				  	visitDate: '请选择',
+					expirationTime: '请选择',
+					issueDevice: '',
+					isUpPhoto:1,
+				},
+				isLoading: false,
+				step:'1',
+				deviceList:null,
+				indexDevice:[],
+
+			}
+		},
+		created() {
+			this.id = this.$route.query.id;
+		},
+		methods:  {
+			//检测表单
+			checkForm() {
+				let phoneResult = checkPhone(this.detail.mobilePhone);
+
+				if (!this.detail.name) {
+					mui.toast('请输入姓名');
+					return false;
+				} else if (!this.detail.mobilePhone) {
+					mui.toast('请输入手机号码');
+					return false;
+				}else if (typeof phoneResult == 'string') {
+					mui.toast(phoneResult);
+					return false;
+				}else if (!this.detail.unit) {
+					mui.toast('请输入单位名称');
+					return false;
+				}else if (!this.detail.visitReasons) {
+					mui.toast('请填写来访事由');
+					return false;
+				}else if (this.detail.visitDate=='请选择') {
+					mui.toast('请填写生效时间');
+					return false;
+				}else if (this.detail.expirationTime=='请选择') {
+					mui.toast('请填写过期时间');
+					return false;
+				}else if (this.detail.isUpPhoto&&this.indexDevice.length==0) {
+					mui.toast('请选择照片下发设备');
+					return false;
+				}  else {
+					return true;
+				}
+			},
+			submit(){
+				if (this.checkForm()) {
+					this.detail.issueDevice = this.indexDevice.join(',');
+					var btnArray = ['否', '是'];
+					var _this = this;
+					mui.confirm('确认当操作?', '提示', btnArray, function(e) {
+						if (e.index == 1) {
+							_this.isLoading = true;
+							API_From.add(_this.detail).then(response => {
+								_this.$router.push({
+									name: 'GuestFromList',
+									query: {
+									}
+								})
+
+							}).catch(error => {
+								_this.isLoading = false;
+								mui.toast(error);
+							})
+						}
+					});
+				}
+			},
+			selectDevice(){
+				this.step='2'
+				if(this.deviceList==null){
+					this.getDeviceList();
+				}
+			},
+			goBack() {
+				this.step='1'
+			},
+			//选择时间
+			selectStartTime() {
+				var _this = this;
+
+				var picker = new mui.DtPicker({
+					"type": "datetime",
+					"beginYear": 2020,
+					"endYear": 2040,
+				});
+				picker.show(function(rs) {
+					_this.detail.visitDate = rs.text+':00';
+				});
+			},
+			//选择时间
+			selectEndTime() {
+				var _this = this;
+				var picker = new mui.DtPicker({
+					"type": "datetime",
+					"beginYear": 2020,
+					"endYear": 2040,
+					"beginDate": _this.detail.visitDate,
+				});
+				picker.show(function(rs) {
+					_this.detail.expirationTime = rs.text+':00';;
+				});
+			},
+			getDeviceList() {
+				this.isLoading = true;
+
+				API_From.getDeviceList( ).then(response => {
+					this.isLoading = false;
+					this.deviceList = response;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},
+			//获取详情
+			getDetail() {
+				this.isLoading = true;
+
+				API_From.getDetail(this.id ).then(response => {
+					this.isLoading = false;
+
+					this.detail = response;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},asynCallBack(){},
+		},
+		mounted() {
+			if(this.id){
+				this.detail.id=this.id;
+				this.getDetail();
+			}
+
+
+		},
+
+
+		destroyed() {
+
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+				person_data: 'person_data',
+				person_popedom: 'person_popedom',
+			})
+		}
+	}
 </script>
 
 <style scoped src="$project/assets/css/xpwyfyy.css"></style>
+<style src="$project/assets/css/mui.picker.min.css"></style>
+
 <style>
 </style>

+ 87 - 5
src/projects/business/views/Guest/From/Device.vue

@@ -1,10 +1,10 @@
 <template>
 <div>
-    <header class="mui-bar mui-bar-nav">
-			<h1 class="mui-title">勾选下发设备</h1>
-			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
-		</header>
-		<div class="mui-content">
+	<common @asynCallBack="asynCallBack"></common>
+	<top-header :pageTitle="pageTitle"  ></top-header>
+	<a  class="mui-icon mui-icon-left-nav mui-pull-left"  @click="goBack"></a>
+
+	<div class="mui-content">
 			<div class="mui-content-padded">
 				<h5>请选择设备</h5>
 				<form class="mui-input-group">
@@ -30,10 +30,92 @@
 					</button>
 			</div>
 		</div>
+	<loading :visible="isLoading"></loading>
+
 </div>
 </template>
 
+
 <script>
+	import * as API_From from '@/apis/Guest/from'
+	import Common from '$project/components/Common.vue'
+	import Loading from '$project/components/Loading.vue'
+	import TopHeader from '$project/components/TopHeader.vue'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	import {
+		currentTimeStamp,
+		parseUnixTime
+	} from '$project/utils'
+	export default {
+		name: 'GuestFromDevice',
+		components: {
+			Common,
+			Loading,
+			TopHeader
+		},
+		data() {
+			return {
+				pageTitle: '勾选下发设备',
+
+				id: '',
+				detail: {
+					personHealthLedger :{
+						healthStatusN:null,
+						familyGreenCode:""
+					}
+				},
+				isLoading: false,
+			}
+		},
+		created() {
+			this.id = this.$route.query.id;
+		},
+		methods:  {
+			//返回上一层
+			goBack() {
+				if (this.routeName) {
+					this.$router.push({
+						name: this.routeName
+					})
+				} else {
+					this.$router.go(-1);
+				}
+			},
+			//获取详情
+			getDetail() {
+				this.isLoading = true;
+
+				API_ControlHealth.getDetail(this.id,'3').then(response => {
+					this.isLoading = false;
+
+					this.detail = response;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},asynCallBack(){},
+		},
+		mounted() {
+			this.getDetail();
+
+		},
+
+
+		destroyed() {
+
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+				person_data: 'person_data',
+				person_popedom: 'person_popedom',
+			})
+		}
+	}
 </script>
 
 <style scoped src="$project/assets/css/xpwyfyy.css"></style>

+ 134 - 0
src/projects/business/views/Guest/From/Info.vue

@@ -0,0 +1,134 @@
+<template>
+<div>
+	<common @asynCallBack="asynCallBack"></common>
+	<top-header :pageTitle="pageTitle"  ></top-header>
+		<div class="mui-content">			
+			<div class="mui-content-padded vongi-editme">
+				<form class="mui-input-group">
+					<div class="mui-input-row">
+						<label>受邀人<span class="colorfe616c">*</span></label>
+						<input type="text" class="mui-input-clear" placeholder="请输入姓名">
+					</div>
+					<div class="mui-input-row">
+						<label>手机号码<span class="colorfe616c">*</span></label>
+						<input type="text" class="mui-input-clear" placeholder="请输入手机号码">
+					</div>
+					<div class="mui-input-row">
+						<label>受邀单位<span class="colorfe616c">*</span></label>
+						<input type="text" class="mui-input-clear" placeholder="请输入单位名称">
+					</div>
+					<div class="mui-input-row">
+						<label>访问事由<span class="colorfe616c">*</span></label>
+						<input type="text" class="mui-input-clear" placeholder="请填写您的来访事由">
+					</div>
+				</form>
+			</div>
+			<div class="mui-content-padded vongi-editme">
+				<form class="mui-input-group">
+					<div class="mui-input-row">
+						<label>生效时间<span class="colorfe616c">*</span></label>					
+						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
+							2020-09-20 14:30:00
+						</button>						
+					</div>
+					<div class="mui-input-row">
+						<label>过期时间<span class="colorfe616c">*</span></label>					
+						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:65%">
+							2020-09-20 14:30:00
+						</button>						
+					</div>
+					<div class="mui-input-row">
+						<label style="width:50%">需要上传登记照</label>					
+						<div id="autoLogin" class="mui-switch mui-active">
+							<div class="mui-switch-handle"></div>
+						</div>						
+					</div>
+					<div class="mui-input-row">
+						<label style="width:40%">照片下发设备<span class="colorfe616c">*</span></label>					
+						<button id='showUserPicker' class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:60%">
+							共3台
+						</button>						
+					</div>
+				</form>
+			</div>
+		</div>
+		<div class="fyy-footer">
+			<div class="bindfyy-btn"><button type="submit" class="mui-btn mui-btn-primary ">发送短信邀请函</button></div>
+		</div>
+
+	<loading :visible="isLoading"></loading>
+
+</div>
+</template>
+
+
+<script>
+	import * as API_From from '@/apis/Guest/from'
+	import Common from '$project/components/Common.vue'
+	import Loading from '$project/components/Loading.vue'
+	import TopHeader from '$project/components/TopHeader.vue'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	import {
+		currentTimeStamp,
+		parseUnixTime
+	} from '$project/utils'
+	export default {
+		name: 'GuestFromDeviceInfo',
+		components: {
+			Common,
+			Loading,
+			TopHeader
+		},
+		data() {
+			return {
+				pageTitle: '访客详情',
+				id: '',
+				detail: {
+				},
+				isLoading: false,
+			}
+		},
+		created() {
+			this.id = this.$route.query.id;
+		},
+		methods:  {
+			//获取详情
+			getDetail() {
+				this.isLoading = true;
+
+				API_From.getDetail(this.id ).then(response => {
+					this.isLoading = false;
+
+					this.detail = response;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},asynCallBack(){},
+		},
+		mounted() {
+			this.getDetail();
+
+		},
+
+
+		destroyed() {
+
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+				person_data: 'person_data',
+				person_popedom: 'person_popedom',
+			})
+		}
+	}
+</script>
+
+<style scoped src="$project/assets/css/xpwyfyy.css"></style>
+<style>
+</style>

+ 131 - 71
src/projects/business/views/Guest/From/List.vue

@@ -1,102 +1,162 @@
 <template>
 <div>
-    <header class="mui-bar mui-bar-nav">
-			<h1 class="mui-title">访客申请列表</h1>
-			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
-		</header>
+	<common @asynCallBack="asynCallBack"></common>
+	<top-header :pageTitle="pageTitle"  :routeName="routeName" ></top-header>
 		<div class="mui-content margin60">
-			<div class="mui-content-padded">
-				<ul class="mui-table-view fyy-view">
+
+			<div class="mui-content-padded" v-for="item in recordList">
+
+				<ul class="mui-table-view fyy-view" @click="detail(item.id)">
 					<li class="mui-table-view-cell">
 						<label>受  邀 人:</label>
-						<span>刘成志<span class="mui-pull-right colorf8b155">待确认</span></span>
+						<span>{{item.name}}<span class="mui-pull-right " :class="statusColor[item.status]">{{status[item.status]}}</span></span>
 					</li>
 					<li class="mui-table-view-cell">
 						<label>受邀单位:</label>
-						<span>湖北荆鹏软件集团有限公司</span>
+						<span>{{item.unit}}</span>
 					</li>
 					<li class="mui-table-view-cell">
 						<label>拜访事宜:</label>
-						<span>业务洽谈</span>
+						<span>{{item.visitReasons}}</span>
 					</li>
 					<li class="mui-table-view-cell">
 						<label>拜访时间:</label>
-						<span>2020-09-28 15:00:00</span>
-					</li>
-				</ul>
-			</div>
-			<div class="mui-content-padded">
-				<ul class="mui-table-view fyy-view">
-					<li class="mui-table-view-cell">
-						<label>受  访 人:</label>
-						<span>刘成志<span class="mui-pull-right color55f868">已确认</span></span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>来访单位:</label>
-						<span>湖北荆鹏软件集团有限公司</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访事宜:</label>
-						<span>业务洽谈</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访时间:</label>
-						<span>2020-09-28 15:00:00</span>
-					</li>
-				</ul>
-			</div>
-			<div class="mui-content-padded">
-				<ul class="mui-table-view fyy-view">
-					<li class="mui-table-view-cell">
-						<label>受  访 人:</label>
-						<span>刘成志<span class="mui-pull-right colorfe616c">已拒绝</span></span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>来访单位:</label>
-						<span>湖北荆鹏软件集团有限公司</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访事宜:</label>
-						<span>业务洽谈</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访时间:</label>
-						<span>2020-09-28 15:00:00</span>
-					</li>
-				</ul>
-			</div>
-			<div class="mui-content-padded">
-				<ul class="mui-table-view fyy-view">
-					<li class="mui-table-view-cell">
-						<label>受  访 人:</label>
-						<span>刘成志<span class="mui-pull-right color999">已过期</span></span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>来访单位:</label>
-						<span>湖北荆鹏软件集团有限公司湖北荆鹏软件集团有限公司</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访事宜:</label>
-						<span>业务洽谈</span>
-					</li>
-					<li class="mui-table-view-cell">
-						<label>拜访时间:</label>
-						<span>2020-09-28 15:00:00</span>
+						<span>{{item.visitDate}}</span>
 					</li>
 				</ul>
 			</div>
+
 		</div>
 		<div class="fyy-footer">
 			<div class="bindfyy-btn">
-				<button type="button" class="mui-btn mui-btn-primary ">
+				<button type="button" class="mui-btn mui-btn-primary " @click="save">
 						邀请访客
 					</button>
 			</div>
 		</div>
+	<loading :visible="isLoading"></loading>
+
 </div>
 </template>
 
+
 <script>
+	import * as API_From from '@/apis/Guest/from'
+	import Common from '$project/components/Common.vue'
+	import Loading from '$project/components/Loading.vue'
+	import TopHeader from '$project/components/TopHeader.vue'
+	import isReachBottom from '$project/utils/isReachBottom'
+	import {
+		mapGetters,
+		mapMutations
+	} from 'vuex'
+	export default {
+		name: 'GuestFromList',
+		components: {
+			Common,
+			Loading,
+			TopHeader
+		},
+		data() {
+			return {
+				pageTitle: '访客申请列表',
+
+				isLoading: false,
+
+				listForm: {
+					pageIndex: 1,
+					pageSize: 20,
+					//	token: '',
+					totalPage: 1,
+					result: 0,
+				},
+				recordList: [],
+				status: ['待确认', '已确认', '已拒绝','已过期'],
+				statusColor: ['colorf8b155', 'color55f868', 'colorfe616c','color999'],
+				routeName: "Master",
+			}
+		},
+		created() {
+
+		},
+		methods: {
+			//info
+			detail(id) {
+				return null;
+
+				 this.$router.push({
+					name: 'GuestFromInfo',
+					query: {
+						id: id
+					}
+				})
+			},
+			save() {
+				this.$router.push({
+					name: 'GuestFromAdd',
+					query: {
+
+					}
+				})
+			},
+			//获取列表
+			getList() {
+				this.isLoading = true;
+				API_From.pageList(this.listForm).then(response => {
+					if (response) {
+						if (this.listForm.pageIndex == 1) {
+							this.recordList = response.data;
+							this.listForm.pageIndex = response.pageNumber;
+							this.listForm.totalPage = response.totalPage;
+						} else {
+							this.recordList = [
+								...this.recordList,
+								...response.data
+							];
+						}
+					}
+					this.listForm.pageIndex++;
+					this.isLoading = false;
+				}).catch(error => {
+					this.isLoading = false;
+					mui.toast(error);
+				})
+			},
+			//下拉事件
+			handleScrool() {
+				if (isReachBottom()) {
+					console.log('到达底部')
+					if (this.listForm.pageIndex <= this.listForm.totalPage && this.isLoading == false) {
+						this.getList();
+					} else {
+						return;
+					}
+				}
+			},
+
+			asynCallBack() {
+
+			},
+		},
+		mounted() {
+			this.getList();
+			//监控下拉加载事件
+			var _this = this;
+			window.addEventListener('scroll', _this.handleScrool);
+		},
+		destroyed() {
+			//销毁监听事件
+			var _this = this;
+			window.removeEventListener('scroll', _this.handleScrool);
+		},
+		computed: {
+			...mapGetters({
+				openId: 'wx_openid',
+				token: 'token',
+			})
+		},
+
+	}
 </script>
 
 <style scoped src="$project/assets/css/xpwyfyy.css"></style>

+ 304 - 18
src/projects/business/views/Guest/To/Info.vue

@@ -1,23 +1,23 @@
 <template>
   <div>
-    <header class="mui-bar mui-bar-nav">
+    <header class="mui-bar mui-bar-nav" v-if="step=='1'" >
       <h1 class="mui-title">访问邀请函</h1>
-      <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
     </header>
-    <div class="mui-content margin60">
+
+    <div   v-if="step=='1'" class="mui-content margin60">
       <div class="mui-content-padded vongi-qingjiadt">
         <form class="mui-input-group">
           <div class="mui-input-row">
             <label>邀请单位</label>
-            <span>湖北荆鹏软件集团有限公司</span>
+            <span>{{detail.intervieweeUnit}}</span>
           </div>
           <div class="mui-input-row">
             <label>邀请人</label>
-            <span>凡佳佳</span>
+            <span>{{detail.intervieweeName}}</span>
           </div>
           <div class="mui-input-row">
             <label>联系方式</label>
-            <span class="color4fc5f7">15500001111</span>
+            <span ><a class="color4fc5f7" :href="'tel:'+detail.intervieweePhone">{{detail.intervieweePhone}}</a></span>
           </div>
         </form>
       </div>
@@ -25,17 +25,18 @@
         <form class="mui-input-group">
           <div class="mui-input-row">
             <label>受邀人</label>
-            <span>凡佳佳</span>
+            <span>{{detail.name}}</span>
           </div>
           <div class="mui-input-row">
             <label>联系方式</label>
-            <span>15500001111</span>
+            <span>{{detail.mobilePhone}}</span>
           </div>
           <div class="mui-input-row">
             <label>身份证号</label>
             <input
               type="text"
               class="mui-input-clear"
+              v-model="subForm.idCard"
               placeholder="请输入身份证号"
             />
           </div>
@@ -47,21 +48,22 @@
               class="mui-btn mui-btn-block mui-navigate-right"
               type="button"
               style="width: 50%"
+              @click="chooseImage(detail)"
             >
               请上传
             </button>
           </div>
           <div class="mui-input-row">
             <label>来访单位</label>
-            <span>湖北荆盛商贸有限公司</span>
+            <span>{{detail.unit}}</span>
           </div>
           <div class="mui-input-row">
             <label>来访事由</label>
-            <span>业务洽谈</span>
+            <span>{{detail.visitReasons}}</span>
           </div>
           <div class="mui-input-row">
             <label>邀访时间</label>
-            <span>2020-9-18 15:00:00</span>
+            <span>{{detail.visitDate}}</span>
           </div>
           <div class="mui-input-row">
             <label>同行人员</label>
@@ -69,13 +71,13 @@
               class="mui-btn mui-btn-block color4fc5f7 vongi-fkdat-name"
               type="button"
               style="width: 65%; padding-right: 15px"
+
             >
               <div class="flew">
-                <h5>冯</h5>
-                <h5>冯</h5>
-                <h5>冯</h5>
-                <span>添加</span>
-                <i class="iconfont icon-zhuce"></i>
+                <h5 v-for="mod in getFellow()">{{mod}}</h5>
+
+                <span   @click="step='2'">添加  <i class="iconfont icon-zhuce"></i></span>
+
               </div>
             </button>
           </div>
@@ -83,6 +85,7 @@
             <label>车牌号</label>
             <input
               type="text"
+              v-model="subForm.numberPlate"
               class="mui-input-clear"
               placeholder="请输入车牌号码"
             />
@@ -90,15 +93,298 @@
         </form>
       </div>
     </div>
-    <div class="fyy-footer">
+    <div class="fyy-footer" v-if="step=='1'">
       <div class="bindfyy-btn">
-        <button type="submit" class="mui-btn mui-btn-success">确认受邀</button>
+        <button type="submit" class="mui-btn mui-btn-success" @click="submit()">确认受邀</button>
       </div>
     </div>
+
+    <header class="mui-bar mui-bar-nav"  v-if="step=='2'">
+      <h1 class="mui-title">添加同行人员</h1>
+      <a class="mui-pull-right color4fc5f7" @click="save()">保存</a>
+    </header>
+    <div   v-if="step=='2'" class="mui-content margin60">
+      <div class="mui-content-padded vongi-editme vongi-qingjiadt">
+        <form class="mui-input-group" v-for="(item,index) in subForm.list" style="padding-top: 10px">
+          <div class="mui-input-row">
+            <label>姓名<i class="colorfe616c">*</i></label>
+            <input
+                    type="text"
+                    class="mui-input-clear"
+                    v-model="item.name"
+                    placeholder="请输入姓名"
+            />
+          </div>
+          <div class="mui-input-row">
+            <label>手机号码</label>
+            <input
+                    type="text"
+                    v-model="item.mobilePhone"
+                    class="mui-input-clear"
+                    placeholder="请输入手机号码"
+            />
+          </div>
+          <div class="mui-input-row">
+            <label>身份证号</label>
+            <input
+                    type="text"
+                    v-model="item.idCard"
+                    class="mui-input-clear"
+                    placeholder="请输入单位名称"
+            />
+          </div>
+          <div class="mui-input-row">
+            <label style="width: 50%"
+            >人脸识别照片<i class="iconfont icon-tishi color4fc5f7"></i
+            ></label>
+            <button
+                    class="mui-btn mui-btn-block mui-navigate-right"
+                    type="button"
+                    style="width: 50%"
+                    @click="chooseImage(item)"
+            >
+              请上传
+            </button>
+          </div>
+          <div class="mui-input-row"   @click="del(index)" style="text-align: center;color: red">
+             删除
+          </div>
+        </form>
+      </div>
+      <div class="vongi-btn vongi-yj-btn">
+        <button type="button" class="mui-btn mui-btn-primary mui-btn-outlined" @click="add()" >
+          <i class="iconfont icon-zhuce"></i>添加同行人员
+        </button>
+      </div>
+    </div>
+
+    <header class="mui-bar mui-bar-nav" v-if="step=='3'" >
+      <h1 class="mui-title">访客邀请码</h1>
+    </header>
+    <div class="mui-content vongi-yqma" v-if="step=='3'">
+      <div class="mui-content-padded">
+        <ul class="mui-table-view fyy-view">
+          <li class="mui-table-view-cell">
+            <label>受邀单位:</label>
+            <span>{{detail.unit}}</span>
+          </li>
+          <li class="mui-table-view-cell">
+            <label>受  邀 人:</label>
+            <span>{{detail.name}}</span>
+          </li>
+          <li class="mui-table-view-cell">
+            <label>访问单位:</label>
+            <span>{{detail.intervieweeUnit}}</span>
+          </li>
+          <li class="mui-table-view-cell">
+            <label>邀请时间:</label>
+            <span>{{detail.visitDate}}</span>
+          </li>
+          <li class="mui-table-view-cell">
+            <label>结束时间:</label>
+            <span>{{detail.expirationTime}}</span>
+          </li>
+          <li class="mui-table-view-cell">
+            <div class="vongi-yqma-ma">
+              <img :src="qrCodeImg" id="qrcode">
+            </div>
+            <p>已生成访客邀请码</p>
+          </li>
+          <li class="mui-table-view-cell">
+            <p class="color4fc5f7">可通过收藏页面或截图保存二维码,<br/>如已上传人脸照片,进门时可通过设备识别</p>
+          </li>
+        </ul>
+      </div>
+      <div class="vongi-yqma-logo">
+        <img src="~$project/assets/img/logo_02.png" width="100"/>
+      </div>
+    </div>
+
+    <loading :visible="isLoading"></loading>
+
   </div>
 </template>
 
+
 <script>
+  import * as API_To from '@/apis/Guest/to'
+  import Common from '$project/components/Common.vue'
+  import Loading from '$project/components/Loading.vue'
+  import TopHeader from '$project/components/TopHeader.vue'
+  import QRCode from 'qrcodejs2'
+
+  import {
+    mapGetters,
+    mapMutations
+  } from 'vuex'
+  import * as WxJsApi from '$project/utils/wxJsApi'
+
+  import {
+    convertCanvasToImage,
+    currentTimeStamp,
+    parseUnixTime
+  } from '$project/utils'
+  export default {
+    name: 'GuestFromDeviceInfo',
+    components: {
+      Common,
+      Loading,
+      TopHeader
+    },
+    data() {
+      return {
+        pageTitle: '访问邀请函',
+        id: '',
+        step:'1',
+        detail: {
+        },
+        subForm:{
+          id:'',
+          idCard:'',
+          photo:'',
+          numberPlate:'',
+          list:[],
+        },
+        indexModel:{
+          photo:''
+        },
+        isLoading: false,
+        qrCodeImg: '',
+      }
+    },
+    created() {
+      this.id = this.$route.query.id;
+      this.subForm.id=this.id;
+    },
+    methods:  {
+      save(){
+        if(this.subForm.list.length){
+          for(var m in this.subForm.list){
+              var mod =this.subForm.list[m]
+              if(!mod.name){
+                mui.toast("请补全同行人姓名")
+                return false;
+              }
+          }
+        }
+
+        this.step='1';
+      },
+      del(index) {
+        this.subForm.list.splice(index, 1);
+      },
+      add() {
+        this.subForm.list.push({});
+      },
+      getFellow(){
+        var sz=[];
+        if(this.subForm.list){
+          for(var  m in this.subForm.list){
+            var mod =this.subForm.list[m];
+            if(mod.name){
+              sz.push(mod.name.substring(0,1))
+            }
+          }
+        }
+        return sz;
+      },
+      //微信选择图片
+      chooseImage(mod) {
+        this.indexModel=mod;
+        WxJsApi.chooseImage().then(res => {
+          var localData = res.localData;
+
+          if (localData.indexOf('data:image') != 0) {
+            //判断是否有这样的头部
+            localData = 'data:image/jpeg;base64,' + localData
+          }
+          localData = localData.replace(/\r|\n/g, '').replace('data:image/jgp', 'data:image/jpeg')
+          this.imgBase64 = localData;
+          //显示裁剪图片
+          //_this.showCropper(field);
+          this.uploadpic();
+        }).catch(error => {
+          mui.toast(error);
+        })
+      },
+      //上传图片
+      uploadpic() {
+        this.isLoading = true;
+        WxJsApi.uploadPic(this.imgBase64).then(response => {
+          this.isLoading = false;
+          this.indexModel.photo=response;
+
+        }).catch(error => {
+          this.isLoading = false;
+          mui.toast(error);
+        })
+      },
+      //生成二维码
+      qrcode() {
+
+        let qrcode = new QRCode('qrcode', {
+          width: 200,
+          height: 200,
+          text: window.location.href,
+          correctLevel: QRCode.CorrectLevel.M,
+          // render: 'canvas' // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
+          colorLight: '#FFFFFF' ,
+          colorDark: '#33BB00'
+        })
+        var canvas = document.getElementsByTagName('canvas')[0];
+        this.qrCodeImg = convertCanvasToImage(canvas);
+      },
+      //获取详情
+      getDetail() {
+        this.isLoading = true;
+
+        API_To.getDetail(this.id ).then(response => {
+          this.isLoading = false;
+
+          this.detail = response;
+          if(this.detail.status!='0'){
+            this.step='3'
+            //生成二维码
+            this.$nextTick(() => {
+              this.qrcode();
+            });
+          }
+        }).catch(error => {
+          this.isLoading = false;
+          mui.toast(error);
+        })
+      },asynCallBack(){},
+      submit(){
+        var btnArray = ['否', '是'];
+        var _this = this;
+        mui.confirm('确认当操作?', '提示', btnArray, function(e) {
+          if (e.index == 1) {
+            _this.isLoading = true;
+            API_To.update(_this.subForm).then(response => {
+              _this.step='3'
+              mui.toast("操作成功");
+            }).catch(error => {
+              _this.isLoading = false;
+              mui.toast(error);
+            })
+          }
+        });
+
+      }
+    },
+    mounted() {
+      //获取微信配置
+      WxJsApi.getWxConfig();
+      this.getDetail();
+
+    },
+
+
+    destroyed() {
+
+    }
+
+  }
 </script>
 
 <style scoped src="$project/assets/css/xpwyfyy.css"></style>