<template>
|
<view class="main_app">
|
<view class="status_wrap">
|
<image class="bg" src="../../static/driver/bg_renwu@2x.png" mode=""></image>
|
<view class="name" v-if="param.status == 1">请与{{ param.arriveDate.slice(0,11) }}现场签到</view>
|
<view class="name" v-if="param.status == 2">前方排队:{{param.lineUpNum}}辆</view>
|
<view class="name" v-if="param.status == 3">入园等待</view>
|
<view class="name" v-if="param.status == 4">请入园停靠{{param.platformName}}作业</view>
|
<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">{{statusMap[param.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>
|
<template v-if="param.billCode">
|
<view class="line">
|
<view class="label">运输单号</view>
|
<view class="value" @click="wmsDetail">
|
<text class="waybill_num">{{param.billCode}}</text>
|
<text class="btn">运单详情</text>
|
</view>
|
</view>
|
<view class="line">
|
<view class="label">作业类型</view>
|
<view class="value" v-if="param.type == 0">自有车卸货</view>
|
<view class="value" v-if="param.type == 1">自有车装货</view>
|
<view class="value" v-if="param.type == 2">外协车卸货</view>
|
<view class="value" v-if="param.type == 3">外协车装货</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.carCodeFront}} | 后:{{param.carCodeBack}}</view>
|
</view>
|
<!-- -->
|
<view class="line" v-if="param.status == 1">
|
<view class="label">距离园区</view>
|
<view class="value">
|
<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.signDate">
|
<view class="label">签到时间</view>
|
<view class="value">{{param.signDate}}</view>
|
</view>
|
<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>
|
<!-- <view class="line">
|
<view class="label">签到时间</view>
|
<view class="value">2022</view>
|
</view>
|
<view class="line">
|
<view class="label">入园时间</view>
|
<view class="value">2022</view>
|
</view>
|
<view class="line">
|
<view class="label">作业完成</view>
|
<view class="value">2022</view>
|
</view> -->
|
<view v-if="param.status == 1" class="signIn_wrap" @click="handleSignIn">
|
<image :src="
|
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">{{ param.getDistance > signDistance ? '无法签到' : '签到' }}</view>
|
<view class="time">{{nowTime}}</view>
|
</view>
|
</view>
|
<view class="space"></view>
|
<!-- 等待叫号 -->
|
<view v-if="param.status == 2" class="padding_wrap">
|
<view class="btn check" @click="handleQueue">查看排队情况</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 v-if="wmsInfo.plateNumber" class="id_card">
|
<text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text>
|
<text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text>
|
<text>·</text>
|
<text>{{ wmsInfo.plateNumber.slice(2) }}</text>
|
</view>
|
<!-- -->
|
<view class="info">
|
<view class="line">
|
<view class="label">运输单号</view>
|
<view class="value">{{ wmsInfo.carryBillCode }}</view>
|
</view>
|
<view class="line">
|
<view class="label">驾驶员</view>
|
<view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view>
|
</view>
|
<view class="line">
|
<view class="label">总运输量</view>
|
<view class="value">{{ wmsInfo.ioQty }}万支</view>
|
</view>
|
<view class="line">
|
<view class="label">运输公司</view>
|
<view class="value">{{ wmsInfo.carrierName }}</view>
|
</view>
|
</view>
|
<view class="contract_wrap">
|
<view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList">
|
<view class="title">合同号:{{ item.contractCode }}</view>
|
<view class="address">收货地:{{ item.address }}</view>
|
<view class="list">
|
<view class="item" v-for="line in item.platformWmsDetailList">
|
<view class="line">
|
<view class="label">物料:</view>
|
<view class="value">{{ line.materialName }}</view>
|
</view>
|
<view class="line">
|
<view class="label">数量:</view>
|
<view class="value">{{ line.ioQty }}</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
</view>
|
</u-popup>
|
</view>
|
</template>
|
|
<script>
|
import {
|
driverTaskJobDetail,
|
driverSignInTask,
|
wmsJobDetail
|
} from '@/api';
|
import {
|
statusMap
|
} from '@/utils/config.js';
|
import dayjs from 'dayjs';
|
export default {
|
data() {
|
return {
|
statusMap,
|
param: {
|
status: '0'
|
},
|
jobId: '',
|
lat: '',
|
lnt: '',
|
// lat: '31.783205',
|
// lnt: '117.262635',
|
nowTime: '',
|
wmsInfo: {},
|
signDistance: uni.getStorageSync('driverGuide').signDistance,
|
showDetail: false,
|
}
|
},
|
onLoad(option) {
|
this.jobId = option.id
|
if (option.status && option.status == '1') {
|
// wx.config({
|
// debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
|
// appId: 'wx173e6caf5abc718a', // 必填,公众号的唯一标识
|
// timestamp: timeStamp, // 必填,生成签名的时间戳
|
// nonceStr: nonceStr, // 必填,生成签名的随机串
|
// signature: Sign, // 必填,签名
|
// jsApiList: [
|
// 'getLocation',
|
// 'openLocation'
|
// ] // 必填,需要使用的JS接口列表
|
// })
|
this.getLocation()
|
} else {
|
this.getDetail()
|
}
|
// this.getDetail()
|
setInterval(() => {
|
this.nowTime = dayjs().format('HH:mm:ss')
|
})
|
},
|
methods: {
|
handleSignIn() {
|
const {
|
param,
|
signDistance,
|
lat,
|
lnt,
|
jobId
|
} = this
|
if (param.getDistance > signDistance) return
|
driverSignInTask({
|
jobId,
|
lat,
|
lnt,
|
signType: 0
|
}).then(res => {
|
this.showToast('签到成功')
|
this.getDetail()
|
})
|
},
|
getDetail() {
|
const {
|
jobId,
|
lat,
|
lnt
|
} = this
|
driverTaskJobDetail({
|
jobId: this.jobId,
|
lat,
|
lnt
|
}).then(ress => {
|
this.param = {
|
...ress.data
|
}
|
})
|
},
|
wmsDetail() {
|
const {
|
param
|
} = this
|
wmsJobDetail({
|
id: param.id
|
}).then(res => {
|
this.wmsInfo = res.data
|
this.showDetail = true
|
})
|
},
|
getLocation() {
|
const {
|
jobId
|
} = this
|
// wx.ready(() => {
|
// wx.getLocation({
|
// type: "gcj02", // gcj02(火星坐标),wgs84(GPS坐标)
|
// success: (res) => {
|
// this.lat = res.latitude
|
// this.lnt = res.longitude
|
// this.getDetail()
|
// },
|
// fail: (err) => {
|
// console.error("获取定位失败:", err);
|
// },
|
// cancel: () => {
|
// console.warn("用户拒绝授权获取地理位置");
|
// },
|
// });
|
// });
|
uni.getLocation({
|
type: 'wgs84',
|
success: (res) => {
|
this.lat = res.latitude
|
this.lnt = res.longitude
|
this.getDetail()
|
},
|
fail: (err) => {
|
this.showToast('获取定位失败', err)
|
}
|
})
|
},
|
handleQueue() {
|
uni.navigateTo({
|
url: '/pages/driver/queueUp?jobId=' + this.jobId
|
})
|
},
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.main_app {
|
padding: 0;
|
|
.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;
|
display: flex;
|
|
.label {
|
width: 150rpx;
|
font-size: 30rpx;
|
color: #666666;
|
}
|
|
.value {
|
flex: 1;
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
font-size: 30rpx;
|
|
.waybill_num {
|
flex: 1;
|
}
|
|
.btn {
|
font-size: 28rpx;
|
color: $uni-color-primary;
|
display: flex;
|
align-items: center;
|
|
.icon {
|
width: 30rpx;
|
height: 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;
|
|
.handle {
|
font-weight: 600;
|
font-size: 40rpx;
|
line-height: 56rpx;
|
}
|
|
.time {
|
color: rgba(255, 255, 255, 0.7);
|
}
|
|
.img {
|
position: absolute;
|
top: 0;
|
left: 0;
|
width: 100%;
|
z-index: -1;
|
}
|
}
|
}
|
|
.status_wrap {
|
height: 200rpx;
|
width: 100%;
|
padding: 30rpx;
|
position: relative;
|
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;
|
}
|
|
.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;
|
}
|
|
.padding_wrap {
|
position: fixed;
|
z-index: 999;
|
padding: 0 30rpx 64rpx;
|
bottom: 0;
|
left: 0;
|
width: 100%;
|
display: flex;
|
justify-content: space-between;
|
|
.btn {
|
height: 96rpx;
|
line-height: 96rpx;
|
text-align: center;
|
width: 100%;
|
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;
|
}
|
}
|
}
|
|
.detail_modal {
|
height: calc(100vh - 88rpx);
|
padding: 36rpx 30rpx;
|
border-radius: 12rpx;
|
box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.5);
|
|
.modal_title {
|
font-weight: 600;
|
font-size: 32rpx;
|
color: #222222;
|
line-height: 44rpx;
|
text-align: center;
|
margin-bottom: 36rpx;
|
}
|
|
.contract_wrap {
|
height: calc(100% - 400rpx);
|
overflow-y: auto;
|
}
|
|
.contract_list {
|
border-top: 1rpx solid #E5E5E5;
|
margin-bottom: 30rpx;
|
padding-top: 30rpx;
|
|
&:nth-last-child(1) {
|
margin-bottom: 0;
|
}
|
|
.list {
|
background: #f7f7f7;
|
border-radius: 8rpx;
|
padding: 20rpx;
|
|
.item {
|
border-bottom: 1rpx solid #e5e5e5;
|
padding-bottom: 20rpx;
|
margin-bottom: 20rpx;
|
|
&:nth-last-child(1) {
|
border: none;
|
padding-bottom: 0;
|
margin-bottom: 0;
|
}
|
}
|
|
.line {
|
display: flex;
|
margin-bottom: 20rpx;
|
|
&:nth-last-child(1) {
|
margin-bottom: 0rpx;
|
}
|
|
.label {
|
color: #666666;
|
width: 92rpx;
|
}
|
|
.value {
|
flex: 1;
|
color: #222222;
|
}
|
}
|
}
|
|
.title {
|
font-weight: 600;
|
font-size: 30rpx;
|
color: $uni-color-primary;
|
margin-bottom: 12rpx;
|
}
|
|
.address {
|
font-size: 26rpx;
|
color: #666666;
|
margin-bottom: 20rpx;
|
}
|
}
|
|
.info {
|
.line {
|
display: flex;
|
margin-bottom: 20rpx;
|
|
.label {
|
font-size: 30rpx;
|
color: #666666;
|
width: 150rpx;
|
}
|
|
.value {
|
flex: 1;
|
font-size: 30rpx;
|
color: #222222;
|
}
|
}
|
}
|
|
.separate {
|
width: 750rpx;
|
height: 2rpx;
|
margin: 30rpx -30rpx;
|
border: 1rpx solid #e5e5e5;
|
}
|
|
.id_card {
|
display: flex;
|
font-weight: 600;
|
height: 60rpx;
|
line-height: 60rpx;
|
font-size: 32rpx;
|
color: #111111;
|
border-radius: 8rpx;
|
border: 1rpx solid #dfdede;
|
width: 220rpx;
|
margin-bottom: 15rpx;
|
|
text {
|
&:nth-of-type(1) {
|
background: #e9f5f6;
|
padding: 0 12rpx;
|
}
|
|
&:nth-of-type(2) {
|
padding-left: 10rpx;
|
}
|
|
&:nth-of-type(4) {
|
padding-right: 6rpx;
|
}
|
}
|
}
|
}
|
</style>
|