From f3bd5baa8eb4eb7a896f7312a2e9a7c89a46cef5 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期二, 27 八月 2024 09:18:29 +0800
Subject: [PATCH] ll

---
 h5/pages.json                          |   18 
 h5/api/index.js                        |    1 
 h5/main.js                             |    7 
 h5/api/driver.js                       |   75 ++
 h5/pages/driver/index.vue              |  616 +++++++++--------
 h5/pages/driver/reservedGuide.vue      |   10 
 h5/pages/driver/forgetPsd.vue          |  241 +++++++
 h5/pages/driver/reserved.vue           |  184 +++-
 h5/pages/driver/reservedDetail.vue     |  216 +++--
 h5/.gitignore                          |    1 
 h5/store/index.js                      |    7 
 h5/pages/staff/task/visitorApprove.vue |    7 
 h5/pages/driver/taskDetail.vue         |    2 
 h5/pages/staff/task/index.vue          |   23 
 h5/pages/staff/task/driver.vue         |  445 +++++++++++++
 h5/pages/driver/reservedRecord.vue     |   95 +-
 h5/App.vue                             |    3 
 h5/pages/driver/login.vue              |   57 
 h5/pages/driver/register.vue           |   11 
 19 files changed, 1,492 insertions(+), 527 deletions(-)

diff --git a/h5/.gitignore b/h5/.gitignore
index dc260c4..951e49c 100644
--- a/h5/.gitignore
+++ b/h5/.gitignore
@@ -1,6 +1,7 @@
 .DS_Store
 coderd.json
 node_modules
+uni_modules
 .env.development
 uview-ui
 
diff --git a/h5/App.vue b/h5/App.vue
index 0d25d8c..fbec5c3 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -122,7 +122,7 @@
 }
 
 .placeholder9 {
-  color: #999999;
+  color: #999999 !important;
   font-size: 28rpx;
 }
 
@@ -197,7 +197,6 @@
   width: 64rpx;
   height: 64rpx;
   border-radius: 50%;
-  overflow: hidden;
   margin-right: 20rpx;
   display: flex;
   justify-content: center;
diff --git a/h5/api/driver.js b/h5/api/driver.js
new file mode 100644
index 0000000..5c9bd7f
--- /dev/null
+++ b/h5/api/driver.js
@@ -0,0 +1,75 @@
+import { http } from '@/utils/service.js'
+
+// 鍙告満娉ㄥ唽
+export const driverRegister = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/member/registerDriver',
+    method: 'post',
+    data
+  })
+}
+// 鍙告満鐧诲綍
+export const driverLogin = (data) => {
+  return http({
+    url: 'loginDriver',
+    method: 'post',
+    data
+  })
+}
+// 鍙告満棣栭〉
+export const driverHomeData = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/driverHome',
+    method: 'get',
+    data
+  })
+}
+
+// 鐗╂祦杞� 鍏ュ洯鍘熷洜
+export const driverReasonList = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/platformReasonList',
+    method: 'get',
+    data
+  })
+}
+// 鏌ヨ鍙绾﹂噺
+export const checkSurplusNum = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/checkSurplusNum',
+    method: 'post',
+    data
+  })
+}
+// 鐗╂祦杞﹂绾�
+export const driverCarApply = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/apply',
+    method: 'post',
+    data
+  })
+}
+// 鐗╂祦杞︽挙閿�
+export const driverCarRevoke= (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/revoke',
+    method: 'post',
+    data
+  })
+}
+// 棰勭害 	璁板綍
+export const driverApplyRecord = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/page',
+    method: 'post',
+    data
+  })
+}
+// 棰勭害 	璇︽儏
+export const driverApplyDetail = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/getDetail',
+    method: 'get',
+    data
+  })
+}
\ No newline at end of file
diff --git a/h5/api/index.js b/h5/api/index.js
index 3734784..e373597 100644
--- a/h5/api/index.js
+++ b/h5/api/index.js
@@ -3,6 +3,7 @@
 export * from './visitor'
 export * from './staff'
 export * from './meeting'
+export * from './driver'
 
 
 
diff --git a/h5/main.js b/h5/main.js
index 4c90c6f..41c035c 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -17,6 +17,13 @@
 Vue.prototype.$store = store
 Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
 Vue.prototype.$goBack = () => { uni.navigateBack() }
+Vue.prototype.showToast = (str) => {
+	uni.showToast({
+	  title: str,
+	  icon: 'none',
+	  duration: 2000
+	})
+}
 Vue.prototype.$eventBus = new Vue()
 Vue.prototype.$onWait = new Promise((resolve) => {
   Vue.prototype.$reslove = resolve
diff --git a/h5/pages.json b/h5/pages.json
index a7a6648..3c94d9d 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -423,6 +423,24 @@
             }
             
         }
