<template>
|
<view class="main_app">
|
<view class="main_content">
|
<view class="title" @click="showPlatformgroup = true"
|
>{{ activePlatformGroup.name
|
}}<u-icon
|
name="arrow-down"
|
size="20"
|
class="ml12"
|
color="#999999"
|
></u-icon
|
></view>
|
<view class="platform_list">
|
<view
|
class="item"
|
:class="{ active: item.id === activePlatform.id }"
|
v-for="(item, index) in activePlatformGroup.platformList"
|
:key="index"
|
@click="platformClick(item)"
|
>{{ item.name }}</view
|
>
|
</view>
|
<view class="status_wrap">
|
<view class="status"
|
>作业:<text>{{ platformTaskInfo.workNum }}</text></view
|
>
|
<view class="status"
|
>已叫:<text>{{ platformTaskInfo.callNum }}</text></view
|
>
|
<view class="status"
|
>等待:<text>{{ platformTaskInfo.waitNum }}</text></view
|
>
|
<view class="status"
|
>异常:<text>{{ platformTaskInfo.exceptionNum }}</text></view
|
>
|
</view>
|
</view>
|
<!-- -->
|
<view style="padding-bottom: 140rpx">
|
<view
|
v-for="item in platformTaskInfo.platformJobList"
|
:key="item.id"
|
class="platform_ing"
|
>
|
<view class="head">
|
<view class="code">
|
<text>{{ item.carCodeFront.slice(0, 1) }}</text>
|
<text>{{ item.carCodeFront.slice(1, 2) }}</text>
|
<text>·</text>
|
<text>{{ item.carCodeFront.slice(2) }}</text>
|
</view>
|
<view
|
class="status"
|
v-if="item.status != 4 && item.status != 5"
|
:class="{ red: item.status == 8 }"
|
>{{ statusMap[item.status] }}</view
|
>
|
<view class="status" v-if="item.status == 4"
|
>叫号中 {{ item.callDateTemp }}</view
|
>
|
<view class="status scs" v-if="item.status == 5"
|
>已作业 {{ item.startDateTemp }}</view
|
>
|
</view>
|
<view class="line" v-if="item.type == 4">
|
<text class="label">合同单号</text>
|
<text class="value">{{ item.contractNum }}</text>
|
</view>
|
<view class="line" v-else>
|
<text class="label">运输单号</text>
|
<text class="value">{{ item.code }}</text>
|
<text class="primaryColor" @click="handleDetail()">运单详情</text>
|
</view>
|
<view class="line">
|
<text class="label">驾驶员</text>
|
<text class="value"
|
>{{ item.driverName }} {{ item.drivierPhone }}</text
|
>
|
</view>
|
<view class="line">
|
<text class="label">总运输量</text>
|
<text class="value">{{ item.totalNum }}万支</text>
|
</view>
|
<view class="line" v-if="item.type != 4">
|
<text class="label">运输公司</text>
|
<text class="value">{{ item.carrierName }}</text>
|
</view>
|
<view class="btns">
|
<view v-if="item.status == 4" class="btn" @click="handlePass(item)"
|
>过号</view
|
>
|
<view
|
v-if="item.status == 4"
|
class="btn active"
|
@click="handleWork(item)"
|
>开始作业</view
|
>
|
|
<view v-if="item.status == 5" class="btn" @click="handleErr(item)"
|
>异常挂起</view
|
>
|
<view
|
v-if="item.status == 5 || item.status == 8"
|
class="btn"
|
@click="handleTransform(item)"
|
>转移月台</view
|
>
|
<view
|
v-if="item.status == 5 || item.status == 8"
|
class="btn active"
|
@click="handleFinish(item)"
|
>完成作业</view
|
>
|
</view>
|
</view>
|
<view v-if="!platformTaskInfo.platformJobList || platformTaskInfo.platformJobList.length == 0" class="empty_wrap">
|
<image src="@/static/default_nodata@2x.png" />
|
<text>暂无作业车辆</text>
|
</view>
|
</view>
|
<!-- -->
|
<view class="main_footer">
|
<view class="btn" @click="PlatformCallClick(1)">入园叫号</view>
|
<view class="btn active" @click="PlatformCallClick(2)">月台叫号</view>
|
</view>
|
<!-- 叫号 -->
|
<u-popup
|
:show="showPlatformCall"
|
closeable
|
safeAreaInsetTop
|
round="10"
|
@close="showPlatformCall = false"
|
>
|
<view
|
class="PlatformCallModal"
|
:style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
|
>
|
<view class="title" v-if="callType == 2"
|
>月台叫号({{ activePlatform.name }})</view
|
>
|
<view class="title" v-else>入园叫号</view>
|
<view class="input_wrap">
|
<u-icon name="search" class="mr12" size="19" color="#999999" />
|
<input
|
v-model="platformCallSearch"
|
type="text"
|
placeholder="搜索车辆牌照"
|
placeholder-class="placeholder9"
|
@confirm="callQuery"
|
/>
|
</view>
|
<view class="order_list">
|
<scroll-view scroll-y="true" @scrolltolower="callScrolltolower" class="scroll_view">
|
<view
|
class="platform_ing"
|
v-for="item in platformCallList"
|
:key="item.id"
|
>
|
<view class="head">
|
<view v-if="item.carCodeFront" class="code">
|
<text>{{ item.carCodeFront.slice(0, 1) }}</text>
|
<text>{{ item.carCodeFront.slice(1, 2) }}</text>
|
<text>·</text>
|
<text>{{ item.carCodeFront.slice(2) }}</text>
|
</view>
|
<view class="status" :class="{ scs: item.status == 4 }">{{
|
statusMap[item.status]
|
}}</view>
|
</view>
|
<view class="line" v-if="item.type == 4">
|
<text class="label">合同单号</text>
|
<text class="value">{{ item.contractNum }}</text>
|
</view>
|
<view class="line" v-else>
|
<text class="label">运输单号</text>
|
<text class="value">{{ item.code }}</text>
|
<text class="primaryColor" @click="handleDetail()"
|
>运单详情</text
|
>
|
</view>
|
<view class="line">
|
<text class="label">驾驶员</text>
|
<text class="value"
|
>{{ item.driverName }} {{ item.drivierPhone }}</text
|
>
|
</view>
|
<view class="line">
|
<text class="label">总运输量</text>
|
<text class="value">{{ item.totalNum }}万支</text>
|
</view>
|
<view class="line" v-if="item.type != 4">
|
<text class="label">运输公司</text>
|
<text class="value">{{ item.carrierName }}</text>
|
</view>
|
<view class="btns">
|
<view class="btn active" @click="handleCall(item)">叫号</view>
|
</view>
|
</view>
|
</scroll-view>
|
</view>
|
</view>
|
</u-popup>
|
<!-- 运单详情 -->
|
<u-popup
|
:show="showDetail"
|
closeable
|
safeAreaInsetTop
|
round="10"
|
@close="showDetail = false"
|
>
|
<view
|
class="PlatformCallModal"
|
:style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"
|
>
|
<view class="title">运单详情</view>
|
<view class="platform_ing" style="padding: 0">
|
<view class="head">
|
<view class="code">
|
<text>皖</text>
|
<text>AD1212</text>
|
</view>
|
</view>
|
<view class="line">
|
<text class="label">运输单号</text>
|
<text class="value">11111</text>
|
</view>
|
<view class="line">
|
<text class="label">驾驶员</text>
|
<text class="value">11111</text>
|
</view>
|
<view class="line">
|
<text class="label">总运输量</text>
|
<text class="value">11111</text>
|
</view>
|
<view class="line">
|
<text class="label">运输公司</text>
|
<text class="value">11111</text>
|
</view>
|
</view>
|
<view class="detail_list">
|
<view class="item">
|
<view class="orderId">合同编号:{{ 111 }}</view>
|
<view class="addr">收货地:{{ 111 }}</view>
|
<view class="content">
|
<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 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>
|
</view>
|
</view>
|
</u-popup>
|
<!-- 转移月台 -->
|
<u-popup
|
:show="showTransform"
|
closeable
|
safeAreaInsetTop
|
round="10"
|
@close="showTransform = false"
|
>
|
<view class="TransformModal">
|
<view class="title">转移月台</view>
|
<view class="transform_list">
|
<view
|
class="line"
|
@click="transformPlatClick(item)"
|
v-for="item in activePlatformGroup.platformList"
|
:key="item.id"
|
>
|
<view class="name">{{ item.name }}</view>
|
<view class="status" :class="{ green: item.workStatus == 1 }"
|
>({{ item.workStatus == 0 ? "空闲" : "作业中" }})</view
|
>
|
<image
|
v-if="transformPlatId == item.id"
|
src="@/static/ic_select@2x.png"
|
class="checked"
|
/>
|
</view>
|
</view>
|
<view class="btns">
|
<view class="btn" @click="transformCancel">取消</view>
|
<view class="btn active" @click="transformSub">确定</view>
|
</view>
|
</view>
|
</u-popup>
|
<!-- -->
|
<u-picker
|
:show="showPlatformgroup"
|
keyName="name"
|
:columns="[platformGroupList]"
|
@cancel="showPlatformgroup = false"
|
@confirm="platConfirm"
|
></u-picker>
|
</view>
|
</template>
|
|
<script>
|
import {
|
getPlatformGroupList,
|
getPlatformWorkData,
|
platformCallList,
|
platformCallNumber,
|
platformInPark,
|
beginWork,
|
finishWork,
|
platformMove,
|
platformErr,
|
platformOverNumber
|
} from '@/api'
|
import { statusMap } from '@/utils/config.js'
|
import dayjs from 'dayjs'
|
import duration from 'dayjs/plugin/duration'
|
dayjs.extend(duration)
|
|
export default {
|
data() {
|
return {
|
statusMap,
|
windowTop: 44,
|
showPlatformCall: false, // 月台叫号
|
showDetail: false,
|
showTransform: false, // 转移
|
showPlatformgroup: false,
|
|
platformGroupList: [],
|
activePlatformGroup: {},
|
platformTaskInfo: {},
|
activePlatform: {},
|
|
platformCallList: [],//叫号列表
|
platformCallSearch: '',
|
platformCallTotal: 0,
|
platformCallPage: 1,
|
callType: 1,
|
|
transformPlatId: '', // 转移记录月台id
|
transformId: '', // 转移记录任务id
|
}
|
},
|
onLoad() {
|
this.getPlatformGroup()
|
const res = uni.getWindowInfo()
|
this.windowTop = res.windowTop
|
},
|
methods: {
|
getPlatformGroup() {
|
getPlatformGroupList({
|
queryData: 1,
|
queryType: 0
|
}).then(res => {
|
this.platformGroupList = res.data || []
|
if (this.platformGroupList.length > 0) {
|
this.activePlatformGroup = this.platformGroupList[0]
|
if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
|
this.activePlatform = this.activePlatformGroup.platformList[0]
|
this.getPlatformTask()
|
}
|
}
|
})
|
},
|
getPlatformTask() {
|
getPlatformWorkData({ platformId: this.activePlatform.id }).then(res => {
|
this.platformTaskInfo = res.data
|
this.circulInitTaskList()
|
setInterval(() => {
|
this.circulInitTaskList()
|
}, 1000)
|
})
|
},
|
circulInitTaskList() {
|
if (this.platformTaskInfo && this.platformTaskInfo.platformJobList && this.platformTaskInfo.platformJobList.length > 0) {
|
let time = new Date()
|
this.platformTaskInfo.platformJobList.forEach(item => {
|
if (item.callDate) {
|
let timeNum = time.getTime() - new Date(item.callDate).getTime()
|
if (timeNum > 3600000) {
|
item.callDateTemp = dayjs.duration(timeNum).format('H小时m分s秒')
|
} else {
|
item.callDateTemp = dayjs.duration(timeNum).format('m分s秒')
|
}
|
}
|
if (item.startDate) {
|
let timeNum = time.getTime() - new Date(item.startDate).getTime()
|
if (timeNum > 3600000) {
|
item.startDateTemp = dayjs.duration(timeNum).format('H小时m分ss秒')
|
} else {
|
item.startDateTemp = dayjs.duration(timeNum).format('m分s秒')
|
}
|
}
|
})
|
this.$forceUpdate()
|
}
|
},
|
platConfirm(e) {
|
const index = e.indexs[0]
|
this.activePlatformGroup = this.platformGroupList[index]
|
if (this.activePlatformGroup.platformList && this.activePlatformGroup.platformList.length > 0) {
|
this.activePlatform = this.activePlatformGroup.platformList[0]
|
this.getPlatformTask()
|
}
|
this.showPlatformgroup = false
|
},
|
platformClick(item) {
|
this.activePlatform = item
|
this.getPlatformTask()
|
},
|
handleDetail() {
|
this.showDetail = true
|
},
|
handleFinish(item) {
|
finishWork({ jobId: item.id }).then(res => {
|
this.showToast('完成作业')
|
this.getPlatformTask()
|
})
|
},
|
handleWork(item) { // 开始作业
|
beginWork({ jobId: item.id }).then(res => {
|
this.showToast('已开始作业')
|
this.getPlatformTask()
|
})
|
},
|
handlePass(item) {
|
uni.showModal({
|
content: '您确认要对该任务进行过号吗',
|
success: (res) => {
|
if (res.confirm) {
|
platformOverNumber({ jobId: item.id, platformId: this.activePlatform.id }).then(res => {
|
this.showToast('过号成功')
|
this.getPlatformTask()
|
})
|
}
|
}
|
})
|
|
},
|
handleCall(item) {
|
const { callType, activePlatform } = this
|
this.platformCallList = []
|
this.platformCallPage = 1
|
if (callType == 1) { // 入园叫号
|
platformInPark({ jobId: item.id }).then(res => {
|
this.showToast('叫号成功')
|
this.getPlatformCallList()
|
})
|
} else { // 月台叫号
|
platformCallNumber({ platformId: activePlatform.id, jobId: item.id }).then(res => {
|
this.showToast('叫号成功')
|
this.getPlatformCallList()
|
this.getPlatformTask()
|
})
|
}
|
},
|
PlatformCallClick(callType) {
|
this.callType = callType
|
this.showPlatformCall = true
|
this.platformCallList = []
|
this.platformCallPage = 1
|
this.platformCallSearch = ''
|
this.getPlatformCallList()
|
},
|
callQuery() {
|
this.platformCallList = []
|
this.platformCallPage = 1
|
this.getPlatformCallList()
|
},
|
callScrolltolower() {
|
const { platformCallTotal, platformCallList } = this
|
if(platformCallTotal > platformCallList.length){
|
this.getPlatformCallList()
|
}
|
},
|
getPlatformCallList() {
|
const { platformCallPage, callType, activePlatform, platformCallSearch } = this
|
platformCallList({
|
model: { callType, platformId: activePlatform.id, carCodeFront: platformCallSearch },
|
capacity: 10,
|
page: platformCallPage
|
}).then(res => {
|
if (res.data && res.data.records) {
|
this.platformCallList = [ ...this.platformCallList, ...res.data.records]
|
this.platformCallTotal = res.data.total
|
}
|
})
|
},
|
transformPlatClick(item) {
|
this.transformPlatId = item.id
|
},
|
transformCancel() {
|
this.transformPlatId = ''
|
this.showTransform = false
|
},
|
transformSub() {
|
const { transformPlatId, transformId } = this
|
platformMove({ platformId: transformPlatId, jobId: transformId }).then(res => {
|
this.showToast('转移月台成功')
|
this.transformCancel()
|
this.getPlatformTask()
|
})
|
},
|
handleTransform(item) {
|
let { activePlatform } = this
|
this.transformId = item.id
|
this.transformPlatId = activePlatform.id
|
this.showTransform = true
|
},
|
handleErr(item) {
|
uni.showModal({
|
content: '您确认要对该任务进行异常挂起吗',
|
success: (res) => {
|
if (res.confirm) {
|
platformErr({ jobId: item.id }).then(ress => {
|
this.showToast('异常挂起成功')
|
this.getPlatformTask()
|
})
|
}
|
}
|
})
|
}
|
}
|
}
|
</script>
|
<style lang="scss">
|
.main_app {
|
padding: 0rpx;
|
height: calc(100vh - 44px);
|
font-size: 30rpx;
|
color: #333333;
|
background: url("@/static/bg_yuetai@2x.png") no-repeat;
|
background-size: 100% 100%;
|
.main_content {
|
background-color: #fff;
|
padding: 30rpx;
|
.platform_list {
|
display: flex;
|
flex-wrap: wrap;
|
.item {
|
width: 210rpx;
|
height: 80rpx;
|
line-height: 80rpx;
|
text-align: center;
|
background: #ffffff;
|
border-radius: 8rpx;
|
border: 1rpx solid #999999;
|
font-size: 30rpx;
|
color: #222222;
|
margin-bottom: 20rpx;
|
margin-right: 30rpx;
|
&:nth-of-type(3n) {
|
margin-right: 0;
|
}
|
}
|
.active {
|
color: #fff;
|
background-color: $uni-color-primary;
|
border-color: $uni-color-primary;
|
}
|
}
|
.status_wrap {
|
display: flex;
|
align-items: center;
|
justify-content: space-evenly;
|
width: 690rpx;
|
height: 76rpx;
|
margin-top: 4rpx;
|
background: #ffffff;
|
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.18);
|
border-radius: 8rpx;
|
.status {
|
color: #666666;
|
text {
|
color: #111111;
|
}
|
&:nth-last-child(1) {
|
text {
|
color: #ed4545;
|
}
|
}
|
}
|
}
|
.title {
|
font-weight: 500;
|
font-size: 32rpx;
|
color: #111111;
|
line-height: 44rpx;
|
margin-bottom: 30rpx;
|
display: flex;
|
justify-content: center;
|
}
|
}
|
.platform_ing {
|
margin-top: 20rpx;
|
padding: 30rpx;
|
background-color: #fff;
|
.head {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
margin-bottom: 30rpx;
|
.code {
|
display: flex;
|
font-weight: 600;
|
height: 60rpx;
|
line-height: 60rpx;
|
font-size: 32rpx;
|
color: #111111;
|
border-radius: 8rpx;
|
border: 1rpx solid #dfdede;
|
text {
|
&:nth-of-type(1) {
|
background: #e9f5f6;
|
padding: 0 12rpx;
|
}
|
&:nth-of-type(2) {
|
padding-left: 4rpx;
|
}
|
&:nth-of-type(4) {
|
padding-right: 6rpx;
|
}
|
}
|
}
|
.status {
|
font-size: 30rpx;
|
color: $uni-color-primary;
|
}
|
.scs {
|
color: #00ba67;
|
}
|
}
|
.line {
|
display: flex;
|
margin-bottom: 20rpx;
|
.label {
|
width: 144rpx;
|
color: #666666;
|
}
|
.value {
|
flex: 1;
|
}
|
}
|
.btns {
|
display: flex;
|
justify-content: flex-end;
|
.btn {
|
width: 210rpx;
|
height: 76rpx;
|
line-height: 76rpx;
|
text-align: center;
|
background: #ffffff;
|
border-radius: 40rpx;
|
border: 1rpx solid #999999;
|
margin-left: 20rpx;
|
}
|
.active {
|
background-color: $uni-color-primary;
|
color: #fff;
|
border-color: $uni-color-primary;
|
}
|
}
|
}
|
.empty {
|
width: 220rpx;
|
margin: 160rpx auto;
|
}
|
.main_footer {
|
width: 750rpx;
|
height: 136rpx;
|
position: fixed;
|
bottom: 0;
|
left: 0;
|
padding: 24rpx 30rpx;
|
display: flex;
|
justify-content: space-between;
|
font-size: 32rpx;
|
background-color: #fff;
|
.btn {
|
width: 224rpx;
|
height: 88rpx;
|
line-height: 88rpx;
|
text-align: center;
|
background: #ffffff;
|
border-radius: 44rpx;
|
color: $uni-color-primary;
|
border: 1rpx solid $uni-color-primary;
|
}
|
.active {
|
width: 436rpx;
|
background-color: $uni-color-primary;
|
color: #fff;
|
border-color: $uni-color-primary;
|
}
|
}
|
}
|
.PlatformCallModal {
|
height: calc(100vh - 44px);
|
padding: 30rpx;
|
.title {
|
text-align: center;
|
margin: 0 0 30rpx;
|
}
|
.input_wrap {
|
display: flex;
|
align-items: center;
|
width: 690rpx;
|
height: 76rpx;
|
background: #f7f7f7;
|
border-radius: 38rpx;
|
padding: 0 30rpx;
|
}
|
.order_list {
|
height: calc(100% - 140rpx);
|
.scroll_view {
|
height: 100%;
|
}
|
.platform_ing {
|
border-radius: 8rpx;
|
border: 1rpx solid #dfe2e8;
|
}
|
}
|
.detail_list {
|
border-top: 1rpx solid #e5e5e5;
|
padding: 30rpx 0;
|
.orderId {
|
font-size: 30rpx;
|
color: $uni-color-primary;
|
margin-bottom: 14rpx;
|
}
|
.addr {
|
font-size: 26rpx;
|
color: #666666;
|
margin-bottom: 20rpx;
|
}
|
.content {
|
width: 100%;
|
padding: 20rpx;
|
background: #f7f7f7;
|
border-radius: 8rpx;
|
.line {
|
display: flex;
|
margin-bottom: 20rpx;
|
&:nth-of-type(2n) {
|
padding-bottom: 20rpx;
|
border-bottom: 1rpx solid #e5e5e5;
|
}
|
&:last-child {
|
padding-bottom: 0rpx;
|
border-bottom: none;
|
}
|
.label {
|
font-size: 28rpx;
|
color: #666666;
|
width: 88rpx;
|
}
|
.value {
|
font-size: 28rpx;
|
color: #222222;
|
}
|
}
|
}
|
}
|
.btns {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
.btn {
|
width: 336rpx;
|
height: 88rpx;
|
border-radius: 44rpx;
|
border: 1rpx solid $uni-color-primary;
|
color: $uni-color-primary;
|
font-size: 32rpx;
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
}
|
.active {
|
color: #fff;
|
background-color: $uni-color-primary;
|
}
|
}
|
}
|
.TransformModal {
|
height: 900rpx;
|
padding: 30rpx;
|
position: relative;
|
.title {
|
text-align: center;
|
margin: 0 0 30rpx;
|
}
|
.btns {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
position: absolute;
|
z-index: 999;
|
left: 30rpx;
|
bottom: 30rpx;
|
.btn {
|
width: 336rpx;
|
height: 88rpx;
|
border-radius: 44rpx;
|
border: 1rpx solid $uni-color-primary;
|
color: $uni-color-primary;
|
font-size: 32rpx;
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
}
|
.active {
|
color: #fff;
|
margin-left: 18rpx;
|
background-color: $uni-color-primary;
|
}
|
}
|
.transform_list {
|
height: 660rpx;
|
margin-bottom: 30rpx;
|
overflow: auto;
|
.line {
|
display: flex;
|
align-items: center;
|
border-bottom: 1rpx solid #e5e5e5;
|
padding-bottom: 30rpx;
|
margin-bottom: 30rpx;
|
.name {
|
font-size: 32rpx;
|
color: #111111;
|
}
|
.status {
|
flex: 1;
|
font-size: 28rpx;
|
color: $uni-color-primary;
|
margin-left: 12rpx;
|
}
|
.green {
|
color: #00ba67;
|
}
|
.checked {
|
width: 40rpx;
|
height: 40rpx;
|
}
|
}
|
}
|
}
|
</style>
|