From 1382a7990e9b13f60c6416ada5477673a934dd16 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 29 八月 2024 09:02:57 +0800
Subject: [PATCH] ll

---
 pda/utils/service.js            |    3 
 h5/main.js                      |   10 
 pda/api/index.js                |  108 +++
 h5/api/driver.js                |   16 
 h5/pages/driver/index.vue       |   20 
 admin/src/api/platform/index.js |    6 
 h5/utils/service.js             |    3 
 h5/pages/driver/reserved.vue    |    7 
 pda/pages/index/login.vue       |   73 +-
 h5/pages/driver/queueUp.vue     |   57 +
 pda/App.vue                     |  284 +++++++-
 h5/pages/driver/taskDetail.vue  |  144 +++-
 pda/pages/index/queueup.vue     |   21 
 pda/main.js                     |   11 
 pda/pages/index/set.vue         |  105 ++
 pda/pages/index/center.vue      |   67 +
 pda/pages/index/control.vue     |   47 
 h5/App.vue                      |    6 
 h5/manifest.json                |    2 
 h5/pages/driver/taskConfirm.vue |  809 +++++++++++++------------
 pda/manifest.json               |   24 
 admin/.env.development          |    2 
 22 files changed, 1,194 insertions(+), 631 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index cf6b164..8e9a34f 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -2,4 +2,4 @@
 NODE_ENV = 'development'
 
 VUE_APP_API_URL  = 'http://localhost:10010'
-#VUE_APP_API_URL  = 'http://192.168.0.173/admin_interface'
+VUE_APP_API_URL  = 'http://192.168.0.136:10010'
diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
index c399bb2..21c9200 100644
--- a/admin/src/api/platform/index.js
+++ b/admin/src/api/platform/index.js
@@ -1,10 +1,8 @@
 import request from '@/utils/request'
 
 // 鏈堝彴鍒楄〃
-export function getPlatform (data) {
-  return request.post('/visitsAdmin/cloudService/business/platform/page', data, {
-    trim: true
-  })
+export function getPlatformGroupList (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformGroup/getPlatformGroupList', data)
 }
 // 鏈堝彴鍒楄〃 缂栬緫
 export function PlatformEdit (data) {
diff --git a/h5/App.vue b/h5/App.vue
index fbec5c3..6594094 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -125,6 +125,9 @@
   color: #999999 !important;
   font-size: 28rpx;
 }
+.red{
+	color: red;
+}
 
 //璁剧疆鍦嗚
 checkbox .uni-checkbox-input {
@@ -225,6 +228,9 @@
 .ml12 {
   margin-left: 12rpx;
 }
+.ml6 {
+  margin-left: 6rpx;
+}
 .mt6 {
   margin-top: 6rpx;
 }
diff --git a/h5/api/driver.js b/h5/api/driver.js
index 99bc2ca..22aaa04 100644
--- a/h5/api/driver.js
+++ b/h5/api/driver.js
@@ -96,4 +96,20 @@
     method: 'post',
     data
   })
+}
+// 浠诲姟纭
+export const driverConfirmTask = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/confirmTask',
+    method: 'post',
+    data
+  })
+}
+// 浠诲姟绛惧埌
+export const driverSignInTask = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/driverPlatform/signIn',
+    method: 'post',
+    data
+  })
 }
\ No newline at end of file
diff --git a/h5/main.js b/h5/main.js
index 41c035c..619eb5b 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -18,10 +18,12 @@
 Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
 Vue.prototype.$goBack = () => { uni.navigateBack() }
 Vue.prototype.showToast = (str) => {
-	uni.showToast({
-	  title: str,
-	  icon: 'none',
-	  duration: 2000
+	setTimeout(() => {
+		uni.showToast({
+		  title: str,
+		  icon: 'none',
+		  duration: 2000
+		})
 	})
 }
 Vue.prototype.$eventBus = new Vue()
diff --git a/h5/manifest.json b/h5/manifest.json
index 22a90b7..205f624 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.135:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.136:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
                         "^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
diff --git a/h5/pages/driver/index.vue b/h5/pages/driver/index.vue
index 43cd875..f9000a5 100644
--- a/h5/pages/driver/index.vue
+++ b/h5/pages/driver/index.vue
@@ -43,7 +43,7 @@
 								<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="handleQueup(item)">鏌ョ湅鎺掗槦</view>
+								<view v-if="item.status == 2" class="sub_btn" @click="handleQueue(item)">鏌ョ湅鎺掗槦</view>
 							</view>
 						</view>
 					</view>
@@ -110,13 +110,18 @@
 				url: '/pages/driver/taskDetail?id=' + item.id
 			});
 		},
-		handleQueup(item) {},
+		handleQueue(item) {
+			uni.navigateTo({
+				url:'/pages/driver/queueUp?jobId=' + item.id	
+			})
+		},
 		initData() {
 			driverHomeData().then(res => {
 				if (res.code == 200) {
 					uni.setStorageSync('driverGuide', {
 						bookingTips: res.data.bookingTips,
-						reservationMap: res.data.reservationMap
+						reservationMap: res.data.reservationMap,
+						signDistance: res.data.signDistance
 					});
 					this.taskList = res.data.platformJobList || []
 				}
@@ -129,14 +134,9 @@
 				url: '/pages/driver/login'
 			});
 		},
-		handleTask(status) {
-			if (status == 1) {
-				return uni.navigateTo({
-					url: '/pages/driver/taskDetail'
-				});
-			}
+		handleTask(item) {
 			uni.navigateTo({
-				url: '/pages/driver/taskConfirm'
+				url: '/pages/driver/taskConfirm?id=' + item.id
 			});
 		}
 	}
diff --git a/h5/pages/driver/queueUp.vue b/h5/pages/driver/queueUp.vue
index 2b13d91..3c08723 100644
--- a/h5/pages/driver/queueUp.vue
+++ b/h5/pages/driver/queueUp.vue
@@ -1,7 +1,9 @@
 <template>
   <view class="main_app">
     <view class="main_name">
-      <text class="mr12">鐗╂祦鍏ュ簱鏈堝彴</text>
+      <text class="mr12" @click="showPlat = true">{{
+        activePlatform.name
+      }}</text>
       <u-icon name="arrow-down" color="#777777"></u-icon>
     </view>
     <!--  -->
@@ -9,7 +11,9 @@
       <view class="item" @click="handleCheck()">
         <view class="h1">浣滀笟涓溅杈�</view>
         <view class="h2">
-          <text>4</text>
+          <text v-if="activePlatform.signJobList">{{
+            activePlatform.signJobList.length
+          }}</text>
           <text class="unit">杈�</text>
         </view>
         <image
@@ -19,9 +23,11 @@
         ></image>
       </view>
       <view class="item cyan">
-        <view class="h1">浣滀笟涓溅杈�</view>
+        <view class="h1">宸茬鍒拌溅杈�</view>
         <view class="h2">
-          <text>4</text>
+          <text v-if="activePlatform.workJobList">{{
+            activePlatform.workJobList.length
+          }}</text>
           <text class="unit">杈�</text>
         </view>
         <image
@@ -31,27 +37,48 @@
         ></image>
       </view>
     </view>
+
+    <u-picker
+      :show="showPlat"
+      keyName="name"
+      :columns="[platformGroupList]"
+      @cancel="showPlat = false"
+      @confirm="platConfirm"
+    ></u-picker>
   </view>
 </template>
 
 <script>
