From 41d11d9db46ccd44163860f6be6bfd2137aff369 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 07 一月 2025 09:16:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 h5/pages/staffLogin/login.vue                         |  704 ++++++++++++++++++++---------------
 h5/api/driver.js                                      |   12 
 h5/pages/waybill/home.vue                             |   66 ++
 h5/pages/driver/forgetPsd.vue                         |    2 
 h5/pages/driver/reservedDetail.vue                    |    2 
 screen/src/views/LogisticsEfficiency.vue              |   40 ++
 screen/src/assets/images/ic_jiankong@2x.png           |    0 
 h5/pages/wdata/home.vue                               |    6 
 h5/store/index.js                                     |    7 
 admin/src/views/index.vue                             |    2 
 h5/pages/waybill/list.vue                             |   63 ++
 screen/src/views/LogisticsCenter.vue                  |   25 
 h5/api/staff.js                                       |    7 
 h5/pages/driver/reservedRecord.vue                    |   16 
 admin/src/components/common/CommonHeader.vue          |    2 
 h5/App.vue                                            |    5 
 h5/pages/driver/login.vue                             |  209 +++++++--
 screen/src/views/EnergyConsum.vue                     |   18 
 admin/src/components/business/OperaProblemsWindow.vue |    1 
 h5/pages/driver/register.vue                          |    2 
 20 files changed, 771 insertions(+), 418 deletions(-)

diff --git a/admin/src/components/business/OperaProblemsWindow.vue b/admin/src/components/business/OperaProblemsWindow.vue
index 0a61331..3ea89b9 100644
--- a/admin/src/components/business/OperaProblemsWindow.vue
+++ b/admin/src/components/business/OperaProblemsWindow.vue
@@ -86,6 +86,7 @@
         ],
         answer: '',
         sortnu: '',
+        score: '',
         type: 0,
         scroe:null,
         useType: 1
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index 2a784ef..5b49084 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -224,7 +224,7 @@
         }
         let argus = JSON.stringify(params)
         myWindow.postMessage('{"method":"goToApp","argument":' + argus + '}', '*')
-      }, 3000)
+      }, 8000)
     },
     // 纭畾淇敼瀵嗙爜
     confirmChangePwd() {
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index f97c7b7..f1d8dd4 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -332,7 +332,7 @@
           }
           // const argus = JSON.stringify(params)
           myWindow.postMessage('{"method":"goToApp","argument":' + row.param5 + '}', '*')
-        }, 3000)
+        }, 8000)
       })
     },
     SubSuccess (str) {
diff --git a/h5/App.vue b/h5/App.vue
index 5ce65e1..0bf9fc9 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -4,13 +4,16 @@
   onLaunch: function () {
     window.addEventListener("popstate", (event) => {
 			const path = this.$route.fullPath
+			// console.log('path', path);
     	if(path == '/pages/login/login' || path == '/'){
 				window.location.href = app_url
 			}
-			// console.log('path', path);
 			if(path == '/pages/wdata/home'){
 				window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/wdata/home'
 			}
+			if(path == '/pages/waybill/home'){
+				window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
+			}
     })
 		console.log('onLaunch')
   },
diff --git a/h5/api/driver.js b/h5/api/driver.js
index b2ce4c6..858578a 100644
--- a/h5/api/driver.js
+++ b/h5/api/driver.js
@@ -16,6 +16,14 @@
     data
   })
 }
+// 鍙告満鐧诲綍
+export const loginDriverByPhone = (data) => {
+  return http({
+    url: 'loginDriverByPhone',
+    method: 'post',
+    data
+  })
+}
 // 鍙告満楠岃瘉鐮佺櫥褰�
 export const loginDriverWithCode = (data) => {
   return http({
@@ -129,9 +137,9 @@
     data
   })
 }
-export const validPhoneCaptcha = (data) => {
+export const loginGkUserWithCode = (data) => {
   return http({
-    url: 'visitsAdmin/cloudService/business/smsEmail/validPhoneCaptcha',
+    url: 'loginGkUserWithCode',
     method: 'post',
     data
   })
diff --git a/h5/api/staff.js b/h5/api/staff.js
index b7c9605..56bb771 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -8,6 +8,13 @@
     data
   })
 }
