Ver Fonte

页面编写 ,设备页面, 用户页面, 我的页面

zhengkaixin há 3 meses atrás
pai
commit
04887864fc

+ 0 - 0
apis/pagejs/deviceTab.js


+ 0 - 0
apis/pagejs/userTab.js


Diff do ficheiro suprimidas por serem muito extensas
+ 3 - 0
assets/img/deviceTab/index1-1.svg


+ 6 - 0
assets/img/deviceTab/index2-1.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1092 1024" width="24" height="23" style="" filter="none">
+    
+    <g>
+    <path d="M546.133333 68.266667c306.449067 0 450.3552 235.383467 477.866667 443.733333h-84.650667a36.864 36.864 0 0 1-35.2256-26.112C848.6912 306.0736 729.361067 216.1664 546.133333 216.1664c-183.227733 0-302.557867 89.9072-357.9904 269.7216A36.864 36.864 0 0 1 152.917333 512H68.266667C95.778133 303.616 239.684267 68.266667 546.133333 68.266667z" fill="rgba(22,119,255,1)" p-id="3768" stroke="none"></path><path d="M546.133333 34.133333C227.771733 34.133333 34.133333 292.795733 34.133333 591.633067v150.9376C34.133333 822.613333 98.986667 887.466667 179.029333 887.466667h734.208C993.28 887.466667 1058.133333 822.613333 1058.133333 742.570667v-150.9376C1058.133333 292.795733 864.494933 34.133333 546.133333 34.133333z m0 68.266667c275.6608 0 443.733333 224.529067 443.733334 489.233067v150.9376A76.629333 76.629333 0 0 1 913.237333 819.2H179.029333A76.629333 76.629333 0 0 1 102.4 742.570667v-150.9376C102.4 326.929067 270.472533 102.4 546.133333 102.4z" fill="rgba(22,119,255,1)" p-id="3769" stroke="none"></path><path d="M170.666667 775.304533l0.170666-1.809066c6.075733-30.856533 165.410133-55.7056 363.383467-56.661334h23.620267c201.9328 0.955733 363.758933 26.760533 363.758933 58.4704v156.0576C921.6 963.652267 753.493333 989.866667 546.133333 989.866667s-375.466667-26.2144-375.466666-58.504534v-156.0576z" fill="rgba(22,119,255,1)" p-id="3770" stroke="none"></path>
+    </g>
+  </svg>

+ 6 - 0
assets/img/deviceTab/index2-2.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="20" height="20" style="" filter="none">
+    
+    <g>
+    <path d="M20 4h8v6.667h-2.667v-4h-5.333v-2.667zM12 4v2.667h-5.333v4h-2.667v-6.667h8zM20 28v-2.667h5.333v-4h2.667v6.667h-8zM12 28h-8v-6.667h2.667v4h5.333v2.667zM4 14.667h24v2.667h-24v-2.667z" fill="rgba(255,255,255,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
assets/img/deviceTab/index2-3.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="20" height="20" style="" filter="none">
+    
+    <g>
+    <path d="M20 4h8v6.667h-2.667v-4h-5.333v-2.667zM12 4v2.667h-5.333v4h-2.667v-6.667h8zM20 28v-2.667h5.333v-4h2.667v6.667h-8zM12 28h-8v-6.667h2.667v4h5.333v2.667zM4 14.667h24v2.667h-24v-2.667z" fill="rgba(22,119,255,1)"></path>
+    </g>
+  </svg>

BIN
assets/img/logo/logo.png


BIN
assets/img/logo/logo1.png


BIN
assets/img/logo/logo2.png


Diff do ficheiro suprimidas por serem muito extensas
+ 3 - 0
assets/img/myTab/icon1.svg


+ 6 - 0
assets/img/userTab/index1-1.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width="16" height="16" style="" filter="none">
+    
+    <g>
+    <path d="M6.62 10.79a15.15 15.15 0 0 0 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" fill="rgba(22,119,255,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
assets/img/userTab/index1-2.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width="16" height="16" style="" filter="none">
+    
+    <g>
+    <path d="M18.92 5.01C18.72 4.42 18.16 4 17.5 4h-11c-.66 0-1.21.42-1.42 1.01L3 11v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 15c-.83 0-1.5-.67-1.5-1.5S5.67 12 6.5 12s1.5.67 1.5 1.5S7.33 15 6.5 15zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 10l1.5-4.5h11L19 10H5z" fill="rgba(0,185,98,1)"></path>
+    </g>
+  </svg>

+ 1 - 1
config/.env.dev.js