-	import { driverLineUpDetail } from '@/api'
+import { driverLineUpDetail } from '@/api'
 export default {
   data() {
     return {
-
+      activePlatform: {},
+      platformGroupList: [],
+      showPlat: false
     }
   },
-	onLoad() {
-		this.getData()
-	},
+  onLoad(option) {
+    this.getData(option.jobId || '')
+  },
   methods: {
-		getData() {
-			driverLineUpDetail({
-				  mobile: uni.getStorageSync('driverInfo').mobile,
-				  queryType: 0
-			})
-		},
+    getData(jobId) {
+      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) {
+          this.activePlatform = res.data.platformGroupList[0]
+        }
+      })
+    },
+    platConfirm(e) {
+      const index = e.indexs[0]
+      this.activePlatform = this.platformGroupList[index]
+      this.showPlat = false
+    },
     handleCheck() {
       uni.navigateTo({
         url: "/pages/driver/queueUpRecord"
diff --git a/h5/pages/driver/reserved.vue b/h5/pages/driver/reserved.vue
index 3477489..0683f0f 100644
--- a/h5/pages/driver/reserved.vue
+++ b/h5/pages/driver/reserved.vue
@@ -211,12 +211,14 @@
 			this.$forceUpdate();
 			this.closeInput();
 		},
+		closeInput() {
+			this.$refs.keyboard.close();
+		},
 		copy(){
 			if(this.param.carCodeFront){
 				this.$set(this.param, 'carCodeBack', this.param.carCodeFront)
 				this.showToast('澶嶅埗鎴愬姛');
 			}
-			
 		},
 		handleUpload() {
 			let token = uni.getStorageSync('token') || ''
@@ -260,9 +262,6 @@
 			  }
 			})
 		},
-		closeInput() {
-			this.$refs.keyboard.close();
-		}
 	}
 };
 </script>
diff --git a/h5/pages/driver/taskConfirm.vue b/h5/pages/driver/taskConfirm.vue
index 592c807..7de5284 100644
--- a/h5/pages/driver/taskConfirm.vue
+++ b/h5/pages/driver/taskConfirm.vue
@@ -1,448 +1,461 @@
 <template>
