<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> 
 |