From 986118de12da6830ffb0c86af8e70567352c9bb9 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 29 八月 2024 18:15:37 +0800
Subject: [PATCH] ll

---
 h5/main.js                            |    2 
 pda/api/index.js                      |   16 
 h5/pages/driver/forgetPsd.vue         |   21 
 pda/pages.json                        |    4 
 pda/static/default_nodata@2x.png      |    0 
 pda/pages/index/queueup.vue           |  137 ++++-
 pda/utils/config.js                   |   15 
 h5/pages/staff/task/driver.vue        |   17 
 pda/package-lock.json                 |   11 
 pda/pages/index/center.vue            |  557 +++++++++++++++++++-----
 h5/manifest.json                      |    2 
 h5/pages/driver/register.vue          |   14 
 h5/utils/config.js                    |   15 
 h5/pages/driver/index.vue             |   53 +
 h5/pages/driver/reservedDetail.vue    |   18 
 h5/pages/driver/queueUp.vue           |   27 
 pda/App.vue                           |   47 +
 h5/static/driver/ic_truck_mine@2x.png |    0 
 h5/pages/driver/taskDetail.vue        |   21 
 h5/pages/staff/task/index.vue         |    1 
 h5/pages/driver/queueUpRecord.vue     |  314 ++++++++------
 h5/pages/driver/reservedRecord.vue    |    6 
 h5/App.vue                            |    2 
 h5/pages/driver/login.vue             |    2 
 h5/pages/driver/taskConfirm.vue       |    2 
 pda/manifest.json                     |    2 
 26 files changed, 911 insertions(+), 395 deletions(-)

diff --git a/h5/App.vue b/h5/App.vue
index 6594094..137957d 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -126,7 +126,7 @@
   font-size: 28rpx;
 }
 .red{
-	color: red;
+	color: red !important;
 }
 
 //璁剧疆鍦嗚
diff --git a/h5/main.js b/h5/main.js
index 619eb5b..8a3b147 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -16,7 +16,7 @@
 Vue.component('navigation', navigation)
 Vue.prototype.$store = store
 Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
-Vue.prototype.$goBack = () => { uni.navigateBack() }
+Vue.prototype.$goBack = () => { setTimeout(() => {uni.navigateBack()},300) }
 Vue.prototype.showToast = (str) => {
 	setTimeout(() => {
 		uni.showToast({
diff --git a/h5/manifest.json b/h5/manifest.json
index 205f624..ad55f2c 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -92,7 +92,7 @@
                 "/admin_interface" : {
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
                     // "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    "target" : "http://192.168.0.136:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.139:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
                         "^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
diff --git a/h5/pages/driver/forgetPsd.vue b/h5/pages/driver/forgetPsd.vue
index 7512424..2330ee2 100644
--- a/h5/pages/driver/forgetPsd.vue
+++ b/h5/pages/driver/forgetPsd.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.phone" :maxlength="11" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
       </view>
       <view class="login_list_item">
         <image src="@/static/ic_captcha.png" mode="widthFix"></image>
@@ -55,7 +55,10 @@
     }
   },
 
-  onLoad() {
+  onLoad(option) {
+		if(option.phone){
+			this.$set(this.form, 'phone', option.phone)
+		}
   },
 
   methods: {
@@ -102,16 +105,12 @@
         ...form
       }).then(res => {
         if (res && res.code == 200) {
+					this.showToast('瀵嗙爜淇敼鎴愬姛,璇烽噸鏂扮櫥褰�')
           setTimeout(() => {
-            uni.showToast({
-              title: '瀵嗙爜淇敼鎴愬姛,璇烽噸鏂扮櫥褰�',
-              icon: 'success',
-              duration: 2000
-            })
-          })
-          uni.redirectTo({
-            url: "/pages/staffLogin/login"
-          })
+						uni.redirectTo({
+						  url: "/pages/driver/login"
+						})
+					}, 500)
         }
       })
     }
diff --git a/h5/pages/driver/index.vue b/h5/pages/driver/index.vue
index f9000a5..46a3d5e 100644
--- a/h5/pages/driver/index.vue
+++ b/h5/pages/driver/index.vue
@@ -13,7 +13,7 @@
 		<!--  -->
 		<view class="task_list">
 			<swiper circular class="task_swiper">
-				<swiper-item v-for="item in taskList" :key="item.id">
+				<swiper-item v-for="item in taskList" :key="item.id" @click="taskClick(item)">
 					<view class="item">
 						<view class="head">
 							<view class="name">杩愯緭鍗晎{ item.contractNum }}</view>
@@ -41,9 +41,9 @@
 							</view>
 							<view class="sub">
 								<view class="time" v-if="item.arriveDate">{{ item.arriveDate.slice(5) }}</view>
-								<view v-if="item.status == 0" class="sub_btn" @click="handleTask(item)">纭浠诲姟</view>
-								<view v-if="item.status == 1" class="sub_btn" @click="handleSign(item)">绔嬪嵆绛惧埌</view>
-								<view v-if="item.status == 2" class="sub_btn" @click="handleQueue(item)">鏌ョ湅鎺掗槦</view>
+								<view v-if="item.status == 0" class="sub_btn">纭浠诲姟</view>
+								<view v-if="item.status == 1" class="sub_btn">绔嬪嵆绛惧埌</view>
+								<view v-if="item.status == 2" class="sub_btn">鏌ョ湅鎺掗槦</view>
 							</view>
 						</view>
 					</view>
@@ -101,20 +101,10 @@
 			
 		};
 	},