-  <view class="main_app">
-    <view class="status_wrap">
-      <image
-        class="bg"
-        src="../../static/driver/bg_renwu@2x.png"
-        mode=""
-      ></image>
-      <view class="name">浣滀笟宸插畬鎴�</view>
-      <view class="id_card">鐨朅D1212</view>
-      <view class="status">浣滀笟瀹屾垚</view>
-    </view>
-    <!--  -->
-    <view class="main_content">
-      <view class="line">
-        <view class="label">鍙告満濮撳悕</view>
-        <view class="value">鍒樻煇</view>
-      </view>
-      <view class="line">
-        <view class="label">鎵嬫満鍙�</view>
-        <view class="value">188</view>
-      </view>
-      <view class="line">
-        <view class="label">杩愯緭鍗曞彿</view>
-        <view class="value" @click="showDetail = true">
-          <text class="waybill_num">Y111</text>
-          <text class="btn">杩愬崟璇︽儏</text>
-        </view>
-      </view>
-      <view class="line">
-        <view class="label">浣滀笟绫诲瀷</view>
-        <view class="value">鍏ュ洯瑁呰揣</view>
-      </view>
-      <view class="empty"></view>
-      <!--  -->
-      <view class="line">
-        <view class="label">杞﹀墠鐗岀収鍙�</view>
-        <view class="value" @click="openInput(1)">
-          <text :style="{ color: param.carNos ? '#000000' : '#999999' }">{{
-            param.carNos ? param.carNos : "璇疯緭鍏ヨ溅鍓嶇墝鐓у彿"
-          }}</text>
-        </view>
-      </view>
-      <view class="line">
-        <view class="label">杞﹀悗鐗岀収鍙�</view>
-        <view class="value">
-          <text
-            @click="openInput(1)"
-            :style="{ color: param.carNos ? '#000000' : '#999999' }"
-            >{{ param.carNos ? param.carNos : "璇疯緭鍏ヨ溅鍚庣墝鐓у彿" }}</text
-          >
-          <text class="copy">澶嶅埗杞﹀墠鐗岀収鍙�</text>
-        </view>
-      </view>
-      <!--  -->
-    </view>
-    <view class="space"></view>
-    <!-- 绛夊緟鍙彿 -->
-    <view class="sub_wrap">
-      <view class="btn check">纭浠诲姟</view>
-    </view>
+	<view class="main_app">
+		<view class="status_wrap">
+			<image class="bg" src="../../static/driver/bg_renwu@2x.png" mode=""></image>
+			<view class="name">璇风‘璁や换鍔�</view>
+			<view class="id_card">{{ param.carCodeFront }}</view>
+			<view class="status">浠诲姟寰呯‘璁�</view>
+		</view>
+		<!--  -->
+		<view class="main_content">
+			<view class="line">
+				<view class="label">鍙告満濮撳悕</view>
+				<view class="value">{{ param.driverName }}</view>
+			</view>
+			<view class="line">
+				<view class="label">鎵嬫満鍙�</view>
+				<view class="value">{{ param.drivierPhone }}</view>
+			</view>
+			<view class="line">
+				<view class="label">杩愯緭鍗曞彿</view>
+				<view class="value" @click="showDetail = true">
+					<text class="waybill_num">{{ param.contractNum }}</text>
+					<text class="btn">杩愬崟璇︽儏</text>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">浣滀笟绫诲瀷</view>
+				<view class="value">{{ param.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' }}</view>
+			</view>
+			<view class="empty"></view>
+			<!--  -->
+			<view class="line">
+				<view class="label">鍒板満鏃ユ湡<text class="red ml6">*</text></view>
+				<view class="value" @click="showDate = true">
+					<view :class="param.date ? '' : 'placeholder9'">{{ param.date ? param.date : '璇烽�夋嫨' }}</view>
+					<u-icon color="#999999" name="arrow-right"></u-icon>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">杞﹀墠鐗岀収鍙�</view>
+				<view class="value" @click="openInput(1)">
+					<text :style="{ color: param.carCodeFront ? '#000000' : '#999999' }">{{ param.carCodeFront ? param.carCodeFront : '璇疯緭鍏ヨ溅鍓嶇墝鐓у彿' }}</text>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">杞﹀悗鐗岀収鍙�<text class="red ml6">*</text></view>
+				<view class="value">
+					<text @click="openInput(2)" :style="{ color: param.carCodeBack ? '#000000' : '#999999' }">{{ param.carCodeBack ? param.carCodeBack : '璇疯緭鍏ヨ溅鍚庣墝鐓у彿' }}</text>
+					<text class="copy" @click="copy">澶嶅埗杞﹀墠鐗岀収鍙�</text>
+				</view>
+			</view>
+			<!--  -->
+		</view>
+		<view class="space"></view>
+		<!-- 绛夊緟鍙彿 -->
+		<view class="sub_wrap"><view class="btn check" @click="onSubmit">纭浠诲姟</view></view>
 
-    <!-- modal -->
-    <u-popup
-      :show="showDetail"
-      :round="10"
-      :safeAreaInsetBottom="true"
-      closeOnClickOverlay
-      :closeable="true"
-      mode="bottom"
-      @close="showDetail = false"
-    >
-      <view class="detail_modal">
-        <view class="modal_title">杩愬崟璇︽儏</view>
-        <view class="id_card">
-          <view class="last">鐨�</view>
-          <view class="name">AD1111</view>
-        </view>
-        <!--  -->
-        <view class="info">
-          <view class="line">
-            <view class="label">杩愯緭鍗曞彿</view>
-            <view class="value">2222</view>
-          </view>
-          <view class="line">
-            <view class="label">椹鹃┒鍛�</view>
-            <view class="value">2222</view>
-          </view>
-          <view class="line">
-            <view class="label">鎬昏繍杈撻噺</view>
-            <view class="value">2222</view>
-          </view>
-          <view class="line">
-            <view class="label">杩愯緭鍏徃</view>
-            <view class="value">2222</view>
-          </view>
-        </view>
-        <view class="separate"></view>
-        <view class="contract_list">
-          <view class="title">鍚堝悓鍙凤細111</view>
-          <view class="address">aadd</view>
-          <view class="list">
-            <view class="line">
-              <view class="label">鐗╂枡锛�</view>
-              <view class="value">榛勫北榛戦┈</view>
-            </view>
-            <view class="line">
-              <view class="label">鏁伴噺锛�</view>
-              <view class="value">榛勫北榛戦┈</view>
-            </view>
-            <view class="line">
-              <view class="label">鐗╂枡锛�</view>
-              <view class="value">榛勫北榛戦┈</view>
-            </view>
-            <view class="line">
-              <view class="label">鏁伴噺锛�</view>
-              <view class="value">榛勫北榛戦┈</view>
-            </view>
-          </view>
-        </view>
-      </view>
-    </u-popup>
-    <keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
-  </view>
-  <!--  -->
+		<!-- modal -->
+		<u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false">
+			<view class="detail_modal">
+				<view class="modal_title">杩愬崟璇︽儏</view>
+				<view class="id_card">
+					<view class="last">鐨�</view>
+					<view class="name">AD1111</view>
+				</view>
+				<!--  -->
+				<view class="info">
+					<view class="line">
+						<view class="label">杩愯緭鍗曞彿</view>
+						<view class="value">2222</view>
+					</view>
+					<view class="line">
+						<view class="label">椹鹃┒鍛�</view>
+						<view class="value">2222</view>
+					</view>
+					<view class="line">
+						<view class="label">鎬昏繍杈撻噺</view>
+						<view class="value">2222</view>
+					</view>
+					<view class="line">
+						<view class="label">杩愯緭鍏徃</view>
+						<view class="value">2222</view>
+					</view>
+				</view>
+				<view class="separate"></view>
+				<view class="contract_list">
+					<view class="title">鍚堝悓鍙凤細111</view>
+					<view class="address">aadd</view>
+					<view class="list">
+						<view class="line">
+							<view class="label">鐗╂枡锛�</view>
+							<view class="value">榛勫北榛戦┈</view>
+						</view>
+						<view class="line">
+							<view class="label">鏁伴噺锛�</view>
+							<view class="value">榛勫北榛戦┈</view>
+						</view>
+						<view class="line">
+							<view class="label">鐗╂枡锛�</view>
+							<view class="value">榛勫北榛戦┈</view>
+						</view>
+						<view class="line">
+							<view class="label">鏁伴噺锛�</view>
+							<view class="value">榛勫北榛戦┈</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-datetime-picker :show="showDate" v-model="param.date" :minDate="minDate" @confirm="dateEnter" @cancel="showDate = false" mode="datetime"></u-datetime-picker>
+		<keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
+	</view>
+	<!--  -->
 </template>
 
 <script>
-import keyboardInput from '@/components/keyboard-input/keyboard-input.vue'
+import keyboardInput from '@/components/keyboard-input/keyboard-input.vue';
+import { driverTaskJobDetail, driverConfirmTask } from '@/api';
+import dayjs from 'dayjs'
 export default {
-  components: {
-    keyboardInput
-  },
-  data() {
-    return {
-      param: {
-        status: '0'
-      },
-      showDetail: false,
+	components: {
+		keyboardInput
+	},
+	data() {
+		return {
+			param: {},
+			showDate: false,
+			showDetail: false,
+			minDate: '',
 
-      inputType: ''
-    }
-  },
-  methods: {
-    handleSignIn() {
-      const { param } = this
-      this.param.status = param.status == '0' ? '1' : '0'
-    },
-    getLocation() {
-      uni.getLocation({
-        type: 'wgs84',
-        success: function (res) {
-          console.log('褰撳墠浣嶇疆鐨勭粡搴︼細' + res.longitude)
-          console.log('褰撳墠浣嶇疆鐨勭含搴︼細' + res.latitude)
-        }
-      })
-    },
-    openInput(type) {
-      this.inputType = type
-      this.$refs.keyboard.open()
-    },
-    setPlate(e) {
-      if (this.inputType === 1) {
-        this.param.carNos = e
-      } else if (this.inputType === 2) {
-        this.param.carNos = e
-      }
-      this.$forceUpdate()
-      this.closeInput()
-    },
-    closeInput() {
-      this.$refs.keyboard.close()
-    }
-  }
-}
+			inputType: ''
+		};
+	},
+	onLoad(option) {
+		this.getDetail(option.id);
+		this.minDate = new Date().getTime()
+	},
+	methods: {
+		onSubmit(){
+			const { param } = this
+			if(!param.date) return this.showToast('璇烽�夋嫨鍒板満鏃ユ湡')
+			if(!param.carCodeBack) return this.showToast('璇疯緭鍏ヨ溅鍚庣墝鐓у彿')
+			driverConfirmTask({
+				id: param.id,
+				carCodeBack: param.carCodeBack,
+				arriveDate: param.date + ':59'
+			}).then(res =>{
+				this.showToast('纭鎴愬姛')
+				uni.navigateBack()
+			})
+		},
+		getDetail(jobId) {
+			driverTaskJobDetail({
+				jobId
+			}).then(ress => {
+				this.param = { ...ress.data, carCodeBack: '' };
+			});
+		},
+		dateEnter(e) {
+			setTimeout(() => {
+				this.$set(this.param, 'date', dayjs(e.value).format('YYYY-MM-DD HH:mm'))
+			})
+			this.showDate = false
+		},
+		openInput(type) {
+			this.inputType = type;
+			this.$refs.keyboard.open();
+		},
+		copy() {
+			if (this.param.carCodeFront) {
+				this.$set(this.param, 'carCodeBack', this.param.carCodeFront);
+				this.showToast('澶嶅埗鎴愬姛');
+			}
+		},
+		setPlate(e) {
+			if (this.inputType === 1) {
+				this.$set(this.param, 'carCodeFront', e);
+			} else if (this.inputType === 2) {
+				this.$set(this.param, 'carCodeBack', e);
+			}
+			this.$forceUpdate();
+			this.closeInput();
+		},
+		closeInput() {
+			this.$refs.keyboard.close();
+		}
+	}
+};
 </script>
 
 <style lang="scss">
 page {
-  background-color: #f7f7f7;
+	background-color: #f7f7f7;
 }
 
 .main_app {
-  padding: 0;
+	padding: 0;
 
-  .main_content {
-    background: #ffffff;
-    border-radius: 20rpx 20rpx 0rpx 0rpx;
-    padding: 16rpx 30rpx;
-    position: relative;
-    bottom: 32rpx;
+	.main_content {
+		background: #ffffff;
+		border-radius: 20rpx 20rpx 0rpx 0rpx;
+		padding: 16rpx 30rpx;
+		position: relative;
+		bottom: 32rpx;
+		z-index: 999;
+		.line {
+			padding: 24rpx 0 28rpx;
+			border-bottom: 1rpx solid #e5e5e5;
 
-    .line {
-      padding: 24rpx 0 28rpx;
-      border-bottom: 1rpx solid #e5e5e5;
+			.label {
+				font-size: 26rpx;
+				color: #666666;
+				margin-bottom: 20rpx;
+			}
 
-      .label {
-        font-size: 26rpx;
-        color: #666666;
-        margin-bottom: 20rpx;
-      }
+			.value {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				font-size: 30rpx;
 
-      .value {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        font-size: 30rpx;
+				.waybill_num {
+					flex: 1;
+				}
 
-        .waybill_num {
-          flex: 1;
-        }
+				.copy {
+					font-size: 26rpx;
+					color: $uni-color-primary;
+				}
 
-        .copy {
-          font-size: 26rpx;
-          color: $uni-color-primary;
-        }
+				.btn {
+					font-size: 28rpx;
+					color: $uni-color-primary;
+					display: flex;
+				}
+			}
+		}
+		.empty {
+			width: 750rpx;
+			height: 20rpx;
+			background-color: #f7f7f7;
+			margin: 0 -30rpx;
+		}
+		.warnning {
+			display: flex;
+			color: #ed4545;
+			align-items: center;
+			margin: 40rpx 0;
+		}
 
-        .btn {
-          font-size: 28rpx;
-          color: $uni-color-primary;
-          display: flex;
-        }
-      }
-    }
-    .empty {
-      width: 750rpx;
-      height: 20rpx;
-      background-color: #f7f7f7;
-      margin: 0 -30rpx;
-    }
-    .warnning {
-      display: flex;
-      color: #ed4545;
-      align-items: center;
-      margin: 40rpx 0;
-    }
+		.signIn_wrap {
+			margin: 80rpx auto;
+			width: 260rpx;
+			height: 260rpx;
+			position: relative;
+			color: #fff;
+			z-index: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
 
-    .signIn_wrap {
-      margin: 80rpx auto;
-      width: 260rpx;
-      height: 260rpx;
-      position: relative;
-      color: #fff;
-      z-index: 1;
-      display: flex;
-      flex-direction: column;
-      justify-content: center;
-      align-items: center;
+			.handle {
+				font-weight: 600;
+				font-size: 40rpx;
+				line-height: 56rpx;
+			}
 
-      .handle {
-        font-weight: 600;
-        font-size: 40rpx;
-        line-height: 56rpx;
-      }
+			.time {
+				color: rgba(255, 255, 255, 0.7);
+			}
 
-      .time {
-        color: rgba(255, 255, 255, 0.7);
-      }
+			.img {
+				position: absolute;
+				top: 0;
+				left: 0;
+				width: 100%;
+				z-index: -1;
+			}
+		}
+	}
 
-      .img {
-        position: absolute;
-        top: 0;
-        left: 0;
-        width: 100%;
-        z-index: -1;
-      }
-    }
-  }
+	.status_wrap {
+		height: 200rpx;
+		width: 100%;
+		padding: 30rpx;
+		position: relative;
+		z-index: 99;
+		color: #fff;
+		.bg {
+			width: 100%;
+			height: 100%;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: -1;
+		}
 
-  .status_wrap {
-    height: 200rpx;
-    width: 100%;
-    padding: 30rpx;
-    position: relative;
-    z-index: 99;
-    color: #fff;
-    .bg {
-      width: 100%;
-      height: 100%;
-      position: absolute;
-      top: 0;
-      left: 0;
-      z-index: -1;
-    }
+		.name {
+			font-weight: 600;
+			font-size: 40rpx;
+			line-height: 56rpx;
+			margin-bottom: 12rpx;
+		}
 
-    .name {
-      font-weight: 600;
-      font-size: 40rpx;
-      line-height: 56rpx;
-      margin-bottom: 12rpx;
-    }
+		.id_card {
+			color: rgba(255, 255, 255, 0.8);
+		}
+		.status {
+			position: absolute;
+			right: 0;
+			top: 30rpx;
+			height: 68rpx;
+			line-height: 68rpx;
+			background: #ffffff;
+			padding: 0 24rpx;
+			border-radius: 34rpx 0rpx 0rpx 34rpx;
+			font-size: 26rpx;
+			color: $uni-color-primary;
+		}
+	}
 
-    .id_card {
-      color: rgba(255, 255, 255, 0.8);
-    }
-    .status {
-      position: absolute;
-      right: 0;
-      top: 30rpx;
-      height: 68rpx;
-      line-height: 68rpx;
-      background: #ffffff;
-      padding: 0 24rpx;
-      border-radius: 34rpx 0rpx 0rpx 34rpx;
-      font-size: 26rpx;
-      color: $uni-color-primary;
-    }
-  }
+	.space {
+		width: 750rpx;
+		height: 200rpx;
+	}
 
-  .space {
-    width: 750rpx;
-    height: 200rpx;
-  }
+	.sub_wrap {
+		position: fixed;
+		padding: 16rpx 30rpx 64rpx;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		display: flex;
+		z-index: 1;
+		justify-content: space-between;
+		background-color: #fff;
+		.btn {
+			height: 96rpx;
+			line-height: 96rpx;
+			text-align: center;
+			width: 690rpx;
+			font-size: 36rpx;
+			color: #333333;
+			background: #ffffff;
+			border-radius: 48rpx;
+			border: 1rpx solid #999999;
+		}
 
-  .sub_wrap {
-    position: fixed;
-    padding: 16rpx 30rpx 64rpx;
-    bottom: 0;
-    left: 0;
-    width: 100%;
-    display: flex;
-    z-index: 1;
-    justify-content: space-between;
-    background-color: #fff;
-    .btn {
-      height: 96rpx;
-      line-height: 96rpx;
-      text-align: center;
-      width: 690rpx;
-      font-size: 36rpx;
-      color: #333333;
-      background: #ffffff;
-      border-radius: 48rpx;
-      border: 1rpx solid #999999;
-    }
-
-    .check {
-      background: $uni-color-primary;
-      border: 1rpx solid $uni-color-primary;
-      color: #fff;
-    }
-  }
+		.check {
+			background: $uni-color-primary;
+			border: 1rpx solid $uni-color-primary;
+			color: #fff;
+		}
+	}
 }
 
 .detail_modal {
-  padding: 36rpx 30rpx;
+	padding: 36rpx 30rpx;
 
-  .modal_title {
-    font-weight: 600;
-    font-size: 32rpx;
-    color: #222222;
-    line-height: 44rpx;
-    text-align: center;
-    margin-bottom: 36rpx;
-  }
+	.modal_title {
+		font-weight: 600;
+		font-size: 32rpx;
+		color: #222222;
+		line-height: 44rpx;
+		text-align: center;
+		margin-bottom: 36rpx;
+	}
 
-  .contract_list {
-    .list {
-      background: #f7f7f7;
-      border-radius: 8rpx;
-      padding: 20rpx;
+	.contract_list {
+		.list {
+			background: #f7f7f7;
+			border-radius: 8rpx;
+			padding: 20rpx;
 
-      .line {
-        display: flex;
-        margin-bottom: 20rpx;
+			.line {
+				display: flex;
+				margin-bottom: 20rpx;
 
-        &:nth-of-type(3n) {
-          border-top: 1rpx solid #e5e5e5;
-          padding-top: 20rpx;
-        }
+				&:nth-of-type(3n) {
+					border-top: 1rpx solid #e5e5e5;
+					padding-top: 20rpx;
+				}
 
-        .label {
-          color: #666666;
-          width: 86rpx;
-        }
+				.label {
+					color: #666666;
+					width: 86rpx;
+				}
 
-        .value {
-          flex: 1;
-          color: #222222;
-        }
-      }
-    }
+				.value {
+					flex: 1;
+					color: #222222;
+				}
+			}
+		}
 
-    .title {
-      font-weight: 600;
-      font-size: 30rpx;
-      color: $uni-color-primary;
-      margin-bottom: 12rpx;
-    }
+		.title {
+			font-weight: 600;
+			font-size: 30rpx;
+			color: $uni-color-primary;
+			margin-bottom: 12rpx;
+		}
 
-    .address {
-      font-size: 26rpx;
-      color: #666666;
-      margin-bottom: 20rpx;
-    }
-  }
+		.address {
+			font-size: 26rpx;
+			color: #666666;
+			margin-bottom: 20rpx;
+		}
+	}
 
-  .info {
-    .line {
-      display: flex;
-      margin-bottom: 20rpx;
+	.info {
+		.line {
+			display: flex;
+			margin-bottom: 20rpx;
 
-      .label {
-        font-size: 30rpx;
-        color: #666666;
-        width: 150rpx;
-      }
+			.label {
+				font-size: 30rpx;
+				color: #666666;
+				width: 150rpx;
+			}
 
-      .value {
-        flex: 1;
-        font-size: 30rpx;
-        color: #222222;
-      }
-    }
-  }
+			.value {
+				flex: 1;
+				font-size: 30rpx;
+				color: #222222;
+			}
+		}
+	}
 
-  .separate {
-    width: 750rpx;
-    height: 2rpx;
-    margin: 30rpx -30rpx;
-    border: 1rpx solid #e5e5e5;
-  }
+	.separate {
+		width: 750rpx;
+		height: 2rpx;
+		margin: 30rpx -30rpx;
+		border: 1rpx solid #e5e5e5;
+	}
 
-  .id_card {
-    border-radius: 8rpx;
-    display: flex;
-    height: 60rpx;
-    line-height: 60rpx;
-    font-weight: 600;
-    font-size: 36rpx;
-    color: #111111;
-    text-align: center;
-    margin-bottom: 30rpx;
+	.id_card {
+		border-radius: 8rpx;
+		display: flex;
+		height: 60rpx;
+		line-height: 60rpx;
+		font-weight: 600;
+		font-size: 36rpx;
+		color: #111111;
+		text-align: center;
+		margin-bottom: 30rpx;
 
-    .last {
-      background: #e9f5f6;
-      width: 60rpx;
-      border-radius: 8rpx 0rpx 0rpx 8rpx;
-      border: 1rpx solid #dfdede;
-    }
+		.last {
+			background: #e9f5f6;
+			width: 60rpx;
+			border-radius: 8rpx 0rpx 0rpx 8rpx;
+			border: 1rpx solid #dfdede;
+		}
 
-    .name {
-      width: 186rpx;
-      border: 1rpx solid #dfdede;
-    }
-  }
+		.name {
+			width: 186rpx;
+			border: 1rpx solid #dfdede;
+		}
+	}
 }
 </style>
diff --git a/h5/pages/driver/taskDetail.vue b/h5/pages/driver/taskDetail.vue
index 0365e8f..84f8f11 100644
--- a/h5/pages/driver/taskDetail.vue
+++ b/h5/pages/driver/taskDetail.vue
@@ -20,38 +20,58 @@
     <view class="main_content">
       <view class="line">
         <view class="label">鍙告満濮撳悕</view>
-        <view class="value">{{param.lineUpNum}}</view>
+        <view class="value">{{param.driverName}}</view>
       </view>
       <view class="line">
         <view class="label">鎵嬫満鍙�</view>
-        <view class="value">{{param.lineUpNum}}</view>
+        <view class="value">{{param.drivierPhone}}</view>
       </view>
-      <view class="line">
-        <view class="label">杩愯緭鍗曞彿</view>
-        <view class="value" @click="showDetail = true">
-          <text class="waybill_num">{{param.lineUpNum}}</text>
-          <text class="btn">杩愬崟璇︽儏</text>
-        </view>
-      </view>
-      <view class="line">
-        <view class="label">浣滀笟绫诲瀷</view>
-        <view class="value">{{param.lineUpNum}}</view>
-      </view>
+			<template v-if="param.type == 4">
+				<view class="line">
+				  <view class="label">杩愯緭鍗曞彿</view>
+				  <view class="value" @click="showDetail = true">
+				    <text class="waybill_num">{{param.code}}</text>
+				    <text class="btn">杩愬崟璇︽儏</text>
+				  </view>
+				</view>
+				<view class="line">
+				  <view class="label">浣滀笟绫诲瀷</view>
+				  <view class="value">甯傚叕鍙稿鍗忚溅鍗歌揣</view>
+				</view>
+			</template>
+			<template v-else>
+				<view class="line">
+				  <view class="label">鍚堝悓缂栧彿</view>
+				  <view class="value">{{param.contractNum}}</view>
+				</view>
+				<view class="line">
+				  <view class="label">鍏ュ簱绫诲瀷</view>
+				  <view class="value">{{param.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'}}</view>
+				</view>
+				<view class="line">
+				  <view class="label">浣滀笟閲�</view>
+				  <view class="value">{{param.totalNum}}涓囨敮</view>
+				</view>
+			</template>
       <view class="line">
         <view class="label">杞︾墝鐓�</view>
-        <view class="value">{{param.lineUpNum}}</view>
+        <view class="value">鍓嶏細{{param.carCodeFront}} | 鍚庯細{{param.carCodeBack}}</view>
       </view>
       <!--  -->
-      <view class="line">
+      <view class="line" v-if="param.status == 1">
         <view class="label">璺濈鍥尯</view>
         <view class="value">
-          <view class="">0 鍏噷</view>
+          <view class="">{{param.getDistance}}鍏噷</view>
           <view class="btn" @click="getLocation">
 						<image class="icon mr6" src="../../static/driver/position.png"></image>
             閲嶆柊瀹氫綅
           </view>
         </view>
       </view>
+			<view class="line" v-if="param.status == 2">
+			  <view class="label">绛惧埌鏃堕棿</view>
+			  <view class="value">{{param.signDate}}</view>
+			</view>
       <view class="warnning">
         <u-icon name="info-circle" color="#ED4545" class="mr12"></u-icon>
         濡傛棤娉曡幏鍙栧畾浣嶏紝璇风敤寰俊鎵弿鍥尯澶у睆浜岀淮
@@ -68,25 +88,24 @@
 				<view class="label">浣滀笟瀹屾垚</view>
 				<view class="value">2022</view>
 			</view> -->
-      <view class="signIn_wrap" @click="handleSignIn">
+      <view v-if="param.status == 1" class="signIn_wrap" @click="handleSignIn">
         <image
           :src="
-            param.status == '0'
+            param.getDistance < signDistance
               ? require('@/static/driver/btn_qiandao@2x.png')
               : require('@/static/driver/btn_qiandao_fail@2x.png')
           "
           class="img"
           mode="widthFix"
         ></image>
-        <view class="handle">绛惧埌</view>
-        <view class="time">09:10</view>
+        <view class="handle">{{ param.getDistance > signDistance ? '鏃犳硶绛惧埌' : '绛惧埌' }}</view>
+        <view class="time">{{nowTime}}</view>
       </view>
     </view>
     <view class="space"></view>
     <!-- 绛夊緟鍙彿 -->
-    <view class="padding_wrap">
-      <view class="btn cancel">鍙栨秷绛惧埌</view>
-      <view class="btn check">鏌ョ湅鎺掗槦鎯呭喌</view>
+    <view v-if="param.status == 2" class="padding_wrap">
+      <view class="btn check" @click="handleQueue">鏌ョ湅鎺掗槦鎯呭喌</view>
     </view>
 
     <!-- modal -->
@@ -153,42 +172,79 @@
 </template>
 
 <script>
-	import { driverTaskJobDetail } from '@/api'
+	import { driverTaskJobDetail, driverSignInTask } from '@/api';
+	import dayjs from 'dayjs';
 export default {
   data() {
     return {
       param: {
         status: '0'
       },
+			jobId: '',
+			lat: '',
+			lnt: '',
+			nowTime: '',
+			signDistance: uni.getStorageSync('driverGuide').signDistance,
       showDetail: false,
     }
   },
 	onLoad(option) {
-		this.getLocation(option.id)
+		this.jobId = option.id
+		if(option.status && option.status == '1'){
+			this.getLocation()
+		}else{
+			this.getDetail()
+		}
+		
+		// this.getDetail({
+		// 	jobId: option.id,
+		// 	lat: 31.769137,
+		// 	lnt: 117.232241,
+		// })
+		setInterval(() => {
+			this.nowTime = dayjs().format('HH:mm:ss')
+		})
 	},
   methods: {
     handleSignIn() {
-      const { param } = this
-      this.param.status = param.status == '0' ? '1' : '0'
+			const { param, signDistance, lat, lnt, jobId } = this
+			if(param.getDistance > signDistance) return
+			driverSignInTask({
+				jobId, lat, lnt,signType: 0
+			}).then(res => {
+				this.showToast('绛惧埌鎴愬姛')
+				this.getDetail()
+			})
     },
-    getLocation(jobId) {
+		getDetail() {
+			const { jobId, lat, lnt } = this
+			driverTaskJobDetail({
+				jobId: this.jobId,
+				lat,
+				lnt
+			}).then(ress => {
+				this.param = { ...ress.data }
+			})
+		},
+    getLocation() {
+			const { jobId } = this
       uni.getLocation({
         type: 'wgs84',
-				
-        success: function (res) {
-					driverTaskJobDetail({
-						jobId,
-						lat: res.latitude,
-						lnt: res.longitude,
-					}).then(ress => {
-						this.param = { ...ress.data }
-					})
-					console.log(res);
-          console.log('褰撳墠浣嶇疆鐨勭粡搴︼細' + res.longitude)
-          console.log('褰撳墠浣嶇疆鐨勭含搴︼細' + res.latitude)
-        }
+        success: (res) => {
+					this.lat = res.latitude
+					this.lnt = res.longitude
+					this.getDetail()
+        },
+				fail:(err) => {
+					console.log('err', err);
+				}
       })
-    }
+    },
+		handleQueue() {
+			uni.navigateTo({
+				url:'/pages/driver/queueUp?jobId=' + this.jobId
+			})
+		},
   }
 }
 </script>
@@ -202,6 +258,7 @@
     padding: 16rpx 30rpx;
     position: relative;
     bottom: 32rpx;
+		z-index: 999;
     .line {
       padding: 24rpx 0 28rpx;
       border-bottom: 1rpx solid #e5e5e5;
@@ -308,6 +365,7 @@
   }
   .padding_wrap {
     position: fixed;
+		z-index: 999;
     padding: 0 30rpx 64rpx;
     bottom: 0;
     left: 0;
@@ -318,7 +376,7 @@
       height: 96rpx;
       line-height: 96rpx;
       text-align: center;
-      width: 336rpx;
+      width: 100%;
       font-size: 36rpx;
       color: #333333;
       background: #ffffff;
diff --git a/h5/utils/service.js b/h5/utils/service.js
index fee9e39..de45fb8 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -34,10 +34,11 @@
 								duration: 2000
 							})
 						})
