<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="name" v-if="param.status == 7">转移中</view> 
 | 
            <view class="name red" v-if="param.status == 8">异常挂起</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 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() 
 | 
                // this.getDetail()  
 | 
            } 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 
 | 
                        console.log('---', res);  
 | 
                        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> 
 |