Explorar o código

接口初始化, 页面位置, 接口联调

zhengkaixin hai 4 meses
pai
achega
b0f2ed9a86

+ 37 - 0
apis/pagejs/index.js

@@ -0,0 +1,37 @@
+import requestWhite from '@/apis/utils/requestWhite'
+import request from '@/apis/utils/request'
+ 
+export function parkingList(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/parking/parkingList'
+ 	})
+}
+
+
+
+
+export function floorlockDetails(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/floorlock/floorlockDetails'
+ 	})
+}
+
+
+export function parkingDetails(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/parking/parkingDetails'
+ 	})
+}
+export function parkingFloorlockList(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/floorlock/parkingFloorlockList'
+ 	})
+}

+ 12 - 17
apis/pagejs/index.md

@@ -1,26 +1,21 @@
 import requestWhite from '@/apis/utils/requestWhite'
 import requestWhite from '@/apis/utils/requestWhite'
 import request from '@/apis/utils/request'
 import request from '@/apis/utils/request'
  
  
-[x]//  /mobile/recruit/findAllRecruit 
// 首页查询的接口

// /mobile/recruit/findRecruitSearch
// 搜索结果 查询
- /mobile/news/
- 下面包括首页的top
- 新闻政策(政策发布,爱心驿站,招聘新闻) 新闻详细
- 共享用工 共享用工详细
- 技能培训 技能培训详细
  
  
- ---------------------
- recruit-api
- 
- /mobile/dictionary/findByName
+ 测试环境
  
  
+ 智能地锁PC端
+ https://youdian-test.hbjp.com.cn/floorlock-portal/#/
  
  
+ 智能地锁接口
+  https://youdian-test.hbjp.com.cn/floorlock-server/doc.html
+  
+  [](https://modao.cc/proto/0IatAHTQs9utzggeat2cRV/sharing?view_mode=inspect&screen=rbpU6730lGqv3KI4h
+ )
  
  
+ [](http://192.168.8.162:8081/floorlock/doc.html#/home)
+  https://youdian-test.hbjp.com.cn/floorlock-server/doc.html
  [](https://modao.cc/app/tVP0IkhVrw0ksnBNexe9Md)
  [](https://modao.cc/app/tVP0IkhVrw0ksnBNexe9Md)
  
  
- ------------
-/mobile/recruit/createRecruit 发布招聘信息
/mobile/recruit/recruitDetail 招聘信息详细(免登陆
/mobile/recruit/createShareWork 发布共享用工信息
-
-/mobile/job/createJobHunt 发布求职信息
/mobile/job/jobHuntDetail 求职信息详细(免登陆
-
-
-[](https://equipment.xiaoxinda.com/jk-temporary-workers-portal/)
+ 
+ mobile/
parking 停车场列表
floorlock 地锁相关  列表/详细/白名单/操作白名单/地锁操作
application 申请地锁
information 温馨提示等介绍功能用
regUser 用户信息

+ 27 - 0
apis/pagejs/mylock.js

@@ -0,0 +1,27 @@
+import requestWhite from '@/apis/utils/requestWhite'
+import request from '@/apis/utils/request'
+ 
+
+export function floorlockDetails(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/floorlock/floorlockDetails'
+ 	})
+}
+
+export function floorlockList(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/floorlock/floorlockList'
+ 	})
+}
+
+export function application_myList(data) {
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: '/mobile/application/myList'
+ 	})
+}

+ 2 - 8
apis/utils/init.js