+						return
 					}
 					if (data.code === 5112) {
 						uni.clearStorageSync()
-						uni.navigateTo({
+						return uni.navigateTo({
 							url: '/pages/login/login'
 						})
 					}
diff --git a/pda/App.vue b/pda/App.vue
index b9da85e..039c633 100644
--- a/pda/App.vue
+++ b/pda/App.vue
@@ -12,66 +12,228 @@
 }
 </script>
 
-<style lang="scss">
-@import "uview-ui/index.scss";
-/*姣忎釜椤甸潰鍏叡css */
-view {
-  box-sizing: border-box;
-}
-
-image {
-  box-sizing: border-box;
-  margin: 0;
-  display: flex;
-}
-input {
-  font-size: 30rpx;
-}
-textarea {
-  box-sizing: border-box;
-  // background-color: #f7f7f7;
-  font-size: 30rpx !important;
-  padding: 0;
-  border-radius: 8rpx;
-  color: #333333 !important;
-}
-.u-textarea {
-  padding: 0 !important;
-  color: #333333 !important;
-}
-
-.df_ac {
-  display: flex;
-  align-items: center;
-}
-
-.main_app {
-  padding: 0 30rpx 30rpx;
-  font-size: 28rpx;
-  color: #333333;
-}
-.primaryColor{
-  color: $uni-color-primary;
-}
-.placeholder9 {
-  color: #999999;
-  font-size: 28rpx;
-}
-.fs24 {
-  font-size: 24rpx;
-}
-.mr24 {
-  margin-right: 24rpx;
-}
-
-.mr12 {
-  margin-right: 12rpx;
-}
-.ml12 {
-  margin-left: 12rpx;
-}
-
-.mr6 {
-  margin-right: 6rpx;
+<style lang="scss">
+/*姣忎釜椤甸潰鍏叡css */
+@import "uview-ui/index.scss";
+
+.flex-cb {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.container {
+  height: 100%;
+  width: 100%;
+  max-width: 800rpx;
+  overflow-y: auto;
+}
+
+.doumee-container .ivu-tabs-nav {
+  width: 100%;
+}
+
+.doumee-container .ivu-tabs-nav .ivu-tabs-tab {
+  width: calc(100% / 3);
+}
+
+.doumee-container .ivu-tabs-nav .ivu-tabs-tab {
+  margin-right: 0;
+  text-align: center;
+}
+
+.cell {
+  background-color: #fff;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  min-height: 100rpx;
+  padding: 24rpx 30rpx;
+  box-sizing: border-box;
+  border-bottom: 1rpx solid #eee;
+  font-size: 15rpx;
+  position: relative;
+}
+
+.cell .title {
+  flex-shrink: 0;
+  color: #222;
+  line-height: 20rpx;
+  height: 20rpx;
+  width: 28%;
+  margin-right: 5%;
+}
+
+.cell .content {
+  flex: 1;
+  font-size: 28rpx;
+  font-weight: 400;
+  color: #999999;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+
+.cell .content .input {
+  width: 100%;
+  height: 100%;
+  font-size: 28rpx;
+  font-weight: 400;
+  color: #333333;
+  text-align: right;
+}
+
+.cell.is-link::after {
+  content: "";
+  display: block;
+  width: 8rpx;
+  height: 8rpx;
+  transform: rotate(-45deg);
+  border-right: 1rpx solid #999999;
+  border-bottom: 1rpx solid #999999;
+  margin-left: 5rpx;
+}
+
+.card {
+  background-color: #fff;
+  padding: 16rpx;
+  position: relative;
+}
+
+.card::after {
+  content: "";
+  display: block;
+  position: absolute;
+  width: calc(100% - 32rpx);
+  height: 0;
+  bottom: 0;
+  left: 16rpx;
+  border-bottom: 1rpx solid #f7f7f7;
+}
+
+.card .title {
+  color: #777777;
+  margin-bottom: 12rpx;
+}
+
+.card .content {
+  color: #222;
+}
+
+.placeholder9 {
+  color: #999999 !important;
+  font-size: 28rpx;
+}
+.red{
+	color: red;
+}
+
+//璁剧疆鍦嗚
+checkbox .uni-checkbox-input {
+  border-radius: 50%;
+}
+
+checkbox .uni-checkbox-input.uni-checkbox-input-checked {
+  color: #fff !important;
+  border: 1px solid #4d99a8 !important;
+  background-color: #4d99a8 !important;
+}
+
+checkbox .uni-checkbox-input.uni-checkbox-input-checked:before {
+  /* color: #4d99a8 !important;  */
+  /* border: 1px solid #4d99a8 !important; */
+  /* font-size: 58rpx; */
+  /* border-radius: 50%; */
+}
+
+//
+
+view {
+  box-sizing: border-box;
+}
+
+image {
+  box-sizing: border-box;
+  margin: 0;
+  display: flex;
+}
+input {
+  font-size: 30rpx;
+}
+textarea {
+  box-sizing: border-box;
+  // background-color: #f7f7f7;
+  font-size: 30rpx !important;
+  padding: 0;
+  border-radius: 8rpx;
+  color: #333333 !important;
+}
+.u-textarea {
+  padding: 0 !important;
+  color: #333333 !important;
+}
+
+.df_ac {
+  display: flex;
+  align-items: center;
+}
+
+.main_app {
+  padding: 0 30rpx 30rpx;
+  font-size: 28rpx;
+  color: #333333;
+}
+.popupShow {
+  overflow: hidden;
+  position: fixed;
+  width: 100%;
+}
+.placeholder6 {
+  color: #666666;
+  font-size: 28rpx;
+}
+.primaryColor {
+  color: $uni-color-primary;
+}
+.avatar {
+  width: 64rpx;
+  height: 64rpx;
+  border-radius: 50%;
+  margin-right: 20rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-color: $uni-color-primary;
+  color: #fff;
+  font-size: 30rpx;
+}
+.placeholder9 {
+  color: #999999;
+  font-size: 28rpx;
+}
+.fs24 {
+  font-size: 24rpx;
+}
+.mr24 {
+  margin-right: 24rpx;
+}
+.mt24 {
+  margin-top: 24rpx;
+}
+
+.mr12 {
+  margin-right: 12rpx;
+}
+.ml12 {
+  margin-left: 12rpx;
+}
+.ml6 {
+  margin-left: 6rpx;
+}
+.mt6 {
+  margin-top: 6rpx;
+}
+.mr6 {
+  margin-right: 6rpx;
 }
 </style>
diff --git a/pda/api/index.js b/pda/api/index.js
index 159ac65..cee97c8 100644
--- a/pda/api/index.js
+++ b/pda/api/index.js
@@ -18,6 +18,18 @@
     data
   })
 }
+export const getUserInfo = () => {
+  return http({
+    url: 'getUserInfo',
+    method: 'get'
+  })
+}
+export const loginCaptcha = () => {
+  return http({
+    url: 'captcha',
+    method: 'get'
+  })
+}
 //  鍙戦�佺煭淇¢獙璇佺爜
 export const sendSms = (data) => {
   return http({
@@ -25,4 +37,100 @@
     method: 'post',
     data
   })
+}
+//  鐧诲綍
+export const loginPost = (data) => {
+  return http({
+    url: 'loginH5',
+    method: 'post',
+    data
+  })
+}
+//  鑾峰彇鏈堝彴缁勪俊鎭�
+export const getPlatformGroupList = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/getPlatformGroupList',
+    method: 'post',
+    data
+  })
+}
+//  鑾峰彇鏈堝彴 浠诲姟淇℃伅
+export const getPlatformWorkData = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/getPlatformWorkData',
+    method: 'get',
+    data
+  })
+}
+//  杞﹁締鎺掗槦鎯呭喌
+export const platformLineUpPage = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformLineUpPage',
+    method: 'post',
+    data
+  })
+}
+//  鏈堝彴鍙彿
+export const platformCallNumber = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformCallNumber',
+    method: 'post',
+    data
+  })
+}
+//  寮傚父鎸傝捣
+export const platformErr = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformErr',
+    method: 'post',
+    data
+  })
+}
+//  杞Щ鏈堝彴
+export const platformMove = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformMove',
+    method: 'post',
+    data
+  })
+}
+//  鏈堝彴杩囧彿
+export const platformOverNumber = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/platformOverNumber',
+    method: 'post',
+    data
+  })
+}
+//  瀹屾垚浣滀笟
+export const finishWork = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/finishWork',
+    method: 'post',
+    data
+  })
+}
+//  鎵嬪姩寮�濮嬩綔涓�
+export const beginWork = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/beginWork',
+    method: 'post',
+    data
+  })
+}
+//  鏇存柊鏈堝彴閰嶇疆淇℃伅
+export const updUserPlatformConfig = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/updUserPlatformConfig',
+    method: 'get',
+    data
+  })
+}
+//  淇敼绂佸惎鐢ㄧ姸鎬�
+export const updPlatformStatus = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/pdaPlatform/updPlatformStatus',
+    method: 'post',
+    data
+  })
 }