+        ,{
+            "path" : "pages/driver/forgetPsd",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "鎵惧洖瀵嗙爜",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/staff/task/driver",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "鍏ュ洯瀹℃壒",
+                "enablePullDownRefresh": false
+            }
+            
+        }
     ],
 	"subPackages": [
 		{
diff --git a/h5/pages/driver/forgetPsd.vue b/h5/pages/driver/forgetPsd.vue
new file mode 100644
index 0000000..7512424
--- /dev/null
+++ b/h5/pages/driver/forgetPsd.vue
@@ -0,0 +1,241 @@
+<template>
+  <view class="login">
+    <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_list">
+      <view class="login_list_item">
+        <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
+        <input v-model="form.phone" maxlength="18" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
+      </view>
+      <view class="login_list_item">
+        <image src="@/static/ic_captcha.png" mode="widthFix"></image>
+        <input
+          v-model="form.validCode"
+          placeholder="璇疯緭鍏ラ獙璇佺爜"
+          type="text"
+        />
+        <text class="captcha" v-if="countDown == 0" @click="initCaptcha"
+          >鑾峰彇楠岃瘉鐮�</text
+        >
+        <text class="placeholder9" v-else>{{ countDown }}</text>
+      </view>
+      <view class="login_list_item">
+        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
+        <input
+          v-model="form.password"
+          type="password"
+          placeholder="璇疯緭鍏ユ柊瀵嗙爜"
+        />
+      </view>
+      <view class="login_list_item">
+        <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
+        <input
+          v-model="form.newPassword"
+          type="password"
+          placeholder="璇峰啀娆¤緭鍏ユ柊瀵嗙爜"
+        />
+      </view>
+    </view>
+    <view class="login_btn">
+      <view class="login_btn_n" @click="onLogin">纭淇敼</view>
+    </view>
+  </view>
+</template>
+
+<script>
+import { resetPassword, sendSms } from '@/api'
+export default {
+  data() {
+    return {
+      form: {
+      },
+      countDown: 0
+    }
+  },
+
+  onLoad() {
+  },
+
+  methods: {
+    dealChange(e) {
+      console.log(e)
+    },
+    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)
+      })
+    },
+
+    onLogin() {
+      const { form } = this
+      if (!form.phone) return uni.showToast({
+        title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+        icon: 'none'
+      })
+      if (!form.validCode) return uni.showToast({
+        title: '楠岃瘉鐮佷笉鑳戒负绌�',
+        icon: 'none'
+      })
+      if (!form.password) return uni.showToast({
+        title: '鏂板瘑鐮佷笉鑳戒负绌�',
+        icon: 'none'
+      })
+      if (!form.newPassword) return uni.showToast({
+        title: '纭瀵嗙爜涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (form.password != form.newPassword) return uni.showToast({
+        title: '涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�',
+        icon: 'none'
+      })
+      resetPassword({
+        ...form
+      }).then(res => {
+        if (res && res.code == 200) {
+          setTimeout(() => {
+            uni.showToast({
+              title: '瀵嗙爜淇敼鎴愬姛,璇烽噸鏂扮櫥褰�',
+              icon: 'success',
+              duration: 2000
+            })
+          })
+          uni.redirectTo({
+            url: "/pages/staffLogin/login"
+          })
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.login {
+  width: 100%;
+  display: flex;
+  padding-top: 100rpx;
+  box-sizing: border-box;
+  align-items: center;
+  flex-direction: column;
+  background: linear-gradient(
+    180deg,
+    rgba(39, 155, 170, 0.2) 0%,
+    rgba(39, 155, 170, 0) 100%
+  );
+  .login_logo {
+    width: 180rpx;
+    height: 180rpx;
+		margin-bottom: 40rpx;
+  }
+  .login_bg {
+    position: absolute;
+    top: 0;
+    width: 750rpx;
+  }
+  .login_title {
+    font-size: 44rpx;
+    font-weight: 600;
+    color: #333333;
+  }
+  .login_list {
+		margin-top: 60rpx;
+    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 {
+        color: $uni-color-primary;
+      }
+      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: 80rpx;
+    .for_psd {
+      color: $uni-color-primary;
+      margin-top: 40rpx;
+      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: 108rpx;
+    .deal {
+      color: $uni-color-primary;
+    }
+  }
+	.btns{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		position: fixed;
+		bottom: 60rpx;
+		left: 0;
+		width: 100%;
+		.btn{
+			font-size: 30rpx;
+			color: $uni-color-primary;
+		}
+		.separate{ margin: 0 8rpx; }
+	}
+}
+.modal {
+  padding: 32rpx;
+}
+</style>
+
diff --git a/h5/pages/driver/index.vue b/h5/pages/driver/index.vue
index 42ee41e..2df909e 100644
--- a/h5/pages/driver/index.vue
+++ b/h5/pages/driver/index.vue
@@ -1,312 +1,346 @@
 <template>
-  <view class="main_app">
-    <view class="title_wrap">
-      <view class="name">鏌愭煇鏌愶紝娆㈣繋鐧诲綍锝�</view>
-      <view class="btn" @click="loginOut">閫�鍑虹櫥褰�</view>
-    </view>
-    <!--  -->
-    <view class="banner_wrap">
-      <view class="h1">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
-      <view class="h2">鐗╂祦杞︿笓鍖�</view>
-      <image
-        class="banner"
-        src="../../static/driver/wuliuche_banner@2x.png"
-        mode="widthFix"
-      ></image>
-    </view>
-    <!--  -->
-    <view class="task_list">
-      <view class="item">
-        <view class="head">
-          <view class="name">杩愯緭鍗�222</view>
-          <view class="status">
-            <view class="text">璇风‘璁や换鍔�</view>
-            <view class="time">棰勮绛夊緟锛�12灏忔椂</view>
-          </view>
-        </view>
-        <view class="content">
-          <view class="info">
-            <view class="plate">
-              <image
-                src="@/static/driver/wuliu_ic_car@2x.png"
-                class="icon"
-                mode=""
-              ></image>
-              <text>鐨朅D</text>
-            </view>
-            <view class="plate">
-              <image
-                src="@/static/driver/wuliu_ic_huowu@2x.png"
-                class="icon"
-                mode=""
-              ></image>
-              <text>3000涓�</text>
-            </view>
-          </view>
-          <view class="sub">
-            <view class="time">02-01 08:11:11</view>
-            <view class="sub_btn" @click="handleTask()">纭浠诲姟</view>
-          </view>
-        </view>
-      </view>
-    </view>
-    <!--  -->
-    <view class="title_wrap"><view class="name">涓氬姟鍔炵悊</view></view>
-    <view class="container1">
-      <view class="left">
-        <view class="img_wrap img1" @click="$jump('/pages/driver/reserved')">
-          <image
-            src="@/static/driver/wuliu_ic_ruyuanyuyue@2x.png"
-            class="img"
-          ></image>
-          <view class="h1">鍏ュ洯椤荤煡</view>
-          <view class="h2">RESERVATION</view>
-        </view>
-        <view
-          class="img_wrap img2"
-          @click="$jump('/pages/driver/reservedGuide')"
-        >
-          <image
-            src="@/static/driver/wuliu_ic_zhinan@2x.png"
-            class="img"
-          ></image>
-          <view class="h1">棰勭害鎸囧崡</view>
-          <view class="h2">APPOINTMENT GUIDE</view>
-        </view>
-      </view>
-      <view class="right">
-        <view
-          class="img_wrap img2"
-          @click="$jump('/pages/driver/reservedRecord')"
-        >
-          <image
-            src="@/static/driver/wuliu_ic_yuyuejilu@2x.png"
-            class="img"
-          ></image>
-          <view class="h1">棰勭害璁板綍</view>
-          <view class="h2">APPOINTMENT RECORD</view>
-        </view>
-        <view class="img_wrap img2" @click="$jump('/pages/driver/queueUp')">
-          <image
-            src="@/static/driver/wuliu_ic_paidui@2x.png"
-            class="img"
-          ></image>
-          <view class="h1">鏈堝彴鎺掗槦鎯呭喌</view>
-          <view class="h2">HIDDEN DANGER</view>
-        </view>
-        <view class="img_wrap img2">
-          <image
-            src="@/static/driver/wuliu_ic_daolan@2x.png"
-            class="img"
-          ></image>
-          <view class="h1">鍥尯瀵艰鍥�</view>
-          <view class="h2">GUIDE MAP</view>
-        </view>
-      </view>
-    </view>
-    <!--  -->
-    <view class="copyright">
-      <image src="@/static/logo_s@2x.png" class="mr6" mode="widthFix" />
-      <text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
-    </view>
-  </view>
+	<view class="main_app">
+		<view class="title_wrap">
+			<view class="name">{{ driverInfo.realname }}锛屾杩庣櫥褰曪綖</view>
+			<view class="btn" @click="loginOut">閫�鍑虹櫥褰�</view>
+		</view>
+		<!--  -->
+		<view class="banner_wrap">
+			<view class="h1">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
+			<view class="h2">鐗╂祦杞︿笓鍖�</view>
+			<image class="banner" src="../../static/driver/wuliuche_banner@2x.png" mode="widthFix"></image>
+		</view>
+		<!--  -->
+		<view class="task_list">
+			<swiper circular class="task_swiper">
+				<swiper-item>
+					<view class="item">
+						<view class="head">
+							<view class="name">杩愯緭鍗�222</view>
+							<view class="status">
+								<view class="text">璇风‘璁や换鍔�</view>
+								<view class="time">棰勮绛夊緟锛�12灏忔椂</view>
+							</view>
+						</view>
+						<view class="content">
+							<view class="info">
+								<view class="plate">
+									<image src="@/static/driver/wuliu_ic_car@2x.png" class="icon" mode=""></image>
+									<text>鐨朅D</text>
+								</view>
+								<view class="plate">
+									<image src="@/static/driver/wuliu_ic_huowu@2x.png" class="icon" mode=""></image>
+									<text>3000涓�</text>
+								</view>
+							</view>
+							<view class="sub">
+								<view class="time">02-01 08:11:11</view>
+								<view class="sub_btn" @click="handleTask()">纭浠诲姟</view>
+							</view>
+						</view>
+					</view>
+				</swiper-item>
+				<swiper-item>
+					<view class="item">
+						<view class="head">
+							<view class="name">杩愯緭鍗�222</view>
+							<view class="status"><view class="text">璇蜂笌鐜板満绛惧埌</view></view>
+						</view>
+						<view class="content">
+							<view class="info">
+								<view class="plate">
+									<image src="@/static/driver/wuliu_ic_car@2x.png" class="icon" mode=""></image>
+									<text>鐨朅D</text>
+								</view>
+								<view class="plate">
+									<image src="@/static/driver/wuliu_ic_huowu@2x.png" class="icon" mode=""></image>
+									<text>3000涓�</text>
+								</view>
+							</view>
+							<view class="sub">
+								<view class="time">02-01 08:11:11</view>
+								<view class="sub_btn" @click="handleTask(1)">绔嬪嵆绛惧埌</view>
+							</view>
+						</view>
+					</view>
+				</swiper-item>
+			</swiper>
+		</view>
+		<!--  -->
+		<view class="title_wrap"><view class="name">涓氬姟鍔炵悊</view></view>
+		<view class="container1">
+			<view class="left">
+				<view class="img_wrap img1" @click="$jump('/pages/driver/reserved')">
+					<image src="@/static/driver/wuliu_ic_ruyuanyuyue@2x.png" class="img"></image>
+					<view class="h1">鍏ュ洯椤荤煡</view>
+					<view class="h2">RESERVATION</view>
+				</view>
+				<view class="img_wrap img2" @click="$jump('/pages/driver/reservedGuide?str=bookingTips')">
+					<image src="@/static/driver/wuliu_ic_zhinan@2x.png" class="img"></image>
+					<view class="h1">棰勭害鎸囧崡</view>
+					<view class="h2">APPOINTMENT GUIDE</view>
+				</view>
+			</view>
+			<view class="right">
+				<view class="img_wrap img2" @click="$jump('/pages/driver/reservedRecord')">
+					<image src="@/static/driver/wuliu_ic_yuyuejilu@2x.png" class="img"></image>
+					<view class="h1">棰勭害璁板綍</view>
+					<view class="h2">APPOINTMENT RECORD</view>
+				</view>
+				<view class="img_wrap img2" @click="$jump('/pages/driver/queueUp')">
+					<image src="@/static/driver/wuliu_ic_paidui@2x.png" class="img"></image>
+					<view class="h1">鏈堝彴鎺掗槦鎯呭喌</view>
+					<view class="h2">HIDDEN DANGER</view>
+				</view>
+				<view class="img_wrap img2" @click="$jump('/pages/driver/reservedGuide?str=reservationMap')">
+					<image src="@/static/driver/wuliu_ic_daolan@2x.png" class="img"></image>
+					<view class="h1">鍥尯瀵艰鍥�</view>
+					<view class="h2">GUIDE MAP</view>
+				</view>
+			</view>
+		</view>
+		<!--  -->
+		<view class="copyright">
+			<image src="@/static/logo_s@2x.png" class="mr6" mode="widthFix" />
+			<text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
+		</view>
+	</view>
 </template>
 
 <script>
+import { logoutPost, driverHomeData } from '@/api';
 export default {
-  data() {
-    return {
-
-    }
-  },
-  methods: {
-    handleTask() {
-      uni.navigateTo({
-        url: '/pages/driver/taskConfirm'
-      })
-    }
-  }
-}
+	data() {
+		return {
+			driverInfo: uni.getStorageSync('driverInfo')
+		};
+	},
+	created() {
+		this.initData();
+	},
+	methods: {
+		initData() {
+			driverHomeData().then(res => {
+				if (res.code == 200) {
+					uni.setStorageSync('driverGuide', {
+						bookingTips: res.data.bookingTips,
+						reservationMap: res.data.reservationMap
+					});
+				}
+			});
+		},
+		loginOut() {
+			this.$store.commit('empty');
+			logoutPost();
+			uni.redirectTo({
+				url: '/pages/driver/login'
+			});
+		},
+		handleTask(status) {
+			if (status == 1) {
+				return uni.navigateTo({
+					url: '/pages/driver/taskDetail'
+				});
+			}
+			uni.navigateTo({
+				url: '/pages/driver/taskConfirm'
+			});
+		}
+	}
+};
 </script>
 
 <style lang="scss">
 .title_wrap {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 24rpx;
-  .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;
-  }
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 24rpx;
+	.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;
+	}
 }
 .main_app {
-  padding-top: 12rpx;
+	padding-top: 12rpx;
 }
 .banner_wrap {
-  padding: 54rpx 44rpx;
-  color: #fff;
-  position: relative;
-  width: 688rpx;
-  height: 270rpx;
-  margin-bottom: 40rpx;
-  .h1 {
-    font-weight: bold;
-    line-height: 66rpx;
-    font-size: 44rpx;
-    margin-bottom: 14rpx;
-  }
-  .h2 {
-    font-weight: 600;
-    font-size: 28rpx;
-    width: 192rpx;
-    color: $uni-color-primary;
-    height: 48rpx;
-    line-height: 48rpx;
-    text-align: center;
-    background: #ffffff;
-    box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
-    border-radius: 24rpx;
-  }
-  .banner {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: -1;
-  }
+	padding: 54rpx 44rpx;
+	color: #fff;
+	position: relative;
+	width: 688rpx;
+	height: 270rpx;
+	margin-bottom: 40rpx;
+	.h1 {
+		font-weight: bold;
+		line-height: 66rpx;
+		font-size: 44rpx;
+		margin-bottom: 14rpx;
+	}
+	.h2 {
+		font-weight: 600;
+		font-size: 28rpx;
+		width: 192rpx;
+		color: $uni-color-primary;
+		height: 48rpx;
+		line-height: 48rpx;
+		text-align: center;
+		background: #ffffff;
+		box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
+		border-radius: 24rpx;
+	}
+	.banner {
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		z-index: -1;
+	}
 }
 .container1 {
-  display: flex;
-  flex-wrap: wrap;
-  view {
-    width: 336rpx;
-  }
-  .left {
-    margin-right: 18rpx;
-  }
-  .img_wrap {
-    position: relative;
-    padding: 24rpx 0rpx 0 28rpx;
-    border-radius: 8rpx;
-    overflow: hidden;
-    .h1 {
-      font-weight: 600;
-      font-size: 32rpx;
-      color: #222222;
-      line-height: 48rpx;
-      margin-bottom: 4rpx;
-    }
-    .h2 {
-      font-size: 22rpx;
-      color: #7b9da1;
-      line-height: 34rpx;
-    }
-    .img {
-      width: 100%;
-      height: 100%;
-      position: absolute;
-      top: 0;
-      left: 0;
-      z-index: -1;
-    }
-  }
-  .img1 {
-    width: 336rpx;
-    height: 296rpx;
-    margin-bottom: 16rpx;
-  }
-  .img2 {
-    width: 336rpx;
-    height: 140rpx;
-    margin-bottom: 16rpx;
-  }
+	display: flex;
+	flex-wrap: wrap;
+	view {
+		width: 336rpx;
+	}
+	.left {
+		margin-right: 18rpx;
+	}
+	.img_wrap {
+		position: relative;
+		padding: 24rpx 0rpx 0 28rpx;
+		border-radius: 8rpx;
+		overflow: hidden;
+		.h1 {
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #222222;
+			line-height: 48rpx;
+			margin-bottom: 4rpx;
+		}
+		.h2 {
+			font-size: 22rpx;
+			color: #7b9da1;
+			line-height: 34rpx;
+		}
+		.img {
+			width: 100%;
+			height: 100%;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: -1;
+		}
+	}
+	.img1 {
+		width: 336rpx;
+		height: 296rpx;
+		margin-bottom: 16rpx;
+	}
+	.img2 {
+		width: 336rpx;
+		height: 140rpx;
+		margin-bottom: 16rpx;
+	}
 }
 .task_list {
-  margin-bottom: 48rpx;
-  .item {
-    background: #ffffff;
-    box-shadow: 0rpx 4rpx 32rpx 0rpx rgba(39, 155, 170, 0.18);
-    border-radius: 16rpx;
-    .head {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
-      padding: 20rpx 30rpx;
-      .name {
-        font-weight: 600;
-        font-size: 36rpx;
-        color: #222222;
-      }
-      .status {
-        color: $uni-color-primary;
-        font-weight: 600;
-        .time {
-          font-size: 24rpx;
-          font-weight: 360;
-        }
-      }
-    }
-    .content {
-      .info {
-        display: flex;
-        padding: 24rpx 30rpx;
-        .plate {
-          flex: 1;
-          display: flex;
-          align-items: center;
-          .icon {
-            width: 26rpx;
-            height: 26rpx;
-            margin-right: 10rpx;
-          }
-        }
-      }
-      .sub {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        padding: 0 30rpx 24rpx;
-        .time {
-          font-size: 26rpx;
-          color: #999999;
-        }
-        .sub_btn {
-          height: 68rpx;
-          line-height: 68rpx;
-          padding: 0 34rpx;
-          color: #ffffff;
-          background: $uni-color-primary;
-          box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
-          border-radius: 40rpx;
-        }
-      }
-    }
-  }
+	margin-bottom: 48rpx;
+	.task_swiper {
+		padding: 16rpx 10rpx;
+		height: 320rpx;
+		width: 730rpx;
+		margin-left: -20rpx;
+		box-sizing: border-box;
+	}
+	.item {
+		background: #ffffff;
+		box-shadow: 0rpx 0rpx 12rpx 0rpx rgba(39, 155, 170, 0.32);
+		border-radius: 16rpx;
+		height: 280rpx;
+		width: 98%;
+		margin-left: 1%;
+		.head {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
+			padding: 0rpx 30rpx;
+			height: 92rpx;
+			.name {
+				font-weight: 600;
+				font-size: 36rpx;
+				color: #222222;
+			}
+			.status {
+				color: $uni-color-primary;
+				font-weight: 600;
+				text-align: right;
+				.time {
+					font-size: 24rpx;
+					font-weight: 360;
+				}
+			}
+		}
+		.content {
+			height: 180rpx;
+			.info {
+				display: flex;
+				padding: 24rpx 30rpx;
+				.plate {
+					flex: 1;
+					display: flex;
+					align-items: center;
+					.icon {
+						width: 26rpx;
+						height: 26rpx;
+						margin-right: 10rpx;
+					}
+				}
+			}
+			.sub {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				padding: 0 30rpx 24rpx;
+				.time {
+					font-size: 26rpx;
+					color: #999999;
+				}
+				.sub_btn {
+					height: 68rpx;
+					line-height: 68rpx;
+					padding: 0 34rpx;
+					color: #ffffff;
+					background: $uni-color-primary;
+					box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
+					border-radius: 40rpx;
+				}
+			}
+		}
+	}
 }
 .copyright {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  margin-top: 44rpx;
-  font-size: 24rpx;
-  color: #666666;
-  image {
-    width: 40rpx;
-    height: 40rpx;
-  }
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	margin-top: 44rpx;
+	font-size: 24rpx;
+	color: #666666;
+	image {
+		width: 40rpx;
+		height: 40rpx;
+	}
 }
 </style>
diff --git a/h5/pages/driver/login.vue b/h5/pages/driver/login.vue
index cc0ff66..4dede46 100644
--- a/h5/pages/driver/login.vue
+++ b/h5/pages/driver/login.vue
@@ -7,7 +7,7 @@
     <view class="login_list">
       <view class="login_list_item">
         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
-        <input v-model="form.phone" maxlength="18" placeholder="鎵嬫満鍙�" />
+        <input v-model="form.username" maxlength="18" placeholder="鎵嬫満鍙�" />
       </view>
       <view class="login_list_item">
         <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
@@ -25,52 +25,53 @@
 		<view class="btns">
 			<view class="btn" @click="handleRegister">绔嬪嵆娉ㄥ唽</view>
 			<view class="btn separate"> | </view>
-			<view class="btn">蹇樿瀵嗙爜</view>
+			<view class="btn" @click="handleSetPsd">蹇樿瀵嗙爜</view>
 		</view>
   </view>
 </template>
 
 <script>
-import { resetPassword, sendSms } from '@/api'
+import { driverLogin, loginCaptcha, getUserInfo } from '@/api'
+import { mapState, mapMutations } from 'vuex'
 export default {
   data() {
     return {
       form: {
+				username: '13996529050',
+				password: '1'
       },
       isShowProtocol: false,
       countDown: 0
     }
   },
-
   onLoad() {
+		this.initCaptcha()
   },
-
+	
   methods: {
+		...mapMutations(["setToken", "setDriverInfo"]),
 		handleRegister() {
 			uni.navigateTo({
 				url: "/pages/driver/register"
+			})
+		},
+		handleSetPsd() {
+			uni.navigateTo({
+				url: "/pages/driver/forgetPsd"
 			})
 		},
     dealChange(e) {
       console.log(e)
     },
     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)
+      loginCaptcha().then(res => {
+        this.captcha = res.data
       })
     },
 
     onLogin() {
       const { form } = this
-      if (!form.phone) return uni.showToast({
+      if (!form.username) return uni.showToast({
         title: '鎵嬫満鍙蜂笉鑳戒负绌�',
         icon: 'none'
       })
@@ -78,19 +79,21 @@
         title: '瀵嗙爜涓嶈兘涓虹┖',
         icon: 'none'
       })
-      resetPassword({
-        ...form
+      driverLogin({
+        ...form,
+				uuid: this.captcha.uuid,
+				code: '1'
       }).then(res => {
-        if (res && res.code == 200) {
-          setTimeout(() => {
-            uni.showToast({
-              title: '瀵嗙爜淇敼鎴愬姛,璇烽噸鏂扮櫥褰�',
-              icon: 'success',
-              duration: 2000
+        if (res.code === 200) {
+          this.setToken(res.data)
+          getUserInfo().then(ress => {
+						setTimeout(() => {
+							this.showToast('鐧诲綍鎴愬姛')
+						})
+            this.setDriverInfo(ress.data)
+            uni.redirectTo({
+              url: "/pages/driver/index"
             })
-          })
-          uni.redirectTo({
-            url: "/pages/staffLogin/login"
           })
         }
       })
diff --git a/h5/pages/driver/register.vue b/h5/pages/driver/register.vue
index ae1b1a5..89fe60a 100644
--- a/h5/pages/driver/register.vue
+++ b/h5/pages/driver/register.vue
@@ -49,12 +49,11 @@
 </template>
 
 <script>
-import { resetPassword, sendSms } from '@/api'
+import { driverRegister, sendSms } from '@/api'
 export default {
   data() {
     return {
-      form: {
-      },
+      form: {},
       isShowProtocol: false,
       countDown: 0
     }
@@ -84,7 +83,7 @@
     onLogin() {
       const { form } = this
 			if (!form.name) return uni.showToast({
-			  title: '鎵嬫満鍙峰鍚�',
+			  title: '濮撳悕涓嶈兘涓虹┖',
 			  icon: 'none'
 			})
       if (!form.phone) return uni.showToast({
@@ -99,14 +98,14 @@
         title: '瀵嗙爜涓嶈兘涓虹┖',
         icon: 'none'
       })
-      resetPassword({
+      driverRegister({
         ...form
       }).then(res => {
         if (res && res.code == 200) {
           setTimeout(() => {
             uni.showToast({
               title: '娉ㄥ唽鎴愬姛,璇峰墠寰�鐧诲綍',
-              icon: 'success',
+              icon: 'none',
               duration: 2000
             })
           })
diff --git a/h5/pages/driver/reserved.vue b/h5/pages/driver/reserved.vue
index c201b32..813062c 100644
--- a/h5/pages/driver/reserved.vue
+++ b/h5/pages/driver/reserved.vue
@@ -5,9 +5,19 @@
 			<view class="line">
 				<view class="label">
 					<text>*</text>
+					<text>鍏ュ洯鍘熷洜</text>
+				</view>
+				<view class="value" @click="showReason = true">
+					<text class="mr6" :style="{ color: param.inReason ? '#000000' : '#999999' }">{{ param.inReason ? param.inReason : '璇烽�夋嫨' }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">
+					<text>*</text>
 					<text>鍚堝悓鍙�</text>
 				</view>
-				<view class="value"><input type="text" placeholder="璇疯緭鍏ユ偍鐨勫悎鍚屽彿" v-model="param.receptMemberName" placeholder-style="color: #999999;" /></view>
+				<view class="value"><input type="text" placeholder="璇疯緭鍏ユ偍鐨勫悎鍚屽彿" v-model="param.contractNum" placeholder-style="color: #999999;" /></view>
 			</view>
 			<!--  -->
 			<view class="line">
@@ -16,7 +26,7 @@
 					<text>鍒板満鏃堕棿</text>
 				</view>
 				<view class="value" @click="showDatetime = true">
-					<text class="mr6" :style="{ color: param.area ? '#000000' : '#999999' }">{{ param.area ? param.area : '璇烽�夋嫨' }}</text>
+					<text class="mr6" :style="{ color: param.arriveDate ? '#000000' : '#999999' }">{{ param.arriveDate ? param.arriveDate : '璇烽�夋嫨' }}</text>
 					<u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
 				</view>
 			</view>
@@ -27,8 +37,8 @@
 				</view>
 				<view class="value">
 					<view class="btns">
-						<view class="btn active">鏁存墭鐩�</view>
-						<view class="btn">浠剁儫</view>
+						<view @click="inTypeClick(0)" :class="{ active: param.inType == 0 }" class="btn">鏁存墭鐩�</view>
+						<view @click="inTypeClick(1)" :class="{ active: param.inType == 1 }" class="btn">浠剁儫</view>
 					</view>
 				</view>
 			</view>
@@ -38,7 +48,7 @@
 					<text>鎬昏繍杈撻噺</text>
 				</view>
 				<view class="value">
-					<input type="text" placeholder="璇疯緭鍏ユ�昏繍杈撻噺" v-model="param.receptMemberName" placeholder-style="color: #999999;" />
+					<input type="number" placeholder="璇疯緭鍏ユ�昏繍杈撻噺" v-model="param.totalNum" placeholder-style="color: #999999;" />
 					<text class="unit">涓囨敮</text>
 				</view>
 			</view>
@@ -47,8 +57,9 @@
 					<text>*</text>
 					<text>鍑嗚繍璇佺収鐗�</text>
 				</view>
-				<view class="value">
-					<view class="upload_wrap"><u-icon name="plus" size="20" color="#999999"></u-icon></view>
+				<view class="value" @click="handleUpload">
+					<image v-if="param.transportImgFull" class="upload_wrap" :src="param.transportImgFull" alt="">
+					<view v-else class="upload_wrap"><u-icon name="plus" size="20" color="#999999"></u-icon></view>
 				</view>
 			</view>
 			<view class="empty"></view>
@@ -58,14 +69,14 @@
 					<text>*</text>
 					<text>鍙告満濮撳悕</text>
 				</view>
-				<view class="value"><input type="text" placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�" v-model="param.receptMemberName" placeholder-style="color: #999999;" /></view>
+				<view class="value"><input type="text" placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�" v-model="param.driverName" placeholder-style="color: #999999;" /></view>
 			</view>
 			<view class="line">
 				<view class="label">
 					<text>*</text>
 					<text>鎵嬫満鍙�</text>
 				</view>
-				<view class="value"><input type="text" placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿" v-model="param.receptMemberName" placeholder-style="color: #999999;" /></view>
+				<view class="value"><input type="number" placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿" v-model="param.driverPhone" placeholder-style="color: #999999;" /></view>
 			</view>
 			<!--  -->
 			<view class="line">
@@ -74,7 +85,7 @@
 					<text>杞﹀墠鐗岀収鍙�</text>
 				</view>
 				<view class="value" @click="openInput(1)">
-					<text :style="{ color: param.carNos ? '#000000' : '' }">{{ param.carNos ? param.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�' }}</text>
+					<text :style="{ color: param.carCodeFront ? '#000000' : '#999999' }">{{ param.carCodeFront ? param.carCodeFront : '璇疯緭鍏ヨ溅鐗屽彿鐮�' }}</text>
 				</view>
 			</view>
 			<view class="line">
@@ -82,18 +93,19 @@
 					<text>*</text>
 					<text>杞﹀悗鐗岀収鍙�</text>
 				</view>
-				<view class="value" @click="openInput(1)">
-					<text :style="{ color: param.carNos ? '#000000' : '' }">{{ param.carNos ? param.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�' }}</text>
+				<view class="value" @click="openInput(2)">
+					<text :style="{ color: param.carCodeBack	 ? '#000000' : '#999999' }">{{ param.carCodeBack	 ? param.carCodeBack	 : '璇疯緭鍏ヨ溅鐗屽彿鐮�' }}</text>
 				</view>
 			</view>
 			<view class="copy" @click="copy">澶嶅埗杞﹀墠鐗岀収鍙�</view>
 			<view class="perch"></view>
-			<view class="handle_sub">
+			<view class="handle_sub" @click="onSubmit">
 				鎻愪氦
 			</view>
-
-			<!--  -->
 		</view>
+		
+		<!--  -->
+		<u-picker :show="showReason" keyName="reason" :columns="reasonList" @confirm="reasonConfirm"></u-picker>
 		<u-datetime-picker
 			:show="showDatetime"
 			closeOnClickOverlay
@@ -109,74 +121,130 @@
 
 <script>
 import keyboardInput from '@/components/keyboard-input/keyboard-input.vue';
-import { uploadUrl } from '@/api';
+import { uploadUrl, driverCarApply, driverReasonList } from '@/api';
+import dayjs from 'dayjs'
 export default {
 	components: {
 		keyboardInput
 	},
 	data() {
 		return {
-			param: {},
+			param: {
+				inType: 0,
+				driverName: uni.getStorageSync('driverInfo').realname,
+				driverPhone: uni.getStorageSync('driverInfo').username,
+			},
+			reasonIndex: -1,
+			reasonList: [],
 			showDatetime: false,
+			showReason: false,
 
 			inputType: ''
 		};
 	},
+	created() {
+		this.initData()
+	},
 	methods: {
-		copy(){
-			this.param.carNos = this.param.carNos
-			uni.showToast({
-				title: '澶嶅埗鎴愬姛',
-				duration: 1000
-			});
-		},
-		handleUpload() {
-			uni.chooseImage({
-				success: chooseImageRes => {
-					uni.showLoading({ title: '涓婁紶涓�', mask: true });
-					for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
-						uni.uploadFile({
-							url: `${uploadUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
-							filePath: chooseImageRes.tempFilePaths[i],
-							name: 'file',
-							formData: {
-								folderCode: 'MEMBER_IMG'
-							},
-							success: uploadFileRes => {
-								console.log('uploadFileRes', uploadFileRes);
-								let res = JSON.parse(uploadFileRes.data);
-								if (type === 'faceImg') {
-									this.param.faceImg = res.data.halfPath;
-									this.param.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath;
-								} else {
-									this.param.imgurl = res.data.halfPath;
-									this.param.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath;
-								}
-							},
-							complete() {
-								if (i === chooseImageRes.tempFilePaths.length - 1) {
-									uni.hideLoading();
-								}
-							}
-						});
-					}
+		onSubmit() {
+			const param = { ...this.param }
+			if (!param.arriveDate) return this.showToast('璇烽�夋嫨鍒板満鏃堕棿')
+			if (!param.inType && param.inType != 0) return this.showToast('璇烽�夋嫨鍏ュ簱绫诲瀷')
+			if (!param.contractNum) return this.showToast('璇疯緭鍏ュ悎鍚屽彿')
+			if (!param.totalNum) return this.showToast('璇疯緭鍏ユ�昏繍杈撻噺')
+			if (!param.driverName) return this.showToast('璇疯緭鍏ュ徃鏈哄鍚�')
+			if (!param.driverPhone) return this.showToast('璇疯緭鍏ユ墜鏈哄彿')
+			if (!param.carCodeFront) return this.showToast('璇疯緭鍏ヨ溅鍓嶇墝鍙�')
+			if (!param.carCodeBack) return this.showToast('璇疯緭鍏ヨ溅鍚庣墝鍙�')
+			if (!param.transportImgFull) return this.showToast('璇蜂笂浼犲噯杩愯瘉鐓х墖')
+			param.arriveDate = param.arriveDate + ':00'
+			driverCarApply({...param}).then(res => {
+				if(res && res.code === 200){
+					uni.navigateBack()
 				}
-			});
+			})
 		},
-		setinDate(e) {},
+		initData(){
+			driverReasonList().then(res => {
+				this.reasonList = [res.data]
+			})
+		},
+		reasonConfirm(e) {
+			const reasonList = this.reasonList[0]
+			const index = e.indexs[0]
+			this.$set(this.param, 'inReason', reasonList[index].reason)
+			this.$set(this.param, 'reasonId', reasonList[index].id)
+			this.showReason = false
+		},
+		setinDate(e) {
+			this.$set(this.param, 'arriveDate', dayjs(e.value).format('YYYY-MM-DD HH:mm'))
+			this.showDatetime = false
+		},
+		inTypeClick(e) {
+			this.param.inType = e
+		},
 		openInput(type) {
 			this.inputType = type;
 			this.$refs.keyboard.open();
 		},
 		setPlate(e) {
 			if (this.inputType === 1) {
-				this.param.carNos = e;
+				this.$set(this.param, 'carCodeFront', e)
 			} else if (this.inputType === 2) {
-				this.param.carNos = e;
+				this.$set(this.param, 'carCodeBack', e)
 			}
 			this.$forceUpdate();
 			this.closeInput();
 		},
+		copy(){
+			if(this.param.carCodeFront){
+				this.$set(this.param, 'carCodeBack', this.param.carCodeFront)
+				this.showToast('澶嶅埗鎴愬姛');
+			}
+			
+		},
+		handleUpload() {
+			let token = uni.getStorageSync('token') || ''
+			uni.chooseImage({
+			  count: 1,
+			  success: (chooseImageRes) => {
+			    uni.showLoading({ title: '涓婁紶涓�', mask: true })
+			    const tempFilePaths = chooseImageRes.tempFilePaths
+			    let imgs = tempFilePaths.map((value, index) => {
+			      return {
+			        name: 'file',
+			        uri: value
+			      }
+			    })
+			    uni.uploadFile({
+			      url: `${uploadUrl}`,
+			      files: imgs,
+			      name: 'file',
+			      formData: {
+			        folder: 'PLATFORM'
+			      },
+			      header: {
+			        Dm_user_token: token
+			      },
+			      success: (uploadFileRes) => {
+			        let res = JSON.parse(uploadFileRes.data)
+			        console.log('res', res.data)
+			        if (res.data && res.data.length > 0) {
+								this.$set(this.param, 'transportImg', res.data[0].imgaddr)
+								this.$set(this.param, 'transportImgFull', res.data[0].url)
+			        }
+			      },
+			      fail(err) {
+			        console.log('err', err)
+			      },
+			      complete() {
+			        uni.hideLoading()
+			      }
+			    })
+			    // }
+			  }
+			})
+		},
 		closeInput() {
 			this.$refs.keyboard.close();
 		}
diff --git a/h5/pages/driver/reservedDetail.vue b/h5/pages/driver/reservedDetail.vue
index e87dc36..2303e6f 100644
--- a/h5/pages/driver/reservedDetail.vue
+++ b/h5/pages/driver/reservedDetail.vue
@@ -1,142 +1,171 @@
 <template>
   <view class="main_app">
     <view class="status_wrap">
-      <view class="name">涓佹仼鍑殑璁垮鐢宠</view>
-      <view class="desc">绛夊緟鎴戝鐞�</view>
-      <view class="status">瀹℃壒涓�</view>
+      <view class="name">{{info.driverName}}鐨勫叆鍥绾�</view>
+      <view class="desc">{{info.carCodeFront}}</view>
+      <view class="status">{{ statusMap[info.status] }}</view>
     </view>
     <!--  -->
     <view class="emyty"></view>
     <view class="module_list">
       <view class="item">
-        <view class="label">鎷滆浜�</view>
-        <view class="value">寤栨垚鐟�</view>
+        <view class="label">鍏ュ洯鍘熷洜</view>
+        <view class="value">{{info.inReason}}</view>
       </view>
       <view class="item">
-        <view class="label">棰勮鍏�/绂诲洯鏃堕棿</view>
-        <view class="value">05/01 8:00 - 05/01 18:00</view>
+        <view class="label">鍚堝悓缂栧彿</view>
+        <view class="value">{{info.contractNum}}</view>
       </view>
+			<view class="item">
+			  <view class="label">鍒板満鏃堕棿</view>
+			  <view class="value" v-if="info.arriveDate">{{info.arriveDate.slice(0,16)}}</view>
+			</view>
+			<view class="item">
+			  <view class="label">鍑嗚繍璇佺収鐗�</view>
+			  <view class="value">
+					<image
+						v-if="info.transportImg"
+					  class="avatar_wrap"
+					  :src="info.prefixUrl + info.transportImg"
+					></image>
+				</view>
+			</view>
+			<view class="item">
+			  <view class="label">鍏ュ簱绫诲瀷</view>
+			  <view class="value">{{info.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'}}</view>
+			</view>
+			<view class="item">
+			  <view class="label">鎬昏繍鏁伴噺</view>
+			  <view class="value">{{info.totalNum}}涓囨敮</view>
+			</view>
       <view class="emyty"></view>
       <view class="item">
-        <view class="label">璁垮淇℃伅</view>
-        <view class="value">
-          <image
-            class="avatar"
-            src="@/static/logo@2x.png"
-            mode="widthFix"
-          ></image>
-          <view class="info">
-            <text class="name">瀛欏織 18177665678</text>
-            <text>韬唤璇佸彿锛�3309****2910</text>
-            <text>鍏ュ洯杞﹁締锛氱殩A88789</text>
-          </view>
+        <view class="label">鍙告満濮撳悕</view>
+        <view class="value">{{info.driverName}}
         </view>
       </view>
       <view class="item">
-        <view class="label">鍏徃鍚嶇О</view>
-        <view class="value">涓浗绉诲姩</view>
+        <view class="label">鎵嬫満鍙�</view>
+        <view class="value">{{info.driverPhone}}</view>
       </view>
-      <view class="item">
-        <view class="label">鏂藉伐浜哄憳</view>
-        <view class="value">鍚�</view>
-      </view>
-      <view class="item">
-        <view class="label">鏉ヨ浜嬬敱</view>
-        <view class="value">涓氬姟娲借皥</view>
-      </view>
+			<view class="item">
+			  <view class="label">杞︾墝鐓�</view>
+			  <view class="value">鍓� {{info.carCodeFront}}锛屽悗 {{info.carCodeBack}}</view>
+			</view>
     </view>
     <!-- 娴佺▼ -->
     <view class="flow_wrap">
       <view class="flow_title">娴佺▼</view>
-      <view class="list">
-        <view class="item">
-          <view class="avatar">
-            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
+      <view class="list" v-if="info.approveDateVO != null && info.approveDateVO.approveList != null">
+        <view class="item" v-for="item,index in info.approveDateVO.approveList">
+    			<view v-if="index != info.approveDateVO.approveList.length - 1" class="separate"></view>
+          <view class="avatar_wrap">
             <image
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+            />
+            <image
+    					v-if="item.status == 2"
               class="status"
               src="@/static/staff/liucheng_success@2x.png"
               mode="widthFix"
             />
-            <view class="separate"></view>
+    				<image
+    					v-if="item.status == 3"
+    				  class="status"
+    				  src="@/static/staff/liucheng_fail@2x.png"
+    				  mode="widthFix"
+    				/>
           </view>
           <view class="content">
             <view class="head">
-              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-              <view class="time">time</view>
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{item.createDate}}</view>
             </view>
             <view class="name_wrap">
-              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
+              <text>{{item.memberName}}<text v-if="item.statusInfo" class="status">({{item.statusInfo}})</text></text>
             </view>
-            <view class="remark">鍚屾剰鏀捐</view>
-          </view>
-        </view>
-        <view class="item">
-          <view class="avatar">
-            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
-            <image
-              class="status"
-              src="@/static/staff/liucheng_success@2x.png"
-              mode="widthFix"
-            />
-          </view>
-          <view class="content">
-            <view class="head">
-              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-              <view class="time">time</view>
-            </view>
-            <view class="name_wrap">
-              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-            </view>
-            <view class="carbon">
-              <view class="carbon_item" v-for="i in 12">
-                <image src="@/static/logo@2x.png" mode="widthFix"></image>
-                <view class="text">name</view>
-              </view>
-            </view>
+    				<view v-if="item.approveType == 1" class="carbon">
+    				  <view class="carbon_item" v-for="child in item.approveList"
+                :key="child.id">
+    				    <image :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "></image>
+    				    <view class="text">{{ child.memberName }}</view>
+    				  </view>
+    				</view>
           </view>
         </view>
       </view>
     </view>
     <view class="emyty"></view>
     <view class="main_footer">
-      <view class="btn" @click="handleSub('0')">鎷掔粷</view>
-      <view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
+      <view v-if="info.status == 0 || info.status == 1" class="btn" @click="handleCancel">鎾ゅ洖鐢宠</view>
+       <view v-if="info.status == 0 || info.status == 1" class="btn agree" @click="handleEdit">淇敼</view>
+       <view v-if="info.status == 3" class="btn agree aga" @click="handleAga">鍐嶆鐢宠</view>
     </view>
-
-    <!--  -->
-    <u-popup
-      :show="showApprModal"
-      :round="10"
-      :safeAreaInsetBottom="true"
-      mode="bottom"
-      @close="showApprModal = false"
-    >
-      <view class="appr_modal">
-        <view class="title">鍚屾剰</view>
-        <textarea
-          placeholder="鍚屾剰璇存槑锛岄潪蹇呭~"
-          placeholder-class="placeholder9"
-        />
-        <view class="main_footer">
-          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
-          <view class="btn agree">鎻愪氦</view>
-        </view>
-      </view>
-    </u-popup>
   </view>
 </template>
 
 <script>
+	import { driverApplyDetail, driverCarRevoke } from '@/api'
 export default {
   data() {
     return {
       showApprModal: false,
-      param: {}
+      info: {},
+			statusMap: {
+				0: '寰呭鎵�',
+				1: '瀹℃壒涓�',
+				2: '瀹℃壒閫氳繃',
+				3: '瀹℃壒涓嶉�氳繃',
+				4: '宸插彇娑�',
+			},
     }
   },
+	onLoad(option) {
+		this.getDetail(option.id)
+	},
   methods: {
+		handleCancel(){
+			uni.showModal({
+				title: '鎻愮ず',
+				content: '杩欐槸涓�涓ā鎬佸脊绐�',
+				success: function (res) {
+					if (res.confirm) {
+						console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+					} else if (res.cancel) {
+						console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+					}
+				}
+			});
+			// driverCarRevoke
+		},
+		handleEdit(){},
+		handleAga(){},
+		getDetail(id) {
+			driverApplyDetail({id}).then(res => {
+				this.info = res.data
+				if(this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0 ){
+					this.info.approveDateVO.approveList.forEach(item => {
+						if(item.approveList && item.approveList.length == 1 && item.type !== 1){
+							item.title = item.approveList[0].title
+							item.faceImg = item.approveList[0].faceImg
+							item.memberName = item.approveList[0].memberName
+							item.statusInfo = item.approveList[0].statusInfo
+							item.approveList = []
+						}
+					})
+				}
+			})
+		},
     handleSub(flag) {
-      // this.param.flag = 
       if (flag === '1') {
 
       } else {
@@ -172,7 +201,7 @@
         display: flex;
         margin-bottom: 48rpx;
 
-        .avatar {
+        .avatar_wrap {
           width: 80rpx;
           height: 80rpx;
           position: relative;
@@ -281,7 +310,7 @@
         display: flex;
         align-items: center;
 
-        .avatar {
+        .avatar_wrap {
           margin-right: 20rpx;
           width: 120rpx;
           height: 120rpx;
@@ -319,7 +348,7 @@
 
     .desc {
       font-size: 26rpx;
-      color: #ed4545;
+      color: #999999;
     }
 
     .status {
@@ -339,7 +368,7 @@
     padding-bottom: 64rpx;
     display: flex;
     justify-content: space-between;
-
+		
     .btn {
       width: 336rpx;
       height: 88rpx;
@@ -357,6 +386,9 @@
       color: #fff;
       border: 1rpx solid $uni-color-primary;
     }
+		.aga{
+			width: 100%;
+		}
   }
 
   .appr_modal {
diff --git a/h5/pages/driver/reservedGuide.vue b/h5/pages/driver/reservedGuide.vue
index 8c3b35f..73789e1 100644
--- a/h5/pages/driver/reservedGuide.vue
+++ b/h5/pages/driver/reservedGuide.vue
@@ -1,6 +1,6 @@
 <template>
 	<view>
-		
+		<mp-html :content="content" />
 	</view>
 </template>
 
@@ -8,8 +8,14 @@
 	export default {
 		data() {
 			return {
-				
+				content: ''
 			};
+		},
+		onLoad(option) {
+			this.content = uni.getStorageSync('driverGuide')[option.str]
+		},
+		methods: {
+			
 		}
 	}
 </script>
diff --git a/h5/pages/driver/reservedRecord.vue b/h5/pages/driver/reservedRecord.vue
index f76ba2e..0d19bd6 100644
--- a/h5/pages/driver/reservedRecord.vue
+++ b/h5/pages/driver/reservedRecord.vue
@@ -4,74 +4,77 @@
     <view class="box_list">
       <view
         class="box_list_item"
-        v-for="(item, index) in 3"
+        v-for="(item, index) in datalist"
         :key="index"
-        @click="handleDetail()"
+        @click="handleDetail(item.id)"
       >
         <view class="box_list_item_head">
-          <text>涓佹仼鍑殑鍔冲姟鍏ュ洯鐢宠</text>
-          <text class="loading">寰呭鏍�</text>
+          <text>{{item.driverName}}鐨勫叆鍥绾�</text>
+          <text class="loading">{{ statusMap[item.status] }}</text>
         </view>
         <view class="box_list_item_nr">
           <view class="box_list_item_nr_item">
-            <text>琚闂汉锛�</text>
-            <text>浜轰簨閮�-鐜嬩簹钃�</text>
+            <text>鍚堝悓缂栧彿锛�</text>
+            <text>{{item.contractNum}}</text>
           </view>
           <view class="box_list_item_nr_item">
-            <text>杩涘巶鏃堕棿锛�</text>
-            <text>12-12 09:00</text>
+            <text>鍒板満鏃堕棿锛�</text>
+            <text>{{item.arriveDate.slice(5,16)}}</text>
           </view>
           <view class="box_list_item_nr_item">
-            <text>绂诲洯鏃堕棿锛�</text>
-            <text>12-12 12:00</text>
+            <text>鍙告満濮撳悕锛�</text>
+            <text>{{item.driverName}}</text>
           </view>
           <view class="box_list_item_nr_item">
-            <text>鏉ヨ浜嬬敱锛�</text>
-            <text>涓氬姟鏉ュ線</text>
+            <text>杞﹁締淇℃伅锛�</text>
+            <text>{{item.carCodeFront}}</text>
           </view>
           <view class="box_list_item_nr_item">
-            <text>闅忚杞﹁締锛�</text>
-            <text>鐨朅88888</text>
+            <text class="placeholder9">{{item.createDate.slice(0,16)}}鎻愪氦</text>
           </view>
         </view>
       </view>
     </view>
-    <!-- 閫夋嫨杞﹁締 -->
-    <u-picker
-      keyName="name"
-      closeOnClickOverlay
-      @close="isShowCar = false"
-      :show="isShowCar"
-      :columns="carList"
-      @confirm="seletedCar"
-      @cancel="isShowCar = false"
-    ></u-picker>
-    <!-- 鏃ユ湡 -->
-    <u-datetime-picker
-      :show="isShowDate"
-      :minDate="minDate"
-      @confirm="confirmDate"
-      @cancel="isShowDate = false"
-      mode="date"
-    ></u-datetime-picker>
   </view>
 </template>
 
 <script>
+	import { driverApplyRecord } from "@/api"
 export default {
   data() {
     return {
       isShowCar: false,
       isShowDate: false,
       param: {},
-      carList: [[{ name: 'aa', value: '11' }]],
-      timeList: [{ time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }]
+			page: 1,
+			capacity: 10,
+			total: 0,
+			datalist: [],
+			statusMap: {
+				0: '寰呭鎵�',
+				1: '瀹℃壒涓�',
+				2: '瀹℃壒閫氳繃',
+				3: '瀹℃壒涓嶉�氳繃',
+				4: '宸插彇娑�',
+			}
     }
   },
+	created() {
+		this.getList()
+	},
   methods: {
-    handleDetail() {
+		getList() {
+			const { page, capacity } = this
+			driverApplyRecord({
+				page, capacity,model: {}
+			}).then(res => {
+				this.datalist = res.data.records
+				this.total = res.data.total
+			})
+		},
+    handleDetail(id) {
       uni.navigateTo({
-        url: "/pages/driver/reservedDetail"
+        url: `/pages/driver/reservedDetail?id=${id}`
       })
     },
     confirmDate(e) {
@@ -89,6 +92,9 @@
 </script>
 
 <style lang="scss">
+	page{
+		background: #f7f7f7;
+	}
 .main_app {
   background: #f7f7f7;
   padding: 0;
@@ -151,7 +157,7 @@
       }
     }
     .box_list_item_nr {
-      padding: 30rpx;
+      padding: 30rpx 30rpx 10rpx;
       width: 100%;
       box-sizing: border-box;
       background-color: #ffffff;
@@ -159,18 +165,11 @@
         width: 100%;
         display: flex;
         align-items: center;
-        margin-bottom: 20rpx;
+        margin-bottom: 16rpx;
         text {
-          &:nth-child(1) {
-            font-size: 26rpx;
-            font-weight: 400;
-            color: #666666;
-          }
-          &:nth-child(2) {
-            font-size: 26rpx;
-            font-weight: 400;
-            color: #333333;
-          }
+          font-size: 26rpx;
+          font-weight: 400;
+          color: #666666;
         }
       }
     }
diff --git a/h5/pages/driver/taskDetail.vue b/h5/pages/driver/taskDetail.vue
index 8734397..9985e40 100644
--- a/h5/pages/driver/taskDetail.vue
+++ b/h5/pages/driver/taskDetail.vue
@@ -164,7 +164,9 @@
     getLocation() {
       uni.getLocation({
         type: 'wgs84',
+				
         success: function (res) {
+					console.log(res);
           console.log('褰撳墠浣嶇疆鐨勭粡搴︼細' + res.longitude)
           console.log('褰撳墠浣嶇疆鐨勭含搴︼細' + res.latitude)
         }
diff --git a/h5/pages/staff/task/driver.vue b/h5/pages/staff/task/driver.vue
new file mode 100644
index 0000000..6532036
--- /dev/null
+++ b/h5/pages/staff/task/driver.vue
@@ -0,0 +1,445 @@
+<template>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name">{{info.driverName}}鐨勫叆鍥绾�</view>
+      <view class="desc">{{info.carCodeFront}}</view>
+      <view class="status">{{ statusMap[info.status] }}</view>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">鍏ュ洯鍘熷洜</view>
+        <view class="value">{{info.inReason}}</view>
+      </view>
+      <view class="item">
+        <view class="label">鍚堝悓缂栧彿</view>
+        <view class="value">{{info.contractNum}}</view>
+      </view>
+			<view class="item">
+			  <view class="label">鍒板満鏃堕棿</view>
+			  <view v-if="info.arriveDate" class="value">{{info.arriveDate.slice(0,16)}}</view>
+			</view>
+			<view class="item">
+			  <view class="label">鍑嗚繍璇佺収鐗�</view>
+			  <view class="value">
+					<image
+						v-if="info.transportImg"
+					  class="avatar_wrap"
+					  :src="info.prefixUrl + info.transportImg"
+					></image>
+				</view>
+			</view>
+			<view class="item">
+			  <view class="label">鍏ュ簱绫诲瀷</view>
+			  <view class="value">{{info.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'}}</view>
+			</view>
+			<view class="item">
+			  <view class="label">鎬昏繍鏁伴噺</view>
+			  <view class="value">{{info.totalNum}}涓囨敮</view>
+			</view>
+      <view class="emyty"></view>
+      <view class="item">
+        <view class="label">鍙告満濮撳悕</view>
+        <view class="value">{{info.driverName}}
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鎵嬫満鍙�</view>
+        <view class="value">{{info.driverPhone}}</view>
+      </view>
+			<view class="item">
+			  <view class="label">杞︾墝鐓�</view>
+			  <view class="value">鍓� {{info.carCodeFront}}锛屽悗 {{info.carCodeBack}}</view>
+			</view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">娴佺▼</view>
+      <view class="list" v-if="info.approveDateVO != null && info.approveDateVO.approveList != null">
+        <view class="item" v-for="item,index in info.approveDateVO.approveList">
+					<view v-if="index != info.approveDateVO.approveList.length - 1" class="separate"></view>
+          <view class="avatar_wrap">
+            <image
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+            />
+            <image
+							v-if="item.status == 2"
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+						<image
+							v-if="item.status == 3"
+						  class="status"
+						  src="@/static/staff/liucheng_fail@2x.png"
+						  mode="widthFix"
+						/>
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{item.createDate}}</view>
+            </view>
+            <view class="name_wrap">
+              <text>{{item.memberName}}<text v-if="item.statusInfo" class="status">({{item.statusInfo}})</text></text>
+            </view>
+						<view v-if="item.approveType == 1" class="carbon">
+						  <view class="carbon_item" v-for="child in item.approveList"
+                :key="child.id">
+						    <image :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "></image>
+						    <view class="text">{{ child.memberName }}</view>
+						  </view>
+						</view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view class="main_footer">
+      <view class="btn" @click="handleSub('0')">鎷掔粷</view>
+      <view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
+    </view>
+
+    <!--  -->
+    <u-popup
+      :show="showApprModal"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="showApprModal = false"
+    >
+      <view class="appr_modal">
+        <view class="title">{{ this.flag == '0' ? '鎷掔粷' : '鍚屾剰' }}</view>
+        <textarea
+          :placeholder="this.flag == '0' ? '鎷掔粷璇存槑锛屽繀濉�' : '鍚屾剰璇存槑锛岄潪蹇呭~'"
+          placeholder-class="placeholder9"
+        />
+        <view class="main_footer">
+          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
+          <view class="btn agree" @click="handleAppy">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+	import { driverApplyDetail, carUseBookAppr } from '@/api'
+export default {
+  data() {
+    return {
+      showApprModal: false,
+			checkInfo: '',
+			flag: '1',
+      info: {},
+			type: 0,
+			statusMap: {
+				0: '寰呭鎵�',
+				1: '瀹℃壒涓�',
+				2: '瀹℃壒閫氳繃',
+				3: '瀹℃壒涓嶉�氳繃',
+				4: '宸插彇娑�',
+			},
+    }
+  },
+	onLoad(option) {
+		this.type = option.objType
+		this.getDetail(option.id)
+	},
+  methods: {
+		getDetail(id) {
+			driverApplyDetail({id}).then(res => {
+				this.info = res.data
+				if(this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0 ){
+					this.info.approveDateVO.approveList.forEach(item => {
+						if(item.approveList && item.approveList.length == 1 && item.type !== 1){
+							item.title = item.approveList[0].title
+							item.faceImg = item.approveList[0].faceImg
+							item.memberName = item.approveList[0].memberName
+							item.statusInfo = item.approveList[0].statusInfo
+							item.approveList = []
+						}
+					})
+				}
+				console.log('this.info.approveDateVO', this.info.approveDateVO.approveList);
+			})
+		},
+		handleAppy() {
+			const {flag,checkInfo, type,info } = this
+			if(flag == 0 && !checkInfo) return this.showToast('鎷掔粷璇存槑蹇呭~')
+			carUseBookAppr({
+				checkInfo,objId: info.id,objType: 6,status: flag == 0 ? 3 : 2
+			}).then(res => {
+				if(res.code == 200){
+					setTimeout(() => {
+						this.showToast('鎿嶄綔鎴愬姛')
+					})
+					this.showApprModal = false
+					uni.navigateBack()
+				}
+			})
+		},
+    handleSub(flag) {
+			this.flag = flag
+			this.checkInfo = ''
+      if (flag === '1') {
+				
+      } else {
+
+      }
+      this.showApprModal = true
+    }
+  },
+}
+</script>
+<style>
+page {
+  background-color: #f7f7f7;
+}
+</style>
+<style lang="scss">
+.main_app {
+  background-color: #fff;
+  padding-bottom: 0;
+
+  .flow_wrap {
+    padding: 30rpx 0;
+
+    .flow_title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
+
+    .list {
+      .item {
+        display: flex;
+        margin-bottom: 48rpx;
+				position: relative;
+				.separate {
+				  position: absolute;
+				  width: 4rpx;
+				  height: calc( 100% - 52rpx );
+				  background-color: #eeeeee;
+				  left: 40rpx;
+				  top: 90rpx;
+				}
+        .avatar_wrap {
+          width: 80rpx;
+          height: 80rpx;
+          position: relative;
+          margin-right: 20rpx;
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+          }
+
+          .status {
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
+
+        }
+
+        .content {
+          flex: 1;
+
+          .head {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 4rpx;
+
+            .event {
+              font-size: 30rpx;
+            }
+
+            .time {
+              font-size: 26rpx;
+              color: #999999;
+            }
+          }
+
+          .name_wrap {
+            font-size: 26rpx;
+            color: #777777;
+
+            .status {
+              color: $uni-color-primary;
+            }
+          }
+
+          .remark {
+            margin-top: 12rpx;
+            background-color: #f7f7f7;
+            padding: 14rpx 20rpx;
+            border-radius: 8rpx;
+            font-size: 26rpx;
+            color: #666666;
+            line-height: 36rpx;
+          }
+        }
+        .carbon {
+          display: flex;
+          width: 590rpx;
+          overflow-x: auto;
+          margin-top: 12rpx;
+          .carbon_item {
+            text-align: center;
+            flex-shrink: 0;
+            width: 100rpx;
+            image {
+              width: 60rpx;
+              height: 60rpx;
+              margin: 0 auto;
+            }
+            view {
+              font-size: 26rpx;
+              color: #777777;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
+
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
+
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
+
+        .avatar_wrap {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
+
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
+
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
+
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
+
+    .name {
+      font-weight: 600;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
+
+    .desc {
+      font-size: 26rpx;
+      color: #999999;
+    }
+
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+  }
+
+  .main_footer {
+    padding-bottom: 64rpx;
+    display: flex;
+    justify-content: space-between;
+
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 0;
+    }
+
+    .agree {
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
+
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
+
+    .title {
+      font-weight: 600;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
+
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+  }
+
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
+}
+</style>
diff --git a/h5/pages/staff/task/index.vue b/h5/pages/staff/task/index.vue
index b0b64bb..854541f 100644
--- a/h5/pages/staff/task/index.vue
+++ b/h5/pages/staff/task/index.vue
@@ -76,6 +76,23 @@
           <view class="info loading">{{ item.info }}</view>
         </view>
         <view class="box_list_item_nr">
+					<view v-if="item.param1.arriveDate" class="box_list_item_nr_item">
+					  <text></text>
+					  <text>{{ item.param1.arriveDate }}</text>
+					</view>
+					<view v-if="item.param1.inType" class="box_list_item_nr_item">
+					  <text></text>
+					  <text>{{ item.param1.inType }}</text>
+					</view>
+					<view v-if="item.param1.totalNum" class="box_list_item_nr_item">
+					  <text></text>
+					  <text>{{ item.param1.totalNum }}</text>
+					</view>
+					<view v-if="item.param1.carNum" class="box_list_item_nr_item">
+					  <text></text>
+					  <text>{{ item.param1.carNum }}</text>
+					</view>
+					
           <view v-if="item.param1.name" class="box_list_item_nr_item">
             <text></text>
             <text>{{ item.param1.name }}</text>
@@ -342,7 +359,11 @@
         uni.navigateTo({
           url: `/pages/staff/task/vDangetAppr?id=${objId}&objType=${objType}`
         })
-      } else {
+      } else if (objType === 6 || objType === 5) {
+        uni.navigateTo({
+          url: `/pages/staff/task/driver?id=${objId}&objType=${objType}`
+        })
+      }else {
         uni.navigateTo({
           url: `/pages/staff/task/visitorApprove?id=${objId}&objType=${objType}`
         })
diff --git a/h5/pages/staff/task/visitorApprove.vue b/h5/pages/staff/task/visitorApprove.vue
index 82883a4..4b75f1c 100644
--- a/h5/pages/staff/task/visitorApprove.vue
+++ b/h5/pages/staff/task/visitorApprove.vue
@@ -94,10 +94,17 @@
               "
             />
             <image
+            	v-if="item.status == 2"
               class="status"
               src="@/static/staff/liucheng_success@2x.png"
               mode="widthFix"
             />
+            <image
+            	v-if="item.status == 3"
+              class="status"
+              src="@/static/staff/liucheng_fail@2x.png"
+              mode="widthFix"
+            />
           </view>
           <view class="content">
             <view class="head">
diff --git a/h5/store/index.js b/h5/store/index.js
index 44fb682..0da49e4 100644
--- a/h5/store/index.js
+++ b/h5/store/index.js
@@ -13,6 +13,7 @@
 const token = uni.getStorageSync('token')
 const time = uni.getStorageSync('time')
 const userInfo = uni.getStorageSync('userInfo')
+const driverInfo = uni.getStorageSync('driverInfo')
 const sessionKey = uni.getStorageSync('sessionKey')
 
 const store = new Vuex.Store({
@@ -26,6 +27,7 @@
 		token: token || null,
 		time: time || null,
 		userInfo: userInfo || {},
+		driverInfo: driverInfo || {},
 		height: height || '0',
 		sessionKey: sessionKey || '',
 		primaryColor: '#279baa'
@@ -66,6 +68,11 @@
 			state.userInfo = obj
 			uni.setStorageSync('userInfo', obj)
 		},
+		// 璁剧疆鍙告満淇℃伅
+		setDriverInfo(state, obj) {
+			state.driverInfo = obj
+			uni.setStorageSync('driverInfo', obj)
+		},
 		// 璁剧疆SessionKey
 		setSessionKey(state, val) {
 			state.sessionKey = val

--
Gitblit v1.9.3