@@ -8,7 +8,7 @@ var app = {
 	init: function() {
 	init: function() {
 		
 		
 		// #ifdef H5
 		// #ifdef H5
-			console.log("SIMPLE_RUN 模式,取配置固定openId  可修改SIMPLE_RUN ")
+			console.log("SIMPLE_RUN 模式,取配置固定openId  可修改SIMPLE_RUN ",process.jphelp.openId)
 			jphelp.setOpenId(process.jphelp.openId)
 			jphelp.setOpenId(process.jphelp.openId)
 			
 			
 		// #endif
 		// #endif
@@ -34,13 +34,7 @@ var app = {
 						jphelp.setOpenId(response.data)
 						jphelp.setOpenId(response.data)
 						//user_info 等属性 ,头像,名称,可通过授权获得  uniapp方法申请
 						//user_info 等属性 ,头像,名称,可通过授权获得  uniapp方法申请
 						//jphelp.set("xpgj_wx_user_info",response.data)
 						//jphelp.set("xpgj_wx_user_info",response.data)
-						API_WeiXin.saveLoginRecord({
-							openId:response.data
-						}).then((res) => {
-							console.log('App getOpenId  记录用户登陆')
-						}).catch(error => {
-							console.log('App getOpenId  记录用户登陆 失败')
-						})
+					
 												
 												
 					}).catch(error => {
 					}).catch(error => {
 						console.log(error);
 						console.log(error);

+ 9 - 7
apis/weixin.js

@@ -1,6 +1,14 @@
 import request from '@/apis/utils/requestWhite'
 import request from '@/apis/utils/requestWhite'
  
  
+export function findByOpenId(data) {
+	return request({
+		url: '/mobile/regUser/findByOpenId',
+		data: data,
+		method: 'get',
+	})
+}
 
 
+//////////////////////////////////////////////////////
 export function saveLoginRecord(data) {
 export function saveLoginRecord(data) {
  	return request({
  	return request({
  		method: 'post',
  		method: 'post',
@@ -36,13 +44,7 @@ export function findUserPhoneNumber(code) {
 	})
 	})
 }
 }
 
 
-export function findByOpenId(data) {
-	return request({
-		url: '/mobile/user/findByOpenId',
-		data: data,
-		method: 'get',
-	})
-}
+
 
 
 
 
 export function findValueByName(data) {
 export function findValueByName(data) {

+ 0 - 100
components/Tabbar.vue

@@ -1,100 +0,0 @@
-<template >
-	<view>
-		<u-tabbar v-model="myCurrent"  :list="tabbarList" 
-		:active-color="selectedColor" :inactive-color="color"  ></u-tabbar>
-		
-	</view>
-</template>
-
-<script>
-	var img1=require('@/assets/tab/home-3-line.png')
-	var img2=require('@/assets/tab/home-3-fill.png')
-	var img3=require('@/assets/tab/todo-line.png')
-	var img4=require('@/assets/tab/todo-fill.png')
-	var img5=require('@/assets/tab/add-circle-line.png')
-	var img6=require('@/assets/tab/add-circle-fill.png')
-	var img7=require('@/assets/tab/user-search-line.png')
-	var img8=require('@/assets/tab/user-search-fill.png')
-	var img9=require('@/assets/tab/user-4-line.png')
-	var img10=require('@/assets/tab/user-4-fill.png')
- 	export default {
-		name:"tabbarJob",
-		props:{
-			current: 0,
-			elderStatus: false
-		},
-		data() {
-			return {
-			
-				color:"#817F99",
-				selectedColor:"#4696f6",
-				tabbarList:[
-					{
-						"text":"首页",
-						"pagePath":"/pages/main/index/index",
-						"iconPath":img1,
-						"selectedIconPath": img2
-						
-					},
-					{
-						"text":"雇主",
-						"pagePath":"/pages/tab/jobInformation/jobInformation",
-						"iconPath":img3,
-						"selectedIconPath": img4
-						
-					},
-					{
-						"text":"发布",
-						"pagePath":"/pages/tab/issue/issue",
-						"iconPath":img5,
-						"selectedIconPath":img6
-						
-					},
-					{
-						"text":"零工",
-						"pagePath":"/pages/tab/choreInformation/choreInformation",
-						"iconPath":img7,
-						"selectedIconPath": img8
-						
-					},
-					{
-						"text":"我的",
-						"pagePath":"/pages/tab/mine/mine",
-						"iconPath":img9,
-						"selectedIconPath": img10
-						
-					}
-				],
-				
-				
-				oldindex:this.current,
-				 myCurrent:this.current,
-				
-			};
-			
-		},methods:{
-			setcount(c){
-				//this.myCurrent=c
-			},
-			beforeSwitch(index){
-				
-				
-			
-				
-				
-			},
-			
-		},
-		mounted(){
-			
-		},destroyed(){
-			
-		}
-		
-		
-	}
-</script>
-
-<style>
-	 
-</style>

+ 238 - 0
components/componentLogin.vue

@@ -0,0 +1,238 @@
+<template>
+	<view>
+		<u-popup v-model="show" mode="center" border-radius="24" :closeable="true" @close="close">
+			<view class="u-mode-center-main">
+		
+		
+				<view class="title">
+					登录荆州蓝领通
+				</view>
+				<view>
+					<button class="login-btn" @click="decryptPhoneNumberH5" open-type="getPhoneNumber"
+						@getphonenumber="decryptPhoneNumber"
+						
+						>
+						<u-icon name="phone-fill" size="46"></u-icon> <text>手机号码一键登录</text>
+					</button>
+		
+				</view>
+		
+				<view class="radio" v-if="false">
+					<!-- <radio></radio>
+							<view class="agreement">
+								阅读并同意<text style="color: #2795FD">《用户隐私协议》</text>
+						</view> -->
+					<u-radio-group v-model="value">
+						<u-radio active-color="red">阅读并同意<text style="color: #2795FD">《用户隐私协议》</text></u-radio>
+					</u-radio-group>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import * as API_weixin from '@/apis/weixin.js'
+	
+	export default {
+		name:"componentLogin",
+		data() {
+			return {
+				show:false
+			};
+		},
+		methods: {
+			ashow(){
+				this.show = true;
+			},
+			aload(){
+				this.findByOpenId()
+			},
+			findByOpenId() {
+			
+				API_weixin.findByOpenId({
+					openId: this.jphelp.getOpenId(),
+					noerror: true
+				}).then((res) => {
+					this.$emit("findByOpenId",res)
+					this.jphelp.setPersonInfo(res.data.regUser);
+					this.jphelp.setToken(res.data.token);
+					this.jphelp.setPersonInfoPlus(res.data);
+				
+				}).catch(error => {
+				
+					this.jphelp.logoff();
+					this.userInfo = {};
+				
+					
+					
+			
+				})
+			
+			},
+			close() {
+				// #ifdef MP-WEIXIN
+				if (this.userInfo.id) {
+				
+				} else {
+					uni.switchTab({
+						url: "/pages/index/index"
+					})
+				}
+				// #endif
+			},
+			decryptPhoneNumberH5() {
+				// #ifdef H5
+				this.show = false
+				var _this = this
+				uni.showModal({
+					title: '输入手机号测试',
+					editable: true,
+					//content: '这是一个模态弹窗',
+					success: function(res) {
+			
+						if (res.confirm) {
+							//_this.createUser(res.content)
+							if (_this.userInfo.id) {
+								_this.changePhoneUser(res.content)
+								
+							} else{
+								_this.createUser(res.content)
+								
+							}
+						} else if (res.cancel) {
+							//.log('用户点击取消');
+						}
+					}
+				});
+				// #endif
+			},
+			decryptPhoneNumber(e) {
+				console.log(e, this.jphelp.getOpenId())
+				var _this=this;
+				if (!e.detail.code&&e.detail.errMsg == 'getPhoneNumber:ok') {
+					uni.login({
+						provider: 'weixin', //使用微信登录
+						success: function(loginRes) {
+			
+							API_weixin.decryptData({
+								code: loginRes.code,
+								encryptedData: e.detail.encryptedData,
+								iv: e.detail.iv
+							}).then((res) => {
+								
+								console.log(res)
+								if (res.data) {
+									console.log(_this.userInfo.id)
+									
+									_this.createUser(res.data)
+			
+								} else {
+									uni.showToast({
+										icon: 'none',
+										title: "获取手机号失败,请检查"
+									})
+								}
+			
+							}).catch(error => {
+			
+								uni.showToast({
+									icon: 'none',
+									title: error
+								})
+								//this.getPhone()
+			
+							})
+						}
+					});
+			
+			
+				} else {
+					uni.showLoading({
+						title: "加载中",
+						mask: true,
+					})
+					API_weixin.findUserPhoneNumber(e.detail.code).then((res) => {
+						if (res.data) {
+							this.createUser(res.data)
+			
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "获取手机号失败,请检查"
+							})
+						}
+			
+			
+			
+					}).catch(error => {
+			
+						uni.showToast({
+							icon: 'none',
+							title: error
+						})
+						//this.getPhone()
+			
+					})
+				}
+			
+			},
+			
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// 弹窗
+	.u-mode-center-main {
+	
+		width: 560rpx !important;
+		border-radius: 12px;
+		padding: 80rpx 48rpx;
+	
+		.title {
+			color: rgba(16, 16, 16, 1);
+			font-size: 32rpx;
+			font-family: 'PingFangSC-medium';
+		}
+	
+		.login-btn {
+			background-color: rgba(0, 188, 99, 1);
+			color: #fff;
+			padding: 8rpx 70rpx;
+			margin-top: 56rpx;
+			margin-bottom: 16rpx;
+			border-radius: 8px;
+			display: flex;
+	
+			font-size: 32rpx;
+	
+			text {
+				margin-left: 8rpx;
+			}
+		}
+	
+		.radio {
+			display: inline-block;
+			width: 100%;
+			display: flex;
+			justify-content: center;
+			font-size: 24rpx;
+			color: #777777;
+			margin-left: 20rpx;
+	
+			.uni-radio-input {
+				width: 24rpx;
+				height: 24rpx;
+	
+			}
+	
+			.uni-radio-input-checked:before {
+				font-size: 24rpx;
+				background-color: rgb(0, 122, 255);
+				border-color: rgb(0, 122, 255);
+			}
+		}
+	
+	}
+</style>

+ 8 - 15
config/.env.dev.js

@@ -1,24 +1,17 @@
 const UNI_APP = {  
 const UNI_APP = {  
 	ProjectName :"荆州蓝领通",
 	ProjectName :"荆州蓝领通",
-	BASE_URL: 'http://192.168.77.162:8086/jk-temporary-workers-server/',
-	BASE_URL:"https://sdl.hbjp.com.cn/jk-temporary-workers-server/",
+	BASE_URL: 'http://192.168.8.162:8081/floorlock/',
+	BASE_URL:" https://youdian-test.hbjp.com.cn/floorlock-server/",
 	//BASE_URL:"https://equipment.hbjp.com.cn/jk-temporary-workers-server/",
 	//BASE_URL:"https://equipment.hbjp.com.cn/jk-temporary-workers-server/",
-	//IMG_URL:"http://www.jsrailway.com.cn/",
-	PREFIX : "jp-zeroWorkerStation",
+	
+	PREFIX : "jp-floorlock-phone",
 	NODE_ENV :"dev",
 	NODE_ENV :"dev",
 	SIMPLE_RUN:false,// 无视权限控制跳转页面   , 用于样式人员快速访问各种功能 ,快速测试等
 	SIMPLE_RUN:false,// 无视权限控制跳转页面   , 用于样式人员快速访问各种功能 ,快速测试等
 
 
-	openId:"o_5WO4hc7MyyVNjSDePRIft6AokI",//个人企业都注册
-	openId:"o_5WO4qUozermjNRBqypzMZg56Qw",// 杨所199
-	//openId:"o_5WO4tDGT3bJ-9Bpdizcdbs-HbI", //152
-	//openId:"o_5WO4m3IkzHIQ7u4m5itak6juyE",// 客户
-	//openId:"323",// 个人  未注册 ,企业 注册
-	//openId:"o_5WO4hc7MyyVNjSDePRIft6AokI",
-	// openId:"o_5WO4nW4ykyd1M5NHI55c87pjks",
-	//小鹏管家appid
-	//VUE_APP_WXAPPID:"wx7e70eb62a8459869",
-	VUE_APP_WXAPPID:"wx1052afafacae1c63",
-	VUE_APP_ALIAPPID:"2021003131641247",
+	openId:"oK9Wr5zv8lvirni3txbxRkmpg8d0",
+	
+
+
 }  
 }  
 
 
 module.exports = UNI_APP;
 module.exports = UNI_APP;

+ 1 - 1
main.js

@@ -4,7 +4,7 @@ import getOpenId from './apis/utils/init.js'
 //import './assets/font/font.css'
 //import './assets/font/font.css'
 
 
 
 
-//getOpenId.init()
+getOpenId.init()
 
 
 import mixin from './apis/utils/mixin.js'
 import mixin from './apis/utils/mixin.js'
 
 

+ 9 - 2
manifest.json

@@ -50,11 +50,18 @@
     "quickapp" : {},
     "quickapp" : {},
     /* 小程序特有相关 */
     /* 小程序特有相关 */
     "mp-weixin" : {
     "mp-weixin" : {
-        "appid" : "",
+        "appid" : "wxccd5542007b7d8ea",
         "setting" : {
         "setting" : {
             "urlCheck" : false
             "urlCheck" : false
         },
         },
-        "usingComponents" : true
+        "usingComponents" : true,
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "涉及地锁、停车场等相关功能,需要涉及经纬度的查询"
+            }
+        },
+		"requiredPrivateInfos" : [ "getLocation"  ]
+
     },
     },
     "mp-alipay" : {
     "mp-alipay" : {
         "usingComponents" : true
         "usingComponents" : true

+ 19 - 20
pages.json

@@ -2,21 +2,15 @@
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		 
 		 
 				{
 				{
-					"path" : "pages/main/index/index",
-					"style" : 
-					{
-						"navigationBarTitleText" : ""
-					}
-				},
-				{
-					"path" : "pages/main/ahtml/homepage",
+					"path" : "pages/index/index",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "选择停车场"
 						"navigationBarTitleText" : "选择停车场"
 					}
 					}
 				},
 				},
+				
 				{
 				{
-					"path" : "pages/main/ahtml/parkingDetails",
+					"path" : "pages/index/main/parkingDetails",
 					"style" : 
 					"style" : 
 					{
 					{
 						
 						
@@ -25,62 +19,62 @@
 				},
 				},
 				
 				
 				{
 				{
-					"path" : "pages/main/ahtml/information",
+					"path" : "pages/index/main/information",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "个人信息"
 						"navigationBarTitleText" : "个人信息"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/lockInfo",
+					"path" : "pages/index/main/lockInfo",
 					"style" : 
 					"style" : 
 					{
 					{
 						 
 						 
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/center",
+					"path" : "pages/index/center",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "个人中心"
 						"navigationBarTitleText" : "个人中心"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/nonwhitelist",
+					"path" : "pages/index/main/nonwhitelist",
 					"style" : {
 					"style" : {
 						
 						
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/mylock/myLock",
+					"path" : "pages/mylock/myLock",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "我的地锁"
 						"navigationBarTitleText" : "我的地锁"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/mylock/bindLock",
+					"path" : "pages/mylock/bindLock",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "绑定新地锁"
 						"navigationBarTitleText" : "绑定新地锁"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/mylock/editLock",
+					"path" : "pages/mylock/editLock",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "修改地锁"
 						"navigationBarTitleText" : "修改地锁"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/mylock/infoLock",
+					"path" : "pages/mylock/infoLock",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "地锁详情"
 						"navigationBarTitleText" : "地锁详情"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path" : "pages/main/ahtml/mylock/bindLockStatus",
+					"path" : "pages/mylock/bindLockStatus",
 					"style" : 
 					"style" : 
 					{
 					{
 						"navigationBarTitleText" : "绑定新地锁"
 						"navigationBarTitleText" : "绑定新地锁"
@@ -95,16 +89,21 @@
 		"borderStyle": "black",
 		"borderStyle": "black",
 		"backgroundColor": "#ffffff",
 		"backgroundColor": "#ffffff",
 		"list": [{
 		"list": [{
-			"pagePath": "pages/main/ahtml/homepage",
+			"pagePath": "pages/index/index",
 			"iconPath":"static/tabBar/home.png",
 			"iconPath":"static/tabBar/home.png",
 			"selectedIconPath": "/static/tabBar/home-HL.png",
 			"selectedIconPath": "/static/tabBar/home-HL.png",
 			"text": "附近"
 			"text": "附近"
 		}, {
 		}, {
-			"pagePath": "pages/main/ahtml/center",
+			"pagePath": "pages/index/center",
 			"iconPath": "/static/tabBar/center.png",
 			"iconPath": "/static/tabBar/center.png",
 			"selectedIconPath": "/static/tabBar/center-HL.png",
 			"selectedIconPath": "/static/tabBar/center-HL.png",
 			"text": "我的"
 			"text": "我的"
 		}]
 		}]
+	},
+	"permission":{
+			"scope.userLocation":{
+				"desc":"获得用户当前位置"
+			}
 	},
 	},
 	"globalStyle": {
 	"globalStyle": {
 		//"navigationStyle": "custom", // 隐藏系统导航栏
 		//"navigationStyle": "custom", // 隐藏系统导航栏

+ 0 - 0
pages/main/index/index.vue → pages/ahtml/index/index.vue


+ 0 - 0
pages/main/ahtml/center.vue → pages/ahtml/main/center.vue


+ 0 - 0
pages/main/ahtml/homepage.vue → pages/ahtml/main/homepage.vue


+ 0 - 0
pages/main/ahtml/information.vue → pages/ahtml/main/information.vue


+ 0 - 0
pages/main/ahtml/lockInfo.vue → pages/ahtml/main/lockInfo.vue


+ 0 - 0
pages/main/ahtml/nonwhitelist.vue → pages/ahtml/main/nonwhitelist.vue


+ 0 - 0
pages/main/ahtml/parkingDetails.vue → pages/ahtml/main/parkingDetails.vue


+ 0 - 0
pages/main/ahtml/mylock/bindLock.vue → pages/ahtml/mylock/bindLock.vue


+ 0 - 0
pages/main/ahtml/mylock/bindLockStatus.vue → pages/ahtml/mylock/bindLockStatus.vue


+ 0 - 0
pages/main/ahtml/mylock/editLock.vue → pages/ahtml/mylock/editLock.vue


+ 0 - 0
pages/main/ahtml/mylock/infoLock.vue → pages/ahtml/mylock/infoLock.vue


+ 0 - 0
pages/main/ahtml/mylock/myLock.vue → pages/ahtml/mylock/myLock.vue


+ 241 - 0
pages/index/center.vue

@@ -0,0 +1,241 @@
+<template>
+	<view class="jpmain  ">
+		<componentLogin ref="refLogin" @findByOpenId="findByOpenId"></componentLogin>
+		<view class="gradient-header">
+			<view class="jpback">
+
+			</view>
+		</view>
+
+		<view class="body">
+
+			<view class="page-top" @click="gotoUrl('pages/index/main/information')" >
+
+				<view class="name">
+					<view class="photo">
+						<img class="img" src="@/assets/img/parkingDetails/item4.png" alt="">
+					</view>
+					<view class="text">
+						<view class="text1">昵称</view>
+						<view class="text2">13111111111</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">
+						<view class="name">1</view>
+						<view class="value">车位</view>
+					</view>
+					<view class="item2">
+
+					</view>
+					<view class="item">
+						<view class="name">1</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/center/icon1.png" alt="">
+							我的地锁
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					<view class="item" v-if="0">
+						<view class="title">
+							<img class="img" src="@/assets/img/center/icon1.png" alt="">
+							我的地锁
+						</view>
+						<view class="goto">
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+				</view>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	
+	import componentLogin from '@/components/componentLogin.vue';
+	export default {
+		components: {
+			componentLogin,
+		},
+		data() {
+			return {
+				userInfo:{}
+			}
+		},
+		onLoad() {
+			this.userInfo = this.jphelp.getPersonInfo()	
+		},
+		onReady() {
+			//this.$refs.refLogin.findByOpenId()
+		},
+		methods: {
+			findByOpenId(res){
+				
+			}
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+</style>
+<style scoped lang="scss">
+	/* styles.css */
+	
+
+	.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>

+ 208 - 0
pages/index/index.vue

@@ -0,0 +1,208 @@
+<template>
+	<view class="jpmain body">
+		<componentLogin ref="refLogin" @findByOpenId="findByOpenId"></componentLogin>
+		
+		<view class="Area Area1">
+			<view class="top">
+				<view class="name">附近停车场</view>
+				<view class="value" @click="getUserLocation()">
+					<img class="img" src="@/assets/img/homepage/riLine-restart-line.png" alt="">
+					重新定位
+				</view>
+			</view>
+			<view class="list">
+				<view class="item"  v-for="(item,i) in allList"
+				 @click="gotoUrl('pages/index/main/parkingDetails?id='+item.id)">
+					<view class="name">				
+						<img class="img" src="@/assets/img/homepage/stLine-location-l.svg" alt="">
+
+						{{item.name}}</view>
+					<view  class="value">小于50米</view>
+				</view>
+			</view>
+		</view>
+
+		<view class="Area Area2">
+			<view class="top">
+				<view  class="name">全部停车场</view>
+				 
+			</view>
+			<view class="list"   >
+				<view class="item"
+				 v-for="(item,i) in allList" :key="i"
+				 @click="gotoUrl('pages/index/main/parkingDetails?id='+item.id)"
+				 >
+					<view class="name">	<img class="img" src="@/assets/img/homepage/stLine-location-l.svg" alt="">
+
+						{{item.name}}</view>
+					<view  class="value">{{item.distance*1000>50?item.distance+'km':'小于50m'}}</view>
+				</view>
+				
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	import componentLogin from '@/components/componentLogin.vue';
+	
+	export default {
+		components: {
+			componentLogin,
+		},
+		data() {
+			return {
+				latitude: 30.337053,
+				
+				longitude: 112.240222,
+				nearList:[],
+				allList:[],
+				
+				point:false,//是否获取了定位
+			}
+		},
+		onLoad() {
+			this.userInfo = this.jphelp.getPersonInfo()	
+			this.getParkingList()
+		},
+		onReady() {
+			this.$refs.refLogin.findByOpenId()
+		},
+		computed:{
+			nearList(){
+				var sz=[]
+				if(this.point){
+					
+					for(var i in this.allList){
+						var item=this.allList[i]
+						if(item.distance*1000<=50){
+							sz.push(item)
+						}
+					}
+				}else{
+					
+				}
+				return sz
+			}
+		},
+		methods: {
+			getParkingList(){
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj={
+					pageIndex:1,
+					pageSize:20,
+					radius:50,
+				}
+				if(this.point){
+					obj.longitude=this.longitude
+					obj.latitude=this.latitude
+				}
+				API.parkingList(obj).then((res) => {
+				
+					this.allList=res.data.data
+					uni.hideLoading();
+					
+				}).catch(error => {
+				
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})	
+							
+				})
+			},
+			findByOpenId(res){
+				
+			},
+			getUserLocation(){
+				uni.authorize({
+				    scope: 'scope.userLocation',
+				    success() {
+				        uni.getLocation({
+				        	type: 'wgs84',
+				        	success: function (res) {
+				        		console.log('当前位置的经度:' + res.longitude);
+				        		console.log('当前位置的纬度:' + res.latitude);
+				        	}
+				        });
+				    }
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		padding: 32rpx;
+	}
+
+	.Area {
+		.img{
+			margin:  0 8rpx;
+		}
+		
+		margin-bottom: 32rpx;
+		.top {
+			margin-bottom: 8rpx;
+			display: flex;
+			justify-content: space-between;
+			
+			.name {
+				color: rgba(51, 51, 51, 1);
+				font-size: 32rpx;
+				font-weight: bold;
+			}
+
+			.value {
+				color: rgba(22, 119, 255, 1);
+				font-size: 24rpx;
+				    display: flex;
+				    align-items: center;
+					.img{
+						width: 28rpx;
+						height: 28rpx;
+					}
+			}
+		}
+		
+		.list {
+			.item {
+				display: flex;
+				justify-content: space-between;
+				padding: 16rpx 0;
+				.name {
+					color: rgba(51, 51, 51, 1);
+					font-size: 32rpx;
+					display: flex;
+						    align-items: center;
+					.img{
+						width: 32rpx;
+						height: 32rpx;
+					}
+					
+				}
+				
+				.value {
+					color: rgba(119,119,119,1);
+
+					font-size: 28rpx;
+				}
+			}
+		}
+	}
+	.Area2{
+		.list{
+			.item{
+				border-bottom:1px solid rgba(232,232,232,1);;
+				
+			}
+		}
+	}
+</style>

+ 155 - 0
pages/index/main/information.vue

@@ -0,0 +1,155 @@
+<template>
+	<view class="jpmain  ">
+		
+
+		<view class="body">
+			<view class="page">
+			
+				<view class="page-content">
+					<view class="item">
+						<view class="title">
+							头像
+						</view>
+						<view class="goto ">
+							<view class="photo">
+								
+								<img class="img" src="@/assets/img/center/icon1.png" alt="">
+							</view>
+							
+							
+							<u-icon name="arrow-right"  style="margin-left: 8rpx;"  size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+				
+				</view>
+			</view>
+			
+			<view class="page">
+
+				<view class="page-content">
+					<view class="item">
+						<view class="title">
+							用户昵称
+
+						</view>
+						<view class="goto">
+							未设置
+							<u-icon name="arrow-right" style="margin-left: 8rpx;" size="24" color="#BBBBBB"></u-icon>
+						</view>
+					</view>
+					<view class="item">
+						<view class="title">
+							手机号码
+
+						</view>
+						<view class="goto">
+							13111111111
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<view class="page">
+			
+				<view class="button">
+					退出账号
+				
+				</view>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+</style>
+<style scoped lang="scss">
+	/* styles.css */
+	
+
+	.body {
+		padding: 32rpx;
+	}
+
+
+
+	
+
+	.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-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;
+				font-size: 32rpx;
+				.title {
+					display: flex;
+					justify-content: space-between;
+					display: flex;
+					align-items: center;
+					color: rgba(51,51,51,1);
+					
+					
+				}
+				.goto{
+					display: flex;
+					align-items: center;
+					color: rgba(119,119,119,1);
+					
+				}
+				.photo {
+					border-radius: 50px;
+					background-color: rgba(229, 229, 229, 1);
+					height: 80rpx;
+					width: 80rpx;
+					overflow: hidden;
+					  
+					.img {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+		}
+
+
+		.button{
+			text-align: center;
+			color: red;
+			    padding: 32rpx 0;
+		}
+	}
+</style>

+ 362 - 0
pages/index/main/lockInfo.vue

@@ -0,0 +1,362 @@
+<template>
+	<view>
+		<view class="page-role" v-if="!loading">
+			<img class="img" src="@/assets/img/nonwhitelist/info.png" alt="">
+			<view class="text1">{{permission?'暂无权限':'加载中...'}}</view>
+			<view class="text2" v-if="permission" >此车位仅限车主及白名单用户使用</view>
+			<view class="botton" v-if="permission">返回首页</view>
+		</view>
+		<view class="jpmain  "  v-else  >
+			<view class="gradient-header">
+				<view class="jpback">
+
+				</view>
+			</view>
+			<view class="page-top" v-if="id">
+				<!-- <view class="name">
+				<img class="img" src="@/assets/img/lockInfo/info1.png" alt="">
+			</view> -->
+				<view class="name">
+					<img class="img img2" src="@/assets/img/lockInfo/info2.png" alt="">
+				</view>
+				<!-- <view class="name">
+				<img class="img" src="@/assets/img/parkingDetails/item4.png" alt="">
+			</view> -->
+				<view class="value">
+					未降锁
+				</view>
+			</view>
+			<view class="body">
+
+
+				<view class="page" v-if="id">
+					<view class="page-main">
+
+						<view class="name">
+							{{floorlockInfo.name}}<span class="tag">{{floorlockInfo.typeN}}</span>
+						</view>
+						<view class="value">
+							<view class="jpbutton jpbutton1">
+								<img class="img" src="@/assets/img/button/lock.png" alt="">
+								降锁
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="page">
+
+					<view class="page-content">
+						<view class="tip1">
+							<view class="tip-title">温馨提示</view>
+
+							<view class="step">
+
+								1、微信扫描位于充电桩立柱或站内墙面上的二维码。
+							</view>
+							<view class="step">
+
+								2、选择空闲车位。
+							</view>
+							<view class="step">
+
+								3、选择需要降锁的车位,点击“降锁”按钮。
+							</view>
+							<view class="step">
+
+								4、降锁完成后提示操作完成,并提示尽快停车。
+							</view>
+						</view>
+						<view class="tip2">
+							<view class="tip-title">温馨提示</view>
+
+							<view class="step">1、顺利降锁后有三分钟时间,请及时就位;超时地锁自动升起,请重新扫码降锁。</view>
+							<view class="step">2、请按降锁流程说明停车,严禁使用外力降锁。</view>
+							<view class="step">3、地锁服务热线 400-0000-000</view>
+
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+
+	export default {
+		data() {
+			return {
+				id: "",
+				loading:false,
+				permission:false,
+				floorlockInfo: {}
+			}
+		},
+		onLoad(op) {
+			if (op.id) {
+				this.id = op.id
+				uni.setNavigationBarTitle({
+					title: "加载中..."
+				})
+				this.getFloorlockDetails()
+			} else {
+				this.loading=true
+				uni.setNavigationBarTitle({
+					title: "降锁说明"
+				})
+			}
+
+		},
+		methods: {
+			getFloorlockDetails() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj = {
+					id: this.id
+				}
+
+				API.floorlockDetails(obj).then((res) => {
+					this.floorlockInfo = res.data.floorlockInfo
+					if(this.floorlockInfo.type==1){
+						
+						uni.setNavigationBarTitle({
+							title: this.floorlockInfo.parkingName
+						})
+						
+						this.loading=true
+					}else{
+						this.permission=true
+					}
+					uni.hideLoading();
+
+				}).catch(error => {
+
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			}
+		},
+
+	}
+</script>
+<style>
+	page {
+		/* //background-color: rgba(242, 244, 246, 1); */
+	}
+</style>
+<style scoped lang="scss">
+	/* styles.css */
+.page-role {
+		padding-top: 120rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+
+		.img {
+			width: 500rpx;
+			height: 500rpx;
+		}
+
+		.text1 {
+			color: rgba(51, 51, 51, 1);
+			font-weight: bold;
+			font-size: 48rpx;
+			margin-bottom: 16rpx;
+		}
+
+		.text2 {
+			color: rgba(51, 51, 51, 1);
+			font-size: 36rpx;
+			margin-bottom: 200rpx;
+		}
+
+		.botton {
+			border-radius: 100rpx;
+			width: 360rpx;
+			text-align: center;
+			border: 1px solid rgba(187, 187, 187, 1);
+			color: rgba(22, 119, 255, 1);
+			padding: 16rpx;
+
+		}
+	}
+
+	.body {
+		padding: 32rpx;
+	}
+
+	.gradient-header {
+		height: 0px;
+	}
+
+	.jpback {
+		height: 400rpx;
+		background: linear-gradient(180deg, rgba(203, 234, 255, 1) 0%, rgba(203, 234, 255, 0) 100%);
+	}
+
+	.page-top {
+		padding: 40rpx;
+		padding-top: 120rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+
+		.name {
+			width: 320rpx;
+			height: 320rpx;
+			display: flex;
+			align-items: flex-end;
+
+			.img {
+				width: 320rpx;
+				height: 320rpx;
+			}
+
+			.img2 {
+				width: 320rpx;
+				height: 140rpx;
+			}
+		}
+
+		.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: 32rpx;
+		margin-bottom: 32rpx;
+		font-size: 32rpx;
+		color: rgb(16, 16, 16);
+
+		.page-main {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.name {
+				color: rgba(51, 51, 51, 1);
+				font-size: 36rpx;
+				display: flex;
+
+				align-items: center;
+
+				.tag {
+					margin-left: 8rpx;
+					color: rgba(119, 119, 119, 1);
+					border-radius: 8rpx;
+					padding: 1px 4rpx;
+					font-size: 24rpx;
+					border: 1px solid rgba(187, 187, 187, 1);
+				}
+			}
+
+		}
+
+		.page-content {
+			.step {
+				margin-bottom: 16rpx;
+			}
+
+			.tip-title {
+				color: #101010;
+				font-size: 36rpx;
+				font-weight: bold;
+				margin-bottom: 24rpx;
+			}
+
+			.tip1 {
+				.step {
+					color: #101010
+				}
+
+				border-bottom: 1px solid rgba(241, 241, 241, 1);
+				margin-bottom: 24rpx;
+				padding-bottom: 8rpx;
+			}
+
+			.tip2 {
+
+				.step {
+					color: #333333
+				}
+			}
+		}
+
+
+
+	}
+
+
+	.jpbutton {
+		border-radius: 100rpx;
+		width: 160rpx;
+		color: #fff;
+		padding: 8rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+
+		.img {
+			margin-right: 8rpx;
+			width: 32rpx;
+			height: 32rpx;
+		}
+	}
+
+	.jpbutton1 {
+		background-color: #2979FF;
+
+		.img {
+			width: 32rpx;
+			height: 32rpx;
+		}
+	}
+
+	.jpbutton2 {
+		background-color: #2979FF;
+
+		.img {
+			width: 40rpx;
+			height: 40rpx;
+			animation: spin 2s linear infinite;
+			/* 添加无限旋转动画 */
+
+		}
+
+		/* 定义旋转动画 */
+		@keyframes spin {
+			from {
+				transform: rotate(0deg);
+				/* 起始角度 */
+			}
+
+			to {
+				transform: rotate(360deg);
+				/* 结束角度 */
+			}
+		}
+	}
+
+	.jpbutton3 {
+		background-color: #00B962;
+	}
+
+	.jpbutton4 {
+		background-color: #A7A2A2;
+	}
+</style>

+ 60 - 0
pages/index/main/nonwhitelist.vue

@@ -0,0 +1,60 @@
+<template>
+	<view class="page">
+		<img class="img" src="@/assets/img/nonwhitelist/info.png" alt="">
+		<view class="text1">暂无权限</view>
+		<view class="text2">此车位仅限车主及白名单用户使用</view>
+		<view class="botton">返回首页</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.page {
+		padding-top: 120rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+
+		.img {
+			width: 500rpx;
+			height: 500rpx;
+		}
+
+		.text1 {
+			color: rgba(51, 51, 51, 1);
+			font-weight: bold;
+			font-size: 48rpx;
+			margin-bottom: 16rpx;
+		}
+
+		.text2 {
+			color: rgba(51, 51, 51, 1);
+			font-size: 36rpx;
+			margin-bottom: 200rpx;
+		}
+
+		.botton {
+			border-radius: 100rpx;
+			width: 360rpx;
+			text-align: center;
+			border: 1px solid rgba(187, 187, 187, 1);
+			color: rgba(22, 119, 255, 1);
+			padding: 16rpx;
+
+		}
+	}
+</style>

+ 415 - 0
pages/index/main/parkingDetails.vue

@@ -0,0 +1,415 @@
+<template>
+	<view class="jpmain ">
+		<view class="title">
+			<view class="name">
+				<view class="stationName">
+					<img class="img" src="@/assets/img/parkingDetails/item1.png" alt="">
+					<span class="item1">{{parkingInfo.name}}</span>
+				</view>
+				<view class="address" v-if="parkingInfo.distance">
+					<img class="img" src="@/assets/img/if-location-pin@1x-2.png" alt="">
+					<span class="item1">{{parkingInfo.distance*1000>50?parkingInfo.distance+'km':'小于50m'}}</span>
+				</view>
+			</view>
+			<view class="value" @click="gotoMain">
+				<view class="item1">
+					<img class="img" src="@/assets/img/parkingDetails/item2.png" alt="">
+				</view>
+				<view class="item2">切换</view>
+			</view>
+		</view>
+		<view class="body">
+
+
+			<view class="describe ">
+				<view class="item1">
+					地址:<span>{{parkingInfo.address}}</span>
+				</view>
+				<view class="item2">
+					<view class="item-a">
+						车位总数:<span>{{floorlockInfoList.length}}个</span>
+					</view>
+					<view class="item-b">
+						空闲车位:<span>{{idleNum}}个</span>
+					</view>
+					<view class="item-c" @click="gotoUrl('pages/index/main/lockInfo')">
+						<img class="img" src="@/assets/img/if-location-pin@1x.png" alt="">
+						降锁说明
+					</view>
+				</view>
+
+			</view>
+
+			<view class="data " v-if="floorlockInfoList.length">
+				<view class="info">
+					<view class="name">请选择空闲车位</view>
+					<view class="value">
+
+						<img class="img" src="@/assets/img/parkingDetails/item3.png" alt="">
+						<span class="item1">使用中</span>
+
+						<img class="img" src="@/assets/img/parkingDetails/item4.png" alt="">
+
+						<span>空闲</span>
+
+					</view>
+				</view>
+				<view class="list">
+					<view  v-for="(item,i) in floorlockInfoList  " 
+					@click="gotoInfoLock(item)"
+					class="item" >
+						<view class="name">
+							<img class="img" v-if="item.status==0"
+							 src="@/assets/img/parkingDetails/item3.png" alt="">
+							<img class="img"  v-else
+							src="@/assets/img/parkingDetails/item4.png" alt="">
+							
+							{{item.name}}
+						</view>
+						<view class="value">
+							<view class="jpbutton jpbutton1" v-if="item.status==0" >
+								<img class="img" src="@/assets/img/button/lock.png" alt="">
+								降锁
+							</view>
+							<view class="jpbutton jpbutton4" v-if="item.status==1">
+								使用中
+							</view>
+							<view class="jpbutton jpbutton5" v-if="item.status==2">
+								异常
+							</view>
+						</view>
+					</view>
+					
+				
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/index.js'
+	
+	export default {
+		data() {
+			return {
+				id:"",
+				floorlockInfo:{},
+				floorlockInfoList:[],
+				parkingInfo:[],
+				latitude: 30.337053,
+				longitude: 112.240222,
+				point:false,//是否获取了定位
+			}
+		},
+		onLoad(op) {
+			this.id=op.id
+			this.getParkingDetails()
+			
+			
+		},
+		computed:{
+			idleNum(){
+				var num=0;
+				this.floorlockInfoList.forEach(item=>{
+					if(item.status==0){
+						num++
+					}
+				})
+				return num
+			}
+		},
+		methods: {
+			gotoMain(){
+				uni.switchTab({
+					url:"/pages/index/index"
+				})
+			},
+			getParkingDetails(){
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj={
+					id:this.id
+				}
+				if(this.point){
+					obj.longitude=this.longitude
+					obj.latitude=this.latitude
+				}
+				API.parkingDetails(obj).then((res) => {
+					this.parkingInfo=res.data.parkingInfo
+					this.getParkingFloorlockList()
+					uni.hideLoading();
+					
+				}).catch(error => {
+				
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})		
+				})
+			},
+			gotoInfoLock(item){
+				if(item.status==0){
+					this.gotoUrl('pages/index/main/lockInfo?id='+item.id)
+					
+				}else if(item.status==1){
+					uni.showToast({
+						title: "使用中",
+						icon: "none"
+					})	
+				}else if(item.status==2){
+					uni.showToast({
+						title: "设备异常",
+						icon: "none"
+					})	
+				}
+			},
+			getParkingFloorlockList(){
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj={
+					parkingId:this.id
+				}
+				
+				API.parkingFloorlockList(obj).then((res) => {
+					this.floorlockInfoList=res.data.floorlockInfoList
+					
+					uni.hideLoading();
+					
+				}).catch(error => {
+				
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})		
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.title {
+		background-color: rgba(22, 119, 255, 1);
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 40rpx 32rpx;
+		color: rgba(255, 255, 255, 1);
+
+		.name {
+			display: flex;
+			align-items: center;
+
+			.stationName {
+				font-size: 40rpx;
+
+				display: flex;
+				align-items: center;
+
+				.item1 {
+					margin: 0 24rpx;
+				}
+				.img{
+					width: 56rpx;
+					height: 56rpx;
+				}
+
+			}
+
+			.address {
+				font-size: 28rpx;
+
+				display: flex;
+				align-items: center;
+
+				.item1 {
+					margin: 0 8rpx;
+				}
+				.img{
+					width: 32rpx;
+					height: 32rpx;
+				}
+			}
+		}
+
+		.value {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			.item1{
+				.img{
+					width: 36rpx;
+					height: 36rpx;
+				}
+			}
+			.item2 {
+				font-size: 24rpx;
+
+			}
+		}
+	}
+
+	.describe {
+		font-size: 32rpx;
+		color: rgba(119, 119, 119, 1);
+		padding-bottom: 32rpx;
+		border-bottom: 1px solid rgba(232, 232, 232, 1);
+
+		.item1 {
+			span {
+				color: rgba(51, 51, 51, 1);
+			}
+
+			padding-bottom: 16rpx;
+		}
+
+		.item-a {
+			span {
+				font-weight: bold;
+				color: rgba(51, 51, 51, 1);
+			}
+		}
+
+		.item-b {
+			span {
+				color: rgba(0, 185, 98, 1);
+				font-weight: bold;
+			}
+		}
+
+		.item-c {
+			color: rgba(22, 119, 255, 1);
+			display: flex;
+			align-items: center;
+			.img{
+				width: 32rpx;
+				height: 32rpx;
+			}
+
+		}
+
+		.item2 {
+			display: flex;
+			justify-content: space-between;
+		}
+
+	}
+
+	.data {
+		
+
+		.info {
+			margin: 32rpx 0;
+			padding: 16rpx;
+			display: flex;
+			justify-content: space-between;
+			border-radius: 8rpx;
+
+			border: 1px solid rgba(216, 220, 226, 1);
+
+			.value {
+				display: flex;
+				align-items: center;
+
+				.item1 {
+					margin-right: 40rpx;
+				}
+				.img {
+					width: 32rpx;
+					height: 32rpx;
+				}
+				span {
+					margin-left: 8rpx;
+				}
+			}
+		}
+
+		.list {
+			.item {
+				display: flex;
+				justify-content: space-between;
+				margin-bottom: 24rpx;
+
+				.name {
+					font-weight: bold;
+					font-size: 36rpx;
+					display: flex;
+					align-items: center;
+
+					.img {
+						width: 50rpx;
+						height: 50rpx;
+						margin-right: 16rpx;
+					}
+				}
+			}
+		}
+	}
+
+	.jpbutton {
+		border-radius: 100rpx;
+		width: 160rpx;
+		color: #fff;
+		padding: 8rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.img{
+				margin-right: 8rpx;
+				width: 32rpx;
+				height: 32rpx;
+		}
+	}
+
+	.jpbutton1 {
+		background-color: #2979FF;
+		.img {
+			width: 32rpx;
+			height: 32rpx;
+		}
+	}
+
+	.jpbutton2 {
+		background-color: #2979FF;
+
+		.img {
+			width: 40rpx;
+			height: 40rpx;
+			animation: spin 2s linear infinite;
+			/* 添加无限旋转动画 */
+		
+
+		}
+
+		/* 定义旋转动画 */
+		@keyframes spin {
+			from {
+				transform: rotate(0deg);
+				/* 起始角度 */
+			}
+
+			to {
+				transform: rotate(360deg);
+				/* 结束角度 */
+			}
+		}
+	}
+
+	.jpbutton3 {
+		background-color: #00B962;
+	}
+
+	.jpbutton4 {
+		background-color: #A7A2A2;
+	}
+	.jpbutton5 {
+		background-color: red;
+	}
+</style>

+ 264 - 0
pages/mylock/bindLock.vue

@@ -0,0 +1,264 @@
+<template>
+	<view class="jpmain  ">
+		<view class="body">
+			<u-steps :list="numList" mode="number" :current="current" un-active-color="#999999"></u-steps>
+			</view>
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>地锁编号
+
+					</view>
+					<view class="value">
+						<view>1231231</view>
+						<view><img class="img" src="@/assets/img/mylock/item3.png" alt=""></view>
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>用户名
+
+					</view>
+					<view class="value">
+						<input placeholder="请填写用户真实姓名" />
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						<span>*</span>联系电话
+
+					</view>
+					<view class="value">
+						<input placeholder="请填写用户联系电话" />
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>所属停车场
+
+					</view>
+					<view class="value">
+						<view>请选择所属停车场</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">
+						<view>请选择车位类型</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号车位" />
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						位置描述
+
+					</view>
+					<view class="value">
+						<input placeholder="请描述车位位置信息" />
+					</view>
+				</view>
+			<view class="floating-button">
+				<view class="button"  @click="gotoUrl('pages/mylock/bindLockStatus')" >
+					
+					提交申请
+				</view>
+				
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/mylock.js'
+	
+	export default {
+		data() {
+			return {
+				current: 0,
+				numList: [{
+					name: '绑定地锁'
+				}, {
+					name: '等待审核'
+				}, {
+					name: '完成绑定'
+				}],
+			};
+		},
+		methods:{
+			gotoscanMP(val){
+				// 允许从相机和相册扫码
+				uni.scanCode({
+					success: function (res) {
+						console.log('条码类型:' + res.scanType);
+						console.log('条码内容:' + res.result);
+					}
+				});
+			},
+			gotoscan(val) {
+				
+				// #ifdef H5
+					this.gotoscanH5(val)
+				// #endif
+				
+				// #ifdef MP-WEIXIN
+					
+						this.gotoscanMP(val)
+				// #endif
+			},
+			getscan(val) {
+			 	this.showpopup=true;
+			 	
+			 	
+			 	uni.showLoading({
+			 		title: "加载中",
+			 		mask: true,
+			 	})
+			 	API.queryDeviceByCode({
+			 		code: val,
+			 
+			 	}).then((res) => {
+			 		uni.hideLoading();
+			 		if (res.data.deviceInfo) {
+			 			console.log(res.data.deviceInfo)
+			 			this.nowscan=res.data.deviceInfo;
+			 			uni.showToast({
+			 				title: "添加成功",
+			 				icon: "none"
+			 			})
+			 
+			 
+			 		} else {
+			 			uni.showToast({
+			 				title: "二维码无效",
+			 				icon: "none"
+			 			})
+						this.nowscan={}
+			 		}
+			 
+			 	}).catch(error => {
+			 		uni.showToast({
+			 			title: error,
+			 			icon: "none"
+			 		})
+			 	})
+			 },
+			gotoscanH5(val) {
+				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>

+ 88 - 0
pages/mylock/bindLockStatus.vue

@@ -0,0 +1,88 @@
+<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">
+			<view class="button button2">
+				返回
+			</view>
+
+		</view>
+
+	</view>
+	</view>
+</template>
+
+<script >
+	import * as API from '@/apis/pagejs/mylock.js'
+	
+	export default {
+		data() {
+			return {
+				current: 1,
+				numList: [{
+					name: '绑定地锁'
+				}, {
+					name: '等待审核'
+				}, {
+					name: '完成绑定'
+				}],
+			};
+		}
+	}
+</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>

+ 181 - 0
pages/mylock/editLock.vue

@@ -0,0 +1,181 @@
+<template>
+	<view class="jpmain  ">
+		
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>地锁编号
+
+					</view>
+					<view class="value">
+						<view>1231231</view>
+						<view></view>
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						用户名
+
+					</view>
+					<view class="value">
+						<view>1231231</view>
+						<view></view>
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						联系电话
+
+					</view>
+					<view class="value">
+						<view>1231231</view>
+						<view></view>
+					</view>
+				</view>
+			</view>
+
+			<view class="list">
+				<view class="item">
+					<view class="name">
+						<span>*</span>所属停车场
+
+					</view>
+					<view class="value">
+						<view>请选择所属停车场</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">
+						<view>请选择车位类型</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号车位" />
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						位置描述
+
+					</view>
+					<view class="value">
+						<input placeholder="请描述车位位置信息" />
+					</view>
+				</view>
+			<view class="floating-button">
+				<view class="button">
+					
+					保存
+				</view>
+				
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/mylock.js'
+	
+	export default {
+		data() {
+			return {
+				current: 0,
+				numList: [{
+					name: '绑定地锁'
+				}, {
+					name: '等待审核'
+				}, {
+					name: '完成绑定'
+				}],
+			};
+		}
+	}
+</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;
+					}
+			}
+		}
+	}
+	.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>

+ 545 - 0
pages/mylock/infoLock.vue

@@ -0,0 +1,545 @@
+<template>
+	<view class="jpmain  ">
+		<view class="gradient-header">
+			<view class="jpback">
+
+			</view>
+		</view>
+		<view class="body">
+			<view class="page-top">
+				<view class="text1">地锁名称</view>
+				<view class="text2">地锁名称11<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">{{obj.model}}</view>
+					</view>
+
+
+					<view class="row">
+						<view class="name">出厂编号</view>
+						<view class="value">{{obj.deviceNo}}</view>
+					</view>
+					<template v-if="!listShow">
+						<view class="row">
+							<view class="name">固件版号</view>
+							<view class="value">{{obj.firmwareVersion}}</view>
+						</view>
+						<view class="row">
+							<view class="name">防护等级</view>
+							<view class="value">{{obj.protectionGrade}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">输入电压</view>
+							<view class="value">{{obj.inputVoltage}}</view>
+						</view>
+						<view class="row">
+							<view class="name">输出电压</view>
+							<view class="value">{{obj.outputVoltage}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">输出电流</view>
+							<view class="value">{{obj.outputCurrent}}</view>
+						</view>
+						<view class="row">
+							<view class="name">输出功率</view>
+							<view class="value">{{obj.outputPower}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">生产日期</view>
+							<view class="value">{{obj.manufactureTime}}</view>
+						</view>
+
+						<view class="row">
+							<view class="name">标准依据</view>
+							<view class="value">{{obj.standardBasis}}</view>
+						</view>
+						<view class="row">
+							<view class="name">联网卡号</view>
+							<view class="value">{{obj.trafficCardNumber}}</view>
+						</view>
+						<view class="row">
+							<view class="name">资费标准</view>
+							<view class="value">{{obj.tariffStandard}}</view>
+						</view>
+						<view class="row">
+							<view class="name">设备启动时间</view>
+							<view class="value">{{obj.bindingTime}}</view>
+						</view>
+						<view class="row">
+							<view class="name">设备质保期</view>
+							<view class="value">{{obj.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">{{obj.trafficCardNumber}}</view>
+					</view>
+					<view class="row">
+						<view class="name">有效期至</view>
+						<view class="value">{{obj.expirationTime?obj.expirationTime.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">({{vipUserList.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">
+							<table>
+								<tr>
+									<td>姓名</td>
+									<td>手机号</td>
+									<td>车牌号</td>
+									<td>操作</td>
+								</tr>
+								<tr v-for="(item,i) in vipUserList" :key="i">
+									<td>{{item.userName}}</td>
+									<td>{{item.phone}}</td>
+									<td>{{item.carNum==0?'':item.carNum}}</td>
+									<td class="" style="color:#1677FF" @click="editUser(item)">修改</td>
+								</tr>
+
+							</table>
+
+						</view>
+					</view>
+				</view>
+				
+				<u-popup v-model="popupShow" mode="bottom" :closeable="true" border-radius="30">
+					<view class="popup-screen">
+						<view class="popup-title">{{vipUser.id?'修改':'添加'}}白名单信息</view>
+						<view style="padding: 4px;">白名单车主姓名<span style="color: red;">*</span></view>
+						<u-input :customStyle="customStyle" v-model="vipUser.name" 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.carNum" placeholder="白名单车主车牌号"></u-input>
+
+						<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">
+
+						保存
+					</view>
+
+				</view>
+			
+			
+			</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/mylock.js'
+	
+	export default {
+		data() {
+			return {
+				listShow: true,
+				popupShow: false,
+				customStyle: {
+					"border-radius": "50px",
+					"background-color": 'rgba(242, 244, 246, 1)',
+					padding: "5px 20px",
+					margin: "5px 0 "
+				},
+				applyList: [],
+				vipUserList: [],
+				vipUser: {},
+				delShow: false,
+				obj: {},
+			};
+		},
+		onLoad(op) {
+			//this.myApplyList()
+
+		},
+		methods: {
+			submitUser() {
+				if (!this.vipUser.name) {
+					uni.showToast({
+						title: "请填写白名单车主姓名"
+					})
+					return
+				}
+				if (!this.vipUser.phone) {
+					uni.showToast({
+						title: "请填写白名单车主手机号码"
+					})
+					return
+				}
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API_apply.saveVipUser(this.vipUser).then((res) => {
+					//this.obj = res.data
+					uni.hideLoading()
+
+					this.delShow = false
+					this.popupShow = false
+					this.findVipUser(1)
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+
+
+			},
+			confirmDelete() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API_apply.deleteVipUser({
+					id: this.vipUser.id
+				}).then((res) => {
+					//this.obj = res.data
+					uni.hideLoading()
+					this.delShow = false
+					this.popupShow = false
+					uni.showToast({
+						title: "操作成功"
+					})
+					this.findVipUser(1)
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+			},
+			delUser() {
+				this.delShow = true;
+			},
+			editUser(item) {
+				this.popupShow = true;
+				this.vipUser = item;
+				this.vipUser.name = item.userName
+				var item = this.applyList[0]
+				this.vipUser.stationId = item.stationId
+				if (this.vipUser.carNum == 0) {
+					this.vipUser.carNum = ''
+				}
+			},
+			addUser() {
+				if (this.vipUserList.length >= 3) {
+					uni.showToast({
+						title: "添加白名单用户已达到上限"
+					})
+					return
+				}
+				this.popupShow = true;
+				this.vipUser = {}
+				var item = this.applyList[0]
+				this.vipUser.stationId = item.stationId
+
+			},
+			findDeviceByNo() {
+				var item = this.applyList[0]
+				API_apply.findDeviceByNoD({
+					deviceNo: item.deviceNo
+				}).then((res) => {
+					this.obj = res.data.chargingDevice
+					uni.hideLoading()
+
+
+
+
+				}).catch(error => {
+					uni.showToast({
+						title: error
+					})
+				})
+			},
+			findVipUser(bl) {
+				if (bl) {
+					uni.showLoading({
+						title: "加载中",
+						mask: true,
+					})
+				}
+				var item = this.applyList[0]
+				this.vipUserList = []
+				API_apply.findVipUser({
+					stationId: item.stationId
+				}).then((res) => {
+					if (bl) {
+
+						uni.hideLoading()
+						uni.showToast({
+							title: "操作成功"
+						})
+					}
+
+					this.vipUserList = res.data.vipUserList
+
+
+
+				}).catch(error => {
+
+					uni.showToast({
+						title: error
+					})
+				})
+			},
+			myApplyList() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API_apply.myApplyList({
+
+				}).then((res) => {
+					//this.obj = res.data
+
+					this.applyList = res.data.applyList;
+					this.findVipUser()
+					this.findDeviceByNo()
+
+				}).catch(error => {
+					uni.showToast({
+						title: error
+					})
+				})
+			},
+		}
+	}
+</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;
+	}
+	.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{
+				   width: 100%;
+			  }
+			.row{
+				 display: flex;
+				     align-items: center;
+				 height: 72rpx;
+				font-size: 28rpx;
+				padding: 0 24rpx;
+				 .name{
+					 width: 240rpx;
+				 }
+				 
+			}
+			td{
+				height: 72rpx;
+				font-size: 28rpx;
+				padding: 0 24rpx;
+			}
+			  /* 隔行变色: 偶数行设置背景色 */
+			  .row:nth-child(odd) {
+			      background-color: #f9f9f9; /* 偶数行 */
+			    }
+				tr:nth-child(odd) {
+				    background-color: #f9f9f9; /* 偶数行 */
+				  }
+			.row:nth-child(even) {
+			     background-color: #ffffff; /* 奇数行 */
+			   }
+			   tr:nth-child(even) {
+			        background-color: #ffffff; /* 奇数行 */
+			      }
+			 
+		}
+	}
+	.popup-screen{
+		padding: 40rpx;
+		.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>

+ 235 - 0
pages/mylock/myLock.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="jpmain  ">
+
+
+		<view class="body">
+
+
+			<view class="page">
+
+				<view class="page-content">
+					<view class="item" v-for="(item,i) in list"
+					 @click="gotoUrl('pages/mylock/infoLock?id='+item.id)">
+						<view class="title">
+
+							<view class="name">
+								<img class="img" src="@/assets/img/mylock/item1.png" alt="">
+
+								1号车位地锁
+
+							</view>
+							<view class="value">
+								<span>{{item.parkingName}}</span>
+								<span>{{item.describe}}</span>
+								<span class="status">审批中</span>
+							</view>
+						</view>
+						<view class="goto">
+
+							<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+
+						</view>
+					</view>
+					
+					
+					
+
+				</view>
+			</view>
+
+
+
+		</view>
+		<view class="floating-button" @click="gotoUrl('pages/mylock/bindLock')">
+			<view class="button">
+				<img class="img" src="@/assets/img/mylock/item2.png" alt="">
+
+				绑定新地锁
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import * as API from '@/apis/pagejs/mylock.js'
+
+	export default {
+		data() {
+			return {
+				applicationList:[],
+				list:[],
+				listForm:{
+					pageIndex: 1,
+					pageSize: 20,
+					recordsTotal: 1,
+				}
+			}
+		},
+		onLoad() {
+			this.getMyList()
+		},
+		onReachBottom() {
+			if (this.list.length < this.listForm.recordsTotal) {
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			
+			myLoadmore(){
+				this.listForm.pageIndex += 1;
+				this.getFloorlockList()
+			},
+			getMyList() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+			 
+				API.application_myList({
+					pageSize:999
+				}).then((res) => {
+					this.applicationList=[]
+					this.getFloorlockList()
+					uni.hideLoading();
+			
+				}).catch(error => {
+					
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+					this.getFloorlockList()
+				})
+			},
+			getFloorlockList() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+			 
+				API.floorlockList(this.formData).then((res) => {
+					var list=[]
+					
+					if (this.listForm.pageIndex == 1) {
+						list = res.data.data;
+					} else {
+						list = [
+							...list,
+							...res.data.data
+						];
+					}
+					this.list = res.data.data
+					uni.hideLoading();
+
+				}).catch(error => {
+
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			}
+		}
+	}
+</script>
+<style>
+	page {
+		background-color: rgba(242, 244, 246, 1);
+	}
+</style>
+<style scoped lang="scss">
+	/* styles.css */
+
+
+	.body {
+		padding: 32rpx;
+	}
+
+
+
+
+
+	.page {
+
+		.page-content {
+
+			.item {
+				padding: 32rpx;
+				margin-bottom: 32rpx;
+				background-color: rgba(255, 255, 255, 1);
+				border-radius: 16rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				font-size: 32rpx;
+
+				.title {
+
+
+					.name {
+						color: rgba(22, 119, 255, 1);
+						font-size: 32rpx;
+						font-weight: bold;
+						margin-bottom: 8rpx;
+
+						.img {
+							width: 36rpx;
+							height: 32rpx;
+							margin-right: 8rpx;
+						}
+
+					}
+
+					.value {
+						color: rgba(119, 119, 119, 1);
+						font-size: 24rpx;
+
+						span {
+							margin-right: 8rpx;
+						}
+					}
+
+				}
+
+				.goto {
+
+					color: rgba(119, 119, 119, 1);
+
+				}
+
+			}
+		}
+
+
+	}
+
+	.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>

+ 3 - 1
readme.md

@@ -1,3 +1,5 @@
 [#荆鹏智能地锁-分享]
 [#荆鹏智能地锁-分享]
 (https://modao.cc/proto/0IatAHTQs9utzggeat2cRV/sharing?view_mode=inspect&screen=rbpU6730lGqv3KI4h
 (https://modao.cc/proto/0IatAHTQs9utzggeat2cRV/sharing?view_mode=inspect&screen=rbpU6730lGqv3KI4h
- )
+ )
+ 
+ 地锁状态(0空闲,1降下/使用中,2异常)