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