+export const loginH5ByPhone = (data) => {
+  return http({
+    url: 'loginH5ByPhone',
+    method: 'post',
+    data
+  })
+}
 export const loginCaptcha = () => {
   return http({
     url: 'captcha',
diff --git a/h5/pages/driver/forgetPsd.vue b/h5/pages/driver/forgetPsd.vue
index b2d5c36..acb83b1 100644
--- a/h5/pages/driver/forgetPsd.vue
+++ b/h5/pages/driver/forgetPsd.vue
@@ -57,7 +57,7 @@
 
   onLoad(option) {
 		if(option.phone){
-			this.$set(this.form, 'phone', option.phone)
+			this.$set(this.form, 'phone', option.phone || '')
 		}
   },
 
diff --git a/h5/pages/driver/login.vue b/h5/pages/driver/login.vue
index 99240e5..28c5d00 100644
--- a/h5/pages/driver/login.vue
+++ b/h5/pages/driver/login.vue
@@ -3,18 +3,44 @@
 		<image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
 		<image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
 		<view class="login_title">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
-		<view class="login_title">鐗╂祦杞﹀徃鏈虹櫥褰�</view>
+		<view class="login_title">鐗╂祦杞﹀徃鏈虹櫥褰�</view>
+		<view class="tabs">
+			<view class="tab" @click="tabsClick(0)" :class="{active: activeTab == 0  }"><view>璐﹀彿鐧诲綍</view><view class="bor"></view></view>
+			<view class="tab" @click="tabsClick(1)" :class="{active: activeTab == 1  }"><view>楠岃瘉鐮佺櫥褰�</view><view class="bor"></view></view>
+		</view>
 		<view class="login_list">
-			<view class="login_list_item">
-				<image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
-				<input v-model="form.username" type="tel" @focus="showKeyboard = true" @blur="showKeyboard = false"
-					maxlength="18" placeholder="鎵嬫満鍙�" />
-			</view>
-			<view class="login_list_item">
-				<image src="@/static/login_ic_password@2x.png" mode="widthFix" />
-				<input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password"
-					placeholder="瀵嗙爜" />
-			</view>
+			<template v-if="activeTab == 0">
+				<view class="login_list_item">
+					<image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
+					<input v-model="form.username" type="tel" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						maxlength="18" placeholder="璐﹀彿" />
+				</view>
+				<view class="login_list_item">
+					<image src="@/static/login_ic_password@2x.png" mode="widthFix" />
+					<input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password"
+						placeholder="瀵嗙爜" />
+				</view>
+			</template>
+			<template v-else>
+				<view class="login_list_item">
+					<image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
+					<input v-model="form.phone" type="tel" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						:maxlength="18" placeholder="鎵嬫満鍙�" />
+				</view>
+				<view class="login_list_item">
+				  <image src="@/static/ic_captcha.png" mode="widthFix"></image>
+				  <input
+				    v-model="form.code"
+				    placeholder="璇疯緭鍏ラ獙璇佺爜"
+						:maxlength="6"
+				    type="number"
+				  />
+				  <text class="captcha" v-if="countDown == 0" @click="initCaptcha"
+				    >鑾峰彇楠岃瘉鐮�</text
+				  >
+				  <text class="placeholder9" v-else>{{ countDown }}</text>
+				</view>
+			</template>
 		</view>
 		<view class="login_btn">
 			<view class="login_btn_n" @click="onLogin">绔嬪嵆鐧诲綍</view>
@@ -32,7 +58,9 @@
 	import {
 		driverLogin,
 		loginCaptcha,
-		getUserInfo
+		getUserInfo,
+		sendSms,
+		loginDriverByPhone	
 	} from '@/api'
 	import {
 		mapState,
@@ -42,18 +70,19 @@
 		data() {
 			return {
 				form: {
-					username: '',
-					password: ''
+					username: null,
+					phone: null,
+					password: null
 				},
 				isShowProtocol: false,
 				showKeyboard: false,
 				countDown: 0,
+				activeTab: 0,
 				
 				ywinfo: {}
 			}
 		},
 		onLoad() {
-			this.initCaptcha()
 			const ywinfo = uni.getStorageSync('ywinfo') || {}
 			if (ywinfo.ywid && ywinfo.type == 0) {
 				this.ywinfo = ywinfo
@@ -61,60 +90,96 @@
 			}
 		},
 
-		methods: {
+		methods: {
+			onLogin() {
+				const {
+					form,activeTab
+				} = this
+				if(activeTab == 0){
+					if (!form.username) return uni.showToast({
+						title: '璐﹀彿涓嶈兘涓虹┖',
+						icon: 'none'
+					})
+					if (!form.password) return uni.showToast({
+						title: '瀵嗙爜涓嶈兘涓虹┖',
+						icon: 'none'
+					})
+				}else{
+					if (!form.phone) return uni.showToast({
+						title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+						icon: 'none'
+					})
+					if (!form.code) return uni.showToast({
+						title: '楠岃瘉鐮佷笉鑳戒负绌�',
+						icon: 'none'
+					})
+				}
+				let fn = activeTab == 0 ? driverLogin : loginDriverByPhone
+				fn({
+					...form,
+					openid: this.$store.state.openId,
+				}).then(res => {
+					if (res.code === 200) {
+						this.setToken(res.data)
+						getUserInfo().then(ress => {
+							setTimeout(() => {
+								this.showToast('鐧诲綍鎴愬姛')
+							})
+							uni.setStorageSync('ywinfo', this.ywinfo)
+							this.setDriverInfo(ress.data)
+							uni.redirectTo({
+								url: "/pages/driver/index"
+							})
+						})
+					}
+				})
+			},
 			...mapMutations(["setToken", "setDriverInfo"]),
 			handleRegister() {
 				uni.navigateTo({
 					url: "/pages/driver/register"
 				})
+			},
+			tabsClick(val) {
+				this.activeTab = val
+				if(val == 0){
+					this.form.username = this.form.username || this.form.phone
+					this.form.phone = null
+					this.form.code = null
+				}else{
+					this.form.phone = this.form.username || this.form.phone
+					this.form.password = null
+					this.form.username = null
+				}
 			},
-			handleSetPsd() {
-				uni.navigateTo({
-					url: "/pages/driver/forgetPsd?phone=" + this.form.username
-				})
+			handleSetPsd() {
+				if(this.form.username || this.form.phone){
+					uni.navigateTo({
+						url: "/pages/driver/forgetPsd?phone=" + this.form.username || this.form.phone ||  ''
+					})
+				}else{
+					uni.navigateTo({
+						url: "/pages/driver/forgetPsd"
+					})
+				}
+				
 			},
 			dealChange(e) {
 				console.log(e)
 			},
 			initCaptcha() {
-				loginCaptcha().then(res => {
-					this.captcha = res.data
+				if (!this.form.phone) return uni.showToast({
+				  title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+				  icon: 'none'
+				})
+				sendSms({ phone: this.form.phone }).then(res => {
+				  this.countDown = 60
+				  setInterval(() => {
+				    if (this.countDown == 0) return
+				    this.countDown--
+				  }, 1000)
 				})
 			},
-
-			onLogin() {
-				const {
-					form
-				} = this
-				if (!form.username) return uni.showToast({
-					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
-					icon: 'none'
-				})
-				if (!form.password) return uni.showToast({
-					title: '瀵嗙爜涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				driverLogin({
-					...form,
-					uuid: this.captcha.uuid,
-					openid: this.$store.state.openId,
-					code: '1'
-				}).then(res => {
-					if (res.code === 200) {
-						this.setToken(res.data)
-						getUserInfo().then(ress => {
-							setTimeout(() => {
-								this.showToast('鐧诲綍鎴愬姛')
-							})
-							uni.setStorageSync('ywinfo', this.ywinfo)
-							this.setDriverInfo(ress.data)
-							uni.redirectTo({
-								url: "/pages/driver/index"
-							})
-						})
-					}
-				})
-			}
 		}
 	}
 </script>
@@ -150,9 +215,34 @@
 			font-weight: 600;
 			color: #333333;
 		}
-
+		.tabs{
+			display: flex;
+			align-items: center;
+			justify-content: space-evenly;
+			width: 530rpx;
+			margin: 48rpx auto 0rpx;
+			.tab{
+				font-size: 30rpx;
+				color: #666666;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				height: 52rpx;	
+				line-height: 36rpx;
+			}
+			.active{
+				font-weight: bold;
+				font-size: 34rpx;
+				color: #222222;
+				.bor{
+					width: 80rpx;
+					height: 8rpx;
+					background: linear-gradient(to bottom, #4d99a8, #a3c8d4);
+				}
+			}
+		}
 		.login_list {
-			margin-top: 60rpx;
+			margin-top: 36rpx;
 			width: 100%;
 			padding: 0 60rpx;
 			box-sizing: border-box;
@@ -180,7 +270,8 @@
 				}
 
 				.captcha {
-					color: $uni-color-primary;
+					color: $uni-color-primary;
+					font-size: 30rpx;
 				}
 
 				input {
diff --git a/h5/pages/driver/register.vue b/h5/pages/driver/register.vue
index 3221f3a..743db75 100644
--- a/h5/pages/driver/register.vue
+++ b/h5/pages/driver/register.vue
@@ -3,7 +3,7 @@
     <image class="login_bg" src="@/static/login_bg@2x.png" />
     <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
     <view class="login_title">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
-    <view class="login_title">鐗╂祦杞﹀徃鏈虹櫥褰�</view>
+    <view class="login_title">鐗╂祦杞﹀徃鏈�</view>
     <view class="login_list">
       <view class="login_list_item">
         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
diff --git a/h5/pages/driver/reservedDetail.vue b/h5/pages/driver/reservedDetail.vue
index 911f0f0..6f86053 100644
--- a/h5/pages/driver/reservedDetail.vue
+++ b/h5/pages/driver/reservedDetail.vue
@@ -145,6 +145,8 @@
 					if (res.confirm) {
 						driverCarRevoke({
 							id: info.id, info: ''
+						}).then(() => {
+							this.getDetail(info.id)
 						})
 					} else if (res.cancel) {
 						console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
diff --git a/h5/pages/driver/reservedRecord.vue b/h5/pages/driver/reservedRecord.vue
index 91c20e3..6876112 100644
--- a/h5/pages/driver/reservedRecord.vue
+++ b/h5/pages/driver/reservedRecord.vue
@@ -47,7 +47,7 @@
       isShowDate: false,
       param: {},
 			page: 1,
-			capacity: 10,
+			capacity: 20,
 			total: 0,
 			datalist: [],
 			statusMap: {
@@ -59,8 +59,18 @@
 			}
     }
   },
-	created() {
+	onShow() {
+		this.page = 1
 		this.getList()
+	},
+	onReachBottom() {
+		const { total,  datalist} = this
+	  if(datalist.length < total){
+			this.page = this.page + 1
+			this.getList()
+		} else {
+			this.showToast('鏆傛棤鏇村鏁版嵁')
+		}
 	},
   methods: {
 		getList() {
@@ -68,7 +78,7 @@
 			driverApplyRecord({
 				page, capacity,model: {}
 			}).then(res => {
-				this.datalist = res.data.records
+				this.datalist = [...this.datalist, ...res.data.records]
 				this.total = res.data.total
 			})
 		},
diff --git a/h5/pages/staffLogin/login.vue b/h5/pages/staffLogin/login.vue
index af0b5a4..6c5aafd 100644
--- a/h5/pages/staffLogin/login.vue
+++ b/h5/pages/staffLogin/login.vue
@@ -1,302 +1,404 @@
-<template>
-  <view class="login" :style="{height: windowHeight  + 'px'}">
-    <image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
-    <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
-    <view class="login_title">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
-    <view class="login_list">
-      <view class="login_list_item">
-        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
-        <input v-model="form.username" type="number" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="璐﹀彿" />
-      </view>
-      <view class="login_list_item">
-        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
-        <input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password" placeholder="瀵嗙爜" />
-      </view>
-      <view class="login_list_item">
-        <image src="@/static/ic_captcha.png" mode="widthFix"></image>
-        <input v-model="form.code" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="楠岃瘉鐮�" type="text" />
-        <image
-          @click="initCaptcha"
-          :src="captcha.image"
-          class="captcha"
-          mode="widthFix"
-        />
-      </view>
-    </view>
-    <view class="login_btn">
-      <view class="login_btn_n" @click="onLogin">绔嬪嵆鐧诲綍</view>
-      <view @click="$jump('/pages/staffLogin/forgetPsd')" class="for_psd"
-        >蹇樿瀵嗙爜</view
-      >
-    </view>
-
-    <view class="deal_wrap">
-      <image
-        @click="changeFalg"
-        v-if="ProtocolFlag"
-        src="@/static/checkbox_sel@2x.png"
-        mode="widthFix"
-        class="checked"
-      ></image>
-      <image
-        @click="changeFalg"
-        v-if="!ProtocolFlag"
-        src="@/static/meeting/icon/ic_choose@2x.png"
-        mode="widthFix"
-        class="checked"
-				
-      ></image>
-      <text>鐧诲綍鍗冲悓鎰�</text>
-      <text class="deal" @click="showContent">銆婂畨娉扮墿娴佺敤鎴峰崗璁��</text>
-    </view>
-    <!--  -->
-    <u-popup
-      :show="isShowProtocol"
-      @close="isShowProtocol = false"
-			closeable
-      :round="8"
-      mode="center"
-    >
-      <view class="modal">
-        <!-- <view v-html="htmlText"></view> -->
-				<view class="content">
-					<mp-html :content="htmlText" />
-				</view>
-      </view>
-    </u-popup>
-  </view>
-</template>
-
-<script>
-import { loginPost, loginCaptcha, getUserInfo, getSystemDictData, saveHkUserOpenid } from '@/api'
-import { mapState, mapMutations } from 'vuex'
-export default {
-  name: 'login',
-
-  data() {
-    return {
-      form: {
-        // username: '18056814089',
-        username: '',
-        password: '',
-				code: ''
-      },
-			showKeyboard: false,
-      isShowProtocol: false,
-      ProtocolFlag: false,
-      captcha: {},
-      htmlText: '',
-			windowHeight: '',
-			
-			ywinfo: {}
-    }
-  },
-
-  onLoad() {
-    this.initCaptcha()
-		const result = uni.getWindowInfo()
-		this.windowHeight = result.windowHeight
-		
-		const ywinfo = uni.getStorageSync('ywinfo') || {}
-		if (ywinfo.ywid && ywinfo.type == 2) {
-			this.ywinfo = ywinfo
-			uni.setStorageSync('ywinfo', {})
-		}
-  },
-  onBackPress(options) {
-    uni.redirectTo({
-      url: '/pages/login/login'
-    })
-    return true
-  },
-  methods: {
-    ...mapMutations(["setToken", "setUserInfo"]),
-    changeFalg() {
-      this.ProtocolFlag = !this.ProtocolFlag
-    },
-    getContent() {
-      getSystemDictData({
-        dictCode: 'SYSTEM',
-        label: 'USER_PROTOCOL'
-      }).then(res => {
-        this.htmlText = res.data.code
-        this.isShowProtocol = true
-      })
-    },
-    showContent() {
-      this.getContent()
-    },
-    initCaptcha() {
-      loginCaptcha().then(res => {
-        this.captcha = res.data
-      })
-    },
-
-    onLogin() {
-      const { form, ProtocolFlag } = this
-      if (!ProtocolFlag) return uni.showToast({
-        title: '璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁�',
-        icon: 'none'
-      })
-      if (!form.username) return uni.showToast({
-        title: '璐﹀彿涓嶈兘涓虹┖',
-        icon: 'none'
-      })
-      if (!form.password) return uni.showToast({
-        title: '瀵嗙爜涓嶈兘涓虹┖',
-        icon: 'none'
-      })
-      if (!form.code) return uni.showToast({
-        title: '楠岃瘉鐮佷笉鑳戒负绌�',
-        icon: 'none'
-      })
-      loginPost({
-        ...form,
-        uuid: this.captcha.uuid,
-        openid: this.$store.state.openId
-      }).then(res => {
-        if (res.code === 200) {
-          this.setToken(res.data)
-          getUserInfo().then(ress => {
-						uni.setStorageSync('ywinfo', this.ywinfo)
-            this.setUserInfo(ress.data)
-            uni.redirectTo({
-              url: "/pages/staff/index"
-            })
-          })
-					saveHkUserOpenid({})
-        }else{
-					this.initCaptcha()
+<template>
+	<view class="login" :style="{height: windowHeight  + 'px'}">
+		<image class="login_bg" src="@/static/login_bg@2x.png" mode="widthFix" />
+		<image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
+		<view class="login_title">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
+		<view class="tabs">
+			<view class="tab" @click="tabsClick(0)" :class="{active: activeTab == 0  }">
+				<view>璐﹀彿鐧诲綍</view>
+				<view class="bor"></view>
+			</view>
+			<view class="tab" @click="tabsClick(1)" :class="{active: activeTab == 1  }">
+				<view>楠岃瘉鐮佺櫥褰�</view>
+				<view class="bor"></view>
+			</view>
+		</view>
+		<view class="login_list">
+			<template v-if="activeTab == 0">
+				<view class="login_list_item">
+					<image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
+					<input v-model="form.username" type="number" maxlength="18" @focus="showKeyboard = true"
+						@blur="showKeyboard = false" placeholder="璐﹀彿" />
+				</view>
+				<view class="login_list_item">
+					<image src="@/static/login_ic_password@2x.png" mode="widthFix" />
+					<input v-model="form.password" @focus="showKeyboard = true" @blur="showKeyboard = false" type="password"
+						placeholder="瀵嗙爜" />
+				</view>
+			</template>
+			<template v-else>
+				<view class="login_list_item">
+					<image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
+					<input v-model="form.phone" type="tel" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						:maxlength="18" placeholder="鎵嬫満鍙�" />
+				</view>
+				<view class="login_list_item">
+					<image src="@/static/ic_captcha.png" mode="widthFix"></image>
+					<input v-model="form.code" placeholder="璇疯緭鍏ラ獙璇佺爜" :maxlength="6" type="number" />
+					<text class="captcha" v-if="countDown == 0" @click="initCaptcha">鑾峰彇楠岃瘉鐮�</text>
+					<text class="placeholder9" v-else>{{ countDown }}</text>
+				</view>
+			</template>
+			<!-- <view class="login_list_item">
+        <image src="@/static/ic_captcha.png" mode="widthFix"></image>
+        <input v-model="form.code" @focus="showKeyboard = true" @blur="showKeyboard = false" placeholder="楠岃瘉鐮�" type="text" />
+        <image
+          @click="initCaptcha"
+          :src="captcha.image"
+          class="captcha"
+          mode="widthFix"
+        />
+      </view> -->
+		</view>
+		<view class="login_btn">
+			<view class="login_btn_n" @click="onLogin">绔嬪嵆鐧诲綍</view>
+			<view @click="$jump('/pages/staffLogin/forgetPsd')" class="for_psd">蹇樿瀵嗙爜</view>
+		</view>
+
+		<view class="deal_wrap">
+			<image @click="changeFalg" v-if="ProtocolFlag" src="@/static/checkbox_sel@2x.png" mode="widthFix" class="checked">
+			</image>
+			<image @click="changeFalg" v-if="!ProtocolFlag" src="@/static/meeting/icon/ic_choose@2x.png" mode="widthFix"
+				class="checked"></image>
+			<text>鐧诲綍鍗冲悓鎰�</text>
+			<text class="deal" @click="showContent">銆婂畨娉扮墿娴佺敤鎴峰崗璁��</text>
+		</view>
+		<!--  -->
+		<u-popup :show="isShowProtocol" @close="isShowProtocol = false" closeable :round="8" mode="center">
+			<view class="modal">
+				<!-- <view v-html="htmlText"></view> -->
+				<view class="content">
+					<mp-html :content="htmlText" />
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		loginPost,
+		loginH5ByPhone,
+		getUserInfo,
+		getSystemDictData,
+		saveHkUserOpenid,
+		sendSms
+	} from '@/api'
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex'
+	export default {
+		name: 'login',
+
+		data() {
+			return {
+				form: {
+					// username: '18655749830',
+					username: null,
+					phone: null,
+					password: null,
+					code: null
+				},
+				showKeyboard: false,
+				isShowProtocol: false,
+				ProtocolFlag: false,
+				captcha: {},
+				htmlText: '',
+				windowHeight: '',
+
+				countDown: 0,
+				activeTab: 0,
+
+				ywinfo: {}
+			}
+		},
+
+		onLoad() {
+			const result = uni.getWindowInfo()
+			this.windowHeight = result.windowHeight
+
+			const ywinfo = uni.getStorageSync('ywinfo') || {}
+			if (ywinfo.ywid && ywinfo.type == 2) {
+				this.ywinfo = ywinfo
+				uni.setStorageSync('ywinfo', {})
+			}
+		},
+		onBackPress(options) {
+			uni.redirectTo({
+				url: '/pages/login/login'
+			})
+			return true
+		},
+		methods: {
+			onLogin() {
+				const {
+					form,
+					ProtocolFlag,
+					activeTab
+				} = this
+				if (!ProtocolFlag) return uni.showToast({
+					title: '璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁�',
+					icon: 'none'
+				})
+				if (activeTab == 0) {
+					if (!form.username) return uni.showToast({
+						title: '璐﹀彿涓嶈兘涓虹┖',
+						icon: 'none'
+					})
+					if (!form.password) return uni.showToast({
+						title: '瀵嗙爜涓嶈兘涓虹┖',
+						icon: 'none'
+					})
+				} else {
+					if (!form.phone) return uni.showToast({
+						title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+						icon: 'none'
+					})
+					if (!form.code) return uni.showToast({
+						title: '楠岃瘉鐮佷笉鑳戒负绌�',
+						icon: 'none'
+					})
 				}
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.login {
-  width: 100%;
-  display: flex;
-  padding-top: 130rpx;
-  box-sizing: border-box;
-  align-items: center;
-  flex-direction: column;
-	position: relative;
-  background: linear-gradient(
-    180deg,
-    rgba(39, 155, 170, 0.2) 0%,
-    rgba(39, 155, 170, 0) 100%
-  );
-  .login_logo {
-    width: 180rpx;
-    height: 180rpx;
-  }
-  .login_bg {
-  	position: absolute;
-  	top: 0;
-  	left: 0;
-  	width: 100%;
-  	z-index: -1;
-  }
-  .login_title {
-    font-size: 44rpx;
-    font-weight: 600;
-    color: #333333;
-    margin-top: 40rpx;
-    margin-bottom: 80rpx;
-  }
-  .login_list {
-    width: 100%;
-    padding: 0 60rpx;
-    box-sizing: border-box;
-    .login_list_item {
-      width: 100%;
-      border-radius: 50rpx;
-      height: 98rpx;
-      padding: 0 40rpx;
-      box-sizing: border-box;
-      background: #ffffff;
-      margin-bottom: 40rpx;
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      &:last-child {
-        margin-bottom: 0 !important;
-      }
-      image {
-        flex-shrink: 0;
-        width: 40rpx;
-        height: 40rpx;
-      }
-      .captcha {
-        width: 200rpx;
-      }
-      input {
-        flex: 1;
-        height: 100%;
-        color: #666666;
-        margin-left: 24rpx;
-        border: none;
-      }
-    }
-  }
-  .login_btn {
-    width: 100%;
-    padding: 0 60rpx;
-    box-sizing: border-box;
-    margin-top: 60rpx;
-    .for_psd {
-      color: $uni-color-primary;
-      width: 140rpx;
-      text-align: center;
-      margin: 40rpx auto;
-    }
-    .login_btn_n {
-      width: 100%;
-      height: 98rpx;
-      background: $uni-color-primary;
-      box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2);
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      font-weight: 600;
-      font-size: 32rpx;
-      color: #ffffff;
-      border-radius: 50rpx;
-    }
-  }
-  .deal_wrap {
-    position: absolute;
-    width: 100%;
-    left: 0;
-    text-align: center;
-    bottom: 48rpx;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    .deal {
-      color: $uni-color-primary;
-    }
-    .checked {
-      width: 48rpx;
-      margin-right: 12rpx;
-    }
-  }
-	.rela_wrap{
-		position: relative;
-		margin-top: 360rpx;
-	}
-}
-.modal {
-  width: 690rpx;
-  max-height: 80vh;
-  border-radius: 24rpx;
-  padding: 30rpx 30rpx;
-	overflow: auto;
-	// .content{
-	// 	height: 100%;
-	// 	overflow: auto;
-	// }
-}
-</style>
+				let fn = activeTab == 0 ? loginPost : loginH5ByPhone
+				fn({
+					...form,
+					openid: this.$store.state.openId
+				}).then(res => {
+					if (res.code === 200) {
+						this.setToken(res.data)
+						getUserInfo().then(ress => {
+							uni.setStorageSync('ywinfo', this.ywinfo)
+							this.setUserInfo(ress.data)
+							uni.redirectTo({
+								url: "/pages/staff/index"
+							})
+						})
+						saveHkUserOpenid({})
+					} else {
+						this.initCaptcha()
+					}
+				})
+			},
+			...mapMutations(["setToken", "setUserInfo"]),
+			tabsClick(val) {
+				this.activeTab = val
+				if (val == 0) {
+					this.form.username = this.form.username || this.form.phone
+					this.form.phone = null
+					this.form.code = null
+				} else {
+					this.form.phone = this.form.username || this.form.phone
+					this.form.password = null
+					this.form.username = null
+				}
+			},
+			changeFalg() {
+				this.ProtocolFlag = !this.ProtocolFlag
+			},
+			getContent() {
+				getSystemDictData({
+					dictCode: 'SYSTEM',
+					label: 'USER_PROTOCOL'
+				}).then(res => {
+					this.htmlText = res.data.code
+					this.isShowProtocol = true
+				})
+			},
+			showContent() {
+				this.getContent()
+			},
+			initCaptcha() {
+				if (!this.form.phone) return uni.showToast({
+					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+					icon: 'none'
+				})
+				sendSms({
+					phone: this.form.phone
+				}).then(res => {
+					this.countDown = 60
+					setInterval(() => {
+						if (this.countDown == 0) return
+						this.countDown--
+					}, 1000)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.login {
+		width: 100%;
+		display: flex;
+		padding-top: 130rpx;
+		box-sizing: border-box;
+		align-items: center;
+		flex-direction: column;
+		position: relative;
+		background: linear-gradient(180deg,
+				rgba(39, 155, 170, 0.2) 0%,
+				rgba(39, 155, 170, 0) 100%);
+
+		.login_logo {
+			width: 180rpx;
+			height: 180rpx;
+		}
+
+		.login_bg {
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			z-index: -1;
+		}
+
+		.login_title {
+			font-size: 44rpx;
+			font-weight: 600;
+			color: #333333;
+			margin-top: 40rpx;
+		}
+
+		.tabs {
+			display: flex;
+			align-items: center;
+			justify-content: space-evenly;
+			width: 530rpx;
+			margin: 60rpx auto 42rpx;
+
+			.tab {
+				font-size: 30rpx;
+				color: #666666;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				height: 52rpx;
+				line-height: 36rpx;
+			}
+
+			.active {
+				font-weight: bold;
+				font-size: 34rpx;
+				color: #222222;
+
+				.bor {
+					width: 80rpx;
+					height: 8rpx;
+					background: linear-gradient(to bottom, #4d99a8, #a3c8d4);
+				}
+			}
+		}
+
+		.login_list {
+			width: 100%;
+			padding: 0 60rpx;
+			box-sizing: border-box;
+
+			.login_list_item {
+				width: 100%;
+				border-radius: 50rpx;
+				height: 98rpx;
+				padding: 0 40rpx;
+				box-sizing: border-box;
+				background: #ffffff;
+				margin-bottom: 40rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+
+				&:last-child {
+					margin-bottom: 0 !important;
+				}
+
+				.captcha {
+					color: $uni-color-primary;
+					font-size: 30rpx;
+				}
+
+				image {
+					flex-shrink: 0;
+					width: 40rpx;
+					height: 40rpx;
+				}
+
+				.captcha {
+					width: 200rpx;
+				}
+
+				input {
+					flex: 1;
+					height: 100%;
+					color: #666666;
+					margin-left: 24rpx;
+					border: none;
+				}
+			}
+		}
+
+		.login_btn {
+			width: 100%;
+			padding: 0 60rpx;
+			box-sizing: border-box;
+			margin-top: 60rpx;
+
+			.for_psd {
+				color: $uni-color-primary;
+				width: 140rpx;
+				text-align: center;
+				margin: 40rpx auto;
+			}
+
+			.login_btn_n {
+				width: 100%;
+				height: 98rpx;
+				background: $uni-color-primary;
+				box-shadow: 0rpx 12rpx 24rpx 0rpx rgba(39, 155, 170, 0.2);
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #ffffff;
+				border-radius: 50rpx;
+			}
+		}
+
+		.deal_wrap {
+			position: absolute;
+			width: 100%;
+			left: 0;
+			text-align: center;
+			bottom: 48rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			.deal {
+				color: $uni-color-primary;
+			}
+
+			.checked {
+				width: 48rpx;
+				margin-right: 12rpx;
+			}
+		}
+
+		.rela_wrap {
+			position: relative;
+			margin-top: 360rpx;
+		}
+	}
+
+	.modal {
+		width: 690rpx;
+		max-height: 80vh;
+		border-radius: 24rpx;
+		padding: 30rpx 30rpx;
+		overflow: auto;
+		// .content{
+		// 	height: 100%;
+		// 	overflow: auto;
+		// }
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/waybill/home.vue b/h5/pages/waybill/home.vue
index dc5d12e..b1cead8 100644
--- a/h5/pages/waybill/home.vue
+++ b/h5/pages/waybill/home.vue
@@ -30,7 +30,7 @@
 </template>
 
 <script>
-	import { sendSms, validPhoneCaptcha } from '@/api'
+	import { sendSms, loginGkUserWithCode, wxAuthorizea, getUserInfo } from '@/api'
 	export default {
 		data() {
 			return {
@@ -38,24 +38,76 @@
 					code: '',
 					phone: ''
 				},
-				countDown: 0
+				countDown: 0,
+				
+				code: ''
 			};
+		},
+		onShow() {
+			var that = this
+			let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
+			let code = ''
+			if (window.location.href.indexOf('code=') !== -1 || this.code) {
+				this.userAuth(3)
+			} else {
+				// let url = window.location.href
+				const appID = 'wx173e6caf5abc718a'
+				let uri = encodeURIComponent(url)
+				let authURL =
+					`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
+				window.location.href = authURL
+			}
 		},
 		methods: {
 			onSubmit() {
 				const { code, phone } = this.form
 				if (!phone) return this.showToast('鎵嬫満鍙蜂笉鑳戒负绌�')
 				if (!code) return this.showToast('楠岃瘉鐮佷笉鑳戒负绌�')
-				validPhoneCaptcha({
-				  phone, code
+				loginGkUserWithCode({
+				  phone, code,openid: this.$store.state.openId, userType: 3
 				}).then(res => {
 				  if (res && res.code == 200) {
-				    uni.navigateTo({
-				      url: "/pages/waybill/list?phone=" + phone
-				    })
+						this.$store.commit('setToken', res.data.token)
+						getUserInfo().then(ress => {
+							this.$store.commit('setWaybillInfo', ress.data)
+							uni.navigateTo({
+								url: '/pages/waybill/list'
+							})
+						})
 				  }
 				})
 			},
+			userAuth(source) {
+				var that = this
+				let url = window.location.href
+				let code = ''
+				if (url.indexOf('code=') !== -1 || this.code) {
+					const query = url.split('?')
+					for (const q of query) {
+						if (q.indexOf('code=') !== -1) {
+							let statusIndex = q.indexOf('&state')
+							code = q.substring(q.indexOf('code=') + 5, statusIndex)
+						}
+					}
+					wxAuthorizea({
+						code: code || this.code,
+						source: source
+					}).then(res => {
+						if (res.code === 200) {
+							that.$store.commit('setOpenId', res.data.openid)
+							if (res.data.token) {
+								that.$store.commit('setToken', res.data.token)
+								getUserInfo().then(ress => {
+									that.$store.commit('setWaybillInfo', ress.data)
+									uni.navigateTo({
+										url: '/pages/waybill/list'
+									})
+								})
+							}
+						}
+					})
+				}
+			},
 			initCaptcha() {
 			  if (!this.form.phone) return uni.showToast({
 			    title: '鎵嬫満鍙蜂笉鑳戒负绌�',
diff --git a/h5/pages/waybill/list.vue b/h5/pages/waybill/list.vue
index 70dd191..3886421 100644
--- a/h5/pages/waybill/list.vue
+++ b/h5/pages/waybill/list.vue
@@ -1,5 +1,9 @@
 <template>
-	<view class="main_app">
+	<view class="main_app">
+		<view class="title_wrap">
+			<view class="name">{{ waybillInfo.realname || waybillInfo.username || waybillInfo.mobile }}锛屾杩庣櫥褰曪綖</view>
+			<view class="btn" @click="loginOut">閫�鍑虹櫥褰�</view>
+		</view>
 		<view class="head_wrap" @click="openModal">
 			<view class="search_box">
 				<image src="@/static/ic_search@2x.png" class="search" mode=""></image>
@@ -109,7 +113,8 @@
 
 <script>
 	import {
-		orderListTms
+		orderListTms,
+		logoutPost
 	} from '@/api'
 	import dayjs from 'dayjs';
 	export default {
@@ -119,7 +124,8 @@
 				list: [],
 				page: 1,
 				total: 0,
-
+				
+				waybillInfo: uni.getStorageSync('waybillInfo'),
 				showModal: false,
 				showStarttime: false,
 				showEndtime: false,
@@ -137,14 +143,11 @@
 			};
 		},
 		onLoad(options) {
-			this.$set(this.param, 'phoneNumber', options.phone)
 			this.getList()
 		},
 		methods: {
 			clear() {
-				this.param = {
-					phoneNumber: this.param.phoneNumber
-				}
+				this.param = {}
 				this.form = {}
 				this.page = 1
 				this.list = []
@@ -154,6 +157,17 @@
 			diaodu() {
 				uni.navigateTo({
 					url: '/pages/staff/signin'
+				})
+			},
+			loginOut() {
+				let app_url = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
+				logoutPost({
+					isH5: 1
+				}).then(res => {
+					this.$store.commit('empty')
+					setTimeout(() => {
+						window.location.href = app_url
+					}, 300)
 				})
 			},
 			modalSub() {
@@ -212,11 +226,6 @@
 					form,
 					page
 				} = this
-				// if (form.contract) {
-				// 	form.contractNumber = form.contract
-				// } else {
-				// 	form.contractNumber = null
-				// }
 				orderListTms({
 					parameters: {
 						...param,
@@ -240,6 +249,33 @@
 <style lang="scss">
 	page {
 		background: #F7F7F7;
+	}
+	.title_wrap {
+		display: flex;
+		justify-content: space-between;
+		// align-items: center;
+		background-color: #fff;
+		width: 750rpx;
+		height: 70rpx;
+		margin: -10rpx -30rpx 0;
+		padding: 12rpx 30rpx;
+		.name {
+			font-weight: 600;
+			font-size: 34rpx;
+			color: #222222;
+		}
+	
+		.btn {
+			width: 144rpx;
+			height: 56rpx;
+			border-radius: 36rpx;
+			border: 1rpx solid $uni-color-primary;
+			font-size: 26rpx;
+			color: $uni-color-primary;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
 	}
 	.head_title{
 		color: $uni-color-primary;
@@ -290,9 +326,8 @@
 
 	.scroll_Y {
 		background-color: #f7f7f7;
-		height: calc(100vh - 180rpx);
+		height: calc(100vh - 250rpx);
 		margin-top: 10rpx;
-
 		.main_list {
 			width: 750rpx;
 			margin: 0 -30rpx;
diff --git a/h5/pages/wdata/home.vue b/h5/pages/wdata/home.vue
index 4613bb3..db0bc8e 100644
--- a/h5/pages/wdata/home.vue
+++ b/h5/pages/wdata/home.vue
@@ -120,9 +120,9 @@
 								that.$store.commit('setToken', res.data.token)
 								getUserInfo().then(ress => {
 									that.$store.commit('setDriverInfo', ress.data)
-								})
-								uni.navigateTo({
-									url: '/pages/wdata/list'
+									uni.navigateTo({
+										url: '/pages/wdata/list'
+									})
 								})
 							}
 						}
diff --git a/h5/store/index.js b/h5/store/index.js
index 9e5b043..464e8a8 100644
--- a/h5/store/index.js
+++ b/h5/store/index.js
@@ -14,6 +14,7 @@
 const time = uni.getStorageSync('time')
 const userInfo = uni.getStorageSync('userInfo')
 const driverInfo = uni.getStorageSync('driverInfo')
+const waybillInfo = uni.getStorageSync('waybillInfo')
 const sessionKey = uni.getStorageSync('sessionKey')
 
 const store = new Vuex.Store({
@@ -27,6 +28,7 @@
 		time: time || null,
 		userInfo: userInfo || {},
 		driverInfo: driverInfo || {},
+		waybillInfo: waybillInfo || {},
 		height: height || '0',
 		sessionKey: sessionKey || '',
 		primaryColor: '#279baa'
@@ -42,6 +44,10 @@
 		setMember(state, val) {
 			state.member = val
 			uni.setStorageSync('member', val)
+		},
+		setWaybillInfo(state, val) {
+			state.waybillInfo = val
+			uni.setStorageSync('waybillInfo', val)
 		},
 		// 璁剧疆瀵艰埅鏍忛珮搴�
 		setHeight(state, val) {
@@ -84,6 +90,7 @@
 			state.openId = ''
 			state.userInfo = {}
 			state.driverInfo = {}
+			state.waybillInfo = {}
 		}
 	},
 	actions: {
diff --git a/screen/src/assets/images/ic_jiankong@2x.png b/screen/src/assets/images/ic_jiankong@2x.png
new file mode 100644
index 0000000..7495067
--- /dev/null
+++ b/screen/src/assets/images/ic_jiankong@2x.png
Binary files differ
diff --git a/screen/src/views/EnergyConsum.vue b/screen/src/views/EnergyConsum.vue
index 6a4ec2a..1071fa2 100644
--- a/screen/src/views/EnergyConsum.vue
+++ b/screen/src/views/EnergyConsum.vue
@@ -143,22 +143,18 @@
                 </div>
                 <div class="static" v-if="data1.gasQuantity">
                   <span class="lab">鍚屾瘮</span>
-                  <template v-if="data1.gasQuantity.sameNum">
-                    <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.sameNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
+                  <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.sameNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                   <span class="val" v-if="data1.gasQuantity.totalNum && data1.gasQuantity.totalNum != 0">{{
                     Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.sameNum) / data1.gasQuantity.totalNum
                       * 100).toFixed(1))
                   }}%</span>
                   <span class="val" v-else style="margin-left: 4px;">-</span>
                   <span class="lab">鐜瘮</span>
-                  <template v-if="data1.gasQuantity.sameNum">
-                    <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.ringNum" class="icon"
-                      src="@/assets/images/ic_up.webp" alt="" />
-                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
-                  </template>
+                  <img v-if="data1.gasQuantity.totalNum > data1.gasQuantity.ringNum" class="icon"
+                    src="@/assets/images/ic_up.webp" alt="" />
+                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                   <span class="val" v-if="data1.gasQuantity.totalNum && data1.gasQuantity.totalNum != 0">{{
                     Math.abs(((data1.gasQuantity.totalNum - data1.gasQuantity.ringNum) / data1.gasQuantity.totalNum
                       * 100).toFixed(1))
@@ -933,7 +929,7 @@
       }
 
       .bottom {
-        width: 140px;
+        width: 150px;
         height: 194px;
         position: absolute;
         text-align: center;
diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue
index 9f37ba8..1f74d2b 100644
--- a/screen/src/views/LogisticsCenter.vue
+++ b/screen/src/views/LogisticsCenter.vue
@@ -148,14 +148,14 @@
                 <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt="">
                 <div class="content">
                   <div class="name">褰撴棩璁㈠崟閲�</div>
-                  <div class="num"><span class="blue">{{ cneterData.currentOrderNum }}</span>涓囨敮</div>
+                  <div class="num"><span class="blue" v-if="cneterData.currentOrderNum">{{ cneterData.currentOrderNum.toFixed(0) }}</span>绠�</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2.png" alt="">
                 <div class="content">
                   <div class="name">褰撴棩璁″垝閲�</div>
-                  <div class="num"><span>{{ cneterData.currentPlanNum }}</span>涓囨敮</div>
+                  <div class="num"><span v-if="cneterData.currentPlanNum">{{ cneterData.currentPlanNum.toFixed(0) }}</span>绠�</div>
                   <div class="unit">杞︽锛歿{ cneterData.currentPlanCarNum }}</div>
                 </div>
               </div>
@@ -163,7 +163,7 @@
                 <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt="">
                 <div class="content">
                   <div class="name">浠婃棩鍑哄簱閲�</div>
-                  <div class="num"><span class="finish">{{ cneterData.crrentOutNum }}</span>涓囨敮</div>
+                  <div class="num"><span v-if="cneterData.crrentOutNum" class="finish">{{ cneterData.crrentOutNum.toFixed(0) }}</span>绠�</div>
                   <div class="unit">杞︽锛歿{ cneterData.crrentOutCarNum }}</div>
                 </div>
               </div>
@@ -171,7 +171,7 @@
                 <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍓╀綑浠诲姟閲�</div>
-                  <div class="num"><span class="today">{{ cneterData.crrentRestNum }}</span>涓囨敮</div>
+                  <div class="num"><span v-if="cneterData.crrentRestNum" class="today">{{ cneterData.crrentRestNum.toFixed(0) }}</span>绠�</div>
                   <div class="unit">杞︽锛歿{ cneterData.crrentRestCarNum }}</div>
                 </div>
               </div>
@@ -278,7 +278,7 @@
               <div class="side">
                 鍏ㄧ渷锛�
                 <span>{{ data5.currentNum }}</span>
-                <span class="unit">涓囨敮 | </span>
+                <span class="unit">绠� | </span>
                 <span v-if="data5.totalNum">{{ ((data5.currentNum / data5.totalNum) * 100).toFixed(1) }}%</span>
               </div>
             </div>
@@ -295,7 +295,7 @@
               <div class="side">
                 鍏ㄧ渷锛�
                 <span>{{ data6.currentNum }}</span>
-                <span class="unit">涓囨敮 | </span>
+                <span class="unit">绠� | </span>
                 <span v-if="data6.totalNum">{{ ((data6.currentNum / data6.totalNum) * 100).toFixed(1) }}%</span>
               </div>
             </div>
@@ -658,14 +658,14 @@
                           <span class="dot bj"></span>
                           <span class="item-state-num">
                             <span class="text">鏈湀璋冩嫧閲忥細</span>
-                            <span class="num">${params.data.monthNum}涓囨敮</span>
+                            <span class="num">${params.data.monthNum}绠�</span>
                           </span>
                         </div>
                         <div class="item-state-con">
                           <span class="dot yj"></span>
                           <span class="item-state-num">
                            <span class="text">鏈勾璋冩嫧閲忥細</span>
-                            <span class="num">${params.data.yearNum}涓囨敮</span>
+                            <span class="num">${params.data.yearNum}绠�</span>
                           </span>
                         </div>
                         <div class="item-state-con">
@@ -1240,7 +1240,7 @@
         nameTextStyle: {
           color: '#869CC9',
         },
-        name: '涓囨敮',
+        name: '绠�',
         nameGap: 16,
         type: 'value',
         axisLabel: {
@@ -1442,7 +1442,7 @@
     }],
     yAxis: [
       {
-        name: '涓囨敮',
+        name: '绠�',
         nameGap: 16,
         type: 'value',
         axisLabel: {
@@ -2159,7 +2159,6 @@
       .static_wrap {
         display: flex;
         justify-content: space-between;
-        align-items: center;
         margin: 30px 0 14px;
 
         .item {
@@ -2263,7 +2262,7 @@
               align-items: center;
               justify-content: center;
               min-width: 76px;
-              border: 1px solid #fff;
+              border: 1px solid #FECE01;
 
               .icon {
                 position: absolute;
@@ -2280,7 +2279,7 @@
 
             .tag1 {
               background-color: #28F0CC;
-
+              border: 1px solid #28F0CC;
               .icon {
                 background-color: #28F0CC;
               }
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index 8fcfb75..2a13ff0 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -201,6 +201,12 @@
                 </div>
               </div>
             </div>
+            <div @click="openCloudAddr" class="monitoring">
+              <img src="@/assets/images/ic_jiankong@2x.png" class="icon" alt="">
+              <div>杞﹁締鐩戞帶骞冲彴</div>
+              <img class="top" src="@/assets/images/SecurityControl/ar_open@2x.png" alt="">
+            </div>
+
           </div>
         </div>
         <div class="right_box">
@@ -850,6 +856,10 @@
   })
 }
 
+const openCloudAddr = () => {
+  window.open('https://vms.hikvisionauto.com:8040/', '_blank')
+}
+
 
 const data1 = ref({})
 const activeTab1 = ref(0)
@@ -1347,6 +1357,7 @@
           overflow: auto;
           padding-left: 10px;
           padding-bottom: 12px;
+
           .line {
             font-size: 13px;
             color: #D2E0FF;
@@ -1368,6 +1379,35 @@
           }
         }
       }
+
+      .monitoring {
+        position: absolute;
+        cursor: pointer;
+        bottom: 10px;
+        left: 0;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        font-weight: 500;
+        font-size: 15px;
+        width: 156px;
+        height: 40px;
+        background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
+        border-radius: 2px;
+        border: 1px solid;
+        border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
+
+        .icon {
+          width: 16px;
+          height: 16px;
+          margin-right: 10px;
+        }
+
+        .top {
+          width: 7px;
+          margin-left: 6px;
+        }
+      }
     }
   }
 

--
Gitblit v1.9.3