@@ -1,5 +1,5 @@
 const UNI_APP = {  
-	ProjectName :"e家能源",
+	ProjectName :"智泊e家",
 	//BASE_URL: 'http://36.134.122.108/railroad-server/',
 
 	

+ 2 - 2
config/.env.prod.js

@@ -1,9 +1,9 @@
 const UNI_APP = {  	
-	ProjectName :"e家能源",
+	ProjectName :"智泊e家",
 	//BASE_URL: 'http://36.134.122.108/railroad-server/',
 	BASE_URL: 'https://youdian-test.hbjp.com.cn/floorlock-server/',
 
-	//BASE_URL: 'https://dgj.jzrccs.com/electric-manager-api/',
+	//BASE_URL: 'https://dgj.jzrccs.com/electric-manager-api/',
 	
 	NODE_ENV :"prod",
 	SIMPLE_RUN:false,

+ 1 - 1
config/.env.test.js

@@ -1,5 +1,5 @@
 const UNI_APP = {  
-	ProjectName :"e家能源",
+	ProjectName :"智泊e家",
 	//BASE_URL: 'http://36.134.122.108/railroad-server/',
 	BASE_URL: 'https://youdian-test.hbjp.com.cn/electric-manager-api/', //test
 	BASE_URL: 'https://dgj.hbjp.com.cn/electric-manager-api/',

+ 36 - 1
pages.json

@@ -35,6 +35,41 @@
 			{
 				"navigationBarTitleText" : ""
 			}
+		},
+		{
+			"path" : "pages/login/findBackPassword",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/deviceTab/deviceList",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/deviceTab/bindLock",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/deviceTab/bindLockStatus",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/deviceTab/infoLock",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
 		}
 
 
@@ -48,7 +83,7 @@
 
 	"globalStyle": {
 		"navigationStyle": "custom", // 隐藏系统导航栏
-		"navigationBarTitleText": "e家能源",
+		"navigationBarTitleText": "智泊e家",
 		"enablePullDownRefresh": false
 	},
 	"uniIdRouter": {}

+ 397 - 0
pages/deviceTab/bindLock.vue

@@ -0,0 +1,397 @@
+<template>
+	<view class="jpmain  ">
+		<u-picker mode="selector"
+		 v-model="isswitchshow" 
+		 :range="columns" range-key="label"
+		  :default-selector="columnsindex"
+		   @confirm="switchBtn" ></u-picker>
+		
+		<view class="body">
+			<u-steps :list="numList" mode="number" :current="current" un-active-color="#999999"></u-steps>
+			</view>
+			<view class="list" @click="gotoscan">
+				<view class="item">
+					<view class="name">
+						<span>*</span>地锁编号
+
+					</view>
+					<view class="value">
+						<view>{{bindInfo.lockNo?bindInfo.lockNo:'请扫码识别地锁'}}</view>
+						<view><img class="img" src="@/assets/img/deviceTab/index2-3.svg" alt=""></view>
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>用户名
+
+					</view>
+					<view class="value">
+						<input v-model="bindInfo.name" placeholder="请填写用户真实姓名" />
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						<span>*</span>联系电话
+
+					</view>
+					<view class="value">
+						<input v-model="bindInfo.phone" placeholder="请填写用户联系电话" />
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item" >
+					<view class="name">
+						所属停车场
+
+					</view>
+					<view class="value" @click="isswitchshowBtn">
+						<view>{{bindInfo.parkingIdN?bindInfo.parkingIdN:'请选择所属停车场'}}</view>
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				<view class="item" v-if="bindInfo.lockNo">
+					<view class="name">
+						车位类型
+
+
+					</view>
+					<view class="value">
+						<view>{{bindInfo.typeN}}</view>
+						<!-- <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon> -->
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						<span>*</span>车位编号
+
+
+					</view>
+					<view class="value">
+						<input placeholder="如1号车位" v-model="bindInfo.parkingNumber" />
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						位置描述
+
+					</view>
+					<view class="value">
+						<input placeholder="请描述车位位置信息" />
+					</view>
+				</view>
+			<view class="floating-button">
+				<view class="button"  @click="submit" >
+					
+					提交申请
+				</view>
+				
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	
+	export default {
+		data() {
+			return {
+				current: 0,
+				
+				columnsindex:[0],
+				bindInfo:{
+					name:"",
+					phone:"",
+					lockNo:"",
+					type:"",
+					remark:""
+				},
+				isswitchshow:false,
+				allList:[],
+				numList: [{
+					name: '绑定地锁'
+				}, {
+					name: '等待审核'
+				}, {
+					name: '完成绑定'
+				}],
+			};
+		},
+		onLoad() {
+			this.userInfo = this.jphelp.getPersonInfo()
+			this.bindInfo.phone=this.userInfo.phone
+		},
+		computed:{
+			columns(){
+				var sz=[]
+				for(var i in this.allList){
+					var obj=this.allList[i]
+					
+					
+					sz.push({
+						value:obj.id,
+						label:obj.name
+					})
+				}
+				
+				return sz
+			}
+		},
+		methods:{
+			switchBtn(e){
+				this.columnsindex=[e[0]]
+				var obj=this.columns[e[0]]
+				this.bindInfo.parkingId=obj.value
+				this.bindInfo.parkingIdN=obj.label
+			},
+			isswitchshowBtn(){
+				if(this.allList.length){
+					this.isswitchshow=true
+				}else{
+					this.getParkingList()
+				}
+				
+			},
+			getParkingList() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj = {
+					pageIndex: 1,
+					pageSize: 900,
+					type:"bindLock"
+					
+				}
+				
+				API.parkingList(obj).then((res) => {
+			
+					this.allList = res.data.data
+					this.isswitchshow=true
+					uni.hideLoading();
+			
+				}).catch(error => {
+			
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+			
+				})
+			},
+			submit(){
+				
+				if(!this.bindInfo.name){
+					uni.showToast({
+						title: "请填写用户真实姓名",
+						icon: "none"
+					})
+					return
+				}
+				if(!this.bindInfo.phone){
+					uni.showToast({
+						title: "请填写用户联系电话",
+						icon: "none"
+					})
+					return
+				}
+			
+				
+				
+				if(!this.bindInfo.parkingNumber){
+					uni.showToast({
+						title: "请填写车位编号",
+						icon: "none"
+					})
+					return
+				}
+				
+				
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API.add( this.bindInfo ).then((res) => {
+				
+					uni.redirectTo({
+						url:"/pages/mylock/bindLockStatus?id="+res.applicationRecord.id
+					})
+						uni.hideLoading();
+					
+							 
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			},
+			gotoscanMP(){
+				// 允许从相机和相册扫码
+				var _this=this
+				uni.scanCode({
+					success: function (res) {
+						console.log('条码类型:' + res.scanType);
+						console.log('条码内容:' + res.result);
+						_this.getscan(res.result)
+					}
+				});
+			},
+			gotoscan() {
+				
+				// #ifdef H5
+					this.gotoscanH5()
+				// #endif
+				
+				// #ifdef MP-WEIXIN
+					
+						this.gotoscanMP()
+				// #endif
+			},
+			getscan(val) {
+			 	
+			 	
+			 	uni.showLoading({
+			 		title: "加载中",
+			 		mask: true,
+			 	})
+			 	API.bindStatusByNo({
+			 		lockNo: val,
+			 
+			 	}).then((res) => {
+			 		uni.hideLoading();
+			 		if (res.data.openBind) {
+			 			
+			 			var nowscan=res.data.floorlockInfoList;
+						if(nowscan&&nowscan.length){
+							this.bindInfo.lockNo=nowscan[0].lockNo
+							this.bindInfo.type=nowscan[0].type
+							this.bindInfo.typeN=nowscan[0].typeN
+						}
+						
+			 			uni.showToast({
+			 				title: "扫码成功",
+			 				icon: "none"
+			 			})
+			 
+			 
+			 		} else {
+			 			uni.showToast({
+			 				title: "当前设备不可绑定",
+			 				icon: "none"
+			 			})
+						
+			 		}
+			 
+			 	}).catch(error => {
+			 		uni.showToast({
+			 			title: error,
+			 			icon: "none"
+			 		})
+			 	})
+			 },
+			gotoscanH5() {
+				console.log('111')
+				
+				var _this = this;
+				uni.showModal({
+					title: '提示',
+					editable: true,
+					//content: '这是一个模态弹窗',
+					success: function(res) {
+						if (res.confirm) {
+							_this.getscan(res.content)
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+			
+			
+			},
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+</style>
+<style lang="scss" scoped>
+	 
+
+	.body {
+		padding: 32rpx;
+	}
+	.list{
+		background-color: rgba(255,255,255,1);
+		
+		margin: 20rpx 0;
+		.item:not(:last-child) {
+		  border-bottom:1px solid rgba(232,232,232,1);
+		}
+		.item{
+			padding: 32rpx;
+			display: flex;
+			    justify-content: space-between;
+			.name{
+				    width: 40%;
+					font-size: 32rpx;
+					color: #777777;
+					span{
+						color:red
+					}
+					white-space: pre;
+			}
+			.value{
+				font-size: 32rpx;
+				    width: 60%;
+				display: flex;
+				    justify-content: space-between;
+					input::placeholder{
+						color:#AAAAAA;
+					}
+					.img{
+						width: 40rpx;
+						height: 40rpx;
+						
+					}
+			}
+		}
+	}
+	.uni-input-placeholder{
+		color:#AAAAAA;
+	}
+	
+	.floating-button {
+		position: fixed; 
+		  bottom: 0;    /* 距离底部 20px */
+		    width: 100%;
+			 display: flex;
+			  height: 120rpx;
+			    justify-content: center;
+			background-color: rgba(255,255,255,1);
+			.button{
+				margin-top: 24rpx;
+				border-radius: 50px;
+			 height: 80rpx;
+				width: 80%;
+				display: flex;
+				    align-items: center;
+				    justify-content: center;
+					padding:12rpx;
+					
+					background-color: rgba(22,119,255,1);
+					color: rgba(255,255,255,1);
+					font-size: 36rpx;
+			}
+	}
+	
+</style>

+ 123 - 0
pages/deviceTab/bindLockStatus.vue

@@ -0,0 +1,123 @@
+<template>
+	<view class="jpmain  ">
+		<view class="body">
+			<u-steps :list="numList" mode="number" :current="current" un-active-color="#999999"></u-steps>
+		</view>
+		<view class="data">
+<!-- 			<u-icon name="clock-fill" color="#1677FF" size="128"></u-icon>-->
+			<u-icon name="checkmark-circle-fill" color="#00B962" size="128"></u-icon>
+			<view class="t1">等待审核中</view>
+			<view class="t2">绑定申请已提交,等待后台审核完成建站</view>
+		</view>
+		<view class="floating-button" @click="goBack()">
+			<view class="button button2">
+				返回
+			</view>
+
+		</view>
+
+	</view>
+	</view>
+</template>
+
+<script >
+	import * as API from '@/apis/pagejs/index.js'
+	
+	export default {
+		data() {
+			return {
+				bindInfo:{},
+				current: 1,
+				numList: [{
+					name: '绑定地锁'
+				}, {
+					name: '等待审核'
+				}, {
+					name: '完成绑定'
+				}],
+			};
+		},
+		onLoad(op) {
+			this.id=op.id
+			this.getInfo()
+		},
+		methods:{
+			goBack(){
+				uni.navigateBack()
+			},
+			getInfo(){
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API.details( {
+					id:this.id
+				} ).then((res) => {
+					this.bindInfo=res.data.applicationRecord;
+					if(this.bindInfo.status==0){
+						this.current= 1
+					}
+					if(this.bindInfo.status==1){
+						this.current= 2
+					}
+					uni.hideLoading();
+					
+							 
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	
+	.body {
+		padding: 32rpx;
+		background-color: rgba(242, 244, 246, 1);
+	}
+	.data{
+		text-align: center;
+		padding-top:120rpx;
+		.t1{
+			color: #101010;
+			font-weight: bold;
+			margin-top: 40rpx;
+			font-size: 40rpx;
+
+		}
+		.t2{
+			margin-top: 8rpx;
+			color: rgba(119,119,119,1);
+			font-size: 24rpx;
+		}
+	}
+
+
+	.floating-button {
+		padding-top:120rpx;
+	text-align: center;
+		.button {
+			    margin: 0 auto;
+			
+			border-radius: 50px;
+			height: 80rpx;
+			width: 80%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding: 12rpx;
+
+			background-color: rgba(22, 119, 255, 1);
+			color: rgba(255, 255, 255, 1);
+			font-size: 36rpx;
+		}
+		.button2{
+			background-color:  #00B962
+		}
+	}
+</style>

+ 19 - 0
pages/deviceTab/dataLock.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 233 - 0
pages/deviceTab/deviceList.vue

@@ -0,0 +1,233 @@
+<template>
+	<view>
+		<u-navbar  title="设备列表"  ></u-navbar>
+		<view class="main">
+			<view class="tabs">
+				<u-picker  v-model="tabsFrom.show1"
+				  :default-selector="[tabsFrom.show1Index]"
+				 mode="selector" :range="tabsFrom.selector1"  range-key="label" @confirm="selector1confirm" ></u-picker>
+				<u-picker-select title="日期选择" v-model="tabsFrom.show2"
+				 :defaultTime="tabsFrom.show2Index" :endYear="endYear"
+				 mode="time" :params="params"  @confirm="selector2confirm" @reset="selector2reset" ></u-picker-select>
+				
+				<view class="tabsItem" @click="tabsFrom.show1=!tabsFrom.show1">{{tabsFrom.show1Text}} <u-icon name="arrow-up"
+						v-if="tabsFrom.show1"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
+				<view class="tabsItem" @click="tabsFrom.show2=!tabsFrom.show2">{{tabsFrom.show2Text}} <u-icon name="arrow-up"
+						v-if="tabsFrom.show2"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
+						
+				<view class="tabsItem" @click="tabsFrom.show3=!tabsFrom.show3">{{tabsFrom.show3Text}} <u-icon name="arrow-up"
+						v-if="tabsFrom.show3"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
+			</view>
+			
+			<view class="list">
+				<view class="line">
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/deviceTab/index2-1.svg" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								<view class="text">软件园</view>
+								<view class="tag">私人车位</view>
+							</view>
+							<view class="value">
+								占用9
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<view class="dian"></view>
+						<view  class="text">在线</view>
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+				<view class="line">
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/deviceTab/index2-1.svg" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								<view class="text">软件园</view>
+								<view class="tag">私人车位</view>
+							</view>
+							<view class="value">
+								占用9<span>/</span>
+								占用9<span>/</span>
+								共9台
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+			</view>
+			
+			<view class="floating-button" @click="gotoUrl('pages/deviceTab/bindLock')">
+				<view class="button">
+					<img class="img" src="@/assets/img/deviceTab/index2-2.svg" alt="">
+			
+					绑定新地锁
+				</view>
+			
+			</view>
+			
+			
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/deviceTab.js'
+	
+	
+	export default {
+		
+		data() {
+			return {
+				title:"场站列表",
+				tabsFrom: {
+					show1: false,
+					show1Index:0,
+					show2Index:'',
+					show2: false,
+					show1Text: "全部场站",
+					show2Text: "全部类型",
+					show3Text: "全部状态",
+					selector1:[
+						{
+								label: '全部类型',
+								value: '',
+							},
+						{
+								label: '线上充值',
+								value: '1',
+							},
+							{
+								label: '线下充值',
+								value: '2',
+							},
+					]
+				},
+			};
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.main{
+		background-color: #fff;
+		.line{
+			    display: flex;
+			    justify-content: space-between;
+				    align-items: center;
+					padding: 32rpx;
+					border-bottom: 1px solid rgba(245,245,245,1);
+				.goto{
+					display: flex;
+					    align-items: center;
+						.dian{
+							width: 16rpx;
+							height: 16rpx;
+							 border-radius: 50px;
+							background-color: rgba(184,184,184,1);
+							 margin-right: 16rpx;
+						}
+						.text{
+							 margin-right: 16rpx;
+							 font-size: 24rpx;
+
+						}
+				}
+				.body{
+					 display: flex;
+					     align-items: center;
+						 
+						 .imgclass{
+						 							     display: flex;
+						 							     align-items: center;
+						 							     justify-content: center;
+						 							width: 72rpx;
+						 							height: 72rpx;
+						 							     border-radius: 4px;
+						 							     background-color: rgba(219,234,255,1);
+						 }
+						 .item{
+						 							    margin-left: 16rpx;
+						 								
+						 								 .name{
+						 									 color: rgba(51,51,51,1);
+						 									 font-size: 28rpx;
+															 display: flex;
+															 align-items: center;
+															 .tag{
+																border-radius: 4px;
+																background-color: rgba(22,119,255,1);
+																color: rgba(255,255,255,1);
+																font-size: 22rpx;
+																padding:1px 8rpx;
+																margin-left: 8rpx;
+															 }
+						 								 }
+						 								 .value{
+						 								 	color: rgba(119,119,119,1);
+						 								 	font-size: 24rpx;
+						 											
+						 								 }
+						 }
+						
+				}
+		}
+		.img{
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
+	
+	.tabs{
+		border-bottom: 1px solid rgba(232,232,232,1);
+		height: 96rpx;
+		line-height: 96rpx;
+		background-color: #fff;
+		border-top: 1px solid rgba(241,241,241,1);
+		display: flex;
+		justify-content: space-around;
+		.tabsItem{
+			color: rgba(51,51,51,1);
+			font-size: 14px;
+
+		}
+		
+	}
+	
+	.floating-button {
+		position: fixed;
+		bottom: 120rpx;
+		width: 100%;
+		display: flex;
+	
+		justify-content: center;
+	
+		.button {
+			border-radius: 50px;
+			background-color: rgba(49, 51, 52, 1);
+			color: rgba(255, 255, 255, 1);
+			font-size: 28rpx;
+			width: 240rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding: 12rpx;
+	
+			.img {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 8rpx;
+			}
+		}
+	}
+</style>

+ 95 - 4
pages/deviceTab/index.vue

@@ -1,11 +1,58 @@
 <template>
 	<view>
+		<u-navbar  :title="title" :is-back="0" ></u-navbar>
+		<view class="main">
+			<view class="list">
+				<view class="line"   @click="gotoUrl('/pages/deviceTab/deviceList?id=1')" >
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/deviceTab/index1-1.svg" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								软件园
+							</view>
+							<view class="value">
+								占用9<span>/</span>
+								占用9<span>/</span>
+								共9台
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+				<view class="line">
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/deviceTab/index1-1.svg" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								软件园
+							</view>
+							<view class="value">
+								占用9<span>/</span>
+								占用9<span>/</span>
+								共9台
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+			</view>
+		</view>
 		<tabbar :current="1"></tabbar>
 	</view>
 </template>
 
 <script>
-	import * as API from '@/apis/pagejs/index.js'
+	import * as API from '@/apis/pagejs/deviceTab.js'
 	
 	import Tabbar from '@/components/Tabbar.vue'
 	export default {
@@ -14,12 +61,56 @@
 		},
 		data() {
 			return {
-				
+				title:"场站列表"
 			};
 		}
 	}
 </script>
 
-<style lang="scss">
-
+<style scoped lang="scss">
+	.main{
+		background-color: #fff;
+		.line{
+			    display: flex;
+			    justify-content: space-between;
+				    align-items: center;
+					padding: 32rpx;
+					border-bottom: 1px solid rgba(245,245,245,1);
+					
+				.body{
+					 display: flex;
+					     align-items: center;
+						 
+						 .imgclass{
+						 							     display: flex;
+						 							     align-items: center;
+						 							     justify-content: center;
+						 							width: 72rpx;
+						 							height: 72rpx;
+						 							     border-radius: 4px;
+						 							     background-color: rgba(219,234,255,1);
+						 }
+						 .item{
+						 							    margin-left: 16rpx;
+						 								
+						 								 .name{
+						 									 color: rgba(51,51,51,1);
+						 									 font-size: 28rpx;
+						 								 }
+						 								 .value{
+						 								 	color: rgba(119,119,119,1);
+						 								 	font-size: 24rpx;
+						 											 span{
+						 												  margin: 0 8rpx;
+						 											 }
+						 								 }
+						 }
+						
+				}
+		}
+		.img{
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
 </style>

+ 651 - 0
pages/deviceTab/infoLock.vue

@@ -0,0 +1,651 @@
+<template>
+	<view class="jpmain  ">
+		<view class="gradient-header">
+			<view class="jpback">
+
+			</view>
+		</view>
+		<view class="body">
+			<view class="page-top">
+				<!-- <view class="text1">地锁名称</view> -->
+				<!-- @click="gotoUrl('pages/mylock/editLock?id='+id)" -->
+				<view class="text2"   >{{
+					floorlockInfo.name
+				}}<!-- <u-icon name="edit-pen" size="32" color="#FFFFFF"></u-icon> -->
+				</view>
+			</view>
+			<view class="page">
+				<view class="info-title">
+					<view class="name">设备信息</view>
+					<view class="value">
+						<view class="pack-up" v-show="listShow" @click="listShow=false">
+							收起<u-icon name="arrow-up" size="32" color="#AAAAAA"></u-icon>
+						</view>
+						<view class="pack-up" v-if="!listShow" @click="listShow=true">
+							展开<u-icon name="arrow-down" size="32" color="#AAAAAA"></u-icon>
+						</view>
+					</view>
+				</view>
+				<view class="table">
+					<view class="row">
+						<view class="name">设备型号</view>
+						<view class="value">{{floorlockInfo.model}}</view>
+					</view>
+
+
+					<view class="row">
+						<view class="name">出厂编号</view>
+						<view class="value">{{floorlockInfo.factoryNumber}}</view>
+					</view>
+					<template v-if="!listShow">
+						<view class="row">
+							<view class="name">固件版号</view>
+							<view class="value">{{floorlockInfo.solidVersion}}</view>
+						</view>
+						<view class="row">
+							<view class="name">防护等级</view>
+							<view class="value">{{floorlockInfo.protectionGrade}}</view>
+						</view>
+
+						<view class="row"  v-if="0">
+							<view class="name">输入电压</view>
+							<view class="value">{{floorlockInfo.inputVoltage}}</view>
+						</view>
+						<view class="row" v-if="0">
+							<view class="name">输出电压</view>
+							<view class="value">{{floorlockInfo.outputVoltage}}</view>
+						</view>
+
+						<view class="row"  v-if="0">
+							<view class="name">输出电流</view>
+							<view class="value">{{floorlockInfo.outputCurrent}}</view>
+						</view>
+						<view class="row"  v-if="0">
+							<view class="name">输出功率</view>
+							<view class="value">{{floorlockInfo.outputPower}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">生产日期</view>
+							<view class="value">{{floorlockInfo.manufactureDate}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">标准依据</view>
+							<view class="value">{{floorlockInfo.standardBasis}}</view>
+						</view>
+						<view class="row">
+							<view class="name">联网卡号</view>
+							<view class="value">{{floorlockInfo.internetCard}}</view>
+						</view>
+						<view class="row">
+							<view class="name">资费标准</view>
+							<view class="value">{{floorlockInfo.tariffStandard}}</view>
+						</view>
+						<view class="row">
+							<view class="name">设备启动时间</view>
+							<view class="value">{{floorlockInfo.activationTime}}</view>
+						</view>
+						<view class="row">
+							<view class="name">设备质保期</view>
+							<view class="value">{{floorlockInfo.shelfLife}}</view>
+						</view>
+					</template>
+
+				</view>
+			</view>
+			<view class="page">
+				<view class="info-title">
+					<view class="name">联网信息</view>
+					<view class="value">
+
+					</view>
+				</view>
+				<view class="table">
+					<view class="row">
+						<view class="name">联网卡号</view>
+						<view class="value">{{floorlockInfo.internetCard}}</view>
+					</view>
+					<view class="row">
+						<view class="name">有效期至</view>
+						<view class="value">{{floorlockInfo.cardExpirationDate?floorlockInfo.cardExpirationDate.split(' ')[0]:''}}
+
+						</view>
+
+					</view>
+					<view class="tips">
+						<u-icon style="    margin-top: 2px;" size="30" name="info-circle"></u-icon>
+						<view>
+							地锁内含物联网卡,此卡随设备出厂时赠送三年免费使用时长,三年后将按5元/月资费标准收取费用。
+
+						</view>
+
+					</view>
+				</view>
+			</view>
+			<view class="page">
+				<view class="info-title">
+					<view class="name">充电白名单<span class="span">({{whiteList.length}}/3)</span></view>
+					<view class="value" @click="addUser()">
+						<u-icon style="    margin-top: 2px;" size="30" name="plus"></u-icon> 添加
+					</view>
+				</view>
+				<view class="table">
+					<view class="table_v">
+						<view class="table_tr">
+							<view class="table_td">姓名</view>
+							<view class="table_td">手机号</view>
+							<view class="table_td">车牌号</view>
+							<view class="table_td">操作</view>
+						</view>
+						<view class="table_tr" v-for="(item,i) in whiteList" :key="i">
+							<view class="table_td">{{item.nickName}}</view>
+							<view class="table_td">{{item.phone}}</view>
+							<view class="table_td">{{item.carNumber==0?'':item.carNumber}}</view>
+							<view class="table_td" style="color:#1677FF;white-space: pre;" @click="editUser(item)">修改</view>
+						</view>
+
+					</view>
+
+				</view>
+			</view>
+		</view>
+
+		<u-popup v-model="popupShow" mode="bottom" :closeable="true" border-radius="30">
+			<view class="popup-screen">
+
+						<u-keyboard ref="uKeyboard"  @change="valChange" @backspace="backspace"
+						:tips="vipUser.carNumber?vipUser.carNumber:'请输入车牌号'"
+						mode="car" v-model="carshow"  :abc="abc" ></u-keyboard>
+
+
+				<view class="popup-title">{{vipUser.id?'修改':'添加'}}白名单信息</view>
+				<view style="padding: 4px;">白名单车主姓名<span style="color: red;">*</span></view>
+				<u-input :customStyle="customStyle" v-model="vipUser.nickName" placeholder="白名单车主姓名(必填)"></u-input>
+				<view style="padding: 4px;">白名单车主手机号码<span style="color: red;">*</span></view>
+				<u-input :customStyle="customStyle" type="number" v-model="vipUser.phone"
+					placeholder="白名单车主手机号码(必填)"></u-input>
+				<view style="padding: 4px;">白名单车主车牌号</view>
+				<!-- 						<u-input :customStyle="customStyle" v-model="vipUser.carNumber" placeholder="白名单车主车牌号"></u-input> -->
+
+				<view class="carNumber"  @click="carshow=true,valInit(1)"
+				:class="{
+								'carNumber1':!vipUser.carNumber
+							}">
+					{{vipUser.carNumber?vipUser.carNumber:'白名单车主车牌号'}}
+				</view>
+				<view v-if="vipUser.id" style="display: flex;">
+					<u-button type="info" style="margin-top: 10px;width: 49%;" shape="circle"
+						@click="delUser()">删除</u-button>
+					<u-button type="success" style="margin-top: 10px;width: 49%;" shape="circle"
+						@click="submitUser()">保存</u-button>
+				</view>
+				<view v-else>
+
+					<u-button type="success" style="margin-top: 10px;" shape="circle"
+						@click="submitUser()">保存</u-button>
+				</view>
+
+
+			</view>
+		</u-popup>
+		<u-modal v-model="delShow" @confirm="confirmDelete" confirm-color="#fa3534" :show-cancel-button="true"
+			ref="uModal" title="删除白名单用户" content="是否删除当前白名单用户?" confirm-text="删除"></u-modal>
+
+		<view class="floating-button">
+			<view class="button" @click="gotoUrl('/pages/deviceTab/dataLock?id='+id)" >
+
+				查看地锁
+			</view>
+
+		</view>
+
+
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+
+	export default {
+		data() {
+			return {
+				id: "",
+				floorlockInfo: {},
+				listShow: true,
+				popupShow: false,
+				customStyle: {
+					"border-radius": "50px",
+					"background-color": 'rgba(242, 244, 246, 1)',
+					padding: "5px 20px",
+					margin: "5px 0 ",
+					
+				},
+				abc:false,
+				whiteList: [],
+				vipUser: {},
+				delShow: false,
+				obj: {},
+				carshow: false,
+			};
+		},
+		onLoad(op) {
+			this.id = op.id
+			this.getFloorlockDetails()
+
+		},
+		methods: {
+			valInit(bl){
+				if(bl){
+					this.abc=this.vipUser.carNumber.length>0
+				}else{
+					if(this.vipUser.carNumber.length==1&&this.abc==false){
+						this.abc=true
+					}
+					if(this.vipUser.carNumber.length==0&&this.abc==true){
+						this.abc=false
+					}
+				}
+				
+			},
+			valChange(val){
+				
+				if(this.vipUser.carNumber.length>=8){
+					return
+				}
+				this.vipUser.carNumber+=val
+				this.valInit()
+				this.$forceUpdate()
+			},
+			backspace(){
+				//
+				var value=this.vipUser.carNumber
+				if(value.length){
+					value = value.substr(0, value.length - 1);
+					
+				}
+				this.vipUser.carNumber=value
+				this.valInit()
+				
+
+			},
+			getFloorlockDetails() {
+
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj = {
+					id: this.id
+				}
+
+				API.floorlockDetails(obj).then((res) => {
+					this.floorlockInfo = res.data.floorlockInfo
+
+					uni.hideLoading();
+					this.getWhiteList()
+				}).catch(error => {
+
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			},
+			getWhiteList(bl) {
+
+				if (bl) {
+					uni.showLoading({
+						title: "加载中",
+						mask: true,
+					})
+				}
+				API.whiteList({
+					floorlockId: this.id
+				}).then((res) => {
+					this.whiteList = res.data.whiteList
+
+					if (bl) {
+						uni.hideLoading()
+						uni.showToast({
+							title: "操作成功"
+						})
+					}
+
+
+
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+
+
+			},
+			submitUser() {
+				if (!this.vipUser.nickName) {
+					uni.showToast({
+						title: "请填写白名单车主姓名"
+					})
+					return
+				}
+				if (!this.vipUser.phone) {
+					uni.showToast({
+						title: "请填写白名单车主手机号码"
+					})
+					return
+				}
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				this.vipUser.name = this.vipUser.nickName
+				API.addWhite(this.vipUser).then((res) => {
+					//this.obj = res.data
+					uni.hideLoading()
+
+					this.delShow = false
+					this.popupShow = false
+					this.getWhiteList(1)
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+
+
+			},
+			confirmDelete() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API.deleteWhite({
+					id: this.vipUser.id
+				}).then((res) => {
+					//this.obj = res.data
+					uni.hideLoading()
+					this.delShow = false
+					this.popupShow = false
+					uni.showToast({
+						title: "操作成功"
+					})
+					this.getWhiteList(1)
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+			},
+			delUser() {
+				this.delShow = true;
+			},
+			editUser(item) {
+				this.popupShow = true;
+				this.vipUser = item;
+				this.vipUser.nickName = item.nickName
+
+
+				this.vipUser.floorlockId = this.id
+				if (this.vipUser.carNumber == 0) {
+					this.vipUser.carNumber = ''
+				}
+			},
+			addUser() {
+				if (this.whiteList.length >= 3) {
+					uni.showToast({
+						title: "添加白名单用户已达到上限"
+					})
+					return
+				}
+				this.popupShow = true;
+				this.vipUser = {
+					carNumber:""
+				}
+
+				this.vipUser.floorlockId = this.id
+
+			},
+
+
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+</style>
+<style lang="scss" scoped>
+	.gradient-header {
+		height: 0px;
+	}
+
+	.jpback {
+		height: 360rpx;
+		background: linear-gradient(180deg, rgba(22, 119, 255, 1) 11%, rgba(242, 244, 246, 1) 100%);
+	}
+
+	.body {
+		padding: 32rpx 32rpx 120rpx 32px;
+		//padding-bottom: ;
+	}
+
+	.page-top {
+		color: rgba(255, 255, 255, 1);
+		margin: 48rpx 0;
+
+		.text1 {
+			font-size: 36rpx;
+			margin-bottom: 12rpx;
+		}
+
+		.text2 {
+			font-size: 40rpx;
+
+		}
+	}
+
+	.page {
+		border-radius: 16rpx;
+		background-color: rgba(255, 255, 255, 1);
+		color: rgba(16, 16, 16, 1);
+
+		padding: 32rpx;
+		margin-bottom: 32rpx;
+		font-size: 32rpx;
+		color: rgb(16, 16, 16);
+
+		.info-title {
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 24rpx;
+
+			.name {
+				font-size: 36rpx;
+				color: rgba(51, 51, 51, 1);
+				font-weight: bold;
+
+				.span {
+					font-weight: 400;
+					font-size: 28rpx;
+					color: rgba(119, 119, 119, 1);
+				}
+			}
+
+			.value {
+				font-size: 28rpx;
+				color: rgba(119, 119, 119, 1);
+			}
+		}
+
+		.pack-up {
+
+
+			color: rgba(119, 119, 119, 100);
+		}
+
+		.tips {
+			margin-top: 12rpx;
+			display: flex;
+			align-items: flex-start;
+			font-size: 24rpx;
+		}
+
+		.table {
+			.table_v {
+				width: 100%;
+			}
+			.table_tr {
+				
+				 display: flex;
+				justify-content: space-between;
+			}
+
+			.row {
+				display: flex;
+				align-items: center;
+				height: 72rpx;
+				font-size: 28rpx;
+				padding: 0 24rpx;
+
+				.name {
+					width: 240rpx;
+				}
+
+			}
+
+			.table_td {
+
+				height: 72rpx;
+				font-size: 28rpx;
+				    display: flex;
+				    align-items: center;
+
+
+			}
+
+			/* 隔行变色: 偶数行设置背景色 */
+			.row:nth-child(odd) {
+				background-color: #f9f9f9;
+				/* 偶数行 */
+			}
+
+			.table_tr:nth-child(odd) {
+				background-color: #f9f9f9;
+				/* 偶数行 */
+			}
+
+			.row:nth-child(even) {
+				background-color: #ffffff;
+				/* 奇数行 */
+			}
+
+			.table_tr:nth-child(even) {
+				background-color: #ffffff;
+				/* 奇数行 */
+			}
+
+		}
+	}
+/deep/.u-keyboard-grids-btn:nth-child(15){
+			background-color: red;
+		}
+	.popup-screen {
+		padding: 40rpx 40rpx 60rpx 40rpx;
+		.carNumber {
+			background-color: #F2F4F6;
+			padding: 5px 20px;
+			margin: 5px 0 15px 0;
+			height: 90rpx;
+			display: flex;
+			align-items: center;
+			border-radius: 50px;
+			
+		}
+		.carNumber1{
+			color: #bcbcbc;
+		}
+		
+
+		
+
+		.popup-title {
+			font-size: 36rpx;
+			color: rgba(51, 51, 51, 1);
+			font-weight: bold;
+			padding-bottom: 10px;
+		}
+
+		.cardList {
+			display: flex;
+			justify-content: space-evenly;
+
+			.cardInfo {
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				width: 160rpx;
+				height: 160rpx;
+				border-radius: 8px;
+				background-color: rgba(255, 255, 255, 1);
+				text-align: center;
+				border: 1px solid rgba(187, 187, 187, 1);
+
+				.name {
+					color: rgba(16, 16, 16, 1);
+					font-size: 28rpx;
+				}
+
+				.price {
+					color: rgba(16, 16, 16, 1);
+					font-size: 48rpx;
+					font-weight: bold;
+				}
+			}
+
+			.cardInfoCk {
+				background-color: rgba(225, 247, 237, 1);
+				border: 1px solid rgba(0, 185, 98, 1);
+
+				.price {
+					color: rgba(0, 161, 85, 1);
+
+				}
+			}
+		}
+	}
+
+	.floating-button {
+		position: fixed;
+		bottom: 0;
+		/* 距离底部 20px */
+		width: 100%;
+		display: flex;
+		height: 120rpx;
+		justify-content: center;
+		background-color: rgba(255, 255, 255, 1);
+
+		.button {
+			margin-top: 24rpx;
+			border-radius: 50px;
+			height: 80rpx;
+			width: 80%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding: 12rpx;
+
+			background-color: rgba(22, 119, 255, 1);
+			color: rgba(255, 255, 255, 1);
+			font-size: 36rpx;
+		}
+	}
+</style>

+ 227 - 0
pages/login/findBackPassword.vue

@@ -0,0 +1,227 @@
+<template>
+	<view>
+		<u-navbar title="找回密码" title-color="#101010"></u-navbar>
+		<view class="main">
+			<view class="original-password">
+				<text>手机号码</text><u-input  v-model="form.telephone" style="padding: 0 0 0 20px"  maxlength="11" type="number"  placeholder="请填写手机号"  />
+			</view>
+			<view class="new-password">
+				<text>验证码</text><u-input  v-model="form.verifyCode" style="padding: 0 0 0 20px" maxlength="6" type="number"  placeholder="6位验证码"  />
+				<text class="verification-code" :style="isCodeTipsColor ? 'color: #999999;' : ''" @click="getCode" >{{codeTips}}</text>
+			</view>
+			<view class="new-password">
+				<text>新密码</text><u-input  v-model="form.password" style="padding: 0 0 0 20px" class="password-input" type="password"  placeholder="创建6-16位组合新密码" :password-icon="true" />
+			</view>
+		</view>
+		<u-verification-code :seconds="sendMsgSecond" ref="uCode" @change="codeChange" @end="end" @start="start"
+			change-text="(Xs)">
+		</u-verification-code>
+		<!-- 确认修改 -->
+		<button class="confirm"  @click="retrievePassword" >提交</button>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/user.js'
+	import {
+		checkPhone
+	} from '@/apis/utils'
+	export default {
+		data() {
+			return {
+				form: {
+					verifyCode:"",
+					telephone: '',
+					password: '',
+				},
+				isSendMsgIng: false,
+				isCodeTipsColor: false,
+				sendMsgSecond: 60,
+				codeTips: '',
+			}
+		},
+		onReady() {
+			var time = this.carhelp.get("getvcodetime");
+			if (time) {
+				//this.$refs.uCode.start();
+				var nowtime = new Date().getTime()
+				var differ = (nowtime - time) / 1000
+				if (differ < 2 * 60) {
+					this.sendMsgSecond = 2 * 60 - parseInt(differ)
+					this.isSendMsgIng = true;
+					this.$refs.uCode.start();
+					this.isCodeTipsColor = true;
+				}
+			}
+		},
+		methods: {
+			retrievePassword(){
+				
+				var checkPhoneResult = checkPhone(this.form.telephone);
+				
+				if (!this.form.telephone || checkPhoneResult != true) {
+					uni.showToast({
+						title: checkPhoneResult,
+						icon: "none"
+					})
+					return;
+				}
+				
+				if (!this.form.telephone) {
+					uni.showToast({
+						title: "请输入手机号",
+						icon: "none"
+					})
+					return
+				}
+				if (!this.form.verifyCode) {
+					uni.showToast({
+						title: "请输入验证码",
+						icon: "none"
+					})
+					return
+				}
+				if (!this.form.password) {
+					uni.showToast({
+						title: "请输入新密码",
+						icon: "none"
+					})
+					return
+				}
+				if (this.form.password.length<6||this.form.password.length>16) {
+					uni.showToast({
+						title: "请输入6-16位组合新密码",
+						icon: "none"
+					})
+					return
+				}
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API.retrievePassword(this.form).then((response) => {
+					uni.hideLoading();
+					// this.form.password=""
+					// this.form.oldPassword=""
+					uni.showModal({
+						title:"提示",
+						content:"密码修改成功!",
+						showCancel:false,
+						success() {
+							uni.reLaunch({
+								url:"/pages/login/login"
+							})
+						}
+					})
+					
+					
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+				
+			},
+			codeChange(text) {
+				this.codeTips = text;
+			},
+			//倒计时
+			end() {
+				this.sendMsgSecond = 60;
+				this.isSendMsgIng = false;
+				this.isCodeTipsColor = false;
+			},
+			// 获取验证码
+			getCode() {
+				if (this.$refs.uCode.canGetCode) {} else {
+					uni.showToast({
+						title: '倒计时结束后再发送',
+						icon: "none"
+					})
+					return
+				}
+			
+				var checkPhoneResult = checkPhone(this.form.telephone);
+			
+				if (checkPhoneResult !== true) {
+					uni.showToast({
+						icon: "none",
+						title: checkPhoneResult,
+					})
+					return;
+				}
+				this.$refs.uCode.start();
+				this.isCodeTipsColor = true;
+			},
+			start() {
+				if (!this.isSendMsgIng) {
+					uni.showLoading({
+						title: "加载中",
+						mask: true,
+					})
+					API.getVerifyCode(this.form).then((response) => {
+						uni.hideLoading();
+						this.carhelp.set("getvcodetime", new Date().getTime());
+			
+						if (!"") {
+							//倒计时
+							uni.showToast({
+								icon: "none",
+								title: "发送成功"
+							})
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: "您的验证码已经发送[5分钟有效],请勿重复点击"
+							})
+						}
+					}).catch(error => {
+						uni.showToast({
+							title: error,
+							icon: "none"
+						})
+					})
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.main{
+		background-color: #fff;
+		margin-top: 24rpx;
+		.original-password,.new-password{
+			line-height: 96rpx;
+			padding:0 32rpx;
+			display: flex;
+			align-items: center;
+			border-bottom: 1px solid rgba(221,221,221,1);
+			/deep/.u-input__input{
+				height: 96rpx;
+			}
+			
+		}
+		text{
+			display: inline-block;
+			width: 128rpx;
+			color: rgba(51,51,51,1);
+			font-size: 32rpx;
+		}
+		.verification-code{
+			width: 160rpx;
+			color: rgba(22,119,255,1);
+			font-size: 32rpx;
+		}
+	}
+  // 确认修改
+  .confirm{
+	  border-radius: 8px;
+	  background-color: rgba(22,119,255,1);
+	  color: rgba(255,255,255,1);
+	  font-size: 32rpx;
+	  line-height: 88rpx;
+	  margin: 24rpx 32rpx;
+  }
+</style>

+ 12 - 7
pages/login/login.vue

@@ -1,12 +1,16 @@
 <template >
 	<view>
 		<view class="logo">
-			<image class="img" src="@/assets/img/logo/logo1.png" mode=""></image>
+			<image class="img" src="@/assets/img/logo/logo.png" mode=""></image>
 			
 		</view>
-		<!-- <view  class="logoText">
-			e家能源
-		</view> -->
+		<view  class="logoText">
+			<view>智泊e家</view>
+			<view>运管端</view>
+			
+			
+
+		</view>
 		<!-- 手机号/密码 -->
 		<view class="input-box">
 			
@@ -20,7 +24,7 @@
 			 login:password.length&&phone.length
 		 }" @click="submit" >登录</button>
 		 
-		 <view class="reset"  @click="gotoUrl('/pages/mine/findBackPassword')" >
+		 <view class="reset"  @click="gotoUrl('/pages/login/findBackPassword')" >
 		 	忘记密码? <span style="color:#387aea ;">点击找回</span>
 		 </view>
 	</view>
@@ -179,8 +183,9 @@
 		justify-content: center;
 		.img{
 			
-			width: 282rpx;
-			height: 66rpx;
+			width: 144rpx;
+			height: 144rpx;
+			border-radius: 16px;
 		}
 	}
 

+ 238 - 2
pages/myTab/index.vue

@@ -1,5 +1,99 @@
 <template>
 	<view>
+		<view class="gradient-header">
+			<view class="jpback">
+		
+			</view>
+		</view>
+		
+		<view class="body">
+		
+			<view class="page-top" @click="gotoUrl('pages/information/information')" >
+		
+				<view class="name">
+					<view class="photo">
+						<img class="img" :src="userInfo.headImg" v-if="userInfo.headImg" alt="">
+						<img class="img" src="@/assets/img/默认头像.png" v-else alt="">
+						
+						
+					</view>
+					<view class="text">
+						<view class="text1">{{userInfo.nickName}}</view>
+						<view class="text2">{{userInfo.phone}}</view>
+					</view>
+				</view>
+				<view class="value">
+					<u-icon name="arrow-right" size="24" color="#fff"></u-icon>
+				</view>
+			</view>
+			<view class="page">
+				<view class="page-main">
+		
+					<view class="item"   @click="gotoUrl('pages/mylock/myLock')" 
+					v-if="userInfoPlus&&userInfoPlus.myAllList" >
+						<view class="name">{{userInfoPlus.myAllList.length}}</view>
+						<view class="value">车位</view>
+					</view>
+					<view class="item2">
+		
+					</view>
+					<view class="item"  @click="gotoUrl('pages/mylock/myWhite')"  >
+						<view class="name">{{whiteNum}}</view>
+						<view class="value">白名单</view>
+					</view>
+		
+				</view>
+			</view>
+			<view class="page">
+		
+				<view class="page-content">
+					<view class="item" @click="gotoUrl('pages/mylock/myLock')" >
+						<view class="title">
+							<img class="img" src="@/assets/img/myTab/icon1.svg" alt="">
+							我的消息
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					<view class="item" @click="gotoUrl('pages/mylock/myLock')" >
+						<view class="title">
+							<img class="img" src="@/assets/img/myTab/icon1.svg" alt="">
+							意见反馈
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					<view class="item" @click="gotoUrl('pages/mylock/myLock')" >
+						<view class="title">
+							<img class="img" src="@/assets/img/myTab/icon1.svg" alt="">
+							客服热线
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					
+				</view>
+				</view>
+				<view class="page">
+				<view class="page-content">
+					<view class="item" @click="gotoUrl('pages/mylock/myLock')" >
+						<view class="title">
+							<img class="img" src="@/assets/img/myTab/icon1.svg" alt="">
+							设置
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					
+					
+				</view>
+			</view>
+		
+		</view>
 		<tabbar :current="3"></tabbar>
 	</view>
 </template>
@@ -14,12 +108,154 @@
 		},
 		data() {
 			return {
-				
+				isReady:false,
+				userInfo:{},
+				userInfoPlus:{
+					whiteList:[],
+					myAllList:[]
+				},
+				whiteNum:0,
 			};
 		}
 	}
 </script>
 
 <style lang="scss">
-
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+	.body {
+		padding: 32rpx;
+	}
+	
+	.gradient-header {
+		height: 0px;
+	}
+	
+	.jpback {
+		height: 268rpx;
+		background: linear-gradient(180deg, rgba(22, 119, 255, 1) 20%, rgba(121, 177, 255, 1) 100%);
+	}
+	
+	.page-top {
+	
+		color: #fff;
+		display: flex;
+		justify-content: space-between;
+		margin: 48rpx 0;
+	
+		.name {
+	
+			display: flex;
+			align-items: flex-end;
+	
+			.photo {
+				border-radius: 50px;
+				background-color: rgba(229, 229, 229, 1);
+				height: 100rpx;
+				width: 100rpx;
+				overflow: hidden;
+	
+				.img {
+					width: 100%;
+					height: 100%;
+				}
+			}
+	
+			.text {
+				margin-left: 24rpx;
+	
+				.text1 {
+					font-weight: bold;
+					font-size: 40rpx;
+				}
+	
+				.text2 {
+	
+					font-size: 32rpx;
+	
+				}
+			}
+	
+		}
+	
+		.value {
+			margin-top: 24rpx;
+			font-size: 40rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+	}
+	
+	.page {
+	
+		border-radius: 16rpx;
+		background-color: rgba(255, 255, 255, 1);
+		color: rgba(16, 16, 16, 1);
+	
+		padding:0 32rpx;
+		margin-bottom: 32rpx;
+		font-size: 32rpx;
+		color: rgb(16, 16, 16);
+	
+		.page-main {
+			display: flex;
+			justify-content: space-around;
+			align-items: center;
+			padding:24rpx;
+			.item {
+				.name {
+					font-size: 56rpx;
+					color: #333333;
+					font-weight: bold;
+				}
+	
+				.value {
+					color: rgba(146, 146, 176, 1);
+					font-size: 32rpx;
+				}
+	
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+	
+	
+			}
+	
+			.item2 {
+				border-right: 1px solid rgba(187, 187, 187, 0.43);
+				height: 70rpx;
+			}
+	
+		}
+	
+		.page-content {
+			.item:not(:last-child) {
+			  border-bottom:1px solid rgba(232,232,232,1);
+			}
+			.item {
+				padding: 32rpx 0;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+	
+				.title {
+					display: flex;
+					justify-content: space-between;
+					display: flex;
+					align-items: center;
+					color: rgba(51,51,51,1);
+					.img {
+						width: 32rpx;
+						height: 32rpx;
+						
+						margin-right: 16rpx;
+					}
+				}
+			}
+		}
+	
+	
+	
+	}
 </style>

+ 128 - 4
pages/userTab/index.vue

@@ -1,11 +1,66 @@
 <template>
 	<view>
+		<u-navbar  title="用户管理" :is-back="0" ></u-navbar>
+		<view class="main">
+			<view class="search">
+				<view class="searchBox">
+					<u-search shape="square" :animation="true"></u-search>
+					<u-button type="primary"  size="mini">搜素</u-button>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="line"   @click="gotoUrl('/pages/deviceTab/deviceList?id=1')" >
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/默认头像.png" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								软件园
+							</view>
+							<view class="value">
+								<image class="img img1" src="@/assets/img/userTab/index1-2.svg" mode=""></image>
+								123111
+								<image class="img img2" src="@/assets/img/userTab/index1-1.svg" mode=""></image>
+								123111
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+				<view class="line">
+					<view class="body">
+						<view class="imgclass">
+							<image class="img" src="@/assets/img/deviceTab/index1-1.svg" mode=""></image>
+						</view>
+						<view class="item">
+							<view class="name">
+								软件园
+							</view>
+							<view class="value">
+								占用9<span>/</span>
+								占用9<span>/</span>
+								共9台
+							</view>
+						</view>
+					</view>
+					<view class="goto">
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				
+			</view>
+		</view>
 		<tabbar :current="2"></tabbar>
 	</view>
 </template>
 
 <script>
-	import * as API from '@/apis/pagejs/index.js'
+	import * as API from '@/apis/pagejs/userTab.js'
 	
 	import Tabbar from '@/components/Tabbar.vue'
 	export default {
@@ -14,12 +69,81 @@
 		},
 		data() {
 			return {
-				
+				title:"场站列表"
 			};
 		}
 	}
 </script>
 
-<style lang="scss">
-
+<style scoped lang="scss">
+	.main{
+		background-color: #fff;
+		.line{
+			    display: flex;
+			    justify-content: space-between;
+				    align-items: center;
+					padding: 32rpx;
+					border-bottom: 1px solid rgba(245,245,245,1);
+					
+				.body{
+					 display: flex;
+					     align-items: center;
+						 
+						 .imgclass{
+						 							     display: flex;
+						 							     align-items: center;
+						 							     justify-content: center;
+						 							width: 72rpx;
+						 							height: 72rpx;
+						 							     border-radius: 4px;
+						 							     background-color: #E5E5E5;
+						 }
+						 .item{
+						 							    margin-left: 16rpx;
+						 								
+						 								 .name{
+						 									
+						 									 font-size: 36rpx;
+															 color: rgba(16,16,16,1);
+															
+															
+						 								 }
+						 								 .value{
+															     display: flex;
+															     align-items: center;
+						 								 	color: rgba(119,119,119,1);
+						 								 	font-size: 24rpx;
+						 											 .img{
+																		 width: 32rpx;
+																		 height: 32rpx;
+						 												  margin-right: 8rpx;
+						 											 }
+																	 .img1{
+																		 
+																	 }
+																	 .img2{
+																	 	 margin-left: 20rpx;																	 
+																	 }
+						 								 }
+						 }
+						
+				}
+		}
+		.img{
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
+	.search{
+		    
+			padding: 16rpx 32rpx;
+			    border-bottom: 1px solid whitesmoke;
+				.searchBox{
+					display: flex;
+					align-items: center;
+					    background: #F2F2F2;
+					    padding: 1px 16rpx;
+					    border-radius: 8px;
+				}
+	}
 </style>

+ 1 - 1
uni_modules/uview-ui/components/u-navbar/u-navbar.vue

@@ -125,7 +125,7 @@
 			// 标题的颜色
 			titleColor: {
 				type: String,
-				default: '#606266'
+				default: '#101010'
 			},
 			// 标题字体是否加粗
 			titleBold: {

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff