ll
liukangdong
2024-09-25 b33b256a0e996df1e8ca1859ba538fe3ea085509
h5/pages/driver/taskDetail.vue
@@ -1,13 +1,10 @@
<template>
  <view class="main_app">
    <view class="status_wrap">
      <image
        class="bg"
        src="../../static/driver/bg_renwu@2x.png"
        mode=""
      ></image>
         <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 == 5">月台作业中</view>
      <view class="name" v-if="param.status == 6">作业已完成</view>
      <view class="id_card">{{ param.carCodeFront }}</view>
@@ -26,14 +23,17 @@
         <template v-if="param.type != 4">
            <view class="line">
              <view class="label">运输单号</view>
              <view class="value" @click="showDetail = true">
               <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">市公司外协车卸货</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>
@@ -94,15 +94,11 @@
            <view class="value">2022</view>
         </view> -->
      <view v-if="param.status == 1" class="signIn_wrap" @click="handleSignIn">
        <image
          :src="
            <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>
          " class="img" mode="widthFix"></image>
        <view class="handle">{{ param.getDistance > signDistance ? '无法签到' : '签到' }}</view>
        <view class="time">{{nowTime}}</view>
      </view>
@@ -114,60 +110,49 @@
    </view>
    <!-- modal -->
    <u-popup
      :show="showDetail"
      :round="10"
      :safeAreaInsetBottom="true"
      closeOnClickOverlay
      :closeable="true"
      mode="bottom"
      @close="showDetail = false"
    >
      <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 class="id_card">
          <view class="last">皖</view>
          <view class="name">AD1111</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">2222</view>
                  <view class="value">{{ wmsInfo.carryBillCode }}</view>
          </view>
          <view class="line">
            <view class="label">驾驶员</view>
            <view class="value">2222</view>
                  <view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view>
          </view>
          <view class="line">
            <view class="label">总运输量</view>
            <view class="value">2222</view>
                  <view class="value">{{ wmsInfo.ioQty }}万支</view>
          </view>
          <view class="line">
            <view class="label">运输公司</view>
            <view class="value">2222</view>
                  <view class="value">{{ wmsInfo.carrierName }}</view>
          </view>
        </view>
        <view class="separate"></view>
        <view class="contract_list">
          <view class="title">合同号:111</view>
          <view class="address">aadd</view>
            <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">黄山黑马</view>
                        <view class="value">{{ line.materialName }}</view>
            </view>
            <view class="line">
              <view class="label">数量:</view>
              <view class="value">黄山黑马</view>
                        <view class="value">{{ line.ioQty }}</view>
            </view>
            <view class="line">
              <view class="label">物料:</view>
              <view class="value">黄山黑马</view>
            </view>
            <view class="line">
              <view class="label">数量:</view>
              <view class="value">黄山黑马</view>
            </view>
          </view>
        </view>
@@ -177,8 +162,14 @@
</template>
<script>
   import { driverTaskJobDetail, driverSignInTask } from '@/api';
   import { statusMap } from '@/utils/config.js';
   import {
      driverTaskJobDetail,
      driverSignInTask,
      wmsJobDetail
   } from '@/api';
   import {
      statusMap
   } from '@/utils/config.js';
   import dayjs from 'dayjs';