-	created() {
+	onShow() {
 		this.initData();
 	},
 	methods: {
-		handleSign(item) {
-			uni.navigateTo({
-				url: '/pages/driver/taskDetail?id=' + item.id
-			});
-		},
-		handleQueue(item) {
-			uni.navigateTo({
-				url:'/pages/driver/queueUp?jobId=' + item.id	
-			})
-		},
 		initData() {
 			driverHomeData().then(res => {
 				if (res.code == 200) {
@@ -134,11 +124,32 @@
 				url: '/pages/driver/login'
 			});
 		},
+		taskClick(item) {
+			const status = item.status
+			console.log(item);
+			if(status == 0){
+				uni.navigateTo({url: '/pages/driver/taskConfirm?id=' + item.id});
+			}else if(status == 2){
+				uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id})
+			}else{
+				uni.navigateTo({url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`});
+			}
+		},
 		handleTask(item) {
 			uni.navigateTo({
 				url: '/pages/driver/taskConfirm?id=' + item.id
 			});
-		}
+		},
+		handleSign(item) {
+			uni.navigateTo({
+				url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
+			});
+		},
+		handleQueue(item) {
+			uni.navigateTo({
+				url:'/pages/driver/queueUp?jobId=' + item.id	
+			})
+		},
 	}
 };
 </script>
@@ -175,7 +186,7 @@
 	position: relative;
 	width: 688rpx;
 	height: 270rpx;
-	margin-bottom: 40rpx;
+	margin-bottom: 28rpx;
 	.h1 {
 		font-weight: bold;
 		line-height: 66rpx;
@@ -249,17 +260,17 @@
 	}
 }
 .task_list {
-	margin-bottom: 48rpx;
+	margin-bottom: 0rpx;
 	.task_swiper {
-		padding: 16rpx 10rpx;
-		height: 320rpx;
+		padding: 12rpx 10rpx;
+		height: 340rpx;
 		width: 730rpx;
 		margin-left: -20rpx;
 		box-sizing: border-box;
 	}
 	.item {
 		background: #ffffff;
-		box-shadow: 0rpx 0rpx 12rpx 0rpx rgba(39, 155, 170, 0.32);
+		box-shadow: 0rpx 6rpx 24rpx 0rpx rgba(39, 155, 170, 0.32);
 		border-radius: 16rpx;
 		height: 280rpx;
 		width: 98%;
diff --git a/h5/pages/driver/login.vue b/h5/pages/driver/login.vue
index 1372f80..2ea23f3 100644
--- a/h5/pages/driver/login.vue
+++ b/h5/pages/driver/login.vue
@@ -57,7 +57,7 @@
 		},
 		handleSetPsd() {
 			uni.navigateTo({
-				url: "/pages/driver/forgetPsd"
+				url: "/pages/driver/forgetPsd?phone=" + this.form.username
 			})
 		},
     dealChange(e) {
diff --git a/h5/pages/driver/queueUp.vue b/h5/pages/driver/queueUp.vue
index 3c08723..eed4c69 100644
--- a/h5/pages/driver/queueUp.vue
+++ b/h5/pages/driver/queueUp.vue
@@ -8,11 +8,11 @@
     </view>
     <!--  -->
     <view class="main_list">
-      <view class="item" @click="handleCheck()">
+      <view class="item" @click="handleCheck(1)">
         <view class="h1">浣滀笟涓溅杈�</view>
         <view class="h2">
           <text v-if="activePlatform.signJobList">{{
-            activePlatform.signJobList.length
+            activePlatform.workJobList.length
           }}</text>
           <text class="unit">杈�</text>
         </view>
@@ -22,11 +22,11 @@
           mode=""
         ></image>
       </view>
-      <view class="item cyan">
+      <view class="item cyan" @click="handleCheck(0)">
         <view class="h1">宸茬鍒拌溅杈�</view>
         <view class="h2">
           <text v-if="activePlatform.workJobList">{{
-            activePlatform.workJobList.length
+            activePlatform.signJobList.length
           }}</text>
           <text class="unit">杈�</text>
         </view>
@@ -55,10 +55,12 @@
     return {
       activePlatform: {},
       platformGroupList: [],
-      showPlat: false
+      showPlat: false,
+			jobId: ''
     }
   },
   onLoad(option) {
+		this.jobId = option.jobId
     this.getData(option.jobId || '')
   },
   methods: {
@@ -79,10 +81,17 @@
       this.activePlatform = this.platformGroupList[index]
       this.showPlat = false
     },
-    handleCheck() {
-      uni.navigateTo({
-        url: "/pages/driver/queueUpRecord"
-      })
+    handleCheck(type) {
+			if(this.jobId){
+				uni.navigateTo({
+				  url: `/pages/driver/queueUpRecord?type=${type}&platformId=${this.activePlatform.id}&jobId=${this.jobId}`
+				})
+			}else{
+				uni.navigateTo({
+				  url: `/pages/driver/queueUpRecord?type=${type}&platformId=${this.activePlatform.id}`
+				})
+			}
+      
     }
   }
 }
diff --git a/h5/pages/driver/queueUpRecord.vue b/h5/pages/driver/queueUpRecord.vue
index 000730d..de92b96 100644
--- a/h5/pages/driver/queueUpRecord.vue
+++ b/h5/pages/driver/queueUpRecord.vue
@@ -1,147 +1,193 @@
 <template>
-  <view class="main_app">
-    <view class="main_name">
-      <text class="mr12">鐗╂祦鍏ュ簱鏈堝彴</text>
-      <u-icon name="arrow-down" color="#777777"></u-icon>
-    </view>
-    <!--  -->
-    <view class="main_list">
-      <view class="item">
-        <view class="status">浣滀笟涓�</view>
-        <image
-          class="avatar"
-          src="@/static/driver/ic_truck@2x.png"
-          mode=""
-        ></image>
-        <view class="content">
-          <view class="id_card">鐨朅</view>
-          <view class="line">
-            <view class="address">4鍙锋湀鍙�</view>
-            <view class="time">
-              <u-icon class="mr6" name="clock" color="#4d98a8"></u-icon>
-              <text>01:02:02</text>
-            </view>
-          </view>
-        </view>
-      </view>
-      <view class="item active">
-        <view class="status padding">浣滀笟涓�</view>
-        <view class="me">鎴�</view>
-        <image
-          class="avatar"
-          src="@/static/driver/ic_truck@2x.png"
-          mode=""
-        ></image>
-        <view class="content">
-          <view class="id_card">鐨朅</view>
-          <view class="line">
-            <view class="address">4鍙锋湀鍙�</view>
-            <view class="time">
-              <u-icon class="mr6" name="clock" color="#4d98a8"></u-icon>
-              <text>01:02:02</text>
-            </view>
-          </view>
-        </view>
-      </view>
-    </view>
-  </view>
+	<view class="main_app">
+		<view class="main_name">
+			<text class="mr12">{{ platformObj.name }}</text>
+			<!-- <u-icon name="arrow-down" color="#777777"></u-icon> -->
+		</view>
+		<!--  -->
+		<view class="main_list">
+			<view class="item" :class="{ active: item.driverId == driverInfo.memberId }" v-for="item in dataList" :key="item.id">
+				<view class="status padding" v-if="item.status == 2">鎺掗槦涓�</view>
+				<view class="status" v-else :class="{ padding: item.status != 5 }">{{ statusMap[item.status] }}</view>
+				<view v-if="item.driverId == driverInfo.memberId" class="me">鎴�</view>
+				<image v-if="item.driverId == driverInfo.memberId" class="avatar" src="@/static/driver/ic_truck_mine@2x.png" mode=""></image>
+				<image v-else class="avatar" src="@/static/driver/ic_truck@2x.png" mode=""></image>
+				<view class="content">
+					<view class="id_card" v-if="item.carCodeFront">{{ item.carCodeFront.slice(0, 4) }}**{{ item.carCodeFront.slice(6) }}</view>
+					<view class="line">
+						<view class="address">{{ item.platformName || '绛夊緟鍒嗛厤鏈堝彴' }}</view>
+						<view class="time" v-if="item.status == 5">
+							<u-icon class="mr6" name="clock" color="#4d98a8"></u-icon>
+							<text>{{item.callDateTemp}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
 </template>
 
 <script>
+import { driverLineUpDetail } from '@/api';
+import { statusMap } from '@/utils/config.js';
+import dayjs from 'dayjs';
+import duration from 'dayjs/plugin/duration'
+dayjs.extend(duration)
 export default {
-  data() {
-    return {
-
-    }
-  }
-}
+	data() {
+		return {
+			statusMap,
+			platformId: '',
+			type: '',
+			dataList: [],
+			platformObj: {},
+			driverInfo: uni.getStorageSync('driverInfo')
+		};
+	},
+	onLoad(option) {
+		this.type = option.type;
+		this.platformId = option.platformId;
+		this.getData(option.jobId || '');
+	},
+	methods: {
+		getData(jobId) {
+			const { platformId, type } = this;
+			driverLineUpDetail({
+				mobile: jobId ? '' : uni.getStorageSync('driverInfo').mobile,
+				queryType: jobId ? 1 : 0,
+				jobId: jobId
+			}).then(res => {
+				this.platformGroupList = res.data.platformGroupList;
+				if (res.data && res.data.platformGroupList && res.data.platformGroupList.length > 0) {
+					res.data.platformGroupList.forEach(item => {
+						if (item.id == platformId) {
+							this.platformObj = { ...item };
+							if (type == 0) {
+								this.dataList = item.signJobList;
+							} else {
+								this.dataList = item.workJobList;
+							}
+							this.circulInitTaskList()
+							setInterval(() => {
+								this.circulInitTaskList()
+							}, 1000)
+						}
+					});
+				}
+			});
+		},
+		circulInitTaskList() {
+				let time = new Date();
+				this.dataList.forEach(item => {
+					if (item.callDate) {
+						let timeNum = time.getTime() - new Date(item.callDate).getTime();
+						if (timeNum > 3600000) {
+							item.callDateTemp = dayjs.duration(timeNum).format('HH:mm:ss');
+						} else {
+							item.callDateTemp = dayjs.duration(timeNum).format('mm:ss');
+						}
+					}
+					if (item.startDate) {
+						let timeNum = time.getTime() - new Date(item.startDate).getTime();
+						if (timeNum > 3600000) {
+							item.startDateTemp = dayjs.duration(timeNum).format('HH:mm:ss');
+						} else {
+							item.startDateTemp = dayjs.duration(timeNum).format('mm:ss');
+						}
+					}
+				});
+				this.$forceUpdate();
+		}
+	}
+};
 </script>
 
 <style lang="scss">
 page {
-  background-color: #f7f7f7;
+	background-color: #f7f7f7;
 }
 .main_app {
-  .main_name {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    height: 104rpx;
-    font-weight: 600;
-    font-size: 32rpx;
-    color: #111111;
-    background-color: #fff;
-    margin: 0 -30rpx 20rpx;
-  }
-  .main_list {
-    .item {
-      display: flex;
-      align-items: center;
-      position: relative;
-      padding: 30rpx;
-      background-color: #fff;
-      margin-bottom: 20rpx;
-      border-radius: 8rpx;
-      .status {
-        position: absolute;
-        top: 0;
-        right: 0;
-        height: 50rpx;
-        line-height: 50rpx;
-        padding: 0 20rpx;
-        background: $uni-color-primary;
-        color: #fff;
-        font-size: 26rpx;
-        border-radius: 0rpx 8rpx 0rpx 25rpx;
-      }
-      .me {
-        position: absolute;
-        top: 0;
-        left: 0;
-        background: #00ba67;
-        border-radius: 8rpx 0rpx 8rpx 0rpx;
-        height: 42rpx;
-        line-height: 42rpx;
-        width: 64rpx;
-        text-align: center;
-        color: #fff;
-        font-size: 24rpx;
-        z-index: 11;
-      }
-      .padding {
-        background: #e9f5f6;
-        color: $uni-color-primary;
-      }
-      .avatar {
-        width: 84rpx;
-        height: 84rpx;
-        margin-right: 20rpx;
-      }
-      .content {
-        flex: 1;
-        .id_card {
-          font-weight: 600;
-          font-size: 30rpx;
-          color: #111111;
-        }
-        .line {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          font-size: 26rpx;
-          color: #999999;
-          margin-top: 6rpx;
-          .time {
-            display: flex;
-            align-items: center;
-            color: $uni-color-primary;
-          }
-        }
-      }
-    }
-    .active {
-      background: linear-gradient(270deg, #ffffff 0%, #e1f7fe 100%);
-    }
-  }
+	.main_name {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 104rpx;
+		font-weight: 600;
+		font-size: 32rpx;
+		color: #111111;
+		background-color: #fff;
+		margin: 0 -30rpx 20rpx;
+	}
+	.main_list {
+		.item {
+			display: flex;
+			align-items: center;
+			position: relative;
+			padding: 30rpx;
+			background-color: #fff;
+			margin-bottom: 20rpx;
+			border-radius: 8rpx;
+			.status {
+				position: absolute;
+				top: 0;
+				right: 0;
+				height: 50rpx;
+				line-height: 50rpx;
+				padding: 0 20rpx;
+				background: $uni-color-primary;
+				color: #fff;
+				font-size: 26rpx;
+				border-radius: 0rpx 8rpx 0rpx 25rpx;
+			}
+			.me {
+				position: absolute;
+				top: 0;
+				left: 0;
+				background: #00ba67;
+				border-radius: 8rpx 0rpx 8rpx 0rpx;
+				height: 42rpx;
+				line-height: 42rpx;
+				width: 64rpx;
+				text-align: center;
+				color: #fff;
+				font-size: 24rpx;
+				z-index: 11;
+			}
+			.padding {
+				background: #e9f5f6;
+				color: $uni-color-primary;
+			}
+			.avatar {
+				width: 84rpx;
+				height: 84rpx;
+				margin-right: 20rpx;
+				background-color: #fff;
+			}
+			.content {
+				flex: 1;
+				.id_card {
+					font-weight: 500;
+					font-size: 30rpx;
+					color: #111111;
+				}
+				.line {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					font-size: 26rpx;
+					color: #999999;
+					margin-top: 6rpx;
+					.time {
+						display: flex;
+						align-items: center;
+						color: $uni-color-primary;
+					}
+				}
+			}
+		}
+		.active {
+			background: linear-gradient(270deg, #ffffff 0%, #e1f7fe 100%);
+		}
+	}
 }
 </style>
diff --git a/h5/pages/driver/register.vue b/h5/pages/driver/register.vue
index 89fe60a..3221f3a 100644
--- a/h5/pages/driver/register.vue
+++ b/h5/pages/driver/register.vue
@@ -102,16 +102,12 @@
         ...form
       }).then(res => {
         if (res && res.code == 200) {
+					this.showToast('娉ㄥ唽鎴愬姛,璇峰墠寰�鐧诲綍')
           setTimeout(() => {
-            uni.showToast({
-              title: '娉ㄥ唽鎴愬姛,璇峰墠寰�鐧诲綍',
-              icon: 'none',
-              duration: 2000
-            })
-          })
-          uni.redirectTo({
-            url: "/pages/driver/login"
-          })
+						uni.redirectTo({
+						  url: "/pages/driver/login"
+						})
+					}, 500)
         }
       })
     }
diff --git a/h5/pages/driver/reservedDetail.vue b/h5/pages/driver/reservedDetail.vue
index bf1c851..2b90caa 100644
--- a/h5/pages/driver/reservedDetail.vue
+++ b/h5/pages/driver/reservedDetail.vue
@@ -3,7 +3,9 @@
     <view class="status_wrap">
       <view class="name">{{info.driverName}}鐨勫叆鍥绾�</view>
       <view class="desc">{{info.carCodeFront}}</view>
-      <view class="status">{{ statusMap[info.status] }}</view>
+      <view class="status" v-if="info.status != 2 && info.status != 3">{{ statusMap[info.status] }}</view>
+			<image v-if="info.status == 2" class="icon" src="../../static/ic_passed@2x.png" mode=""></image>
+			<image v-if="info.status == 3" class="icon" src="../../static/ic_refused@2x.png" mode=""></image>
     </view>
     <!--  -->
     <view class="emyty"></view>
@@ -123,8 +125,8 @@
 			statusMap: {
 				0: '寰呭鎵�',
 				1: '瀹℃壒涓�',
-				2: '瀹℃壒閫氳繃',
-				3: '瀹℃壒涓嶉�氳繃',
+				2: '宸查�氳繃',
+				3: '宸叉嫆缁�',
 				4: '宸插彇娑�',
 			},
     }
@@ -348,7 +350,6 @@
   .status_wrap {
     position: relative;
     padding: 30rpx 0;
-
     .name {
       font-weight: 600;
       font-size: 32rpx;
@@ -372,6 +373,15 @@
       background-color: #e9edff;
       color: $uni-color-primary;
     }
+		.icon{
+			width: 120rpx;
+			height: 120rpx;
+			border-radius: 50%;
+			position: absolute;
+			right: 0rpx;
+			top: 20rpx;
+			
+		}
   }
 
   .main_footer {
diff --git a/h5/pages/driver/reservedRecord.vue b/h5/pages/driver/reservedRecord.vue
index 0d19bd6..fd44113 100644
--- a/h5/pages/driver/reservedRecord.vue
+++ b/h5/pages/driver/reservedRecord.vue
@@ -10,7 +10,7 @@
       >
         <view class="box_list_item_head">
           <text>{{item.driverName}}鐨勫叆鍥绾�</text>
-          <text class="loading">{{ statusMap[item.status] }}</text>
+          <text class="loading" :class="{red: item.status == 3}">{{ statusMap[item.status] }}</text>
         </view>
         <view class="box_list_item_nr">
           <view class="box_list_item_nr_item">
@@ -53,8 +53,8 @@
 			statusMap: {
 				0: '寰呭鎵�',
 				1: '瀹℃壒涓�',
-				2: '瀹℃壒閫氳繃',
-				3: '瀹℃壒涓嶉�氳繃',
+				2: '宸查�氳繃',
+				3: '宸叉嫆缁�',
 				4: '宸插彇娑�',
 			}
     }
diff --git a/h5/pages/driver/taskConfirm.vue b/h5/pages/driver/taskConfirm.vue
index 7de5284..dd156a3 100644
--- a/h5/pages/driver/taskConfirm.vue
+++ b/h5/pages/driver/taskConfirm.vue
@@ -146,7 +146,7 @@
 				arriveDate: param.date + ':59'
 			}).then(res =>{
 				this.showToast('纭鎴愬姛')
-				uni.navigateBack()
+				this.$goBack()
 			})
 		},
 		getDetail(jobId) {
diff --git a/h5/pages/driver/taskDetail.vue b/h5/pages/driver/taskDetail.vue
index 84f8f11..42af4cd 100644
--- a/h5/pages/driver/taskDetail.vue
+++ b/h5/pages/driver/taskDetail.vue
@@ -11,10 +11,7 @@
       <view class="name" v-if="param.status == 5">鏈堝彴浣滀笟涓�</view>
       <view class="name" v-if="param.status == 6">浣滀笟宸插畬鎴�</view>
       <view class="id_card">{{ param.carCodeFront }}</view>
-      <view class="status" v-if="param.status == 1">绛夊緟绛惧埌</view>
-      <view class="status" v-if="param.status == 2">绛夊緟鍙彿</view>
-      <view class="status" v-if="param.status == 5">浣滀笟涓�</view>
-      <view class="status" v-if="param.status == 6">浣滀笟瀹屾垚</view>
+      <view class="status">{{statusMap[param.status]}}</view>
     </view>
     <!--  -->
     <view class="main_content">
@@ -26,7 +23,7 @@
         <view class="label">鎵嬫満鍙�</view>
         <view class="value">{{param.drivierPhone}}</view>
       </view>
-			<template v-if="param.type == 4">
+			<template v-if="param.type != 4">
 				<view class="line">
 				  <view class="label">杩愯緭鍗曞彿</view>
 				  <view class="value" @click="showDetail = true">
@@ -68,11 +65,19 @@
           </view>
         </view>
       </view>
-			<view class="line" v-if="param.status == 2">
+			<view class="line" v-if="param.signDate">
 			  <view class="label">绛惧埌鏃堕棿</view>
 			  <view class="value">{{param.signDate}}</view>
 			</view>
-      <view class="warnning">
+			<view class="line" v-if="param.startDate">
+			  <view class="label">寮�濮嬩綔涓�</view>
+			  <view class="value">{{param.startDate}}</view>
+			</view>
+			<view class="line" v-if="param.doneDate">
+			  <view class="label">浣滀笟瀹屾垚</view>
+			  <view class="value">{{param.doneDate}}</view>
+			</view>
+      <view v-if="param.status == 1" class="warnning">
         <u-icon name="info-circle" color="#ED4545" class="mr12"></u-icon>
         濡傛棤娉曡幏鍙栧畾浣嶏紝璇风敤寰俊鎵弿鍥尯澶у睆浜岀淮
       </view>
@@ -173,10 +178,12 @@
 
 <script>
 	import { driverTaskJobDetail, driverSignInTask } from '@/api';
+	import { statusMap } from '@/utils/config.js';
 	import dayjs from 'dayjs';
 export default {
   data() {
     return {
+			statusMap,
       param: {
         status: '0'
       },
diff --git a/h5/pages/staff/task/driver.vue b/h5/pages/staff/task/driver.vue
index 20d2264..3330aaf 100644
--- a/h5/pages/staff/task/driver.vue
+++ b/h5/pages/staff/task/driver.vue
@@ -3,7 +3,9 @@
     <view class="status_wrap">
       <view class="name">{{info.driverName}}鐨勫叆鍥绾�</view>
       <view class="desc">{{info.carCodeFront}}</view>
-      <view class="status">{{ statusMap[info.status] }}</view>
+      <view class="status" v-if="info.status != 2 && info.status != 3">{{ statusMap[info.status] }}</view>
+			<image v-if="info.status == 2" class="icon" src="@/static/ic_passed@2x.png" mode=""></image>
+			<image v-if="info.status == 3" class="icon" src="@/static/ic_refused@2x.png" mode=""></image>
     </view>
     <!--  -->
     <view class="emyty"></view>
@@ -147,8 +149,8 @@
 			statusMap: {
 				0: '寰呭鎵�',
 				1: '瀹℃壒涓�',
-				2: '瀹℃壒閫氳繃',
-				3: '瀹℃壒涓嶉�氳繃',
+				2: '宸查�氳繃',
+				3: '宸叉嫆缁�',
 				4: '宸插彇娑�',
 			},
     }
@@ -387,6 +389,15 @@
       background-color: #e9edff;
       color: $uni-color-primary;
     }
+		.icon{
+			width: 120rpx;
+			height: 120rpx;
+			border-radius: 50%;
+			position: absolute;
+			right: 0rpx;
+			top: 20rpx;
+			
+		}
   }
 
   .main_footer {
diff --git a/h5/pages/staff/task/index.vue b/h5/pages/staff/task/index.vue
index 854541f..31d5d3c 100644
--- a/h5/pages/staff/task/index.vue
+++ b/h5/pages/staff/task/index.vue
@@ -542,6 +542,7 @@
         .info {
           font-size: 26rpx;
           font-weight: 400;
+					width: 110rpx;
         }
       }
       .box_list_item_nr {
diff --git a/h5/static/driver/ic_truck_mine@2x.png b/h5/static/driver/ic_truck_mine@2x.png
new file mode 100644
index 0000000..f5a2449
--- /dev/null
+++ b/h5/static/driver/ic_truck_mine@2x.png
Binary files differ
diff --git a/h5/utils/config.js b/h5/utils/config.js
index 03c8927..d4d7d3a 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -2,3 +2,18 @@
 export const baseUrl = 'admin_interface/'
 export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
 export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
+
+export const statusMap = {
+	0: '寰呯‘璁�',
+	1: '绛夊緟绛惧埌',
+	2: '绛夊緟鍙彿', // 绛夊緟鍙彿
+	3: '鍏ュ洯绛夊緟',
+	4: '鏈堝彴绛夊緟', //宸插彨鍙�
+	5: '浣滀笟涓�',
+	6: '浣滀笟瀹屾垚',
+	7: '杞Щ涓�',
+	8: '寮傚父鎸傝捣',
+	9: '宸叉巿鏉冪鍥�',
+	10: '宸茬鍥�',
+	11: '宸茶繃鍙�',
+}
\ No newline at end of file
diff --git a/pda/App.vue b/pda/App.vue
index 039c633..aba1fdb 100644
--- a/pda/App.vue
+++ b/pda/App.vue
@@ -1,17 +1,17 @@
-<script>
-export default {
-  onLaunch: function () {
-    console.log('App Launch')
-  },
-  onShow: function () {
-    console.log('App Show')
-  },
-  onHide: function () {
-    console.log('App Hide')
-  }
-}
-</script>
-
+<script>
+export default {
+  onLaunch: function () {
+    console.log('App Launch')
+  },
+  onShow: function () {
+    console.log('App Show')
+  },
+  onHide: function () {
+    console.log('App Hide')
+  }
+}
+</script>
+
 <style lang="scss">
 /*姣忎釜椤甸潰鍏叡css */
 @import "uview-ui/index.scss";
@@ -21,7 +21,18 @@
   justify-content: space-between;
   align-items: center;
 }
-
+.empty_wrap{
+  padding-top: 280rpx;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  color: #999999;
+  image{
+    width: 220rpx;
+    height: 238rpx;
+  }
+}
 .container {
   height: 100%;
   width: 100%;
@@ -125,7 +136,7 @@
   font-size: 28rpx;
 }
 .red{
-	color: red;
+	color: red !important ;
 }
 
 //璁剧疆鍦嗚
@@ -235,5 +246,5 @@
 }
 .mr6 {
   margin-right: 6rpx;
-}
-</style>
+}
+</style>
diff --git a/pda/api/index.js b/pda/api/index.js
index cee97c8..a8ee63f 100644
--- a/pda/api/index.js
+++ b/pda/api/index.js
@@ -70,6 +70,22 @@
     data
   })
 }
+//  鍙彿鍒楄〃
+export const platformCallList = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformCallList',
+    method: 'post',
+    data
+  })
+}
+//  鍏ュ洯鍙彿
+export const platformInPark = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformInPark',
+    method: 'post',
+    data
+  })
+}
 //  鏈堝彴鍙彿
 export const platformCallNumber = (data) => {
   return http({
diff --git a/pda/manifest.json b/pda/manifest.json
index 4d3af04..ae879f7 100644
--- a/pda/manifest.json
+++ b/pda/manifest.json
@@ -19,7 +19,7 @@
 		            "/admin_interface" : {
 		                // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
 		                // "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-		                "target" : "http://192.168.0.136:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+		                "target" : "http://192.168.0.139:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
 		                "changeOrigin" : true, // 鍏佽璺ㄥ煙 
 		                "pathRewrite" : {
 		                    "^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
diff --git a/pda/package-lock.json b/pda/package-lock.json
new file mode 100644
index 0000000..f3d0f48
--- /dev/null
+++ b/pda/package-lock.json
@@ -0,0 +1,11 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+    }
+  }
+}
diff --git a/pda/pages.json b/pda/pages.json
index 206c8e9..3e194d5 100644
--- a/pda/pages.json
+++ b/pda/pages.json
@@ -47,9 +47,9 @@
 		}
 	],
 	"globalStyle": {
-		"navigationBarTextStyle": "black",
+		"navigationBarTextStyle": "white",
 		"navigationBarTitleText": "",
-		"navigationBarBackgroundColor": "#ffffff",
+		"navigationBarBackgroundColor": "#4d99a9",
 		"backgroundColor": "#ffffff"
 	},
 	"uniIdRouter": {}
diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index 531287e..6278be5 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -2,7 +2,8 @@
   <view class="main_app">
     <view class="main_content">
       <view class="title" @click="showPlatformgroup = true"
-        >{{ activePlatformGroup.name }}<u-icon
+        >{{ activePlatformGroup.name
+        }}<u-icon
           name="arrow-down"
           size="20"
           class="ml12"
@@ -12,10 +13,10 @@
       <view class="platform_list">
         <view
           class="item"
-          :class="{ active: item.id === activePlatformId }"
+          :class="{ active: item.id === activePlatform.id }"
           v-for="(item, index) in activePlatformGroup.platformList"
           :key="index"
-					@click="platformClick(item.id)"
+          @click="platformClick(item)"
           >{{ item.name }}</view
         >
       </view>
@@ -35,43 +36,92 @@
       </view>
     </view>
     <!--  -->
-    <view v-if="true" class="platform_ing">
-      <view class="head">
-        <view class="code">
-          <text>鐨�</text>
-          <text>AD1212</text>
+    <view style="padding-bottom: 140rpx">
+      <view
+        v-for="item in platformTaskInfo.platformJobList"
+        :key="item.id"
+        class="platform_ing"
+      >
+        <view class="head">
+          <view class="code">
+            <text>{{ item.carCodeFront.slice(0, 1) }}</text>
+            <text>{{ item.carCodeFront.slice(1, 2) }}</text>
+            <text>路</text>
+            <text>{{ item.carCodeFront.slice(2) }}</text>
+          </view>
+          <view
+            class="status"
+            v-if="item.status != 4 && item.status != 5"
+            :class="{ red: item.status == 8 }"
+            >{{ statusMap[item.status] }}</view
+          >
+          <view class="status" v-if="item.status == 4"
+            >鍙彿涓� {{ item.callDateTemp }}</view
+          >
+          <view class="status scs" v-if="item.status == 5"
+            >宸蹭綔涓� {{ item.startDateTemp }}</view
+          >
         </view>
-        <view class="status">鍙彿涓�</view>
+        <view class="line" v-if="item.type == 4">
+          <text class="label">鍚堝悓鍗曞彿</text>
+          <text class="value">{{ item.contractNum }}</text>
+        </view>
+        <view class="line" v-else>
+          <text class="label">杩愯緭鍗曞彿</text>
+          <text class="value">{{ item.code }}</text>
+          <text class="primaryColor" @click="handleDetail()">杩愬崟璇︽儏</text>
+        </view>
+        <view class="line">
+          <text class="label">椹鹃┒鍛�</text>
+          <text class="value"
+            >{{ item.driverName }} {{ item.drivierPhone }}</text
+          >
+        </view>
+        <view class="line">
+          <text class="label">鎬昏繍杈撻噺</text>
+          <text class="value">{{ item.totalNum }}涓囨敮</text>
+        </view>
+        <view class="line" v-if="item.type != 4">
+          <text class="label">杩愯緭鍏徃</text>
+          <text class="value">{{ item.carrierName }}</text>
+        </view>
+        <view class="btns">
+          <view v-if="item.status == 4" class="btn" @click="handlePass(item)"
+            >杩囧彿</view
+          >
+          <view
+            v-if="item.status == 4"
+            class="btn active"
+            @click="handleWork(item)"
+            >寮�濮嬩綔涓�</view
+          >
+
+          <view v-if="item.status == 5" class="btn" @click="handleErr(item)"
+            >寮傚父鎸傝捣</view
+          >
+          <view
+            v-if="item.status == 5 || item.status == 8"
+            class="btn"
+            @click="handleTransform(item)"
+            >杞Щ鏈堝彴</view
+          >
+          <view
+            v-if="item.status == 5 || item.status == 8"
+            class="btn active"
+            @click="handleFinish(item)"
+            >瀹屾垚浣滀笟</view
+          >
+        </view>
       </view>
-      <view class="line">
-        <text class="label">杩愯緭鍗曞彿</text>
-        <text class="value">11111</text>
-        <text class="primaryColor" @click="handleDetail()">杩愬崟璇︽儏</text>
-      </view>
-      <view class="line">
-        <text class="label">鎬昏繍杈撻噺</text>
-        <text class="value">11111</text>
-      </view>
-      <view class="line">
-        <text class="label">椹鹃┒鍛�</text>
-        <text class="value">11111</text>
-      </view>
-      <view class="btns">
-        <view class="btn">杩囧彿</view>
-        <view class="btn" @click="handleTransform">杞Щ鏈堝彴</view>
-        <view class="btn active">寮�濮嬩綔涓�</view>
+      <view v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap">
+        <image src="@/static/default_nodata@2x.png" />
+        <text>鏆傛棤浣滀笟杞﹁締</text>
       </view>
     </view>
-    <image
-      v-if="true"
-      class="empty"
-      src="@/static/default_nodata@2x.png"
-      mode="widthFix"
-    ></image>
     <!--  -->
     <view class="main_footer">
-      <view class="btn">鍏ュ洯鍙彿</view>
-      <view class="btn active" @click="PlatformCallClick">鏈堝彴鍙彿</view>
+      <view class="btn" @click="PlatformCallClick(1)">鍏ュ洯鍙彿</view>
+      <view class="btn active" @click="PlatformCallClick(2)">鏈堝彴鍙彿</view>
     </view>
     <!-- 鍙彿 -->
     <u-popup
@@ -81,45 +131,69 @@
       round="10"
       @close="showPlatformCall = false"
     >
-      <view class="PlatformCallModal">
-        <view class="title">鏈堝彴鍙彿(1鍙锋湀鍙�)</view>
+      <view
+        class="PlatformCallModal"
+        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
+      >
+        <view class="title" v-if="callType == 2"
+          >鏈堝彴鍙彿({{ activePlatform.name }})</view
+        >
+        <view class="title" v-else>鍏ュ洯鍙彿</view>
         <view class="input_wrap">
           <u-icon name="search" class="mr12" size="19" color="#999999" />
           <input
+            v-model="platformCallSearch"
             type="text"
             placeholder="鎼滅储杞﹁締鐗岀収"
             placeholder-class="placeholder9"
+            @confirm="callQuery"
           />
         </view>
         <view class="order_list">
-          <scroll-view scroll-y="true" class="scroll_view">
-            <view class="platform_ing" v-for="i in 8">
+          <scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view">
+            <view
+              class="platform_ing"
+              v-for="item in platformCallList"
+              :key="item.id"
+            >
               <view class="head">
-                <view class="code">
-                  <text>鐨�</text>
-                  <text>AD1212</text>
+                <view v-if="item.carCodeFront" class="code">
+                  <text>{{ item.carCodeFront.slice(0, 1) }}</text>
+                  <text>{{ item.carCodeFront.slice(1, 2) }}</text>
+                  <text>路</text>
+                  <text>{{ item.carCodeFront.slice(2) }}</text>
                 </view>
-                <view class="status">鍙彿涓�</view>
+                <view class="status" :class="{ scs: item.status == 4 }">{{
+                  statusMap[item.status]
+                }}</view>
               </view>
-              <view class="line">
+              <view class="line" v-if="item.type == 4">
+                <text class="label">鍚堝悓鍗曞彿</text>
+                <text class="value">{{ item.contractNum }}</text>
+              </view>
+              <view class="line" v-else>
                 <text class="label">杩愯緭鍗曞彿</text>
-                <text class="value">11111</text>
-                <text class="primaryColor">杩愬崟璇︽儏</text>
+                <text class="value">{{ item.code }}</text>
+                <text class="primaryColor" @click="handleDetail()"
+                  >杩愬崟璇︽儏</text
+                >
               </view>
               <view class="line">
                 <text class="label">椹鹃┒鍛�</text>
-                <text class="value">11111</text>
+                <text class="value"
+                  >{{ item.driverName }} {{ item.drivierPhone }}</text
+                >
               </view>
               <view class="line">
                 <text class="label">鎬昏繍杈撻噺</text>
-                <text class="value">11111</text>
+                <text class="value">{{ item.totalNum }}涓囨敮</text>
               </view>
-              <view class="line">
+              <view class="line" v-if="item.type != 4">
                 <text class="label">杩愯緭鍏徃</text>
-                <text class="value">11111</text>
+                <text class="value">{{ item.carrierName }}</text>
               </view>
               <view class="btns">
-                <view class="btn active">鍙彿</view>
+                <view class="btn active" @click="handleCall(item)">鍙彿</view>
               </view>
             </view>
           </scroll-view>
@@ -134,7 +208,10 @@
       round="10"
       @close="showDetail = false"
     >
-      <view class="PlatformCallModal">
+      <view
+        class="PlatformCallModal"
+        :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
+      >
         <view class="title">杩愬崟璇︽儏</view>
         <view class="platform_ing" style="padding: 0">
           <view class="head">
@@ -194,88 +271,265 @@
       round="10"
       @close="showTransform = false"
     >
-      <view class="PlatformCallModal TransformModal">
+      <view class="TransformModal">
         <view class="title">杞Щ鏈堝彴</view>
         <view class="transform_list">
-          <view class="line" v-for="item,index in 9">
-            <view class="name">1鍙锋湀鍙�</view>
-            <view class="status">(绌洪棽)</view>
-            <image v-if="index == 1" src="@/static/ic_select@2x.png" class="checked" />
+          <view
+            class="line"
+            @click="transformPlatClick(item)"
+            v-for="item in activePlatformGroup.platformList"
+            :key="item.id"
+          >
+            <view class="name">{{ item.name }}</view>
+            <view class="status" :class="{ green: item.workStatus == 1 }"
+              >({{ item.workStatus == 0 ? "绌洪棽" : "浣滀笟涓�" }})</view
+            >
+            <image
+              v-if="transformPlatId == item.id"
+              src="@/static/ic_select@2x.png"
+              class="checked"
+            />
           </view>
         </view>
         <view class="btns">
-          <view class="btn" @click="showTransform = false">鍙栨秷</view>
-          <view class="btn active">纭畾</view>
+          <view class="btn" @click="transformCancel">鍙栨秷</view>
+          <view class="btn active" @click="transformSub">纭畾</view>
         </view>
       </view>
     </u-popup>
-		<!--  -->
-		<u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]" @cancel="showPlatformgroup = false" @confirm="platConfirm"></u-picker>
+    <!--  -->
+    <u-picker
+      :show="showPlatformgroup"
+      keyName="name"
+      :columns="[platformGroupList]"
+      @cancel="showPlatformgroup = false"
+      @confirm="platConfirm"
+    ></u-picker>
   </view>
 </template>
 
 <script>
-import { getPlatformGroupList, getPlatformWorkData } from '@/api'
+import {
+  getPlatformGroupList,
+  getPlatformWorkData,
+  platformCallList,
+  platformCallNumber,
+  platformInPark,
+  beginWork,
+  finishWork,
+  platformMove,
+  platformErr,
+  platformOverNumber
+} from '@/api'
+import { statusMap } from '@/utils/config.js'
+import dayjs from 'dayjs'
+import duration from 'dayjs/plugin/duration'
+dayjs.extend(duration)
+
 export default {
   data() {
     return {
+      statusMap,
+      windowTop: 44,
       showPlatformCall: false, // 鏈堝彴鍙彿
       showDetail: false,
       showTransform: false, // 杞Щ
       showPlatformgroup: false,
-			
-			platformGroupList: [],
-			activePlatformGroup: {},
-			platformTaskInfo: {},
-			activePlatformId: '',
+
+      platformGroupList: [],
+      activePlatformGroup: {},
+      platformTaskInfo: {},
+      activePlatform: {},
+
+      platformCallList: [],//鍙彿鍒楄〃
+      platformCallSearch: '',
+      platformCallTotal: 0,
+      platformCallPage: 1,
+      callType: 1,
+
+      transformPlatId: '', // 杞Щ璁板綍鏈堝彴id
+      transformId: '', // 杞Щ璁板綍浠诲姟id
     }
   },
   onLoad() {
-		this.getPlatformGroup()
+    this.getPlatformGroup()
+    const res = uni.getWindowInfo()
+    this.windowTop = res.windowTop
   },
   methods: {
-		getPlatformGroup() {
-			getPlatformGroupList({
-				queryData: 1,
-				queryType: 0
-			}).then(res => {
-				this.platformGroupList = res.data || []
-				if(this.platformGroupList.length > 0){
-					this.activePlatformGroup = this.platformGroupList[0]
-					if(this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0){
-						this.activePlatformId = this.activePlatformGroup.platformList[0].id
-						this.getPlatformTask()
-					}
-				}
-			})
-		},
-		getPlatformTask() {
-			getPlatformWorkData({platformId: this.activePlatformId}).then(res => {
-				this.platformTaskInfo = res.data
-			})
-		},
-		platConfirm(e) {
-			const index = e.indexs[0]
-			this.activePlatformGroup = this.platformGroupList[index]
-			if(this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0){
-				this.activePlatformId = this.activePlatformGroup.platformList[0].id
-				this.getPlatformTask()
-			}
-			this.showPlatformgroup =false
-		},
-		platformClick(id) {
-			this.activePlatformId = id
-			this.getPlatformTask()
-		},
+    getPlatformGroup() {
+      getPlatformGroupList({
+        queryData: 1,
+        queryType: 0
+      }).then(res => {
+        this.platformGroupList = res.data || []
+        if (this.platformGroupList.length > 0) {
+          this.activePlatformGroup = this.platformGroupList[0]
+          if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
+            this.activePlatform = this.activePlatformGroup.platformList[0]
+            this.getPlatformTask()
+          }
+        }
+      })
+    },
+    getPlatformTask() {
+      getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => {
+        this.platformTaskInfo = res.data
+        this.circulInitTaskList()
+        setInterval(() => {
+          this.circulInitTaskList()
+        }, 1000)
+      })
+    },
+    circulInitTaskList() {
+      if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList.length > 0) {
+        let time = new Date()
+        this.platformTaskInfo.platformJobList.forEach(item => {
+          if (item.callDate) {
+            let timeNum = time.getTime() - new Date(item.callDate).getTime()
+            if (timeNum > 3600000) {
+              item.callDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖绉�')
+            } else {
+              item.callDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
+            }
+          }
+          if (item.startDate) {
+            let timeNum = time.getTime() - new Date(item.startDate).getTime()
+            if (timeNum > 3600000) {
+              item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖s绉�')
+            } else {
+              item.startDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
+            }
+          }
+        })
+        this.$forceUpdate()
+      }
+    },
+    platConfirm(e) {
+      const index = e.indexs[0]
+      this.activePlatformGroup = this.platformGroupList[index]
+      if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
+        this.activePlatform = this.activePlatformGroup.platformList[0]
+        this.getPlatformTask()
+      }
+      this.showPlatformgroup = false
+    },
+    platformClick(item) {
+      this.activePlatform = item
+      this.getPlatformTask()
+    },
     handleDetail() {
       this.showDetail = true
     },
-    PlatformCallClick() {
-      this.showPlatformCall = true
+    handleFinish(item) {
+      finishWork({ jobId: item.id }).then(res => {
+        this.showToast('瀹屾垚浣滀笟')
+        this.getPlatformTask()
+      })
     },
-    handleTransform() {
+    handleWork(item) { // 寮�濮嬩綔涓�
+      beginWork({ jobId: item.id }).then(res => {
+        this.showToast('宸插紑濮嬩綔涓�')
+        this.getPlatformTask()
+      })
+    },
+    handlePass(item) {
+      uni.showModal({
+        content: '鎮ㄧ‘璁よ瀵硅浠诲姟杩涜杩囧彿鍚�',
+        success: (res) => {
+          if (res.confirm) {
+            platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => {
+              this.showToast('杩囧彿鎴愬姛')
+              this.getPlatformTask()
+            })
+          }
+        }
+      })
+
+    },
+    handleCall(item) {
+      const { callType, activePlatform } = this
+      this.platformCallList = []
+      this.platformCallPage = 1
+      if (callType == 1) { // 鍏ュ洯鍙彿
+        platformInPark({ jobId: item.id }).then(res => {
+          this.showToast('鍙彿鎴愬姛')
+          this.getPlatformCallList()
+        })
+      } else { // 鏈堝彴鍙彿
+        platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => {
+          this.showToast('鍙彿鎴愬姛')
+          this.getPlatformCallList()
+          this.getPlatformTask()
+        })
+      }
+    },
+    PlatformCallClick(callType) {
+      this.callType = callType
+      this.showPlatformCall = true
+      this.platformCallList = []
+      this.platformCallPage = 1
+      this.platformCallSearch = ''
+      this.getPlatformCallList()
+    },
+    callQuery() {
+      this.platformCallList = []
+      this.platformCallPage = 1
+      this.getPlatformCallList()
+    },
+    callScrolltolower() {
+      const { platformCallTotal, platformCallList } = this
+      if(platformCallTotal > platformCallList.length){
+        this.getPlatformCallList()
+      }
+    },
+    getPlatformCallList() {
+      const { platformCallPage, callType, activePlatform, platformCallSearch } = this
+      platformCallList({
+        model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch },
+        capacity: 10,
+        page: platformCallPage
+      }).then(res => {
+        if (res.data && res.data.records) {
+          this.platformCallList = [ ...this.platformCallList, ...res.data.records]
+          this.platformCallTotal = res.data.total
+        }
+      })
+    },
+    transformPlatClick(item) {
+      this.transformPlatId = item.id
+    },
+    transformCancel() {
+      this.transformPlatId = ''
+      this.showTransform = false
+    },
+    transformSub() {
+      const { transformPlatId, transformId } = this
+      platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => {
+        this.showToast('杞Щ鏈堝彴鎴愬姛')
+        this.transformCancel()
+        this.getPlatformTask()
+      })
+    },
+    handleTransform(item) {
+      let { activePlatform } = this
+      this.transformId = item.id
+      this.transformPlatId = activePlatform.id
       this.showTransform = true
     },
+    handleErr(item) {
+      uni.showModal({
+        content: '鎮ㄧ‘璁よ瀵硅浠诲姟杩涜寮傚父鎸傝捣鍚�',
+        success: (res) => {
+          if (res.confirm) {
+            platformErr({ jobId: item.id }).then(ress => {
+              this.showToast('寮傚父鎸傝捣鎴愬姛')
+              this.getPlatformTask()
+            })
+          }
+        }
+      })
+    }
   }
 }
 </script>
@@ -366,15 +620,24 @@
         border-radius: 8rpx;
         border: 1rpx solid #dfdede;
         text {
-          padding: 0 12rpx;
           &:nth-of-type(1) {
             background: #e9f5f6;
+            padding: 0 12rpx;
+          }
+          &:nth-of-type(2) {
+            padding-left: 4rpx;
+          }
+          &:nth-of-type(4) {
+            padding-right: 6rpx;
           }
         }
       }
       .status {
         font-size: 30rpx;
         color: $uni-color-primary;
+      }
+      .scs {
+        color: #00ba67;
       }
     }
     .line {
@@ -442,7 +705,7 @@
   }
 }
 .PlatformCallModal {
-  height: calc(100vh - 50px);
+  height: calc(100vh - 44px);
   padding: 30rpx;
   .title {
     text-align: center;
@@ -458,7 +721,7 @@
     padding: 0 30rpx;
   }
   .order_list {
-    height: calc(100% - 120rpx);
+    height: calc(100% - 140rpx);
     .scroll_view {
       height: 100%;
     }
@@ -508,8 +771,62 @@
       }
     }
   }
+  .btns {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      border-radius: 44rpx;
+      border: 1rpx solid $uni-color-primary;
+      color: $uni-color-primary;
+      font-size: 32rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .active {
+      color: #fff;
+      background-color: $uni-color-primary;
+    }
+  }
+}
+.TransformModal {
+  height: 900rpx;
+  padding: 30rpx;
+  position: relative;
+  .title {
+    text-align: center;
+    margin: 0 0 30rpx;
+  }
+  .btns {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    position: absolute;
+    z-index: 999;
+    left: 30rpx;
+    bottom: 30rpx;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      border-radius: 44rpx;
+      border: 1rpx solid $uni-color-primary;
+      color: $uni-color-primary;
+      font-size: 32rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .active {
+      color: #fff;
+      margin-left: 18rpx;
+      background-color: $uni-color-primary;
+    }
+  }
   .transform_list {
-    height: 760rpx;
+    height: 660rpx;
     margin-bottom: 30rpx;
     overflow: auto;
     .line {
@@ -528,34 +845,14 @@
         color: $uni-color-primary;
         margin-left: 12rpx;
       }
+      .green {
+        color: #00ba67;
+      }
       .checked {
         width: 40rpx;
         height: 40rpx;
       }
     }
   }
-  .btns {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    .btn {
-      width: 336rpx;
-      height: 88rpx;
-      border-radius: 44rpx;
-      border: 1rpx solid $uni-color-primary;
-      color: $uni-color-primary;
-      font-size: 32rpx;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-    }
-    .active{
-      color: #fff;
-      background-color: $uni-color-primary;
-    }
-  }
-}
-.TransformModal{
-  height: 1000rpx;
 }
 </style>
\ No newline at end of file
diff --git a/pda/pages/index/queueup.vue b/pda/pages/index/queueup.vue
index e21a04c..e9e23c7 100644
--- a/pda/pages/index/queueup.vue
+++ b/pda/pages/index/queueup.vue
@@ -1,8 +1,9 @@
 <template>
   <view class="main_app">
     <view class="main_content">
-      <view class="title"
-        >瀹夋嘲鐗╂祦瑁呰揣骞冲彴<u-icon
+      <view class="title" @click="showPlatformgroup = true"
+        >{{ platformGroup.name
+        }}<u-icon
           name="arrow-down"
           size="20"
           class="ml12"
@@ -12,81 +13,135 @@
       <view class="input_wrap">
         <u-icon name="search" class="mr12" size="19" color="#999999" />
         <input
+          v-model="carCodeFront"
           type="text"
           placeholder="鎼滅储杞﹁締鐗岀収"
           placeholder-class="placeholder9"
+          @confirm="handleQuery"
         />
       </view>
       <view class="count"
-        >宸茬鍒拌溅杈嗭細<text>{{ 10 }}</text></view
+        >宸茬鍒拌溅杈嗭細<text>{{ total }}</text></view
       >
     </view>
     <!--  -->
-    <div class="dataList">
-      <div class="item">
+    <view class="dataList">
+      <view class="item" v-for="item in platformLineUpList" :key="item.id">
         <view class="head">
-          <view class="code">
-            <text>鐨�</text>
-            <text>AD1212</text>
+          <view v-if="item.carCodeFront" class="code">
+            <text>{{ item.carCodeFront.slice(0, 1) }}</text>
+            <text>{{ item.carCodeFront.slice(1, 2) }}</text>
+            <text>路</text>
+            <text>{{ item.carCodeFront.slice(2) }}</text>
           </view>
-          <view class="status">绛惧埌鏃堕棿锛歿{ 11 }}</view>
+          <view class="status" v-if="item.signDate"
+            >绛惧埌鏃堕棿锛歿{ item.signDate.slice(11, 16) }}</view
+          >
         </view>
-        <view class="line">
+        <view class="line" v-if="item.type == 4">
+          <text class="label">鍚堝悓鍗曞彿</text>
+          <text class="value">{{ item.contractNum }}</text>
+        </view>
+        <view class="line" v-else>
           <text class="label">杩愯緭鍗曞彿</text>
-          <text class="value">11111</text>
+          <text class="value">{{ item.code }}</text>
           <text class="primaryColor" @click="handleDetail()">杩愬崟璇︽儏</text>
         </view>
         <view class="line">
           <text class="label">椹鹃┒鍛�</text>
-          <text class="value">11111</text>
+          <text class="value"
+            >{{ item.driverName }} {{ item.drivierPhone }}</text
+          >
         </view>
         <view class="line">
           <text class="label">鎬昏繍杈撻噺</text>
-          <text class="value">11111</text>
+          <text class="value">{{ item.totalNum }}涓囨敮</text>
         </view>
-        <view class="line">
+        <view class="line" v-if="item.type != 4">
           <text class="label">杩愯緭鍏徃</text>
-          <text class="value">11111</text>
+          <text class="value">{{ item.carrierName }}</text>
         </view>
-        <view class="btns">
+        <!-- <view class="btns">
           <view class="btn active">鍏ュ洯</view>
-        </view>
-      </div>
-    </div>
+        </view> -->
+      </view>
+      <view v-if="platformLineUpList.length == 0" class="empty_wrap">
+        <image src="@/static/default_nodata@2x.png" />
+        <text>鏆傛棤浣滀笟杞﹁締</text>
+      </view>
+    </view>
+    <u-picker
+      :show="showPlatformgroup"
+      keyName="name"
+      :columns="[platformGroupList]"
+      @cancel="showPlatformgroup = false"
+      @confirm="platConfirm"
+    ></u-picker>
   </view>
 </template>
 
 <script>
-	import { platformLineUpPage, getPlatformGroupList } from '@/api'
+import { platformLineUpPage, getPlatformGroupList } from '@/api'
 export default {
   data() {
     return {
       showDetail: false,
-			capacity: 10,
-			page: 1,
-			platformGroupId: '',
-			platformGroupList: []
+      showPlatformgroup: false,
+      capacity: 10,
+      page: 1,
+      total: 0,
+      carCodeFront: '',
+      platformGroup: {},
+      platformGroupList: [],
+      platformLineUpList: []
     }
   },
   onLoad() {
-		this.getPlatformGroup()
-		this.initData()
+    this.getPlatformGroup()
   },
+	onReachBottom() {
+		if(this.total > this.platformLineUpList.length){
+			this.getList()
+		}
+	},
   methods: {
     handleDetail() {
       this.showDetail = true
     },
-		getPlatformGroup() {
-			getPlatformGroupList().then(res => {
-				
-			})
-		},
-		initData(){
-			const { page, capacity } = this
-			platformLineUpPage({
-				capacity, page, model: {}
-			})
-		}
+    getPlatformGroup() {
+      getPlatformGroupList({
+        queryData: 1,
+        queryType: 0
+      }).then(res => {
+        this.platformGroupList = res.data || []
+        if (this.platformGroupList && this.platformGroupList.length > 0) {
+          this.platformGroup = this.platformGroupList[0]
+          this.getList()
+        }
+      })
+    },
+    getList() {
+      const { page, capacity, platformGroup, carCodeFront } = this
+      platformLineUpPage({
+        capacity, page, model: { platformGroupId: platformGroup.id, callType: 2, carCodeFront }
+      }).then(res => {
+        if (res.data) {
+          this.platformLineUpList = [...this.platformLineUpList, ...res.data.records || []]
+          this.total = res.data.total || 0
+        }
+      })
+    },
+    handleQuery() {
+      this.page = 1
+      this.platformLineUpList = []
+      this.getList()
+    },
+    platConfirm(e) {
+      const index = e.indexs[0]
+      this.platformGroup = this.platformGroupList[index]
+      this.getList()
+      this.showPlatformgroup = false
+    },
   }
 }
 </script>
@@ -152,9 +207,15 @@
           border-radius: 8rpx;
           border: 1rpx solid #dfdede;
           text {
-            padding: 0 12rpx;
             &:nth-of-type(1) {
               background: #e9f5f6;
+              padding: 0 12rpx;
+            }
+            &:nth-of-type(2) {
+              padding-left: 4rpx;
+            }
+            &:nth-of-type(4) {
+              padding-right: 6rpx;
             }
           }
         }
diff --git a/pda/static/default_nodata@2x.png b/pda/static/default_nodata@2x.png
index a4de18b..e3f3124 100644
--- a/pda/static/default_nodata@2x.png
+++ b/pda/static/default_nodata@2x.png
Binary files differ
diff --git a/pda/utils/config.js b/pda/utils/config.js
index 03c8927..c34dbbf 100644
--- a/pda/utils/config.js
+++ b/pda/utils/config.js
@@ -2,3 +2,18 @@
 export const baseUrl = 'admin_interface/'
 export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
 export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
+
+export const statusMap = {
+	0: '寰呯‘璁�',
+	1: '寰呯鍒�',
+	2: '绛夊緟鍙彿',
+	3: '鍏ュ洯绛夊緟',
+	4: '鏈堝彴绛夊緟', //宸插彨鍙�
+	5: '浣滀笟涓�',
+	6: '浣滀笟瀹屾垚',
+	7: '杞Щ涓�',
+	8: '寮傚父鎸傝捣',
+	9: '宸叉巿鏉冪鍥�',
+	10: '宸茬鍥�',
+	11: '宸茶繃鍙�',
+}
\ No newline at end of file

--
Gitblit v1.9.3