Selaa lähdekoodia

添加任务html

zkx 1 kuukausi sitten
vanhempi
commit
0034d9b77e

+ 2179 - 0
pages/index/demo.vue

@@ -0,0 +1,2179 @@
+<template>
+	<view>
+		<u-navbar v-show="false" title="首页" title-color="#101010"></u-navbar>
+
+		<u-picker v-model="body2data.vue.show" :params="body2data.vue.params" :default-time="body2data.query.startTime"
+			@confirm="body2dataconfirm" mode="time"></u-picker>
+
+		<!-- <u-picker v-model="body5data.vue.show" :default-time="body5data.query.queryDate" :params="body5data.vue.params"
+			@confirm="body5dataconfirm" mode="time"></u-picker> -->
+			
+			<u-calendar v-model="body5data.vue.show" mode="date" @change="body5dataconfirm"></u-calendar>
+
+
+		<view class="navbar">
+			智泊e家 运管端
+
+		</view>
+		<view class="tabs-box">
+
+			<u-picker-jp v-model="showselect1" range-key="name" :num="3" @confirm="showselect1confirm"
+				:range="companyList"></u-picker-jp>
+
+			<template v-if="companyListTabs.length>2">
+				<u-tabs ref="tabs" :list="companyListTabs" bg-color="#1677ff" :current="current1" inactive-color="#fff"
+					@change="utabsChange1" item-width="180" height="70" gutter="10" active-color="#fff"></u-tabs>
+				<view class="tabs-box-other" v-if="companyList.length>3" @click="utabsChange1other">
+					更多
+				</view>
+			</template>
+
+		</view>
+
+		<view class="main">
+
+			<u-picker-jp v-model="showselect2" range-key="name" :num='3' @confirm="showselect2confirm"
+				:range="parkingList"></u-picker-jp>
+
+			<view class="tabs-box2" v-show="parkingListTabs.length>2">
+				<u-tabs ref="tabs2" gutter="10" :list="parkingListTabs" :current="current2" @change="utabsChange2"
+					item-width="180" bg-color="#f2f4f6" height="70"></u-tabs>
+				<view v-if="parkingList.length>3" class="tabs-box-other" @click="utabsChange2other">
+					更多
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						综合统计
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body1">
+						<view class="body1pie-table">
+							<view class="tr">
+								<view class="td td1">
+									<view id="body1pie1" class="body1pie">
+
+									</view>
+								</view>
+								<view class="td td2">
+									<view class="td td3">
+										<view class="td td4">空闲<span
+												class="body1pie-num color53B56B">{{body1data.data.idleNum}}</span>台
+										</view>
+										<view class="td td4">占用<span
+												class="body1pie-num colorAAAAAA">{{body1data.data.useNum}}</span>台
+										</view>
+									</view>
+									<view class="td td3">
+
+										<view class="td td4">公共车位<span
+												class="body1pie-num colorEF8132">{{body1data.data.publicNum}}</span>台
+										</view>
+										<view class="td td4">私家车位<span
+												class="body1pie-num colorDC4441">{{body1data.data.privateNum}}</span>台
+										</view>
+									</view>
+								</view>
+
+							</view>
+
+							<view class="tr">
+								<view class="td td1">
+									<view id="body1pie2" class="body1pie">
+
+									</view>
+								</view>
+								<view class="td td2">
+									<view class="td td3">
+
+										<view class="td td4">正常<span
+												class="body1pie-num color53B56B">{{body1data.data.normalNum}}</span>台
+										</view>
+										<view class="td td4">离线<span
+												class="body1pie-num colorAAAAAA">{{body1data.data.loseNum}}</span>台
+										</view>
+									</view>
+									<view class="td td3">
+
+										<view class="td td4">故障<span
+												class="body1pie-num colorEF8132">{{body1data.data.errorNum}}</span>台
+										</view>
+										<view class="td td4" v-if="0">低电量<span
+												class="body1pie-num colorDC4441">5</span>台</view>
+									</view>
+								</view>
+							</view>
+
+							<view class="tr" v-if="0">
+								<view class="td td1">
+									<view id="body1pie3" class="body1pie">
+
+									</view>
+								</view>
+								<view class="td td2">
+									<view class="td td3">
+
+										<view class="td td4">管理员<span class="body1pie-num color307AF6">5</span>人</view>
+										<view class="td td4">白名单<span class="body1pie-num color53B56B">5</span>人</view>
+									</view>
+									<view class="td td3">
+
+										<view class="td td4">游客<span class="body1pie-num colorEF8375">5</span>人次</view>
+										<view class="td td4"></view>
+									</view>
+								</view>
+
+							</view>
+
+
+						</view>
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics " v-show="1||companyId">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>地锁列表</view>
+			
+						<view class="check-all" @click="gotoDeviceList()">查看全部<u-icon name="arrow-right"></u-icon>
+						</view>
+			
+					</view>
+			
+				</view>
+			
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body7">
+						<view class="body7main">
+							<view class="line" v-for="(item,index) in equipmentList"
+								@click="gotoUrl('/pages/deviceTab/dataLock?id='+item.id)" :key="index">
+								<view class="item">
+									<!-- 
+								 -->
+									<view class="item-title">
+										
+										<view class="item-name">
+											{{item.name}}
+										</view>
+										<view class="item-tags">
+											<view class="tag  " :class="'tag'+item.type">
+												{{item.typeN}}
+													
+											</view>
+											
+											<view class="tag" :class="'lockStatus lockStatus'+item.lockStatus">
+												{{item.lockStatusN}}
+											</view>
+										</view>
+									</view>
+									<view class="item-body">
+										<span>编号:{{item.lockNo}}</span> <span v-if="item.batteryLevel" style="    margin-left: 16rpx;">电压:{{item.batteryLevel}}V</span>
+									</view>
+			
+								</view>
+								<view class="goto">
+									<view  :class="'statusN statusN'+item.status">
+										{{item.status==1?'在线':'离线'}}
+											
+									</view>
+									<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+								</view>
+								
+							</view>
+							<u-divider border-color="#CFD2D5" @click="gotoDeviceList()"
+								v-if="equipmentList.length==10">最多显示10条,点击查看更多</u-divider>
+			
+						</view>
+			
+			
+			
+					</jpContent>
+				</view>
+			</view>
+			
+			<view class="statistics " v-show="1||companyId">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>停车记录</view>
+			
+						<view class="check-all" @click="gotoUrl('/pages/record/parkingRecord?compamyId='+companyId+'&parkingId='+parkingId)">查看全部<u-icon name="arrow-right"></u-icon>
+						</view>
+			
+					</view>
+			
+				</view>
+			
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body8">
+						<view class="body8main">
+							<view class="line" v-for="(item,index) in parkingRecord"
+								@click="gotoUrl('/pages/record/parkingInfo?id='+item.id)" :key="index">
+								
+								<view class="data">
+									
+									<view class="view3">
+										<u-icon name="clock"></u-icon>
+										{{showTime(item.startTime)}}
+										<template v-if="item.status!=0">
+											{{item.endTime?'-'+showTime(item.endTime):'-当前'}}
+										</template>
+										
+									</view>
+									<view class="view1">
+										{{item.parkingName}} {{item.lockName}}
+									</view>
+								</view>
+								<view class="goto " :class="'status'+item.status">
+									{{item.status==2?getTime(item):''}}
+									{{item.status==1?'使用中':''}}
+									{{item.status==0?'启动中':''}}
+								
+									<u-icon name="arrow-right" size="24" style="margin-left: 8rpx;" color="#BBBBBB"></u-icon>
+								
+								</view>
+								
+								
+							</view>
+							<u-divider border-color="#CFD2D5" @click="gotoUrl('/pages/record/parkingRecord?compamyId='+companyId+'&parkingId='+parkingId)"
+								v-if="parkingRecord.length==5">最多显示5条,点击查看更多</u-divider>
+			
+						</view>
+			
+			
+			
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>时空矩阵图</view>
+
+						<view class="tag" @click="body5data.vue.show=true">{{body5data.vue.queryN}}<u-icon
+								name="arrow-down"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body5">
+						<view class="body5main">
+
+							<view id="body5echart" class="body5class">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics " v-show="companyId">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>车位异常记录</view>
+
+						<view class="check-all" @click="gotoUrl('/pages/myTab/abnormalList?companyId='+companyId)">
+							查看全部<u-icon name="arrow-right"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body6">
+						<view class="body6main">
+							<view class="line" v-for="(item,index) in abnormalRecordsList" :key="index">
+								<view class="abnormal-item">
+									<!-- @click="gotoUrl('/pages/abnormal/abnormalAlarmDetails?id='+item.id)"
+								 -->
+									<view class="item-title">
+
+										<view class="name">
+											<span v-if="item.level==1" class="level level1 ">一级</span>
+											<span v-if="item.level==2" class="level level2">二级</span>
+
+											{{item.content}}
+										</view>
+										<view class="date"
+											style="display: flex;    justify-content: space-between;margin-top: 4rpx;">
+											<view>{{item.title}}</view>
+											<view>{{item.createTime}}</view>
+
+										</view>
+									</view>
+
+								</view>
+								<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>车位平均占用率(%)</view>
+						<view class="tag" @click="body2data.vue.show=true">{{body2data.vue.queryN}}<u-icon
+								name="arrow-down"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body2">
+						<view class="body2lineChart">
+
+							<view id="body2line1" class="body2line">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>高频使用时段分布</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body3">
+						<view class="body3barChart">
+
+							<view id="body3bar1" class="body3bar">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>用户停留时长分群特征</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body4">
+						<view class="body4pieChart">
+
+							<view id="body4pie1" class="body4pie">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+
+			
+			<u-divider border-color="#CFD2D5">已经到底了</u-divider>
+
+		</view>
+		<tabbar :current="0"></tabbar>
+
+	</view>
+</template>
+
+<script>
+	import Tabbar from '@/components/Tabbar.vue'
+	import jpContent from '@/components/JPcontent.vue'
+	import * as echarts from 'echarts';
+
+	import * as API from '@/apis/pagejs/index.js'
+
+	import {
+		parseUnixTime,
+		beforeTimeStamp,
+		newDate
+	} from '@/apis/utils'
+
+
+	export default {
+		components: {
+			Tabbar,
+			jpContent
+		},
+		data() {
+			return {
+				current1: 0,
+				showselect1: false,
+				current2: 0,
+				showselect2: false,
+				isReady: false,
+				companyList: [],
+				parkingList: [],
+				//companyListIndex:0,
+				companyId: "",
+				parkingId: "",
+				echartsList: {},
+				parkingRecord:[],
+				equipmentList: [],
+				abnormalRecordsList: [{
+						level: 1,
+						content: "1111111",
+						title: "11",
+						createTime: "123:123"
+					},
+					{
+						level: 2,
+						content: "1111111",
+						title: "11",
+						createTime: "123:123"
+					}
+				],
+				body2data: {
+					query: {},
+					vue: {
+						queryN: "",
+						show: false,
+						params: {
+							year: true,
+							month: true,
+							day: false,
+							hour: false,
+							minute: false,
+							second: false
+						}
+					},
+					data: {}
+				},
+				body1data: {
+					query: {},
+					data: {},
+					data1: {}
+				},
+				body4data: {
+					query: {},
+					data: {}
+				},
+				body3data: {
+					query: {},
+					data: {}
+				},
+
+				body5data: {
+					query: {},
+					data: {},
+					vue: {
+						queryN: "",
+						show: false,
+						params: {
+							year: true,
+							month: true,
+							day: true,
+							hour: false,
+							minute: false,
+							second: false
+						}
+					},
+				},
+				jpContentMap: {
+					body1: 0,
+					body2: 0,
+					body3: 0,
+					body4: 0,
+					body5: 0,
+					body6: 1,
+					body7: 0,
+					body8: 0,
+					body9: 0,
+					body10: 0,
+				}
+			}
+		},
+		onLoad() {
+
+		},
+		onReady() {
+			this.getfindByOpenId();
+		},
+		computed: {
+			companyListTabs() {
+				var sz = []
+
+				if (this.companyList.length > 3) {
+					sz = [{
+						id: "",
+						name: '全部'
+					}]
+					sz.push(this.companyList[0])
+					sz.push(this.companyList[1])
+				} else {
+					sz = [{
+							id: "",
+							name: '全部'
+						},
+						...this.companyList
+					]
+				}
+
+				return sz
+			},
+			parkingListTabs() {
+				var sz = []
+				if (this.parkingList.length > 3) {
+					sz = [{
+						id: "",
+						name: '综合查询'
+					}]
+					sz.push(this.parkingList[0])
+					sz.push(this.parkingList[1])
+				} else {
+					sz = [{
+							id: "",
+							name: '综合查询'
+						},
+						...this.parkingList
+					]
+				}
+
+				return sz
+			},
+		},
+		methods: {
+			
+			showTime(time){
+					if(time){
+						return time.substr(5).replace('-','.')
+					}else{
+						return ''
+					}
+			},
+			getTime(item){
+				if(item.startTime&&item.endTime){
+					var stime=newDate(item.startTime)
+					var etime=newDate(item.endTime)
+					//etime=new Date()
+					var k=(etime.getTime()-stime.getTime())/1000/60
+					
+					var H=k/60
+					var fen=k%(60)
+					var str="";
+					if(k>60){
+						str+=parseInt(H)+'小时'
+					}
+					if(fen==0&&str!=''){
+						
+					}else{
+						str+=parseInt(fen)+'分钟'
+					}
+					return str
+				}else{
+					return '已完成'
+				}
+			},
+			
+			gotoDeviceList() {
+				if (this.parkingId) {
+					this.gotoUrl('/pages/deviceTab/deviceList?parkingId=' + this.parkingId)
+				} else {
+					
+					uni.switchTab({
+							url: '/pages/deviceTab/index'
+						})
+					
+				}
+			},
+			getfloorStatus() {
+				this.jpContentMap.body1 = 0
+
+				API.floorStatus({
+					companyId: this.companyId,
+					parkingId: this.parkingId
+				}).then((response) => {
+					this.body1data.data = response.data
+					uni.hideLoading();
+					this.jpContentMap.body1 = 2
+
+					this.getbody1pie1()
+					this.getbody1pie2()
+					this.getbody1pie3()
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+
+			},
+			getParkingRecordList() {
+				this.jpContentMap.body8 = 0
+			
+				API.parkingRecordList({
+					companyId: this.companyId,
+					parkingId: this.parkingId,
+					pageSize: 5
+				}).then((response) => {
+					
+					uni.hideLoading();
+					if (response.data.totalPage) {
+						this.jpContentMap.body8 = 2
+						this.parkingRecord = response.data.data
+					
+					} else {
+						this.jpContentMap.body8 = 1
+					}
+			
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+			
+				})
+			
+			},
+			getfloorlockList() {
+				this.jpContentMap.body7 = 0
+
+				API.floorlockList({
+					companyId: this.companyId,
+					parkingId: this.parkingId,
+					pageSize: 10
+				}).then((response) => {
+
+					uni.hideLoading();
+					if (response.data.totalPage) {
+						this.jpContentMap.body7 = 2
+						this.equipmentList = response.data.data
+					
+
+					} else {
+						this.jpContentMap.body7 = 1
+					}
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			getApi1() {
+
+				if (this.companyId == "") {
+
+					this.getApi2()
+				} else {
+					this.parkingInfoList()
+				}
+
+			},
+			getApi2() {
+				this.getfloorStatus()
+				this.getfloorlockList()
+				this.occupancyByTime(1);
+				this.occupancyByTimeBar(1);
+				this.occupancyByDay(1);
+				this.durationDistribution();
+				this.getParkingRecordList()
+				if (this.parkingId == "") {
+
+				} else {
+
+				}
+			},
+			change1companyList(i) {
+				//this.companyListIndex=i
+				var companyId = ""
+
+				if (i == -1) {
+					if (this.companyId == companyId) {
+
+					} else {
+						this.companyId = ""
+						this.parkingList = [];
+						this.getApi1()
+					}
+				} else {
+					var item = this.companyList[i]
+					companyId = item.id
+					if (this.companyId == companyId) {
+
+					} else {
+						this.companyId = companyId
+
+						this.parkingId = "";
+						this.current2 = 0;
+						this.$refs.tabs2.showBar = true
+
+						this.getApi1()
+					}
+				}
+
+			},
+			change2parkingList(i) {
+
+				var parkingId = ""
+
+				if (i == -1) {
+
+					if (this.parkingId == parkingId) {
+
+					} else {
+						this.parkingId = "";
+						this.getApi2()
+
+					}
+				} else {
+					var item = this.parkingList[i]
+					parkingId = item.id
+					if (this.parkingId == parkingId) {
+
+					} else {
+						this.parkingId = parkingId;
+						this.getApi2()
+					}
+				}
+
+			},
+			showselect2confirm(e) {
+
+				this.change2parkingList(e[0])
+			},
+			utabsChange2other() {
+				this.$refs.tabs2.showBar = false
+				this.current2 = -1;
+				this.showselect2 = true;
+			},
+			utabsChange2(index) {
+				this.current2 = index;
+				this.change2parkingList(index - 1)
+				this.$refs.tabs2.showBar = true
+			},
+
+			showselect1confirm(e) {
+
+				this.change1companyList(e[0])
+			},
+
+			utabsChange1other() {
+				this.$refs.tabs.showBar = false
+				this.current1 = -1;
+				this.showselect1 = true;
+			},
+			utabsChange1(index) {
+				this.current1 = index;
+				this.change1companyList(index - 1)
+				this.$refs.tabs.showBar = true
+			},
+			parkingInfoList() {
+
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				this.parkingList = [];
+
+				API.parkingList({
+					companyId: this.companyId,
+					pageSize: 999
+				}).then((response) => {
+
+					uni.hideLoading();
+					var parkingInfoList = response.data.parkingInfoList
+					this.parkingList = [
+						...parkingInfoList,
+					];
+
+					if (this.parkingList.length == 1) {
+
+						this.change2parkingList(0)
+
+					} else {
+						this.change2parkingList(-1)
+						this.getApi2()
+					}
+
+					this.getfloorlockList()
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			companyInfoList() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				this.companyList = [];
+
+				API.companyInfoList({
+
+				}).then((response) => {
+
+					uni.hideLoading();
+					var companyInfoList = response.data.companyInfoList
+					this.companyList = [
+						...companyInfoList,
+
+					];
+
+					if (this.companyList.length == 1) {
+						this.change1companyList(0)
+					} else {
+						this.change1companyList(-1)
+						this.getApi1()
+					}
+
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			init() {
+				this.companyInfoList()
+
+				//this.occupancyByTime();
+
+				//this.getbody3()
+				//this.getbody4()
+
+				//this.getbody5()
+
+
+			},
+			body2dataconfirm(e) {
+
+				var date = new Date(e.year + "-" + e.month + "-1");
+				this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
+				this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+
+				var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+				this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+
+				this.occupancyByTime()
+			},
+			body5dataconfirm(e) {
+				console.log(e)
+				var date = new Date(e.year + "-" + e.month + "-" + e.day);
+				this.body5data.query.queryDate = parseUnixTime(date, '{y}-{m}-{d}')
+				this.body5data.vue.queryN = parseUnixTime(date, '{y}年{m}月{d}日');
+
+				this.occupancyByDay()
+			},
+			occupancyByTimeBar(init) {
+				if (init) {
+					var date = new Date();
+					//test
+					//this.body3data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+
+					var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+					//this.body3data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+
+				}
+				this.jpContentMap.body3 = 0
+				this.body3data.query.companyId = this.companyId
+				this.body3data.query.parkingId = this.parkingId
+				API.occupancyByTimeBar(
+					this.body3data.query
+				).then((response) => {
+					this.body3data.data = [
+						...response.data.locksTimeList,
+						//	...response.data.locksTimeList,
+					];
+
+					if (this.body3data.data.length == 0) {
+						this.jpContentMap.body3 = 1
+
+					} else {
+						this.jpContentMap.body3 = 2
+						this.getbody3()
+
+					}
+
+
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			durationDistribution() {
+				this.jpContentMap.body4 = 0
+
+				var date = new Date();
+				//test
+				//this.body4data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+
+				var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+			//	this.body4data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+
+
+
+				this.body4data.query.companyId = this.companyId
+				this.body4data.query.parkingId = this.parkingId
+				API.durationDistribution(
+					this.body4data.query
+				).then((response) => {
+					this.body4data.data = response.data.distribution;
+
+					if (this.body4data.data.length == 0) {
+						this.jpContentMap.body4 = 1
+
+					} else {
+						this.jpContentMap.body4 = 2
+						//this.getbody3()
+						this.getbody4()
+					}
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			occupancyByDay(init) {
+				if (init) {
+					var date = new Date();
+
+					this.body5data.query.queryDate = parseUnixTime(date, '{y}-{m}-{d}')
+					this.body5data.vue.queryN = parseUnixTime(date, '{y}年{m}月{d}日');
+
+				}
+				this.jpContentMap.body5 = 0
+				this.body5data.query.companyId = this.companyId
+				this.body5data.query.parkingId = this.parkingId
+				API.occupancyByDay(
+					this.body5data.query
+				).then((response) => {
+					this.body5data.data = [
+						...response.data.locksTimeList,
+
+					];
+
+					if (this.body5data.data.length == 0) {
+						this.jpContentMap.body5 = 1
+
+					} else {
+						this.jpContentMap.body5 = 2
+						//this.getbody3()
+						this.getbody5()
+					}
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			occupancyByTime(init) {
+				if (init) {
+					var date = new Date();
+
+					this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
+					this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+
+					var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+					this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+
+				}
+				this.jpContentMap.body2 = 0
+				this.body2data.query.companyId = this.companyId
+				this.body2data.query.parkingId = this.parkingId
+				API.occupancyByTime(
+					this.body2data.query
+				).then((response) => {
+					this.body2data.data = [
+						...response.data.locksTimeList,
+						//	...response.data.locksTimeList,
+					];
+
+					if (this.body2data.data.length == 0) {
+						this.jpContentMap.body2 = 1
+
+
+					} else {
+						this.jpContentMap.body2 = 2
+
+						this.getbody2()
+
+
+					}
+
+
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+
+				})
+			},
+			getbody5() {
+				// 颜色映射
+				var colorMap = [
+
+					'#FFA500',
+					'#00FF00',
+					'#F44336',
+					'#E91E63',
+					'#9C27B0',
+					'#673AB7',
+					'#3F51B5',
+					'#2196F3',
+					'#03A9F4',
+					'#00BCD4',
+					'#009688',
+					'#CDDC39',
+					'#FFEB3B',
+					'#FFC107',
+					'#FF9800',
+					'#FF5722',
+					'#795548',
+					'#607D8B'
+				];
+
+				var key = "body5echart"
+				var dataApi = this.body5data.data;
+
+				var head = 40 * (parseInt(dataApi.length / 4)) + 20
+				var body = 20 * (parseInt(dataApi.length))
+
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px((170 + head) * 2 + body)
+					})
+
+				}
+				myChart.clear()
+				var dataName = []
+				var dataTime = []
+				var series = []
+				var i = 0;
+				var isPush=false
+				dataApi.forEach(item => {
+
+					dataName.push(item.lockName)
+					var itemList = []
+					var j = 0
+					item.timeUseList.forEach(item2 => {
+
+						Object.keys(item2).forEach(key1 => {
+							console.log(item2[key1])
+							if (item2[key1]) {
+								var ob = [j, i, i]
+								itemList.push(ob)
+								isPush=true
+							} else {
+								// var ob=[j,i,i]
+								// itemList.push(ob)
+							}
+						});
+						j += 1;
+
+					})
+
+
+					var obj = {
+						tooltip: {
+							trigger: 'item',
+							axisPointer: {
+								type: 'shadow'
+							},
+							formatter: function(params) {
+								console.log(params)
+								var result = params.marker+params.name +'点<br/>' + params.seriesName  + ' 占用 ';
+								
+								return result;
+							}
+						},
+						//silent: true,
+						type: 'custom',
+						"name": item.lockName,
+						// tooltip: {
+						// 	//trigger: 'none',
+						// 	show: false
+						// },
+						itemStyle: {
+							color: colorMap[i % colorMap.length]
+						},
+						renderItem: function(params, api) {
+							var xIndex = api.value(0); // x轴索引
+							var yIndex = api.value(1); // y轴索引
+							var value = api.value(2); // 值
+
+							// 获取颜色
+							var color = colorMap[value % colorMap.length] || '#ffffff';
+
+							// 计算矩形的位置和大小
+							var x = api.coord([xIndex, yIndex])[0];
+							var y = api.coord([xIndex, yIndex])[1];
+							var width = api.size([1, 0])[0];
+							var height = api.size([0, 1])[1];
+
+							return {
+								type: 'rect',
+
+								shape: {
+									x: x - uni.upx2px(25),
+									y: y - uni.upx2px(20),
+									width: width,
+									height: 20,
+								},
+								style: {
+									fill: color
+								}
+							};
+						},
+
+					}
+					obj.data = itemList
+					series.push(obj)
+					i += 1;
+
+				})
+				dataApi[0].timeUseList.forEach(item => {
+
+					Object.keys(item).forEach(key1 => {
+						dataTime.push(key1)
+					});
+
+				})
+
+				var option = {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						}
+					},
+					grid: {
+						top: 30 + head,
+						left: -10+(isPush?0:20),
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					legend: {
+						data: dataName
+					},
+					xAxis: {
+						type: 'category',
+						data: dataTime
+					},
+					yAxis: {
+						type: 'category',
+
+					},
+					series: series
+				};
+
+
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody4() {
+				var key = "body4pie1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px(170 * 2)
+					})
+
+				}
+				myChart.clear()
+				var dataApi = this.body4data.data;
+
+				var data = []
+				var num = 0
+				var sum = 0
+				Object.keys(dataApi).forEach(key1 => {
+					num += dataApi[key1]
+				});
+				var i = 0
+				Object.keys(dataApi).forEach(key1 => {
+					var value = dataApi[key1]
+					if(value!=0){
+						
+					
+						var obj = {
+							value: value,
+							name: key1
+						}
+
+						if (num != 0) {
+							var valueInt = parseInt(value / num * 100)
+							if (valueInt == 0 && value != 0) {
+								valueInt = 1
+							}
+							sum += valueInt;
+
+							if (i == Object.keys(dataApi).length - 1) {
+								if (sum != 100) {
+									valueInt += (100 - sum)
+								}
+							}
+							obj.name += '\n' + (valueInt) + '%'
+						}
+						data.push(obj)
+					}
+					i++;
+				});
+
+
+
+				var option = {
+					
+					grid: {
+						top: 20,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: [{
+
+						type: 'pie',
+						radius: ['80%', '50%'],
+						radius: [45, 60],
+						data: data
+
+					}]
+				};
+				console.log(option)
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody3() {
+				var key = "body3bar1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px(170 * 2)
+					})
+
+				}
+				var dataApi = this.body3data.data;
+
+				myChart.clear()
+
+				var data1 = []
+				var data2 = [] //useDays
+				var i = 0
+				dataApi[0].timeUseList.forEach(item => {
+
+					Object.keys(item).forEach(key1 => {
+
+						data1.push(key1 + '点')
+						var num = 0
+
+						dataApi.forEach(item2 => {
+							num += item2.timeUseList[i][key1].useDays
+
+						})
+						data2.push(num)
+					});
+					i += 1
+
+				})
+
+				var axisLabel = {
+					rotate: 40,
+					interval: 0,
+					textStyle: {
+						color: "#333"
+					}
+				}
+				if (data1.length < 7) {
+					axisLabel = {
+						interval: 0,
+						textStyle: {
+							color: "#333"
+						},
+					}
+				} else {
+					axisLabel.interval = 0;
+				}
+				var option = {
+					xAxis: {
+						type: 'category',
+						data: data1,
+						axisLabel: axisLabel,
+					},
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						formatter: function(params) {
+							var result = params[0].name + '<br/>';
+							for (var i = 0; i < params.length; i++) {
+								result += params[i].marker+ ' ' + params[i].value + '次<br/>';
+							}
+							return result;
+						}
+					},
+					yAxis: {
+						type: 'value'
+					},
+					grid: {
+						top: 20,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: [{
+						itemStyle: {
+							color: "#5A88E5"
+						},
+						data: data2,
+						type: 'bar'
+					}]
+				};
+
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody2() {
+				var key = "body2line1"
+				var myChart = this.echartsList[key];
+				var dataApi = this.body2data.data;
+
+				var head = 20 * (parseInt(dataApi.length / 4)) + 20
+
+
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px((170 + head) * 2)
+					})
+
+				}
+				myChart.clear()
+
+				var data1 = []
+				var series = [];
+
+				dataApi.forEach(item => {
+
+					var obj = {
+						name: item.lockName,
+						//areaStyle: {},
+						// itemStyle: {
+						// 	color: "#BBD4FB"
+						// },
+						label: {
+							show: true,
+							position: 'top',
+							//	color: "#307AF6"
+						},
+						data: [],
+						type: 'line'
+					}
+					if (dataApi.length == 1) {
+						obj.label.color = "#307AF6"
+						obj.areaStyle = {}
+						obj.itemStyle = {
+							color: "#BBD4FB"
+						}
+					}
+
+					item.timeUseList.forEach(item2 => {
+						Object.keys(item2).forEach(key1 => {
+
+							obj.data.push(item2[key1].useRate)
+						});
+					})
+					series.push(obj)
+				})
+				dataApi[0].timeUseList.forEach(item => {
+
+					Object.keys(item).forEach(key1 => {
+						data1.push(key1)
+
+					});
+
+				})
+
+				var axisLabel = {
+					rotate: 40,
+					interval: 0,
+					textStyle: {
+						color: "#333"
+					}
+				}
+				if (data1.length < 7) {
+					axisLabel = {
+						interval: 0,
+						textStyle: {
+							color: "#333"
+						},
+					}
+				} else {
+					axisLabel.interval = 0;
+				}
+				var option = {
+					legend: {},
+					xAxis: {
+						type: 'category',
+						data: data1,
+						axisLabel: axisLabel,
+					},
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+
+						formatter: function(params) {
+							var result = params[0].name + '点<br/>';
+							for (var i = 0; i < params.length; i++) {
+								result += params[i].marker+params[i].seriesName + ': ' + params[i].value + '%<br/>';
+							}
+							return result;
+						}
+					},
+					yAxis: {
+						type: 'value'
+					},
+					grid: {
+						top: (20 + head),
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: series
+				};
+
+
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody1pie1() {
+				var img = require("@/assets/img/index/pie1-1.svg")
+				var key = "body1pie1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(88),
+						height: uni.upx2px(88)
+					})
+
+				}
+				myChart.clear()
+				var option = {
+
+					series: [{
+						silent: true,
+						type: 'pie',
+						radius: ['70%', '100%'],
+						label: {
+							show: false,
+						},
+
+						data: [{
+								value: this.body1data.data.useNum,
+								itemStyle: {
+									color: '#AAAAAA'
+								}
+							},
+							{
+								value: this.body1data.data.idleNum,
+								itemStyle: {
+									color: '#53B56B'
+								}
+							}
+						]
+					}],
+					grid: {
+						top: 0,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					graphic: [{
+						type: 'image',
+						id: 'logo',
+						left: 'center',
+						top: 'center',
+						style: {
+							image: img, // 图片路径
+							width: uni.upx2px(40),
+							height: uni.upx2px(40)
+						}
+					}]
+				}
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody1pie2() {
+				var img = require("@/assets/img/index/pie1-2.svg")
+
+				var key = "body1pie2"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(88),
+						height: uni.upx2px(88)
+					})
+
+				}
+				myChart.clear()
+				var option = {
+
+					series: [{
+						silent: true,
+						type: 'pie',
+						radius: ['70%', '100%'],
+						label: {
+							show: false,
+						},
+
+						data: [{
+								value: this.body1data.data.loseNum,
+								itemStyle: {
+									color: '#AAAAAA'
+								}
+							},
+							{
+								value: this.body1data.data.normalNum,
+								itemStyle: {
+									color: '#53B56B'
+								}
+							},
+							{
+								value: this.body1data.data.errorNum,
+								itemStyle: {
+									color: '#EF8132'
+								}
+							}
+							//, {
+							// 	value: 735,
+							// 	itemStyle: {
+							// 		color: '#DC4441'
+							// 	}
+							// }
+						]
+					}],
+					grid: {
+						top: 0,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					graphic: [{
+						type: 'image',
+						id: 'logo',
+						left: 'center',
+						top: 'center',
+						style: {
+							image: img, // 图片路径
+							width: uni.upx2px(40),
+							height: uni.upx2px(40)
+						}
+					}]
+				}
+
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody1pie3() {
+				var img = require("@/assets/img/index/pie1-3.svg")
+
+				var key = "body1pie3"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(88),
+						height: uni.upx2px(88)
+					})
+
+				}
+				myChart.clear()
+				var option = {
+
+					series: [{
+						type: 'pie',
+						silent: true, // 禁用交互效果
+
+						radius: ['70%', '100%'],
+						label: {
+							show: false,
+						},
+
+						data: [{
+								value: 735,
+								itemStyle: {
+									color: '#53B56B'
+								}
+							},
+							{
+								value: 735,
+								itemStyle: {
+									color: '#EF8375'
+								}
+							},
+							{
+								value: 735,
+								itemStyle: {
+									color: '#307AF6'
+								}
+							}
+						]
+					}],
+					grid: {
+						top: 0,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					graphic: [{
+						type: 'image',
+						id: 'logo',
+						left: 'center',
+						top: 'center',
+						style: {
+							image: img, // 图片路径
+							width: uni.upx2px(40),
+							height: uni.upx2px(40)
+						}
+					}]
+				}
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+
+			getfindByOpenId() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				API.findByOpenId({
+					openId: this.jphelp.getOpenId(),
+				}).then((response) => {
+
+					uni.hideLoading();
+					this.isReady = true;
+					this.loginset(response)
+					try {
+						this.init()
+					} catch (e) {
+
+						uni.showToast({
+							title: e,
+							icon: "none"
+						})
+					}
+
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+					uni.redirectTo({
+						url: '/pages/login/login'
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.color307AF6 {
+		color: #307AF6
+	}
+
+	.color53B56B {
+		color: #53B56B
+	}
+
+	.colorAAAAAA {
+		color: #AAAAAA
+	}
+
+	.colorEF8132 {
+		color: #EF8132
+	}
+
+	.colorDC4441 {
+		color: #DC4441
+	}
+
+	.colorEF8375 {
+		color: #EF8375
+	}
+
+	.body1pie-table {
+		color: rgba(51, 51, 51, 1);
+		font-size: 32rpx;
+		font-weight: bold;
+
+		.tr {
+			.td1 {
+				padding-right: 24rpx;
+			}
+
+			display: flex;
+			margin-bottom: 40rpx;
+
+			.td2 {
+
+				width: 100%;
+
+				.td3 {
+					display: flex;
+
+					.td4 {
+						width: 120px;
+					}
+				}
+			}
+		}
+
+		// td{
+		// 	padding-right: 24rpx;
+
+		// }
+		.body1pie {}
+
+		.body1pie-num {
+			margin: 0 8rpx;
+		}
+	}
+
+	// 导航栏
+	.navbar {
+
+		box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.15);
+		background-color: rgba(22, 119, 255, 1);
+		color: #fff;
+		line-height: 88rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 32rpx;
+		color: rgba(255, 255, 255, 1);
+		font-size: 36rpx;
+		position: fixed;
+		left: 0;
+		right: 0;
+		top: 0;
+		z-index: 999999;
+		font-weight: bold;
+
+	}
+
+	.main {
+		border-radius: 16px 16px 0px 0px;
+		background: linear-gradient(180deg, rgba(242, 244, 246, 1) 61%, rgba(255, 255, 255, 0) 100%);
+		margin-top: -24rpx;
+		padding: 32rpx;
+
+		.statistics {
+			border-radius: 8px;
+			background-color: rgba(255, 255, 255, 1);
+			box-shadow: 0px 1px 6px 0px rgba(0, 59, 142, 0.05);
+			margin-bottom: 24rpx;
+			padding: 40rpx;
+
+			.title {
+				display: flex;
+				align-items: center;
+				margin-bottom: 32rpx;
+				font-weight: bold;
+
+				.img {
+					width: 36rpx;
+					height: 36rpx;
+					vertical-align: middle;
+					border-radius: 999px;
+
+				}
+
+				.change {
+					display: flex;
+					align-items: center;
+
+					.change-img {
+						width: 32rpx;
+						height: 32rpx;
+						vertical-align: middle;
+					}
+
+					text {
+
+						margin-left: 8rpx;
+					}
+				}
+
+
+				.text {
+					color: rgba(16, 16, 16, 1);
+					font-size: 36rpx;
+					margin-left: 16rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					width: 100%;
+
+					.tag {
+						border-radius: 4px;
+						border: 1px solid rgba(187, 187, 187, 1);
+						color: rgba(51, 51, 51, 1);
+
+						font-size: 24rpx;
+						padding: 1px 8rpx;
+						margin-left: 8rpx;
+					}
+
+				}
+
+				.change {
+					margin-left: 16rpx;
+					font-size: 24rpx;
+					color: #838383;
+
+				}
+
+				.check-all {
+					margin-left: auto;
+					color: rgba(131, 131, 131, 1);
+					font-size: 24rpx;
+					font-weight: 400;
+				}
+			}
+		}
+
+		.statistics-end {
+			padding-bottom: 0;
+		}
+	}
+
+	.tabs-box2 {
+		margin-bottom: 8rpx;
+		padding-right: 16rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		.tabs-box-other {
+			padding-bottom: 12rpx;
+
+		}
+	}
+
+	.tabs-box {
+		padding: 42rpx 0;
+		margin-top: 66rpx;
+		padding-right: 32rpx;
+		background-color: rgba(22, 119, 255, 1);
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		.tabs {
+			width: 97%;
+		}
+
+		.more {
+			padding-right: 12rpx;
+		}
+
+		.tabs-box-other {
+			padding-bottom: 12rpx;
+			height: 80rpx;
+			line-height: 70rpx;
+			font-size: 30rpx;
+			color: rgb(255, 255, 255);
+		}
+
+	}
+
+	.body6main {
+		.line {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.abnormal-item:last-of-type {
+			border-bottom: none !important;
+			padding-bottom: 0;
+		}
+
+		.abnormal-item {
+			width: 100%;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 16rpx;
+			border-bottom: 1px solid rgba(245, 245, 245, 1);
+
+
+			.item-title {
+				.level {
+					color: #fff;
+
+					border-radius: 8rpx;
+					font-weight: 400;
+					padding: 4rpx 8rpx;
+					font-size: 22rpx;
+					margin-right: 2px;
+				}
+
+				.level1 {
+					background: red;
+				}
+
+				.level2 {
+					background-color: rgba(255, 123, 0, 1);
+				}
+
+				color: rgba(51, 51, 51, 1);
+				width: 100%;
+
+				.img {
+					width: 32rpx;
+					height: 32rpx;
+					margin-right: 8rpx;
+				}
+
+				.name {
+					color: rgba(51, 51, 51, 1);
+					font-weight: bold;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+
+				.date {
+					color: rgba(119, 119, 119, 1);
+					font-size: 24rpx;
+				}
+			}
+
+			.item-value {
+				text-align: right;
+				display: flex;
+				align-items: center;
+
+				.more {
+					margin-left: 8rpx;
+				}
+
+				.value1 {
+					font-weight: bold;
+					color: rgba(51, 51, 51, 1);
+				}
+
+				.value2 {
+					color: rgba(119, 119, 119, 1);
+					font-size: 24rpx;
+				}
+			}
+		}
+	}
+
+	.body7main {
+		border-radius: 4px;
+		background-color: rgba(245, 245, 245, 1);
+		padding: 32rpx;
+
+		.line {
+			display: flex;
+			display: flex;
+			justify-content: space-between;
+			margin-bottom: 24rpx;
+			.goto{
+				    display: flex;
+				    align-items: center;
+			}
+			.item-body{
+				font-size: 24rpx;
+			}
+			
+			.item-title {
+				color: rgba(51, 51, 51, 1);
+				font-size: 28rpx;
+				    display: flex;
+				    align-items: center;
+					.item-name{
+						margin-right: 8rpx;
+						font-size: 32rpx;
+						font-weight: bold;
+					}
+			}
+			.statusN{
+				border-radius: 4px;
+				font-size: 24rpx;
+				padding: 2rpx 8rpx;
+				margin-right: 8rpx;
+			}
+			.statusN1 {
+				
+				color: rgba(0,185,98,1);
+				border: 1px solid rgba(0,185,98,1);
+			
+			}
+			
+			.statusN0 {
+				color: rgba(51,51,51,1);
+				border: 1px solid rgba(119,119,119,1);
+			
+			}
+			.item-tags {
+				display: flex;
+
+				.tag {
+					border-radius: 4px;
+					white-space: pre;
+					background-color: rgba(39, 177, 72, 1);
+					color: rgba(255, 255, 255, 1);
+					font-size: 20rpx;
+					padding: 2rpx 8rpx;
+					margin-right: 8rpx;
+				}
+
+				.tag1 {
+					background-color: rgba(22, 119, 255, 1);
+				}
+
+				.tag2 {
+					background-color: rgba(129, 97, 255, 1);
+				}
+
+				
+
+				.lockStatus {
+
+					background-color: rgba(153, 153, 153, 1);
+				}
+
+				.lockStatus2 {
+					background-color: #03A9F4
+				}
+			}
+		}
+	}
+	
+	
+	.body8main{
+		
+		.line{
+			    display: flex;
+			    justify-content: space-between;
+			    align-items: center;
+				background: #fff;
+				padding:16rpx 0rpx;
+				border-top: 1px solid rgba(232,232,232,1);
+				.data{
+					.view1{
+						color: rgba(16,16,16,1);
+						font-size: 32rpx;
+						font-weight: bold;
+					}
+					.view3{
+						color: rgba(119,119,119,1);
+						font-size: 28rpx;
+					}
+				}
+				.goto{
+					display: flex;
+					font-size: 32rpx;
+	
+				}
+				.status1{
+					color:#FF5100 
+				}
+				.status2{
+					color: rgba(22,119,255,1);
+	 
+				}
+			
+		}
+		.line:first-child{
+			border-top: 0px ;
+			    padding-top: 0px;
+		}
+	}
+</style>

+ 198 - 18
pages/index/index.vue

@@ -26,7 +26,7 @@
 			</view>
 		</view>
 		<view class="main_navigation panel">
-			<view class="item-na">
+			<view class="item-na" @click="gotoUrl('/pages/task/addTask')">
 				<view class="na-img">
 					<image class="img" src="@/assets/img/index/na-1.png" mode=""></image>
 				</view>
@@ -133,7 +133,107 @@
 				</view>
 			</view>
 		</view>
-		<view class="main_list1">
+		<view class="main_list1 panel">
+			<view class="top-main">
+				<view class="title-main">
+					故障记录
+
+
+				</view>
+				<view class="goto-main">
+					查看详情
+					<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+				</view>
+			</view>
+			<view class="list">
+				<view class="item">
+					<view class="icon">
+						<image class="img" src="@/assets/img/taskstatus/status1.png" mode=""></image>
+					</view>
+					<view class="body">
+						<view class="line1">
+							<view class="title">
+								杆位异常
+
+							</view>
+							<view class="status status1">
+								未认领
+
+							</view>
+						</view>
+						<view class="line2">
+							<view class="value">
+								2025-02-14 09:00:01
+
+							</view>
+							<view class="value">
+								荆鹏软件园
+
+							</view>
+						</view>
+
+					</view>
+					<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+				</view>
+				<view class="item">
+					<view class="icon">
+						<image class="img" src="@/assets/img/taskstatus/status2.png" mode=""></image>
+					</view>
+					<view class="body">
+						<view class="line1">
+							<view class="title">
+								杆位异常
+
+							</view>
+							<view class="status status2">
+								已认领
+
+							</view>
+						</view>
+						<view class="line2">
+							<view class="value">
+								2025-02-14 09:00:01
+
+							</view>
+							<view class="value">
+								荆鹏软件园
+
+							</view>
+						</view>
+
+					</view>
+					<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+				</view>
+				<view class="item">
+					<view class="icon">
+						<image class="img" src="@/assets/img/taskstatus/status3.png" mode=""></image>
+					</view>
+					<view class="body">
+						<view class="line1">
+							<view class="title">
+								杆位异常
+
+							</view>
+							<view class="status status3">
+								已处理
+
+							</view>
+						</view>
+						<view class="line2">
+							<view class="value">
+								2025-02-14 09:00:01
+
+							</view>
+							<view class="value">
+								荆鹏软件园
+
+							</view>
+						</view>
+
+					</view>
+					<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+				</view>
+			</view>
 
 		</view>
 
@@ -323,6 +423,7 @@
 		.body {
 			display: flex;
 			padding: 24rpx;
+
 			.item-list {
 				margin-left: 48rpx;
 				display: flex;
@@ -331,33 +432,39 @@
 
 				.item-status {
 					width: 50%;
-					.num{
-						color: rgba(51,51,51,1);
+
+					.num {
+						color: rgba(51, 51, 51, 1);
 						font-size: 36rpx;
 						font-weight: bold;
 					}
 				}
-				.statusN{
-					    display: flex
-					;
-					    align-items: center;
-					.statusC{
+
+				.statusN {
+					display: flex;
+					align-items: center;
+
+					.statusC {
 						margin-right: 8rpx;
 						width: 16rpx;
 						height: 16rpx;
-						background-color: rgba(153,153,153,1);
+						background-color: rgba(153, 153, 153, 1);
 					}
-					.status1{
-						background-color: rgba(0,185,98,1);
+
+					.status1 {
+						background-color: rgba(0, 185, 98, 1);
 					}
-					.status2{
-						background-color: rgba(255,123,0,1);
+
+					.status2 {
+						background-color: rgba(255, 123, 0, 1);
 					}
-					.status3{
-						background-color: rgba(153,153,153,1);
+
+					.status3 {
+						background-color: rgba(153, 153, 153, 1);
 					}
-					.status4{
-						background-color: rgba(129,97,255,1);
+
+					.status4 {
+						background-color: rgba(129, 97, 255, 1);
 					}
 				}
 
@@ -367,5 +474,78 @@
 
 	.main_list1 {
 		margin-top: 24rpx;
+		padding: 24rpx;
+
+		.list {
+			padding: 24rpx 0;
+
+			.item {
+				display: flex;
+				border-bottom: 1px solid rgba(232, 232, 232, 1);
+				padding: 6rpx 0;
+				margin: 6rpx 0;
+
+				.img {
+					width: 72rpx;
+					height: 72rpx;
+
+				}
+
+				.body {
+					margin: 0 12rpx;
+					width: 100%;
+
+					.line1,
+					.line2 {
+
+						display: flex;
+						justify-content: space-between;
+					}
+					.line2 {
+						color: rgba(119,119,119,1);
+						font-size: 24rpx;
+					}
+					.line1 {
+						.title {
+							color: rgba(51, 51, 51, 1);
+							font-size: 28rpx;
+						}
+
+						.status {
+							border: 1px solid rgba(255, 61, 0, 1);
+							font-size: 24rpx;
+
+							padding: 2rpx 8rpx;
+							border-radius: 4px;
+
+						}
+
+						.status1 {
+							border: 1px solid #007aff;
+							color: #007aff;
+						}
+
+						.status2 {
+							border: 1px solid #ff9900;
+							color: #ff9900;
+						}
+
+						.status3 {
+							border: 1px solid #19be6b;
+							color: #19be6b;
+						}
+
+						.status4 {
+							border: 1px solid rgba(255, 61, 0, 1);
+							color: rgba(255, 61, 0, 1);
+						}
+					}
+				}
+			}
+
+			// .item:not(:last-child) {
+			//   border-bottom:1px solid rgba(232,232,232,1);
+			// }
+		}
 	}
 </style>

+ 1812 - 0
pages/lockTab/dataLock.vue

@@ -0,0 +1,1812 @@
+<template>
+	<view>
+		<u-navbar :title="title" :backIconColor="'#ffffff'" title-color="#ffffff"
+			:background="backgroundObj"></u-navbar>
+		<view class="gradient-header">
+			<view class="jpback">
+
+			</view>
+		</view>
+		<u-picker title="日期选择" :maskCloseAble="true" v-model="body0data.tabsFrom.show" :defaultTime="body0data.tabsFrom.showIndex+'-1'" 
+			mode="time" :params="body0data.tabsFrom.params"  @confirm="selector2confirm" @cancel="selector2cancel"
+			>
+		</u-picker>
+		
+		<view class="main">
+			<view class="statistics ">
+				<view class="data1">
+					<view class="item">
+						<view class="line">
+							<view class="name">
+								{{info.name}}
+							</view>
+							<view class="item-tags">
+								<view class="tag tag1" :class="'typeN typeN'+info.type">
+									{{info.typeN}}
+							
+								</view>
+								<!-- <view class="tag" :class="'statusN statusN'+info.status">
+									{{info.statusN}}
+							
+								</view>
+								<view class="tag" :class="'lockStatusN lockStatusN'+info.lockStatus">
+									{{info.lockStatusN}}
+								</view> -->
+							</view>
+						</view>
+						<view class="line">
+							编号:{{info.lockNo}}
+						</view>
+						<view class="line" style="    color: #909399;">
+							更新时间:{{info.lastOnlineTime}}
+						</view>
+					</view>
+					<view class="value" v-if="0">
+						<u-button type="primary" size="mini" shape="circle">
+							<img class="img" src="@/assets/img/button/lock.svg" alt="">
+							降锁
+						</u-button>
+					</view>
+				</view>
+				
+				<view class="top-span">
+					<view class="item-span">
+						<img src="@/assets/img/topspan/span1.png">
+						<span>车位</span>
+						<span v-if="info.parkingStatus==1" style="color: #1677FF;" >有车</span>
+						<span v-else-if="info.parkingStatus==0" style="color: #00B962;" >无车</span>
+					</view>
+					<view class="item-span">
+						<img src="@/assets/img/topspan/span2.png">
+						<span>地锁</span>
+						<span  style="color: red;"
+						v-if="info.lockStatus==4||info.lockStatus==0">
+						错误</span>
+						<span v-else-if="info.lockStatus==1" style="color: #1677FF;"  >升起</span>
+						<span v-else-if="info.lockStatus==2" style="color: #00B962;"  >降落</span>
+						<span v-else   >其他</span>
+						
+					</view>
+					
+					<view class="item-span">
+						<img src="@/assets/img/topspan/span3.png">
+						<span>电压</span>
+						<span v-if="info.batteryLevel">{{info.batteryLevel}}V</span>
+						<span v-else>未知</span>
+					</view>
+					<view class="item-span">
+						<img src="@/assets/img/topspan/span4.png">
+						<span>网络</span>
+						
+						<span v-if="info.status==1" style="color: #00B962;" >在线</span>
+						<span v-else-if="info.status==0" style="color: red" >离线</span>
+						
+						
+					</view>
+					
+					<view class="item-span">
+						<img src="@/assets/img/topspan/span5.png">
+						<span>雷达</span>
+						
+						
+						<span v-if="info.radarStatus==0" style="color: #00B962;" >正常</span>
+						<span v-else-if="info.radarStatus==1" style="color: red" >故障</span>
+						
+						
+					</view>
+				</view>
+			</view>
+			<view class=" no_statistics">
+				<view class="data2">
+					<view class="top">
+						<view class="item">
+							<view class="name">
+								停车时长
+							</view>
+							<view class="value" v-html="durationShow()">
+								
+							</view>
+						</view>
+						<view class="item">
+							<view class="name">
+								使用率
+							</view>
+							<view class="value" v-if="lockUsageRateData&&lockUsageRateData.usageRate">
+								{{lockUsageRateData.usageRate=='∞'?'/':lockUsageRateData.usageRate+'%'}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="name">
+								异常次数
+							</view>
+							<view class="value">
+								0
+							</view>
+						</view>
+					</view>
+					<view class="body">
+						<u-radio-group v-model="radiovalue" @change="radioGroupChange">
+							<u-radio @change="radioChange" v-for="(item, index) in radiolist" :key="index"
+								:name="item.value">
+								{{item.name}}
+							</u-radio>
+						</u-radio-group>
+					</view>
+				</view>
+			</view>
+			
+			<u-picker v-model="body2data.vue.show" :params="body2data.vue.params" :default-time="body2data.query.startTime"
+				@confirm="body2dataconfirm" mode="time"></u-picker>
+			
+			
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>车位平均占用率(%)</view>
+						<view class="tag" @click="body2data.vue.show=true">{{body2data.vue.queryN}}<u-icon
+								name="arrow-down"></u-icon></view>
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body2">
+						<view class="body2lineChart">
+
+							<view id="body2line1" class="body2line">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics " v-if="0">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>地锁历史异常状态</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body1">
+						<view class="body1pieChart">
+
+							<view id="body1pie1" class="body1pie">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>高频使用时段分布</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body3">
+						<view class="body3barChart">
+
+							<view id="body3bar1" class="body3bar">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>用户停留时长分群特征</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body4">
+						<view class="body4pieChart">
+
+							<view id="body4pie1" class="body4pie">
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+
+			<view class="statistics " v-if="0">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>高频使用用户TOP</view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body5">
+						<view class="body5data">
+							<view class="line">
+								<view class="data">
+									<view class="item">
+										王二
+									</view>
+									<view class="value">
+										鄂DDT1268
+
+									</view>
+									<view class="value">
+										28次
+
+									</view>
+								</view>
+								<view class="goto">
+									<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+								</view>
+							</view>
+							<view class="line">
+								<view class="data">
+									<view class="item">
+										王三
+									</view>
+									<view class="value">
+										鄂DDT1268
+
+									</view>
+									<view class="value">
+										8次
+
+									</view>
+								</view>
+								<view class="goto">
+									<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+								</view>
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+			<!-- end-->
+
+			<view class="statistics " v-if="0">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>白名单用户清单</view>
+						<view class="check-all">查看全部<u-icon name="arrow-right"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body7">
+						<view class="body7data">
+							<view class="line">
+
+								<view class="value">
+									用户姓名
+								</view>
+								<view class="value">
+									车主身份
+
+								</view>
+								<view class="value">
+									使用次数
+
+								</view>
+
+							</view>
+							<view class="line">
+
+								<view class="value">
+									孙培军
+								</view>
+								<view class="value">
+									车位所有人
+
+								</view>
+								<view class="value">
+									22
+
+								</view>
+
+							</view>
+							<view class="line">
+
+								<view class="value">
+									刘洋
+								</view>
+								<view class="value">
+									白名单用户
+
+								</view>
+								<view class="value">
+									11
+
+								</view>
+
+							</view>
+
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+			<!-- end-->
+			<view class="statistics " v-if="0" >
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>车位异常记录</view>
+
+						<view class="check-all">查看全部<u-icon name="arrow-right"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody" >
+					<jpContent :status="jpContentMap.body6">
+						<view class="body6main">
+							<view class="line" v-for="(item,index) in abnormalRecordsList" :key="index">
+								<view class="abnormal-item">
+									<!-- @click="gotoUrl('/pages/abnormal/abnormalAlarmDetails?id='+item.id)"
+								 -->
+									<view class="item-title">
+
+										<view class="name">
+											<span v-if="item.level==1" class="level level1 ">一级</span>
+											<span v-if="item.level==2" class="level level2">二级</span>
+
+											{{item.content}}
+										</view>
+										<view class="date"
+											style="display: flex;    justify-content: space-between;margin-top: 4rpx;">
+											<view>{{item.title}}</view>
+											<view>{{item.createTime}}</view>
+
+										</view>
+									</view>
+
+								</view>
+								<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+			<!-- end-->
+			
+			<view class="body8data-popup">
+			<u-popup v-model="body8data.popup" mode="bottom" height="80%"  border-radius="12">
+				<view class="content">
+					<view class="headline">
+						地锁信息
+					</view>
+					<view class="infos">
+						<view class="item">
+							<view class="item-title">
+								地锁名称
+							</view>
+							<view class="item-value">
+								{{info.name}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								地锁管理者
+							</view>
+							<view class="item-value">
+								{{info.administrator}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								车位类型
+							</view>
+							<view class="item-value">
+								{{info.typeN}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								地锁状态
+							</view>
+							<view class="item-value">
+								{{info.lockStatusN}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								地锁型号
+							</view>
+							<view class="item-value">
+								{{info.model}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								出厂编号
+							</view>
+							<view class="item-value">
+								<span>{{info.factoryNumber}}</span>
+								
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								固件版号
+							</view>
+							<view class="item-value">
+								{{info.solidVersion}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								防护等级
+							</view>
+							<view class="item-value">
+								{{info.protectionGrade}}
+							</view>
+						</view>
+						
+						<view class="item">
+							<view class="item-title">
+								生产日期
+							</view>
+							<view class="item-value">
+								{{info.manufactureDate}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								标准依据
+							</view>
+							<view class="item-value">
+								{{info.enablingTime}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								联网卡号
+							</view>
+							<view class="item-value">
+								{{info.standardBasis}}
+							</view>
+						</view>
+						<view class="item" v-if="info.tariffStandard">
+							<view class="item-title">
+								资费标准
+							</view>
+							<view class="item-value">
+								{{info.tariffStandard}}元/月
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								地锁启动时间
+							</view>
+							<view class="item-value">
+								{{info.activationTime}}
+							</view>
+						</view>
+						<view class="item">
+							<view class="item-title">
+								地锁质保期
+							</view>
+							<view class="item-value">
+								{{info.shelfLife}}年
+							</view>
+						</view>
+						
+						
+					
+					</view>
+					<button class="get" @click="body8data.popup=false">知道了</button>
+				</view>
+			</u-popup>
+			</view>
+			<view class="statistics ">
+				<view class="title">
+					<view class="icon">
+						<image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
+					</view>
+					<view class="text">
+						<view>地锁信息</view>
+
+						<view class="check-all" @click="body8data.popup=true" >查看全部<u-icon name="arrow-right"></u-icon></view>
+
+					</view>
+
+				</view>
+
+				<view class="contentBody">
+					<jpContent :status="jpContentMap.body8">
+						<view class="body8main">
+							<view class="line">
+								<view class="value">
+									地锁型号
+
+								</view>
+								<view class="value">
+									出厂编号
+
+								</view>
+								<view class="value">
+									固件版号
+
+
+								</view>
+
+
+							</view>
+							<view class="line">
+								<view class="value">
+									{{info.model}}
+
+								</view>
+								<view class="value">
+									{{info.factoryNumber}}
+
+
+								</view>
+								<view class="value">
+									{{info.solidVersion}}
+
+
+								</view>
+
+
+							</view>
+
+						</view>
+
+
+
+					</jpContent>
+				</view>
+			</view>
+			<!-- end-->
+			<u-divider border-color="#CFD2D5">已经到底了</u-divider>
+
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import jpContent from '@/components/JPcontent.vue'
+	import * as echarts from 'echarts';
+	import * as API from '@/apis/pagejs/deviceTab.js'
+	import * as API_index from '@/apis/pagejs/index.js'
+	import {
+		parseUnixTime,
+		beforeTimeStamp,
+		newDate
+	} from '@/apis/utils'
+	
+	export default {
+		components: {
+
+			jpContent
+		},
+		data() {
+			return {
+				id:"",
+				info:{},
+				echartsList: {},
+				lockUsageRateData:{},
+				body2data: {
+					query: {},
+					vue: {
+						queryN: "",
+						show: false,
+						params: {
+							year: true,
+							month: true,
+							day: false,
+							hour: false,
+							minute: false,
+							second: false
+						}
+					},
+					data: {}
+				},
+				body0data: {
+					query: {},
+					data: {},
+					tabsFrom:{
+						show:false,
+						showIndex:"",
+						params:{
+							year: true,
+							month: true,
+							day: false,
+							hour: false,
+							minute: false,
+							second: false
+						}
+					}
+				
+				},
+				body4data: {
+					query: {},
+					data: {}
+				},
+				body8data: {
+					query: {},
+					data: {},
+					popup:false,
+				},
+				body3data: {
+					query: {},
+					data: {}
+				},
+				jpContentMap: {
+					body1: 2,
+					body2: 2,
+					body3: 2,
+					body4: 2,
+					body5: 2,
+					body6: 2,
+					body7: 2,
+					body8: 2,
+					body9: 2,
+					body10: 2,
+				},
+				title: "",
+				backgroundObj: {
+					background: '#307AF6'
+				},
+				radiovalue: "1",
+				radiolist: [{
+						name: '上月',
+						value: "3"
+					},
+					{
+						name: '当月',
+						value: "1"
+					},
+					{
+						name: '今日',
+						value: "2"
+					}, {
+						name: '当年',
+
+						value: "4"
+					}, {
+						name: '合计',
+
+						value: "5"
+					},
+					{
+						name: '指定月份',
+						value: "0"
+					}
+				],
+				abnormalRecordsList: [{
+						level: 1,
+						content: "1111111",
+						title: "11",
+						createTime: "123:123"
+					},
+					{
+						level: 2,
+						content: "1111111",
+						title: "11",
+						createTime: "123:123"
+					}
+				],
+			};
+		},
+		onLoad(op) {
+			if(op.id){
+				this.id=op.id
+				this.init();
+			}
+			this.body0data.tabsFrom.showIndex=new Date().getFullYear()+'-'+(new Date().getMonth()+1)
+		},
+		onReady() {
+			// if(this.id){
+				
+			// }
+			
+		},
+		methods: {
+			
+			durationShow(){
+				if(this.lockUsageRateData.duration){
+					var m=this.lockUsageRateData.duration%60
+					var h=parseInt(this.lockUsageRateData.duration/60)
+					if(h>0){
+						if(h>24){
+							var day=parseInt(h/24)
+							h=h%24
+							var px= uni.upx2px(12*2)
+							if(day>100){
+								return `${day}<span style='font-size: ${px}px;'>天</span>`
+							}else{
+								return `${day}<span style='font-size: ${px}px;'>天</span>${h}h`
+							}
+							
+						}else{
+							return `${h}h${m}m`
+						}
+						
+					}else{
+						return `${m}m`
+					}
+				}else{
+					return '0m'
+				}
+			},
+			radioChange(e) {
+				// console.log(e);
+			},
+			// 选中任一radio时,由radio-group触发
+			selector2confirm(e){
+				var time=e.year + "-" + e.month
+				this.radiolist[5].name=e.year + "年" + e.month+"月"
+				this.body0data.tabsFrom.showIndex=time
+				this.getLockUsageRate()
+			},
+			selector2cancel(){
+				this.radiovalue= "1"
+				this.radiolist[5].name="指定月份"
+				this.getLockUsageRate()
+			},
+			radioGroupChange(e) {
+				 console.log(e);
+				if(e==0){
+					this.body0data.tabsFrom.show=true
+				}else{
+					this.radiolist[5].name="指定月份"
+					this.getLockUsageRate()
+				}
+				
+			},
+			init() {
+				this.getInfo()
+				this.getLockUsageRate()
+				this.occupancyByTime(1)
+				//this.getbody1()
+				//this.getbody2()
+				this.occupancyByTimeBar(1);
+				//this.getbody3()
+				//this.getbody4()
+				this.durationDistribution()
+			},
+			occupancyByTime(init) {
+				if (init) {
+					var date = new Date();
+			
+					this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
+					this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+			
+					var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+					this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+			
+				}
+				this.jpContentMap.body2 = 0
+				this.body2data.query.floorId = this.id
+				
+				API_index.occupancyByTime(
+					this.body2data.query
+				).then((response) => {
+					this.body2data.data = [
+						...response.data.locksTimeList,
+						//	...response.data.locksTimeList,
+					];
+			
+					if (this.body2data.data.length == 0) {
+						this.jpContentMap.body2 = 1
+			
+			
+					} else {
+						this.jpContentMap.body2 = 2
+			
+						this.getbody2()
+			
+			
+					}
+			
+			
+			
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+			
+				})
+			},
+			body2dataconfirm(e) {
+			
+				var date = new Date(e.year + "-" + e.month + "-1");
+				this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
+				this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+			
+				var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+				this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+			
+				this.occupancyByTime()
+			},
+			getLockUsageRate(){
+				var obj = {
+					floorId: this.id,
+					queryType:this.radiovalue
+				}
+				if(this.radiovalue==0){
+					obj.queryMonth=this.body0data.tabsFrom.showIndex
+				}
+				API.lockUsageRate(obj).then((res) => {
+					this.lockUsageRateData=res.data
+					
+				}).catch(error => {
+							
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			},
+			durationDistribution() {
+				this.jpContentMap.body4 = 0
+			
+				var date = new Date();
+				//test
+				//this.body4data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+			
+				var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+			//	this.body4data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+			
+			
+				this.body4data.query.floorId = this.id
+				API_index.durationDistribution(
+					this.body4data.query
+				).then((response) => {
+					this.body4data.data = response.data.distribution;
+			
+					if (this.body4data.data.length == 0) {
+						this.jpContentMap.body4 = 1
+			
+					} else {
+						this.jpContentMap.body4 = 2
+						//this.getbody3()
+						this.getbody4()
+					}
+			
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+			
+				})
+			},
+			getInfo(){
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+				var obj = {
+					id: this.id
+				}
+				this.jpContentMap.body8	=0		
+				API.lockDetails(obj).then((res) => {
+					this.info = res.data.floorlockInfo
+					this.title	=this.info.parkingName
+					uni.hideLoading();
+					this.jpContentMap.body8	=2
+					//this.getWhiteList()
+				}).catch(error => {
+							
+					uni.hideLoading();
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			},
+			getbody1() {
+				var key = "body1pie1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px(170 * 2)
+					})
+
+				}
+				myChart.clear()
+
+
+				var option = {
+
+					grid: {
+						top: 20,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: [{
+
+						type: 'pie',
+						radius: ['80%', '50%'],
+						radius: [35, 50],
+						data: [{
+								itemStyle: {
+									color: "#EB3C31"
+								},
+								value: 1048,
+								name: '0.5小时\n20%',
+
+							},
+							{
+								itemStyle: {
+									color: "#EF8132"
+								},
+
+								value: 735,
+								name: '2小时\n10%'
+							},
+							{
+								itemStyle: {
+									color: "#929292"
+								},
+								value: 580,
+								name: '2-6小时\n30%'
+							},
+
+
+						]
+
+					}]
+				};
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody4() {
+				var key = "body4pie1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px(170 * 2)
+					})
+
+				}
+				myChart.clear()
+				var dataApi = this.body4data.data;
+				
+				var data = []
+				var num = 0
+				var sum = 0
+				Object.keys(dataApi).forEach(key1 => {
+					num += dataApi[key1]
+				});
+				var i = 0
+				Object.keys(dataApi).forEach(key1 => {
+					var value = dataApi[key1]
+					if(value!=0){
+						var obj = {
+							value: value,
+							name: key1
+						}
+					
+						if (num != 0) {
+							var valueInt = parseInt(value / num * 100)
+							if (valueInt == 0 && value != 0) {
+								valueInt = 1
+							}
+							sum += valueInt;
+					
+							if (i == Object.keys(dataApi).length - 1) {
+								if (sum != 100) {
+									valueInt += (100 - sum)
+								}
+							}
+							obj.name += '\n' + (valueInt) + '%'
+						}
+						data.push(obj)
+					}
+					i++;
+				});
+
+				var option = {
+
+					grid: {
+						top: 20,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: [{
+
+						type: 'pie',
+						radius: ['80%', '50%'],
+						radius: [45, 60],
+						data: data
+						
+					}]
+				};
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			occupancyByTimeBar(init) {
+				if (init) {
+					var date = new Date();
+					//test
+					//this.body3data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
+			
+					var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
+					//this.body3data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
+			
+				}
+				this.jpContentMap.body3 = 0
+				
+				this.body3data.query.floorId = this.id
+				API_index.occupancyByTimeBar(
+					this.body3data.query
+				).then((response) => {
+					this.body3data.data = [
+						...response.data.locksTimeList,
+						//	...response.data.locksTimeList,
+					];
+			
+					if (this.body3data.data.length == 0) {
+						this.jpContentMap.body3 = 1
+			
+					} else {
+						this.jpContentMap.body3 = 2
+						this.getbody3()
+			
+					}
+			
+			
+			
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+			
+				})
+			},
+			getbody3() {
+				var key = "body3bar1"
+				var myChart = this.echartsList[key];
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px(170 * 2)
+					})
+
+				}
+				var dataApi = this.body3data.data;
+				
+				myChart.clear()
+
+				var data1 = []
+				var data2 = [] //useDays
+				var i = 0
+				dataApi[0].timeUseList.forEach(item => {
+				
+					Object.keys(item).forEach(key1 => {
+				
+						data1.push(key1 + '点')
+						var num = 0
+				
+						dataApi.forEach(item2 => {
+							num += item2.timeUseList[i][key1].useDays
+				
+						})
+						data2.push(num)
+					});
+					i += 1
+				
+				})
+				
+				var axisLabel = {
+					rotate: 40,
+					interval: 0,
+					textStyle: {
+						color: "#333"
+					}
+				}
+				if (data1.length < 7) {
+					axisLabel = {
+						interval: 0,
+						textStyle: {
+							color: "#333"
+						},
+					}
+				} else {
+					axisLabel.interval = 0;
+				}
+				var option = {
+					xAxis: {
+						type: 'category',
+						data: data1,
+						axisLabel: axisLabel,
+					},
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						formatter: function(params) {
+							var result = params[0].name + '<br/>';
+							for (var i = 0; i < params.length; i++) {
+								result += params[i].marker+ ' ' + params[i].value + '次<br/>';
+							}
+							return result;
+						}
+					},
+					yAxis: {
+						type: 'value'
+					},
+					grid: {
+						top: 20,
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: [{
+						itemStyle: {
+							color: "#5A88E5"
+						},
+							data: data2,
+						type: 'bar'
+					}]
+				};
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+			getbody2() {
+				var key = "body2line1"
+				var myChart = this.echartsList[key];
+				var dataApi = this.body2data.data;
+				
+				var head = 20 * (parseInt(dataApi.length / 4)) + 20
+				
+				
+				if (!myChart) {
+					myChart = echarts.init(document.getElementById(key), null, {
+						width: uni.upx2px(300 * 2),
+						height: uni.upx2px((170 + head) * 2)
+					})
+				
+				}
+				myChart.clear()
+				
+				var data1 = []
+				var series = [];
+				
+				dataApi.forEach(item => {
+				
+					var obj = {
+						name: item.lockName,
+						areaStyle: {},
+						itemStyle: {
+							color: "#BBD4FB"
+						},
+						label: {
+							show: true,
+							position: 'top',
+								color: "#307AF6"
+						},
+						data: [],
+						type: 'line'
+					}
+					if (dataApi.length == 1) {
+						obj.label.color = "#307AF6"
+						obj.areaStyle = {}
+						obj.itemStyle = {
+							color: "#BBD4FB"
+						}
+					}
+				
+					item.timeUseList.forEach(item2 => {
+						Object.keys(item2).forEach(key1 => {
+				
+							obj.data.push(item2[key1].useRate)
+						});
+					})
+					series.push(obj)
+				})
+				dataApi[0].timeUseList.forEach(item => {
+				
+					Object.keys(item).forEach(key1 => {
+						data1.push(key1)
+				
+					});
+				
+				})
+				var axisLabel = {
+					rotate: 40,
+					interval: 0,
+					textStyle: {
+						color: "#333"
+					}
+				}
+				if (data1.length < 7) {
+					axisLabel = {
+						interval: 0,
+						textStyle: {
+							color: "#333"
+						},
+					}
+				} else {
+					axisLabel.interval = 0;
+				}
+				var option = {
+					xAxis: {
+						type: 'category',
+						data: data1,
+						axisLabel: axisLabel,
+					},
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						
+						formatter: function(params) {
+							var result = params[0].name + '点<br/>';
+							for (var i = 0; i < params.length; i++) {
+								result += params[i].marker+params[i].seriesName + ': ' + params[i].value + '%<br/>';
+							}
+							return result;
+						}
+					},
+					yAxis: {
+						type: 'value'
+					},
+					grid: {
+						top: (20 + head),
+						left: 0,
+						right: 0,
+						bottom: 0,
+						containLabel: true
+					},
+					series: series,
+					 
+				};
+				myChart.setOption(option);
+				this.echartsList[key] = myChart;
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.gradient-header {
+		height: 0px;
+	}
+
+	.jpback {
+		height: 268rpx;
+		background: linear-gradient(180deg, rgba(22, 119, 255, 1) 20%, rgba(121, 177, 255, 1) 100%);
+	}
+
+	.main {
+
+		padding: 32rpx;
+
+		.no_statistics {
+			margin-bottom: 24rpx;
+		}
+
+		.statistics {
+			border-radius: 8px;
+			background-color: rgba(255, 255, 255, 1);
+			box-shadow: 0px 1px 6px 0px rgba(0, 59, 142, 0.05);
+			margin-bottom: 24rpx;
+			padding: 40rpx;
+
+			.title {
+				display: flex;
+				align-items: center;
+				margin-bottom: 32rpx;
+				font-weight: bold;
+
+				.img {
+					width: 36rpx;
+					height: 36rpx;
+					vertical-align: middle;
+					border-radius: 999px;
+
+				}
+
+				.change {
+					display: flex;
+					align-items: center;
+
+					.change-img {
+						width: 32rpx;
+						height: 32rpx;
+						vertical-align: middle;
+					}
+
+					text {
+
+						margin-left: 8rpx;
+					}
+				}
+
+
+				.text {
+					color: rgba(16, 16, 16, 1);
+					font-size: 36rpx;
+					margin-left: 16rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					width: 100%;
+
+					.tag {
+						border-radius: 4px;
+						border: 1px solid rgba(187, 187, 187, 1);
+						color: rgba(51, 51, 51, 1);
+
+						font-size: 24rpx;
+						padding: 1px 8rpx;
+						margin-left: 8rpx;
+					}
+
+				}
+
+				.change {
+					margin-left: 16rpx;
+					font-size: 24rpx;
+					color: #838383;
+
+				}
+
+				.check-all {
+					margin-left: auto;
+					color: rgba(131, 131, 131, 1);
+					font-size: 24rpx;
+				}
+			}
+		}
+	}
+
+	.data1 {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		.item {
+			.line{
+				    display: flex;
+				    align-items: center;
+			}
+			.name {
+				color: rgba(51, 51, 51, 1);
+				font-size: 36rpx;
+				font-weight: bold;
+				margin-right: 8rpx;
+			}
+
+			.item-tags {
+				display: flex;
+
+				.tag {
+					border-radius: 4px;
+
+					background-color: rgba(39, 177, 72, 1);
+					color: rgba(255, 255, 255, 1);
+					font-size: 24rpx;
+					padding: 2rpx 8rpx;
+					margin-right: 8rpx;
+				}
+
+				.typeN1 {
+					background-color: rgba(22, 119, 255, 1);
+				}
+				.typeN2{
+					background-color: #8161ff;
+																				 background-color: #8161ff;
+				}
+				.statusN{
+					background-color:#838383
+				}
+				.lockStatusN {
+				
+					background-color: rgba(153, 153, 153, 1);
+				}
+				
+				.lockStatusN2 {
+					background-color: #03A9F4
+				}
+				
+			}
+		}
+
+		.value {
+			.img {
+				margin-right: 8rpx;
+				width: 32rpx;
+				height: 32rpx;
+			}
+		}
+	}
+
+	.data2 {
+		height: 336rpx;
+		padding: 32rpx;
+		border-radius: 12px;
+		background: linear-gradient(180deg, rgba(222, 222, 222, 1) 3%, rgba(255, 255, 255, 1) 5%, rgba(232, 232, 232, 1) 56%, rgba(255, 255, 255, 1) 59%, rgba(236, 236, 236, 1) 95%, rgba(215, 215, 215, 1) 98%);
+
+		.top {
+			background-repeat: round;
+			background-image: url('@/assets/img/deviceTab/index3-2.png');
+			display: flex;
+			justify-content: space-around;
+			text-align: center;
+			height: 152rpx;
+			align-items: center;
+
+			.item {
+				.name {
+					color: rgba(16, 16, 16, 1);
+					font-size: 32rpx;
+				}
+
+				.value {
+					color: rgba(16, 16, 16, 1);
+					font-size: 48rpx;
+					font-weight: bold;
+				}
+			}
+		}
+
+		.body {
+			padding: 16rpx;
+		}
+	}
+
+	.body5data {
+		.line {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.data {
+				display: flex;
+				width: 80%;
+				justify-content: space-between;
+
+				.item {
+					color: rgba(51, 51, 51, 1);
+					font-size: 16px;
+				}
+
+				.value {
+					color: rgba(119, 119, 119, 1);
+					font-size: 16px;
+				}
+			}
+		}
+	}
+
+	.body7data {
+		.line {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.value {
+				width: 33%;
+				padding: 16rpx;
+				color: rgba(51, 51, 51, 1);
+
+
+			}
+
+			.value:nth-child(3) {
+
+				text-align: center;
+
+			}
+		}
+
+		/* 隔行变色: 偶数行设置背景色 */
+		.line:nth-child(odd) {
+			background-color: #F2F2F2;
+			/* 偶数行 */
+		}
+
+		.line:nth-child(even) {
+			background-color: #FFFFFF
+				/* 奇数行 */
+		}
+
+	}
+
+	.body8main {
+		.line {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.value {
+				width: 33%;
+				padding: 16rpx;
+
+				text-align: center;
+				
+				overflow: hidden;
+				white-space: nowrap;
+				text-overflow: ellipsis;
+			}
+
+		}
+
+		/* 隔行变色: 偶数行设置背景色 */
+		.line:nth-child(odd) {
+			color: rgba(119, 119, 119, 1);
+			font-size: 14px;
+			/* 偶数行 */
+		}
+
+		.line:nth-child(even) {
+			color: rgba(16, 16, 16, 1);
+			font-size: 16px;
+
+			/* 奇数行 */
+		}
+
+	}
+
+	.body6main {
+		.line {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.abnormal-item:last-of-type {
+			border-bottom: none !important;
+			padding-bottom: 0;
+		}
+
+		.abnormal-item {
+			width: 100%;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 16rpx;
+			border-bottom: 1px solid rgba(245, 245, 245, 1);
+
+
+			.item-title {
+				.level {
+					color: #fff;
+
+					border-radius: 8rpx;
+					font-weight: 400;
+					padding: 4rpx 8rpx;
+					font-size: 22rpx;
+					margin-right: 2px;
+				}
+
+				.level1 {
+					background: red;
+				}
+
+				.level2 {
+					background-color: rgba(255, 123, 0, 1);
+				}
+
+				color: rgba(51, 51, 51, 1);
+				width: 100%;
+
+				.img {
+					width: 32rpx;
+					height: 32rpx;
+					margin-right: 8rpx;
+				}
+
+				.name {
+					color: rgba(51, 51, 51, 1);
+					font-weight: bold;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+
+				.date {
+					color: rgba(119, 119, 119, 1);
+					font-size: 24rpx;
+				}
+			}
+
+			.item-value {
+				text-align: right;
+				display: flex;
+				align-items: center;
+
+				.more {
+					margin-left: 8rpx;
+				}
+
+				.value1 {
+					font-weight: bold;
+					color: rgba(51, 51, 51, 1);
+				}
+
+				.value2 {
+					color: rgba(119, 119, 119, 1);
+					font-size: 24rpx;
+				}
+			}
+		}
+	}
+	
+	// 地锁信息弹窗
+	.body8data-popup {
+	
+		.content {
+	
+			padding: 32rpx;
+	
+			.headline {
+				color: rgba(16, 16, 16, 1);
+				font-size: 36rpx;
+				text-align: center;
+				font-weight: bold;
+				margin-bottom: 24rpx;
+			}
+	
+			.infos {
+				//padding-bottom: 100rpx;
+	
+				.item:last-of-type {
+					border: none;
+				}
+	
+				.item {
+					display: flex;
+					align-items: center;
+	
+					//line-height: 48rpx;
+					padding: 20rpx 0;
+					border-bottom: 1px solid #cccccc;
+	
+					.item-title {
+						color: rgba(51, 51, 51, 1);
+						width: 200rpx;
+					}
+	
+					.item-value {
+						color: #666666;
+						flex: 1;
+						margin-left: 16rpx;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						
+						.img{
+							width: 32rpx;
+							height: 32rpx;
+							transform: rotate(90deg);
+							margin-left: 96rpx;
+						}
+					}
+				}
+	
+			}
+	
+			.get {
+				height: 80rpx;
+				line-height: 80rpx;
+				border-radius: 4px;
+				background-color: rgba(22, 119, 255, 1);
+				color: rgba(255, 255, 255, 1);
+				font-size: 32rpx;
+			}
+		}
+	}
+	
+	.top-span{
+		border-top: 1px solid rgba(245, 245, 245, 1);
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
+		padding-top: 16rpx;
+		margin-top: 16rpx;
+		.item-span{
+			white-space: pre;
+			    display: flex;
+			    align-items: center;
+				   margin-top: 4rpx;
+				width: 30%;
+				 font-size: 28rpx;
+				 span{
+					 margin: 0 8rpx;
+				 }
+
+			img{
+				width: 28rpx;
+				height: 28rpx;
+			}
+		}
+		
+		.lockStatusX1{
+			color: #00B962;
+		}
+		.lockStatusX2{
+			color: #1677FF;
+		}
+		
+		.statusX1{
+			color: #00B962;
+		}
+		.statusX2{
+			color: #1677FF;
+		}
+	}
+</style>

+ 19 - 0
pages/task/InspectionInfo.vue

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

+ 19 - 0
pages/task/InspectionInfoStatus.vue

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

+ 20 - 0
pages/task/InspectionList.vue

@@ -0,0 +1,20 @@
+<template>
+	<view>
+		<u-navbar  title="故障详情" title-color="#101010"></u-navbar>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 178 - 0
pages/task/addTask.vue

@@ -0,0 +1,178 @@
+<template>
+	<view  class="jpmain  " >
+			<u-navbar  title="故障上报" title-color="#101010"></u-navbar>
+			<u-picker mode="selector"
+			 v-model="isswitchshow" 
+			 :range="columns" range-key="label"
+			  :default-selector="columnsindex"
+			   @confirm="switchBtn" ></u-picker>
+			<view class="list" >
+				<view class="item"  >
+					<view class="name">
+						<span>*</span>选择地锁
+				
+					</view>
+					<view class="value" @click="isswitchshowBtn">
+						<view :style="taskInfo.parkingIdN?'':'color:#BBB'"
+						>{{taskInfo.parkingIdN?taskInfo.parkingIdN:'请选择所属停车场'}}</view>
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						地锁编号
+				
+					</view>
+					<view class="value">
+						123123123
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						负责人
+				
+					</view>
+					<view class="value">
+						11111111
+					</view>
+				</view>
+				<view class="item">
+					<view class="name">
+						联系电话
+				
+					</view>
+					<view class="value" style=" color:#1677FF;">
+						123123123
+					</view>
+				</view>
+			</view>
+			<view class="list" >
+				<view class="item"  >
+					<view class="name">
+						<span>*</span>选择地锁
+				
+					</view>
+					<view class="value" @click="isswitchshowBtn">
+						<view :style="taskInfo.parkingIdN?'':'color:#BBB'"
+						>{{taskInfo.parkingIdN?taskInfo.parkingIdN:'请选择所属停车场'}}</view>
+						<u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
+					</view>
+				</view>
+				<view class="item item-plus"  >
+					<view class="name">
+						问题描述
+				
+					</view>
+					<view class="value" >
+						<textarea placeholder="请简单描述处理内容" class="textarea"></textarea>
+					</view>
+				</view>
+				<view class="item item-plus"  >
+					<view class="name">
+						上传图片
+				
+					</view>
+					<view class="value" >
+						<u-upload></u-upload>
+					</view>
+				</view>
+			</view>
+			
+			<view class="floating-button">
+				<view class="button"  @click="submit" >
+					
+					提交
+				</view>
+				
+			</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				taskInfo:{}
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+	.jpmain{padding-bottom: 120rpx;}
+.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;
+						
+					}
+					.textarea{
+						background-color: rgba(241,242,245,1);
+						width: 100%;
+						border-radius: 4px;
+					}
+					
+			}
+		}
+		.item-plus{
+			flex-direction: column;
+			.value,.name{
+				   width: 100%;
+			}
+			.name{
+				    padding-bottom: 32rpx;
+			}
+		}
+	}
+	
+	.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>

+ 81 - 0
pages/task/addTaskStatus.vue

@@ -0,0 +1,81 @@
+<template>
+	<view>
+		<u-navbar  title="提交结果" title-color="#101010"></u-navbar>
+		<view class="data">
+		<image class="img" src="@/assets/img/success.png" mode=""></image>
+					<view class="t1">上报成功
+</view>
+					<view class="t2">本次故障问题已提交成功</view>
+				</view>
+				<view class="floating-button" >
+					<view class="button button2" @click="goBack()" >
+						返回
+					</view>
+					
+		
+				</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+
+<style lang="scss" scoped>
+	
+	.body {
+		padding: 32rpx;
+		background-color: rgba(242, 244, 246, 1);
+	}
+	.data{
+		text-align: center;
+		padding-top:120rpx;
+		.img{
+			width: 200rpx;
+			height: 200rpx;
+		}
+		.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:#1677FF ;
+			color: rgba(255, 255, 255, 1);
+			font-size: 36rpx;
+		}
+		.button2{
+			background-color: #1677FF 
+		}
+	}
+</style>

+ 159 - 0
pages/task/infoTask.vue

@@ -0,0 +1,159 @@
+<template>
+	<view  class="jpmain  ">
+		<u-navbar  title="故障详情" title-color="#101010"></u-navbar>
+		<view class="list" >
+			
+			<view class="item">
+				<view class="name">
+					地锁编号
+			
+				</view>
+				<view class="value">
+					123123123
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					负责人
+			
+				</view>
+				<view class="value">
+					11111111
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					联系电话
+			
+				</view>
+				<view class="value" style=" color:#1677FF;">
+					123123123
+				</view>
+			</view>
+		</view>
+		
+		
+		
+		<view class="list" >
+			
+			<view class="item">
+				<view class="name">
+					认领时间
+			
+				</view>
+				<view class="value">
+					123123123
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					负责人
+			
+				</view>
+				<view class="value">
+					11111111
+				</view>
+			</view>
+			
+		</view>
+		
+		
+		
+		<view class="list" >
+			<view class="item">
+				<view class="name">
+					处理时间
+			
+				</view>
+				<view class="value">
+					123123123
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					处理结果
+			
+				</view>
+				<view class="value">
+					123123123
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					现场照片
+			
+				</view>
+				<view class="value">
+					11111111
+				</view>
+			</view>
+			
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+.jpmain{padding-bottom: 120rpx;}
+.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;
+						
+					}
+					.textarea{
+						background-color: rgba(241,242,245,1);
+						width: 100%;
+						border-radius: 4px;
+					}
+					
+			}
+		}
+		.item-plus{
+			flex-direction: column;
+			.value,.name{
+				   width: 100%;
+			}
+			.name{
+				    padding-bottom: 32rpx;
+			}
+		}
+	}
+</style>

+ 77 - 0
pages/task/maintenanceTaks.vue

@@ -0,0 +1,77 @@
+<template>
+	<view>
+		<u-navbar  title="维修结果" title-color="#101010"></u-navbar>
+		<view class="list" >
+			
+			<view class="item">
+				<view class="name">
+					地锁编号
+			
+				</view>
+				<view class="value">
+					123123123
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					负责人
+			
+				</view>
+				<view class="value">
+					11111111
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					联系电话
+			
+				</view>
+				<view class="value" style=" color:#1677FF;">
+					123123123
+				</view>
+			</view>
+		</view>
+		<view class="list" >
+		<view class="item item-plus"  >
+			<view class="name">
+				问题描述
+		
+			</view>
+			<view class="value" >
+				<textarea placeholder="请简单描述处理内容" class="textarea"></textarea>
+			</view>
+		</view>
+		<view class="item item-plus"  >
+			<view class="name">
+				上传图片
+		
+			</view>
+			<view class="value" >
+				<u-upload></u-upload>
+			</view>
+		</view>
+		</view>
+		
+		<view class="floating-button">
+			<view class="button"  @click="submit" >
+				
+				提交
+			</view>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss">
+
+</style>

+ 19 - 0
pages/task/maintenanceTaksStatus.vue

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