export default {
  data() {
@@ -193,6 +184,7 @@
         lat: '31.783205',
         lnt: '117.262635',
         nowTime: '',
            wmsInfo: {},
         signDistance: uni.getStorageSync('driverGuide').signDistance,
      showDetail: false,
    }
@@ -211,27 +203,55 @@
   },
  methods: {
    handleSignIn() {
         const { param, signDistance, lat, lnt, jobId } = this
            const {
               param,
               signDistance,
               lat,
               lnt,
               jobId
            } = this
         if(param.getDistance > signDistance) return
         driverSignInTask({
            jobId, lat, lnt,signType: 0
               jobId,
               lat,
               lnt,
               signType: 0
         }).then(res => {
            this.showToast('签到成功')
            this.getDetail()
         })
    },
      getDetail() {
         const { jobId, lat, lnt } = this
            const {
               jobId,
               lat,
               lnt
            } = this
         driverTaskJobDetail({
            jobId: this.jobId,
            lat,
            lnt
         }).then(ress => {
            this.param = { ...ress.data }
               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
            const {
               jobId
            } = this
      uni.getLocation({
        type: 'wgs84',
        success: (res) => {
@@ -256,6 +276,7 @@
<style lang="scss">
.main_app {
  padding: 0;
  .main_content {
    background: #ffffff;
    border-radius: 20rpx 20rpx 0rpx 0rpx;
@@ -263,29 +284,35 @@
    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;
@@ -293,12 +320,14 @@
        }
      }
    }
    .warnning {
      display: flex;
      color: #ed4545;
      align-items: center;
      margin: 40rpx 0;
    }
    .signIn_wrap {
      margin: 80rpx auto;
      width: 260rpx;
@@ -310,14 +339,17 @@
      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;
@@ -327,12 +359,14 @@
      }
    }
  }
  .status_wrap {
    height: 200rpx;
    width: 100%;
    padding: 30rpx;
    position: relative;
    color: #fff;
    .bg {
      width: 100%;
      height: 100%;
@@ -341,15 +375,18 @@
      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;
@@ -363,10 +400,12 @@
      color: $uni-color-primary;
    }
  }
  .space {
    width: 750rpx;
    height: 200rpx;
  }
  .padding_wrap {
    position: fixed;
      z-index: 999;
@@ -376,6 +415,7 @@
    width: 100%;
    display: flex;
    justify-content: space-between;
    .btn {
      height: 96rpx;
      line-height: 96rpx;
@@ -387,6 +427,7 @@
      border-radius: 48rpx;
      border: 1rpx solid #999999;
    }
    .check {
      background: $uni-color-primary;
      border: 1rpx solid $uni-color-primary;
@@ -394,8 +435,10 @@
    }
  }
}
.detail_modal {
  padding: 36rpx 30rpx;
  .modal_title {
    font-weight: 600;
    font-size: 32rpx;
@@ -404,49 +447,59 @@
    text-align: center;
    margin-bottom: 36rpx;
  }
  .contract_list {
    .list {
      background: #f7f7f7;
      border-radius: 8rpx;
      padding: 20rpx;
      .line {
        display: flex;
        margin-bottom: 20rpx;
        &:nth-of-type(3n) {
          border-top: 1rpx solid #e5e5e5;
          padding-top: 20rpx;
        }
        .label {
          color: #666666;
          width: 86rpx;
        }
        .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;
@@ -454,31 +507,39 @@
      }
    }
  }
  .separate {
    width: 750rpx;
    height: 2rpx;
    margin: 30rpx -30rpx;
    border: 1rpx solid #e5e5e5;
  }
  .id_card {
    border-radius: 8rpx;
    display: flex;
         font-weight: 600;
    height: 60rpx;
    line-height: 60rpx;
    font-weight: 600;
    font-size: 36rpx;
         font-size: 32rpx;
    color: #111111;
    text-align: center;
    margin-bottom: 30rpx;
    .last {
         border-radius: 8rpx;
         border: 1rpx solid #dfdede;
         width: 220rpx;
         margin-bottom: 15rpx;
         text {
            &:nth-of-type(1) {
      background: #e9f5f6;
      width: 60rpx;
      border-radius: 8rpx 0rpx 0rpx 8rpx;
      border: 1rpx solid #dfdede;
               padding: 0 12rpx;
    }
    .name {
      width: 186rpx;
      border: 1rpx solid #dfdede;
            &:nth-of-type(2) {
               padding-left: 10rpx;
            }
            &:nth-of-type(4) {
               padding-right: 6rpx;
            }
    }
  }
}