| <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'){  | 
|             //     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  | 
|                 uni.getLocation({  | 
|                     type: 'wgs84',  | 
|                     success: (res) => {  | 
|                         this.lat = res.latitude  | 
|                         this.lnt = res.longitude  | 
|                         this.getDetail()  | 
|                     },  | 
|                     fail: (err) => {  | 
|                         this.showToast('获取定位失败')  | 
|                     }  | 
|                 })  | 
|             },  | 
|             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> |