| <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">{{ 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" v-if="param.billCode"> | 
|                 <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" v-else> | 
|                 <view class="label">合同编号</view> | 
|                 <view class="value">{{param.contractNum}}</view> | 
|             </view> | 
|             <view class="line" v-if="type != 4"> | 
|                 <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> | 
|             <view class="line" v-if="type == 4"> | 
|                 <view class="label">入库类型</view> | 
|                 <view class="value" v-if="param.inType == 0">整托盘</view> | 
|                 <view class="value" v-if="param.inType == 1">件烟</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 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="separate"></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> | 
|         <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 { driverTaskJobDetail, driverConfirmTask, wmsJobDetail } from '@/api'; | 
| import dayjs from 'dayjs' | 
| export default { | 
|     components: { | 
|         keyboardInput | 
|     }, | 
|     data() { | 
|         return { | 
|             param: {}, | 
|             wmsInfo: {}, | 
|             showDate: false, | 
|             showDetail: false, | 
|             minDate: '', | 
|   | 
|             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('确认成功') | 
|                 this.$goBack() | 
|             }) | 
|         }, | 
|         getDetail(jobId) { | 
|             driverTaskJobDetail({ | 
|                 jobId | 
|             }).then(ress => { | 
|                 this.param = { ...ress.data, carCodeBack: '' }; | 
|             }); | 
|         }, | 
|         wmsDetail() { | 
|             const { param } = this | 
|             wmsJobDetail({ id: param.id }).then(res => { | 
|                 this.wmsInfo = res.data | 
|                 this.showDetail = true | 
|             }) | 
|         }, | 
|         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; | 
| } | 
|   | 
| .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; | 
|   | 
|             .label { | 
|                 font-size: 26rpx; | 
|                 color: #666666; | 
|                 margin-bottom: 20rpx; | 
|             } | 
|   | 
|             .value { | 
|                 display: flex; | 
|                 justify-content: space-between; | 
|                 align-items: center; | 
|                 font-size: 30rpx; | 
|   | 
|                 .waybill_num { | 
|                     flex: 1; | 
|                 } | 
|   | 
|                 .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; | 
|         } | 
|   | 
|         .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; | 
|         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; | 
|         } | 
|   | 
|         .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; | 
|     } | 
|   | 
|     .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; | 
|         } | 
|     } | 
| } | 
|   | 
| .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> |