\ No newline at end of file
diff --git a/pda/main.js b/pda/main.js
index 67dd82e..a53fc06 100644
--- a/pda/main.js
+++ b/pda/main.js
@@ -8,6 +8,17 @@
 Vue.use(uView)
 Vue.config.productionTip = false
 Vue.prototype.$store = store
+Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
+Vue.prototype.$goBack = () => { uni.navigateBack() }
+Vue.prototype.showToast = (str) => {
+	setTimeout(() => {
+		uni.showToast({
+		  title: str,
+		  icon: 'none',
+		  duration: 2000
+		})
+	},100)
+}
 
 App.mpType = 'app'
 const app = new Vue({
diff --git a/pda/manifest.json b/pda/manifest.json
index 6e27766..4d3af04 100644
--- a/pda/manifest.json
+++ b/pda/manifest.json
@@ -5,6 +5,30 @@
     "versionName" : "1.0.0",
     "versionCode" : "100",
     "transformPx" : false,
+		"h5" : {
+		    "router" : {
+		        "mode" : "hash",
+		        "base" : "./"
+		    },
+		    // "base" : "/h5/"
+		    "devServer" : {
+		        "port" : 8090,
+		        "historyApiFallback" : true,
+		        "disableHostCheck" : true,
+		        "proxy" : {
+		            "/admin_interface" : {
+		                // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
+		                // "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+		                "target" : "http://192.168.0.136:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+		                "changeOrigin" : true, // 鍏佽璺ㄥ煙 
+		                "pathRewrite" : {
+		                    "^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
+		                }
+		            }
+		        },
+		        "https" : false
+		    }
+		},
     /* 5+App鐗规湁鐩稿叧 */
     "app-plus" : {
         "usingComponents" : true,
diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index 7d8e376..531287e 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -1,8 +1,8 @@
 <template>
   <view class="main_app">
     <view class="main_content">
-      <view class="title"
-        >瀹夋嘲鐗╂祦瑁呰揣骞冲彴<u-icon
+      <view class="title" @click="showPlatformgroup = true"
+        >{{ activePlatformGroup.name }}<u-icon
           name="arrow-down"
           size="20"
           class="ml12"
@@ -12,24 +12,25 @@
       <view class="platform_list">
         <view
           class="item"
-          :class="{ active: index === 0 }"
-          v-for="(i, index) in 8"
-          :key="i"
-          >1鍙锋湀鍙�</view
+          :class="{ active: item.id === activePlatformId }"
+          v-for="(item, index) in activePlatformGroup.platformList"
+          :key="index"
+					@click="platformClick(item.id)"
+          >{{ item.name }}</view
         >
       </view>
       <view class="status_wrap">
         <view class="status"
-          >浣滀笟锛�<text>{{ 0 }}</text></view
+          >浣滀笟锛�<text>{{ platformTaskInfo.workNum }}</text></view
         >
         <view class="status"
-          >宸插彨锛�<text>{{ 0 }}</text></view
+          >宸插彨锛�<text>{{ platformTaskInfo.callNum }}</text></view
         >
         <view class="status"
-          >绛夊緟锛�<text>{{ 0 }}</text></view
+          >绛夊緟锛�<text>{{ platformTaskInfo.waitNum }}</text></view
         >
         <view class="status"
-          >寮傚父锛�<text>{{ 0 }}</text></view
+          >寮傚父锛�<text>{{ platformTaskInfo.exceptionNum }}</text></view
         >
       </view>
     </view>
@@ -208,22 +209,64 @@
         </view>
       </view>
     </u-popup>
+		<!--  -->
+		<u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]" @cancel="showPlatformgroup = false" @confirm="platConfirm"></u-picker>
   </view>
 </template>
 
 <script>
+import { getPlatformGroupList, getPlatformWorkData } from '@/api'
 export default {
   data() {
     return {
       showPlatformCall: false, // 鏈堝彴鍙彿
       showDetail: false,
-      showTransform: false // 杞Щ
+      showTransform: false, // 杞Щ
+      showPlatformgroup: false,
+			
+			platformGroupList: [],
+			activePlatformGroup: {},
+			platformTaskInfo: {},
+			activePlatformId: '',
     }
   },
   onLoad() {
-
+		this.getPlatformGroup()
   },
   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()
+		},
     handleDetail() {
       this.showDetail = true
     },
diff --git a/pda/pages/index/control.vue b/pda/pages/index/control.vue
index 119ab38..02e61af 100644
--- a/pda/pages/index/control.vue
+++ b/pda/pages/index/control.vue
@@ -1,34 +1,47 @@
 <template>
   <view class="main_app">
-    <view class="title">
-      <view class="icon"></view>
-      <view class="name">瀹夋嘲鐗╂祦鍗歌揣鏈堝彴</view>
-    </view>
-    <div class="data_list">
-      <div class="line">
-        <div class="name">1鍙锋湀鍙�</div>
-        <u-switch v-model="list"></u-switch>
-      </div>
-      <div class="line">
-        <div class="name">1鍙锋湀鍙�</div>
-        <u-switch v-model="list"></u-switch>
-      </div>
-    </div>
+		<template v-for="item in platformGroupList">
+			<view class="title">
+			  <view class="icon"></view>
+			  <view class="name">{{item.name}}</view>
+			</view>
+			<view class="data_list">
+			  <view class="line" v-for="(platform, i) in item.platformList" :key="platform.id">
+			    <view class="name">{{platform.name}}</view>
+			    <u-switch v-model="platform.status" activeColor="#279BAA" inactiveColor="#cccccc" :inactiveValue="0" :activeValue="1" @change="e => changeStatus(platform)" />
+			  </view>
+			</view>
+		</template>
   </view>
 </template>
 
 <script>
+	import { getPlatformGroupList, updPlatformStatus } from '@/api'
 export default {
   data() {
     return {
-      list: []
+      platformGroupList: []
     }
   },
   onLoad() {
-
+		this.getPlatformGroup()
   },
   methods: {
-
+		changeStatus(item) {
+			console.log(item);
+			updPlatformStatus({
+				id: item.id,
+				status: item.status
+			})
+		},
+		getPlatformGroup() {
+			getPlatformGroupList({
+				queryData: 1,
+				queryType: 0
+			}).then(res => {
+				this.platformGroupList = res.data || []
+			})
+		},
   }
 }
 </script>
diff --git a/pda/pages/index/login.vue b/pda/pages/index/login.vue
index 6e0f386..60e8d8f 100644
--- a/pda/pages/index/login.vue
+++ b/pda/pages/index/login.vue
@@ -3,7 +3,7 @@
     <image class="login_bg" src="@/static/login_bg@2x.png" />
     <image class="login_logo" src="@/static/logo@2x.png" mode="widthFix" />
     <view class="login_title" style="marginTop: 40rpx;">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
-    <view class="login_title" style="marginBottom: 80rpx;">鐗╂祦杞︾鐞嗙郴缁�</view>
+    <view class="login_title" style="marginBottom: 60rpx;">鏁板瓧鍖栨湀鍙拌皟搴﹀钩鍙�</view>
     <view class="login_list">
       <view class="login_list_item">
         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
@@ -42,8 +42,8 @@
   data() {
     return {
       form: {
-        account: '',
-        password: '',
+        username: '13996529050',
+        password: '123456',
       },
       isShowProtocol: false,
       ProtocolFlag: false,
@@ -53,7 +53,7 @@
   },
 
   onLoad() {
-    // this.initCaptcha()
+    this.initCaptcha()
   },
 
   methods: {
@@ -61,6 +61,33 @@
     changeFalg() {
       this.ProtocolFlag = !this.ProtocolFlag
     },
+		onLogin() {
+		  const { form, ProtocolFlag } = this
+		  if (!form.username) return uni.showToast({
+		    title: '璐﹀彿涓嶈兘涓虹┖',
+		    icon: 'none'
+		  })
+		  if (!form.password) return uni.showToast({
+		    title: '瀵嗙爜涓嶈兘涓虹┖',
+		    icon: 'none'
+		  })
+		  loginPost({
+		    ...form,
+				code: 1,
+		    uuid: this.captcha.uuid,
+		    openId: this.$store.state.openId
+		  }).then(res => {
+		    if (res.code === 200) {
+		      this.setToken(res.data)
+		      getUserInfo().then(ress => {
+		        this.setUserInfo(ress.data)
+		        uni.redirectTo({
+		          url: "/pages/index/index"
+		        })
+		      })
+		    }
+		  })
+		},
     getContent() {
       getSystemDictData({
         dictCode: 'SYSTEM',
@@ -78,41 +105,6 @@
         this.captcha = res.data
       })
     },
-
-    onLogin() {
-      const { form, ProtocolFlag } = this
-      if (!ProtocolFlag) return uni.showToast({
-        title: '璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁�',
-        icon: 'none'
-      })
-      if (!form.username) return uni.showToast({
-        title: '璐﹀彿涓嶈兘涓虹┖',
-        icon: 'none'
-      })
-      if (!form.password) return uni.showToast({
-        title: '瀵嗙爜涓嶈兘涓虹┖',
-        icon: 'none'
-      })
-      if (!form.code) return uni.showToast({
-        title: '楠岃瘉鐮佷笉鑳戒负绌�',
-        icon: 'none'
-      })
-      loginPost({
-        ...form,
-        uuid: this.captcha.uuid,
-        openId: this.$store.state.openId
-      }).then(res => {
-        if (res.code === 200) {
-          this.setToken(res.data)
-          getUserInfo().then(ress => {
-            this.setUserInfo(ress.data)
-            uni.redirectTo({
-              url: "/pages/staff/index"
-            })
-          })
-        }
-      })
-    }
   }
 }
 </script>
@@ -120,9 +112,8 @@
 <style lang="scss" scoped>
 .login {
   width: 100%;
-  height: 100vh;
   display: flex;
-  padding-top: 160rpx;
+  padding-top: 100rpx;
   box-sizing: border-box;
   align-items: center;
   flex-direction: column;
diff --git a/pda/pages/index/queueup.vue b/pda/pages/index/queueup.vue
index c983523..e21a04c 100644
--- a/pda/pages/index/queueup.vue
+++ b/pda/pages/index/queueup.vue
@@ -57,19 +57,36 @@
 </template>
 
 <script>
+	import { platformLineUpPage, getPlatformGroupList } from '@/api'
 export default {
   data() {
     return {
-      showDetail: false
+      showDetail: false,
+			capacity: 10,
+			page: 1,
+			platformGroupId: '',
+			platformGroupList: []
     }
   },
   onLoad() {
-
+		this.getPlatformGroup()
+		this.initData()
   },
   methods: {
     handleDetail() {
       this.showDetail = true
     },
+		getPlatformGroup() {
+			getPlatformGroupList().then(res => {
+				
+			})
+		},
+		initData(){
+			const { page, capacity } = this
+			platformLineUpPage({
+				capacity, page, model: {}
+			})
+		}
   }
 }
 </script>
diff --git a/pda/pages/index/set.vue b/pda/pages/index/set.vue
index 2a6c345..13473b0 100644
--- a/pda/pages/index/set.vue
+++ b/pda/pages/index/set.vue
@@ -1,33 +1,74 @@
 <template>
   <view class="main_app">
-    <view class="title">
-      <view class="icon"></view>
-      <view class="name">瀹夋嘲鐗╂祦鍗歌揣鏈堝彴</view>
-    </view>
-    <div class="data_list">
-      <div
-        class="item"
-        :class="{ active: i == 1 }"
-        v-for="(item, i) in 7"
-        :key="i"
-      >
-        {{ i }}鍙锋湀鍙�
-      </div>
-    </div>
+		<template v-for="item in platformGroupList">
+			<view class="title">
+			  <view class="icon"></view>
+			  <view class="name">{{item.name}}</view>
+			</view>
+			<view class="data_list">
+			  <view
+			    class="item"
+			    :class="{ active: platform.showConfig }"
+			    v-for="(platform, i) in item.platformList"
+			    :key="platform.id"
+					@click="platformClick(platform.id)"
+			  >
+			    {{platform.name}}
+			  </view>
+			</view>
+		</template>
+		<view class="btns">
+			<div class="btn" @click="$goBack">鍙栨秷</div>
+			<div class="btn active" @click="updUserPlatform">纭畾</div>
+		</view>
   </view>
 </template>
 
 <script>
+import { getPlatformGroupList, updUserPlatformConfig } from '@/api'
 export default {
   data() {
     return {
+			platformGroupList: []
     }
   },
   onLoad() {
-
+		this.getPlatformGroup()
   },
   methods: {
-
+		updUserPlatform(){
+			const { platformGroupList } = this
+			let ids = []
+			platformGroupList.forEach(item => {
+				item.platformList.forEach(platform => {
+						if(platform.showConfig){
+							ids.push(platform.id)
+						}
+				})
+			})
+			updUserPlatformConfig({ids}).then(res => {
+				this.showToast('鏇存柊鎴愬姛')
+				this.$goBack()
+			})
+		},
+		platformClick(id) {
+			const { platformGroupList } = this
+			platformGroupList.forEach(item => {
+				item.platformList.forEach(platform => {
+						if(platform.id === id){
+							platform.showConfig = !platform.showConfig
+						}
+				})
+			})
+		},
+		getPlatformGroup() {
+			getPlatformGroupList({
+				queryData: 1,
+				queryType: 1
+			}).then(res => {
+				this.platformGroupList = res.data || []
+			})
+		},
   }
 }
 </script>
@@ -43,6 +84,9 @@
     margin-bottom: 20rpx;
     padding: 30rpx;
      background-color: #fff;
+		 &:nth-last-child(1){
+			 margin-bottom: 120rpx;
+		 }
     .item {
       width: 210rpx;
       height: 80rpx;
@@ -83,4 +127,33 @@
     }
   }
 }
+.btns{
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	width: 750rpx;
+	height: 120rpx;
+	background: #FFFFFF;
+	box-shadow: 0rpx -4rpx 12rpx 0rpx rgba(0,0,0,0.1);
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 0 30rpx;
+	.btn{
+		width: 336rpx;
+		height: 88rpx;
+		background: #FFFFFF;
+		border-radius: 44rpx;
+		border: 1rpx solid #999999;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		font-size: 32rpx;
+		color: #333333;
+	}
+	.active{
+		background: $uni-color-primary;
+		color: #fff;
+	}
+}
 </style>
\ No newline at end of file
diff --git a/pda/utils/service.js b/pda/utils/service.js
index 41d0bdf..936c175 100644
--- a/pda/utils/service.js
+++ b/pda/utils/service.js
@@ -34,9 +34,10 @@
 								duration: 2000
 							})
 						})
+						return
 					}
 					if (data.code === 5112) {
-						uni.navigateTo({
+						return uni.navigateTo({
 							url: '/pages/login/login'
 						})
 					}

--
Gitblit v1.9.3