| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template>
|
| | | <view class="main_app">
|
| | | <view class="head_bg"></view>
|
| | | <view class="info">
|
| | | <view class="head">
|
| | | <view class="title">è¿è¾åå·ï¼{{info.transportCode}}</view>
|
| | | <view class="status">{{info.logisticsStatus == 0 ? 'å¾
æ§è¡' : info.logisticsStatus == 1 ? 'æ§è¡ä¸(å¨é)' : '宿(å°è´§)'}}
|
| | | </view>
|
| | | </view>
|
| | | <view class="content">
|
| | | <view class="line">
|
| | | <view class="la">ç©èµç±»å</view>
|
| | | <view class="val">{{ info.materialType == '1' ? 'æå' : 'æç' }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">ä¸å¡ç±»å</view>
|
| | | <view class="val" v-if="info.businessType == 1">æåéå®</view>
|
| | | <view class="val" v-if="info.businessType == 2">æåç§»åº</view>
|
| | | <view class="val" v-if="info.businessType == 3">空æç-å·¥ä¸è°å</view>
|
| | | <view class="val" v-if="info.businessType == 4">空æç-åä¸åæ¶</view>
|
| | | <view class="val" v-if="info.businessType == 5">空æç-æç带å</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">æ¯å¦æçèè¿</view>
|
| | | <view class="val">{{ info.isPalletTransport == 1 ? 'æ¯' : 'å¦' }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">åè´§ç¹</view>
|
| | | <view class="val">{{ info.startCity }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">å¸è´§ç¹</view>
|
| | | <view class="val">{{ info.endCity }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">车çå·</view>
|
| | | <view class="val">{{ info.plateNumber }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">叿º</view>
|
| | | <view class="val">{{ info.driverName }}</view>
|
| | | </view>
|
| | | <view class="line">
|
| | | <view class="la">ä»»å¡ä¸è¾¾æ¶é´</view>
|
| | | <view class="val">{{ info.receiveDate }}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- -->
|
| | | <view class="record">
|
| | | <view class="title">åè§æç»</view>
|
| | | <view class="table_scroll">
|
| | | <view class="table">
|
| | | <view class="head line">
|
| | | <view class="ite con">ååå·</view>
|
| | | <view class="ite name">åè§åç§°</view>
|
| | | <view class="ite num">æ°é</view>
|
| | | <view class="ite time">ææ©å°è´§æ¶é´</view>
|
| | | <view class="ite time">æè¿å°è´§æ¶é´</view>
|
| | | </view>
|
| | | <view class="line" v-for="item in info.productDetails">
|
| | | <view class="ite con">{{item.contractNumber}}</view>
|
| | | <view class="ite name">{{item.productName}}</view>
|
| | | <view class="ite num">{{item.packageSize}}</view>
|
| | | <view class="ite time">{{item.earliestReachDate}}</view>
|
| | | <view class="ite time">{{item.latestReachDate}}</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- -->
|
| | | <view class="flow_wrap">
|
| | | <view class="title">任塿µç¨</view>
|
| | | <view class="list">
|
| | | <view class="item" v-for="item,i in info.transportStops">
|
| | | <view v-if="i < info.transportStops.length - 1" class="dian"></view>
|
| | | <view class="top1">
|
| | | <view class="left_icon">
|
| | | <image v-if="(info.logisticsStatus == 1 && item.actualArrivedDate) || info.logisticsStatus == 2"
|
| | | src="@/static/waybill/ic_daohuo_sel@2x.png" mode=""></image>
|
| | | <image v-else src="@/static/waybill/ic_dingdan@2x.png" mode=""></image>
|
| | | </view>
|
| | | <view class="content">
|
| | | <view class="name" :class="{primaryColor: (info.logisticsStatus == 1 && item.actualArrivedDate) || info.logisticsStatus == 2}">{{item.receiveLocation}}</view>
|
| | | <view class="status">
|
| | | <view v-if="info.logisticsStatus == 0" class="btn">å°è´§</view>
|
| | | <view v-else-if="info.logisticsStatus == 1 && !item.actualArrivedDate" @click="startAri(item.stopNumber)"
|
| | | class="btn pri">å°è´§</view>
|
| | | <template v-else>
|
| | | <image src="@/static/checkbox_sel@2x.png" mode="" class="icon"></image>
|
| | | <text class="primaryColor">å·²å°è´§</text>
|
| | | </template>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view class="top1">
|
| | | <view class="left_icon"></view>
|
| | | <view class="time" v-if="item.actualArrivedDate">å°è´§æ¶é´ï¼{{ item.actualArrivedDate}}</view> |
| | | <view class="time" style="margin-top: -10rpx;" v-else>-</view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view v-if="info.logisticsStatus == 0" @click="startTrans" class="start_btn">å¯è¿</view>
|
| | | <!-- --> |
| | | <view v-if="showTip" class="tip_wrap"> |
| | | <view class="title">æç¤º</view> |
| | | <view class="text">车è¾åå¯è¿ï¼ææ æ³è¿è¡å°</view> |
| | | <view class="text">è´§æä½ï¼è¯·5åéååè¯</view> |
| | | <view class="btn" @click="showTip = false">æç¥éäº</view> |
| | | </view> |
| | | <view v-if="showTip" class="shade"></view> |
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import {
|
| | | putTaskDetail,
|
| | | putDriverArrival,
|
| | | putDriverStart,
|
| | | } from '@/api'
|
| | | export default {
|
| | | data() {
|
| | | return {
|
| | | info: {
|
| | | productDetails: [],
|
| | | transportStop: []
|
| | | }, |
| | | showTip: false
|
| | | };
|
| | | },
|
| | | onLoad(options) {
|
| | | this.id = options.id
|
| | | this.getDetail()
|
| | | },
|
| | | methods: {
|
| | | getDetail() {
|
| | | putTaskDetail({
|
| | | id: this.id
|
| | | }).then(res => {
|
| | | this.info = res.data
|
| | | })
|
| | | },
|
| | | startTrans() {
|
| | | uni.showModal({
|
| | | title: 'æç¤º',
|
| | | content: '确认å¯è¿ä¹ï¼',
|
| | | success: (res) => {
|
| | | if (res.confirm) {
|
| | | putDriverStart({
|
| | | id: this.id,
|
| | | optType: 0
|
| | | }).then((ress) => {
|
| | | if (ress.code == 200) { |
| | | const transportList = uni.getStorageSync('transportList') || [] |
| | | transportList.push({ id: this.id, time: new Date().getTime() }) |
| | | uni.setStorageSync('transportList', transportList)
|
| | | this.showToast('å¯è¿æå') |
| | | this.getDetail()
|
| | | }
|
| | | })
|
| | | }
|
| | | }
|
| | | });
|
| | | },
|
| | | startAri(stopNumber) {
|
| | | uni.showModal({
|
| | | title: 'æç¤º',
|
| | | content: '确认å°è´§ä¹ï¼',
|
| | | success: (res) => {
|
| | | if (res.confirm) { |
| | | const transportList = uni.getStorageSync('transportList') || [] |
| | | const item = transportList.find(i => i.id == this.id) |
| | | if(item && item.id){ |
| | | const timeN = new Date().getTime() - item.time |
| | | if(timeN < 5 * 60 * 1000){ |
| | | this.showTip = true |
| | | return |
| | | } |
| | | }
|
| | | putDriverArrival({
|
| | | stopNumber,
|
| | | optType: 1,
|
| | | id: this.id
|
| | | }).then(ress => {
|
| | | if (ress.code == 200) {
|
| | | this.showToast('å°è´§æå') |
| | | this.getDetail()
|
| | | }
|
| | | })
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | | page {
|
| | | background-color: #f7f7f7;
|
| | | } |
| | | .shade{ |
| | | width: 100vw; |
| | | height: 100vh; |
| | | background: #000000; |
| | | opacity: 0.4; |
| | | position: fixed; |
| | | left: 0; |
| | | top: 0; |
| | | z-index: 99; |
| | | }
|
| | | .tip_wrap{ |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | bottom: 0; |
| | | right: 0; |
| | | margin: auto; |
| | | width: 560rpx; |
| | | height: 328rpx; |
| | | background: #FFFFFF; |
| | | border-radius: 24rpx; |
| | | text-align: center; |
| | | z-index: 999; |
| | | .title{ |
| | | font-weight: 500; |
| | | font-size: 32rpx; |
| | | color: #111111; |
| | | margin: 40rpx 0 30rpx; |
| | | } |
| | | .text{ |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #333333; |
| | | } |
| | | .btn{ |
| | | margin-top: 32rpx; |
| | | height: 100rpx; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | border-top: 1rpx solid #E5E5E5; |
| | | color: #279BAA; |
| | | font-size: 32rpx; |
| | | } |
| | | }
|
| | | .head_bg {
|
| | | width: 750rpx;
|
| | | height: 240rpx;
|
| | | background: linear-gradient(180deg, #279BAA 0%, rgba(39, 155, 170, 0) 100%);
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | }
|
| | |
|
| | | .info {
|
| | | border-radius: 8rpx;
|
| | | overflow: hidden;
|
| | | margin-top: 30rpx;
|
| | | background: #FFFFFF;
|
| | | position: relative; |
| | | z-index: 1;
|
| | | .head {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | align-items: center;
|
| | | height: 84rpx;
|
| | | background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
|
| | | padding: 0 30rpx;
|
| | |
|
| | | .title {
|
| | | font-weight: 500;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | }
|
| | |
|
| | | .status {
|
| | | font-size: 26rpx;
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | }
|
| | |
|
| | | .content {
|
| | | padding: 30rpx 30rpx 10rpx;
|
| | | font-size: 30rpx;
|
| | |
|
| | | .line {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | margin-bottom: 20rpx;
|
| | |
|
| | | .la {
|
| | | color: #666666;
|
| | | }
|
| | |
|
| | | .val {}
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .record {
|
| | | margin-top: 20rpx;
|
| | | width: 690rpx;
|
| | | background: #FFFFFF;
|
| | | border-radius: 16rpx;
|
| | | padding: 30rpx;
|
| | |
|
| | | .title {
|
| | | font-weight: 500;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | margin-bottom: 24rpx;
|
| | | }
|
| | |
|
| | | .table_scroll {
|
| | | width: 630rpx;
|
| | | overflow-x: auto;
|
| | |
|
| | | .table {
|
| | | width: 960rpx;
|
| | | color: #222222;
|
| | |
|
| | | .line {
|
| | | min-height: 68rpx;
|
| | | align-items: center;
|
| | | display: flex;
|
| | | border-bottom: 1px solid #E5E5E5;
|
| | | padding: 0 20rpx;
|
| | |
|
| | | .ite {
|
| | | width: 280rpx;
|
| | | flex-shrink: 0;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .con {
|
| | | width: 160rpx;
|
| | | }
|
| | |
|
| | | .time {
|
| | | width: 195rpx;
|
| | | }
|
| | |
|
| | | .num {
|
| | | width: 100rpx;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | .head {
|
| | | font-weight: 500;
|
| | | background: #F4F7FC;
|
| | | border: none;
|
| | | }
|
| | |
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .flow_wrap {
|
| | | background: #FFFFFF;
|
| | | border-radius: 16rpx;
|
| | | padding: 30rpx;
|
| | | margin-top: 20rpx;
|
| | | margin-bottom: 20rpx;
|
| | | .title {
|
| | | font-weight: 500;
|
| | | font-size: 32rpx;
|
| | | color: #222222;
|
| | | margin-bottom: 24rpx;
|
| | | }
|
| | |
|
| | | .list {
|
| | | .item {
|
| | | position: relative;
|
| | | padding-bottom: 24rpx; |
| | | &:nth-last-child(1){ |
| | | padding-bottom: 0; |
| | | }
|
| | | .dian {
|
| | | border: 1rpx dashed #CCCCCC;
|
| | | height: calc(100% - 48rpx);
|
| | | width: 1rpx;
|
| | | position: absolute;
|
| | | top: 48rpx;
|
| | | left: 22rpx;
|
| | | }
|
| | |
|
| | | .top1 {
|
| | | display: flex;
|
| | | .left_icon {
|
| | | width: 78rpx;
|
| | |
|
| | | image {
|
| | | width: 48rpx;
|
| | | height: 48rpx;
|
| | | }
|
| | | }
|
| | |
|
| | | .content {
|
| | | flex: 1;
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | // align-items: center;
|
| | | margin-bottom: 12rpx;
|
| | |
|
| | | .name {
|
| | | font-weight: 600;
|
| | | font-size: 32rpx;
|
| | | overflow: hidden;
|
| | | flex: 1;
|
| | | }
|
| | |
|
| | | .status {
|
| | | display: flex;
|
| | | // align-items: center;
|
| | | font-size: 26rpx;
|
| | |
|
| | | .btn {
|
| | | color: #999999;
|
| | | border-radius: 30rpx;
|
| | | border: 1rpx solid #999999;
|
| | | width: 116rpx;
|
| | | height: 60rpx;
|
| | | display: flex;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | }
|
| | |
|
| | | .pri {
|
| | | color: #fff;
|
| | | background-color: $uni-color-primary; |
| | | border: 1rpx solid $uni-color-primary;
|
| | | }
|
| | |
|
| | | image {
|
| | | width: 40rpx;
|
| | | height: 40rpx;
|
| | | margin-right: 10rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .time {
|
| | | font-size: 24rpx;
|
| | | color: #999999;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .start_btn {
|
| | | width: 690rpx;
|
| | | height: 88rpx;
|
| | | background: $uni-color-primary;
|
| | | border-radius: 44rpx;
|
| | | font-size: 32rpx;
|
| | | color: #FFFFFF;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | margin: 30rpx auto;
|
| | | }
|
| | | </style> |