0123需求

dev3
wuwx 2024-03-12 15:48:56 +08:00
parent 646a95eeef
commit 5ce023c7d4
5 changed files with 937 additions and 38 deletions

View File

@ -5,15 +5,18 @@
<view class="content"> <view class="content">
<view class="form"> <view class="form">
<view class="end"> <view class="end">
<superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name" <!-- <superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name"
placeholder="请选择贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox> placeholder="请选择贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox> -->
</uni-easyinput>
<superwei-combox class="input" :candidates="shipList" :isJSON="true" keyName="vvyShip" <superwei-combox class="input" :candidates="shipList" :isJSON="true" keyName="vvyShip"
placeholder="请选择船名/航次" v-model="vvyShip" @select="shipSelect" placeholder="请选择船名/航次" v-model="vvyShip" @select="shipSelect"
@input="shipInput"></superwei-combox> @input="shipInput"></superwei-combox>
</uni-easyinput>
<button class="btn" @click="onSearch"></button> <button class="btn" @click="onSearch"></button>
</view> </view>
<view class="rightInput" @click="screen">
<p>贸易类型<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
<p>计划状态<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
<p>计划靠泊时间<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
</view>
</view> </view>
<view class="itemList"> <view class="itemList">
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
@ -62,6 +65,44 @@
</view> --> </view> -->
</view> </view>
</view> </view>
<uni-drawer ref="showRight" mode="right" :mask-click="false">
<view class="scroll-view">
<scroll-view class="scroll-view-box" scroll-y="true">
<view class="drawerTop" @click="back">
<image src="../../static/images/leftJt.png" mode=""></image>
<text>返回</text>
</view>
<view class="drawerTitle">
贸易类型
</view>
<superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name"
placeholder="贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox>
<view class="drawerTitle">
计划状态
</view>
<superwei-combox :candidates="dcList" :isJSON="true" keyName="name" placeholder="计划状态"
v-model="vvyStatus"></superwei-combox>
<view class="drawerTitle">
计划靠泊时间
</view>
<view class="timeBox">
<view class="time" :class="[oneFlag ? 'check' : '']" @click="goTime(0)"></view>
<view class="time" :class="[twoFlag ? 'check' : '']" style="margin: 0 10px;" @click="goTime(1)"></view>
<view class="time" :class="[threeFlag ? 'check' : '']" @click="goTime(2)"></view>
</view>
<uni-datetime-picker v-model="operationDate" type="daterange" :clear-icon="false" @change="changeLog"
:border="false" />
<view class="bottomBtn">
<view class="btn czBtn" @click="reset">
重置
</view>
<view class="btn qrBtn" @click="confirm">
确认
</view>
</view>
</scroll-view>
</view>
</uni-drawer>
</view> </view>
</template> </template>
@ -102,7 +143,27 @@
portObj: {}, portObj: {},
isMore: false, isMore: false,
dcList:[
{
value: "0",
name: "待作业"
},
{
value: "1",
name: "作业中"
},
{
value: "2",
name: "已完成"
},
],
vvyStatus:'待作业',
operationDate:'',
startDate:'',
endDate:'',
oneFlag:false,
twoFlag:false,
threeFlag:false
} }
}, },
onLoad() { onLoad() {
@ -199,8 +260,14 @@
} else { } else {
this.tradeType = "N" this.tradeType = "N"
} }
var vvyStatusCode = ''
this.dcList.forEach(item => {
if(item.name == this.vvyStatus) {
vvyStatusCode = item.value
}
})
uni.request({ uni.request({
url: `${this.$local}/api/unload/command/queryUnloadVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&tradeType=${this.tradeType}&size=${this.pageSize}&current=${this.current}`, url: `${this.$local}/api/unload/command/queryUnloadVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&tradeType=${this.tradeType}&size=${this.pageSize}&current=${this.current}&vvyStatus=${vvyStatusCode}&startDate=${this.startDate}&endDate=${this.endDate}`,
header: { header: {
'Content-Type': 'application/json', // 'Content-Type': 'application/json', //
'Authorization': `Bearer ${this.loginObj.access_token}` 'Authorization': `Bearer ${this.loginObj.access_token}`
@ -228,6 +295,67 @@
url: '/pages/discharge/instruct?params=' + params url: '/pages/discharge/instruct?params=' + params
}) })
}, },
//
screen() {
this.$refs.showRight.open();
},
//
reset() {
this.vvyStatus = ''
this.operationDate = ''
this.startDate = ''
this.endDate = ''
},
//
confirm() {
this.onSearch()
this.$refs.showRight.close();
},
//
changeLog(e) {
if(e.length) {
this.oneFlag = false
this.twoFlag = false
this.threeFlag = false
this.startDate = `${e[0]} 00:00:00`
this.endDate = `${e[1]} 00:00:00`
}
},
//
goTime(time) {
switch (time) {
case 0:
this.oneFlag = true
this.twoFlag = false
this.threeFlag = false
this.startDate = this.getNextDate(new Date(),0)
this.endDate = this.getNextDate(new Date(),0)
break;
case 1:
this.oneFlag = false
this.twoFlag = true
this.threeFlag = false
this.startDate = this.getNextDate(new Date(),-3)
this.endDate = this.getNextDate(new Date(),0)
break;
case 2:
this.oneFlag = false
this.twoFlag = false
this.threeFlag = true
this.startDate = this.getNextDate(new Date(),-5)
this.endDate = this.getNextDate(new Date(),0)
break;
}
},
getNextDate(date, day) {
var dd = new Date(date);
dd.setDate(dd.getDate() + day);
var y = dd.getFullYear();
var m = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
return y + "-" + m + "-" + d + ' 00:00:00';
},
} }
}; };
</script> </script>
@ -249,7 +377,6 @@
right: 0; right: 0;
z-index: 995; z-index: 995;
padding-left: 20px; padding-left: 20px;
.end { .end {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -273,6 +400,15 @@
margin-top: 10px; margin-top: 10px;
} }
} }
.rightInput {
display: flex;
align-items: center;
p {
margin-left: 10px;
line-height: 40px;
}
}
} }
@ -385,4 +521,94 @@
justify-content: center; justify-content: center;
} }
} }
//
/deep/.uni-drawer__content {
width: 320px;
}
.scroll-view {
/* #ifndef APP-NVUE */
width: 100%;
height: 100%;
/* #endif */
flex: 1
}
//
.scroll-view-box {
flex: 1;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 0 16px 80px;
.drawerTop {
display: flex;
margin-top: 24px;
margin-bottom: 30px;
image {
width: 10px;
height: 14px;
margin-right: 10px;
margin-top: 6px;
}
text {
font-size: 20px;
color: #23262E;
font-weight: bold;
}
}
.drawerTitle {
font-size: 14px;
color: #23262E;
margin: 8px 0;
}
.bottomBtn {
width: 100%;
height: 60px;
display: flex;
justify-content: space-between;
padding: 12px 16px;
background: #FFFFFF;
box-shadow: 0 -3px 7px 0 rgba(0, 0, 0, 0.10);
position: fixed;
bottom: 0px;
right: 0px;
.btn {
width: 116px;
height: 36px;
font-size: 16px;
text-align: center;
line-height: 36px;
border-radius: 4px;
}
.czBtn {
color: #0067CF;
border: 1px solid #0067CF;
}
.qrBtn {
color: #fff;
background: #0067CF;
}
}
.timeBox {
display: flex;
.time {
padding: 9px 24px;
border: 1px solid #EEEEEE;
border-radius: 4px;
}
.check {
background: rgba(114, 132, 245, 0.1);
color: #0267CF;
}
}
}
</style> </style>

View File

@ -37,7 +37,12 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('zzl')"> <view class="tab">
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? '' : 'bottom']">卸船进度</view>
</view>
<template v-if="zzlFlag">
<view class="tjHead" @click="clickTjHead('zzl')">
<view class="title"> <view class="title">
<p>总指令进度</p> <p>总指令进度</p>
<text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text> <text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text>
@ -53,8 +58,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'zzl')"> @click="clickTjList(item,index,'zzl')">
<view class="title"> <view class="title">
@ -73,7 +78,23 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template> </template>
</template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'zzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<view class="itemBox"> <view class="itemBox">
@ -208,7 +229,12 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('fzl')"> <view class="tab">
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? '' : 'bottom']">卸船进度</view>
</view>
<template v-if="fzlFlag">
<view class="tjHead" @click="clickTjHead('fzl')">
<view class="title"> <view class="title">
<p>分指令进度</p> <p>分指令进度</p>
<text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text> <text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text>
@ -224,8 +250,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'fzl')"> @click="clickTjList(item,index,'fzl')">
<view class="title"> <view class="title">
@ -244,7 +270,23 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template>
</template> </template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'fzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<checkbox-group @change="checkChange"> <checkbox-group @change="checkChange">
@ -402,6 +444,26 @@
</view> </view>
</view> </view>
</view> </view>
<view class="tjList">
<view class="tab">
<view class="bottom">卸船进度</view>
</view>
<template>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index)" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<view class="itemBox"> <view class="itemBox">
<view class="itemList"> <view class="itemList">
@ -826,7 +888,11 @@
} }
], ],
yalChartList:[], yalChartList:[],
maxWidth:0 maxWidth:0,
zzlFlag:true,
jobProgressList:[],
jobActive:null,
fzlFlag:true
} }
}, },
computed: { computed: {
@ -851,6 +917,7 @@
this.getRoleId() // ID this.getRoleId() // ID
this.initAsk() // this.initAsk() //
this.getStatistics() // this.getStatistics() //
this.getJobProgress() //
}, },
components: { components: {
@ -894,6 +961,8 @@
} }
this.directorList = [] this.directorList = []
this.getRoleId() this.getRoleId()
this.zzlFlag = true
this.fzlFlag = true
}, },
// //
refresh() { refresh() {
@ -935,6 +1004,7 @@
// //
this.sendText = "" this.sendText = ""
this.sendValue = "" this.sendValue = ""
this.jobActive = null
}, },
// //
confirm() { confirm() {
@ -947,6 +1017,7 @@
} else if (this.tabsValue == 3) { } else if (this.tabsValue == 3) {
this.getCw() this.getCw()
} }
this.jobActive = null
this.$refs.showRight.close(); this.$refs.showRight.close();
}, },
// //
@ -1500,7 +1571,7 @@
}, },
method: 'GET', // method: 'GET', //
success: (res) => { success: (res) => {
console.log(res) // console.log(res)
if (res.data.status == "200") { if (res.data.status == "200") {
this.cdList = res.data.data this.cdList = res.data.data
this.getCw() this.getCw()
@ -1595,6 +1666,32 @@
} }
} }
return nArr; return nArr;
},
//
getJobProgress() {
uni.request({
url: `${this.$local}/api/instruction/statistics/JobProgress?filterType=BRD_TYPE&target=UN_L&vvyId=${this.shipInfo.vvyId}`,
header: {
'Content-Type': 'application/x-www-form-urlencoded', //
'Authorization': `Bearer ${this.loginObj.access_token}`
},
method: 'GET', //
success: (res) => {
this.jobProgressList = res.data.data.records
}
})
},
//
jobProgress(item,index,type) {
this.jobActive = index
this.brdId = item.id
this.brdName = item.label
this.itemList = []
if(type == 'zzl') {
this.loadSumOrder()
} else if(type == 'fzl') {
this.loadOtherOrder()
}
} }
} }
}; };
@ -1822,6 +1919,21 @@
float: left; float: left;
overflow: scroll; overflow: scroll;
margin-right: 4px; margin-right: 4px;
.tab {
width: 100%;
height: 44px;
display: flex;
background: white;
margin-bottom: 15px;
justify-content: space-evenly;
align-items: center;
}
.bottom {
color: #1677FF;
height: 100%;
line-height: 44px;
border-bottom: 1px solid #1677FF;
}
.active { .active {
border: 1px solid #0067CF; border: 1px solid #0067CF;
@ -1930,6 +2042,20 @@
right: 0; right: 0;
bottom: 0; bottom: 0;
} }
.label {
height: 32px;
border-bottom: 0.5px solid #E1E5ED;
}
.bottomBox {
display: flex;
margin-top: 9px;
p {
color: #666666;
}
text {
color: #252525;
}
}
} }
} }

View File

@ -36,7 +36,17 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('zzl')"> <view class="tab">
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? '' : 'bottom']">装船进度</view>
<view class="changBox">
<view class="change" @click.stop="clickTab('td')" :class="[filterType == 'MNF_BL_TYPE' ? 'ava' : '']">按提单</view>
<view class="change" @click.stop="clickTab('pp')" :class="[filterType == 'BRD_TYPE' ? 'ava' : '']">按品牌</view>
<view class="change" @click.stop="clickTab('gk')" :class="[filterType == 'POT_TYPE' ? 'ava' : '']">按港口</view>
</view>
</view>
<template v-if="zzlFlag">
<view class="tjHead" @click="clickTjHead('zzl')">
<view class="title"> <view class="title">
<p>总指令进度</p> <p>总指令进度</p>
<text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text> <text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text>
@ -52,8 +62,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'zzl')"> @click="clickTjList(item,index,'zzl')">
<view class="title"> <view class="title">
@ -72,7 +82,23 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template> </template>
</template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'zzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<view class="itemBox"> <view class="itemBox">
@ -207,7 +233,17 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('fzl')"> <view class="tab">
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? '' : 'bottom']">装船进度</view>
<view class="changBox">
<view class="change" @click.stop="clickTab('td')" :class="[filterType == 'MNF_BL_TYPE' ? 'ava' : '']">按提单</view>
<view class="change" @click.stop="clickTab('pp')" :class="[filterType == 'BRD_TYPE' ? 'ava' : '']">按品牌</view>
<view class="change" @click.stop="clickTab('gk')" :class="[filterType == 'POT_TYPE' ? 'ava' : '']">按港口</view>
</view>
</view>
<template v-if="fzlFlag">
<view class="tjHead" @click="clickTjHead('fzl')">
<view class="title"> <view class="title">
<p>分指令进度</p> <p>分指令进度</p>
<text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text> <text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text>
@ -223,8 +259,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'fzl')"> @click="clickTjList(item,index,'fzl')">
<view class="title"> <view class="title">
@ -243,7 +279,23 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template> </template>
</template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'fzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<checkbox-group @change="checkChange"> <checkbox-group @change="checkChange">
@ -681,6 +733,11 @@
// //
zcyqIsShow: false, zcyqIsShow: false,
zcyqName: "", zcyqName: "",
zzlFlag:true,
jobProgressList:[],
jobActive:null,
fzlFlag:true,
filterType:'MNF_BL_TYPE'
} }
}, },
computed: { computed: {
@ -732,6 +789,7 @@
this.getRoleId() // ID this.getRoleId() // ID
this.initAsk() // this.initAsk() //
this.getStatistics() // this.getStatistics() //
this.getJobProgress() //
}, },
components: { components: {
HeadView, HeadView,
@ -763,6 +821,8 @@
} }
this.directorList = [] this.directorList = []
this.getRoleId() this.getRoleId()
this.zzlFlag = true
this.fzlFlag = true
}, },
refresh() { refresh() {
if (this.tabsValue == 0 || this.tabsValue == 1) { if (this.tabsValue == 0 || this.tabsValue == 1) {
@ -799,6 +859,7 @@
// //
this.sendText = "" this.sendText = ""
this.sendValue = "" this.sendValue = ""
this.jobActive = null
}, },
// //
confirm() { confirm() {
@ -809,6 +870,7 @@
} else if (this.tabsValue == 2) { } else if (this.tabsValue == 2) {
this.getQy() this.getQy()
} }
this.jobActive = null
this.$refs.showRight.close(); this.$refs.showRight.close();
}, },
// //
@ -1368,6 +1430,47 @@
modifyPlaceTabs(data) { modifyPlaceTabs(data) {
this.isCwnum = data; this.isCwnum = data;
}, },
//
getJobProgress() {
uni.request({
url: `${this.$local}/api/instruction/statistics/JobProgress?filterType=${this.filterType}&target=N_L&vvyId=${this.shipInfo.vvyId}`,
header: {
'Content-Type': 'application/x-www-form-urlencoded', //
'Authorization': `Bearer ${this.loginObj.access_token}`
},
method: 'GET', //
success: (res) => {
this.jobProgressList = res.data.data.records
}
})
},
//
jobProgress(item,index,type) {
this.jobActive = index
if(this.filterType == 'BRD_TYPE') {
this.brdId = item.id
this.brdName = item.label
} else if(this.filterType == 'POT_TYPE'){
this.potName = item.label
this.potId = item.id
} else if(this.filterType == 'MNF_BL_TYPE') {
this.mnfBl = item.id
}
this.itemList = []
this.domesticTrade()
},
//
clickTab(type) {
this.jobActive = null
if(type == 'pp') {
this.filterType = 'BRD_TYPE'
} else if(type == 'td') {
this.filterType = 'MNF_BL_TYPE'
} else if(type == 'gk') {
this.filterType = 'POT_TYPE'
}
this.getJobProgress()
}
} }
}; };
</script> </script>
@ -1596,7 +1699,32 @@
float: left; float: left;
overflow: scroll; overflow: scroll;
margin-right: 4px; margin-right: 4px;
.tab {
width: 100%;
height: 103px;
display: flex;
background: white;
margin-bottom: 15px;
justify-content: space-evenly;
align-items: center;
flex-wrap: wrap;
.changBox {
display: flex;
background: rgba(113, 142, 244, 0.1);
.change {
padding: 7px 12px;
}
.ava {
background: #1677FF;
color: white;
}
}
}
.bottom {
color: #1677FF;
line-height: 44px;
border-bottom: 1px solid #1677FF;
}
.active { .active {
border: 1px solid #0067CF; border: 1px solid #0067CF;
} }
@ -1704,6 +1832,20 @@
right: 0; right: 0;
bottom: 0; bottom: 0;
} }
.label {
height: 32px;
border-bottom: 0.5px solid #E1E5ED;
}
.bottomBox {
display: flex;
margin-top: 9px;
p {
color: #666666;
}
text {
color: #252525;
}
}
} }
} }

View File

@ -5,15 +5,18 @@
<view class="content"> <view class="content">
<view class="form"> <view class="form">
<view class="end"> <view class="end">
<superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name" <!-- <superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name"
placeholder="请选择贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox> placeholder="请选择贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox> -->
</uni-easyinput>
<superwei-combox class="input" :candidates="shipList" :isJSON="true" keyName="vvyShip" <superwei-combox class="input" :candidates="shipList" :isJSON="true" keyName="vvyShip"
placeholder="请选择船名/航次" v-model="vvyShip" @select="shipSelect" placeholder="请选择船名/航次" v-model="vvyShip" @select="shipSelect"
@input="shipInput"></superwei-combox> @input="shipInput"></superwei-combox>
</uni-easyinput>
<button class="btn" @click="onSearch"></button> <button class="btn" @click="onSearch"></button>
</view> </view>
<view class="rightInput" @click="screen">
<p>贸易类型<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
<p>计划状态<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
<p>计划靠泊时间<uni-icons type="bottom" style="margin-left: 5px;" size="16"></uni-icons></p>
</view>
</view> </view>
<view class="itemList"> <view class="itemList">
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
@ -62,6 +65,44 @@
</view> --> </view> -->
</view> </view>
</view> </view>
<uni-drawer ref="showRight" mode="right" :mask-click="false">
<view class="scroll-view">
<scroll-view class="scroll-view-box" scroll-y="true">
<view class="drawerTop" @click="back">
<image src="../../static/images/leftJt.png" mode=""></image>
<text>返回</text>
</view>
<view class="drawerTitle">
贸易类型
</view>
<superwei-combox class="input" :candidates="tradeList" :isJSON="true" keyName="name"
placeholder="贸易类型" v-model="tradeName" @select="tradeSelect"></superwei-combox>
<view class="drawerTitle">
计划状态
</view>
<superwei-combox :candidates="dcList" :isJSON="true" keyName="name" placeholder="计划状态"
v-model="vvyStatus"></superwei-combox>
<view class="drawerTitle">
计划靠泊时间
</view>
<view class="timeBox">
<view class="time" :class="[oneFlag ? 'check' : '']" @click="goTime(0)"></view>
<view class="time" :class="[twoFlag ? 'check' : '']" style="margin: 0 10px;" @click="goTime(1)"></view>
<view class="time" :class="[threeFlag ? 'check' : '']" @click="goTime(2)"></view>
</view>
<uni-datetime-picker v-model="operationDate" type="daterange" :clear-icon="false" @change="changeLog"
:border="false" />
<view class="bottomBtn">
<view class="btn czBtn" @click="reset">
重置
</view>
<view class="btn qrBtn" @click="confirm">
确认
</view>
</view>
</scroll-view>
</view>
</uni-drawer>
</view> </view>
</template> </template>
@ -101,6 +142,27 @@
portObj: {}, portObj: {},
isMore: false, isMore: false,
dcList:[
{
value: "0",
name: "待作业"
},
{
value: "1",
name: "作业中"
},
{
value: "2",
name: "已完成"
},
],
vvyStatus:'待作业',
operationDate:'',
startDate:'',
endDate:'',
oneFlag:false,
twoFlag:false,
threeFlag:false
} }
}, },
components: { components: {
@ -193,12 +255,23 @@
}, },
initData() { initData() {
let url = "" let url = ""
var vvyStatusCode = ''
this.dcList.forEach(item => {
if(item.name == this.vvyStatus) {
vvyStatusCode = item.value
}
})
if (this.tradeName == '内贸') { if (this.tradeName == '内贸') {
url = url =
`${this.$local}/api/domestic/load/command/queryLoadVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&size=${this.pageSize}&current=${this.current}` `${this.$local}/api/domestic/load/command/queryLoadVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&size=${this.pageSize}&current=${this.current}&vvyStatus=${vvyStatusCode}&startDate=${this.startDate}&endDate=${this.endDate}`
} else if (this.tradeName == '外贸') { } else if (this.tradeName == '外贸') {
if(vvyStatusCode == '') {
url =
`${this.$local}/api/shipInstructions/queryStowageVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&tradeType=${this.tradeType}&size=${this.pageSize}&current=${this.current}&startDate=${this.startDate}&endDate=${this.endDate}`
} else {
url = url =
`${this.$local}/api/shipInstructions/queryStowageVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&tradeType=${this.tradeType}&size=${this.pageSize}&current=${this.current}` `${this.$local}/api/shipInstructions/queryStowageVoyages?pamId=${this.portObj.portId}&vvyId=${this.vvyId}&tradeType=${this.tradeType}&size=${this.pageSize}&current=${this.current}&vvyStatus=${vvyStatusCode}&startDate=${this.startDate}&endDate=${this.endDate}`
}
} }
uni.request({ uni.request({
url: url, url: url,
@ -234,6 +307,66 @@
}) })
} }
}, },
//
screen() {
this.$refs.showRight.open();
},
//
reset() {
this.vvyStatus = ''
this.operationDate = ''
this.startDate = ''
this.endDate = ''
},
//
confirm() {
this.onSearch()
this.$refs.showRight.close();
},
//
changeLog(e) {
if(e.length) {
this.oneFlag = false
this.twoFlag = false
this.threeFlag = false
this.startDate = `${e[0]} 00:00:00`
this.endDate = `${e[1]} 00:00:00`
}
},
//
goTime(time) {
switch (time) {
case 0:
this.oneFlag = true
this.twoFlag = false
this.threeFlag = false
this.startDate = this.getNextDate(new Date(),0)
this.endDate = this.getNextDate(new Date(),0)
break;
case 1:
this.oneFlag = false
this.twoFlag = true
this.threeFlag = false
this.startDate = this.getNextDate(new Date(),-3)
this.endDate = this.getNextDate(new Date(),0)
break;
case 2:
this.oneFlag = false
this.twoFlag = false
this.threeFlag = true
this.startDate = this.getNextDate(new Date(),-5)
this.endDate = this.getNextDate(new Date(),0)
break;
}
},
getNextDate(date, day) {
var dd = new Date(date);
dd.setDate(dd.getDate() + day);
var y = dd.getFullYear();
var m = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
return y + "-" + m + "-" + d + ' 00:00:00';
},
} }
}; };
</script> </script>
@ -279,7 +412,15 @@
margin-top: 10px; margin-top: 10px;
} }
} }
.rightInput {
display: flex;
align-items: center;
p {
margin-left: 10px;
line-height: 40px;
}
}
} }
.itemList { .itemList {
@ -392,4 +533,94 @@
justify-content: center; justify-content: center;
} }
} }
//
/deep/.uni-drawer__content {
width: 320px;
}
.scroll-view {
/* #ifndef APP-NVUE */
width: 100%;
height: 100%;
/* #endif */
flex: 1
}
//
.scroll-view-box {
flex: 1;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: 0 16px 80px;
.drawerTop {
display: flex;
margin-top: 24px;
margin-bottom: 30px;
image {
width: 10px;
height: 14px;
margin-right: 10px;
margin-top: 6px;
}
text {
font-size: 20px;
color: #23262E;
font-weight: bold;
}
}
.drawerTitle {
font-size: 14px;
color: #23262E;
margin: 8px 0;
}
.bottomBtn {
width: 100%;
height: 60px;
display: flex;
justify-content: space-between;
padding: 12px 16px;
background: #FFFFFF;
box-shadow: 0 -3px 7px 0 rgba(0, 0, 0, 0.10);
position: fixed;
bottom: 0px;
right: 0px;
.btn {
width: 116px;
height: 36px;
font-size: 16px;
text-align: center;
line-height: 36px;
border-radius: 4px;
}
.czBtn {
color: #0067CF;
border: 1px solid #0067CF;
}
.qrBtn {
color: #fff;
background: #0067CF;
}
}
.timeBox {
display: flex;
.time {
padding: 9px 24px;
border: 1px solid #EEEEEE;
border-radius: 4px;
}
.check {
background: rgba(114, 132, 245, 0.1);
color: #0267CF;
}
}
}
</style> </style>

View File

@ -39,7 +39,17 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('zzl')"> <view class="tab">
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="zzlFlag = !zzlFlag" :class="[zzlFlag ? '' : 'bottom']">装船进度</view>
<view class="changBox">
<view class="change" @click.stop="clickTab('td')" :class="[filterType == 'MNF_BL_TYPE' ? 'ava' : '']">按提单</view>
<view class="change" @click.stop="clickTab('pp')" :class="[filterType == 'BRD_TYPE' ? 'ava' : '']">按品牌</view>
<view class="change" @click.stop="clickTab('gk')" :class="[filterType == 'POT_TYPE' ? 'ava' : '']">按港口</view>
</view>
</view>
<template v-if="zzlFlag">
<view class="tjHead" @click="clickTjHead('zzl')">
<view class="title"> <view class="title">
<p>总指令进度</p> <p>总指令进度</p>
<text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text> <text>{{zTjList.totalSentCount}}/{{zTjList.totalSum}}</text>
@ -55,8 +65,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'zzl')"> @click="clickTjList(item,index,'zzl')">
<view class="title"> <view class="title">
@ -75,7 +85,23 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template>
</template> </template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'zzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<view class="itemBox"> <view class="itemBox">
@ -210,7 +236,17 @@
</view> </view>
</view> </view>
<view class="tjList"> <view class="tjList">
<view class="tjHead" @click="clickTjHead('fzl')"> <view class="tab">
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? 'bottom' : '']">指令发送进度</view>
<view @click="fzlFlag = !fzlFlag" :class="[fzlFlag ? '' : 'bottom']">装船进度</view>
<view class="changBox">
<view class="change" @click.stop="clickTab('td')" :class="[filterType == 'MNF_BL_TYPE' ? 'ava' : '']">按提单</view>
<view class="change" @click.stop="clickTab('pp')" :class="[filterType == 'BRD_TYPE' ? 'ava' : '']">按品牌</view>
<view class="change" @click.stop="clickTab('gk')" :class="[filterType == 'POT_TYPE' ? 'ava' : '']">按港口</view>
</view>
</view>
<template v-if="fzlFlag">
<view class="tjHead" @click="clickTjHead('fzl')">
<view class="title"> <view class="title">
<p>分指令进度</p> <p>分指令进度</p>
<text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text> <text>{{zTjList.branchSentCount}}/{{zTjList.branchSum}}</text>
@ -226,8 +262,8 @@
<view class="imgBox" v-if="zTjType"> <view class="imgBox" v-if="zTjType">
<image src="../../static/images/tjxz.png" mode=""></image> <image src="../../static/images/tjxz.png" mode=""></image>
</view> </view>
</view> </view>
<template v-for="(item,index) in zTjList.instructionStatisticsList"> <template v-for="(item,index) in zTjList.instructionStatisticsList">
<view class="tjInfo" :key="index" :class="{active:zTjActive == index}" <view class="tjInfo" :key="index" :class="{active:zTjActive == index}"
@click="clickTjList(item,index,'fzl')"> @click="clickTjList(item,index,'fzl')">
<view class="title"> <view class="title">
@ -246,7 +282,24 @@
<image src="../../static/images/tjxz2.png" mode=""></image> <image src="../../static/images/tjxz2.png" mode=""></image>
</view> </view>
</view> </view>
</template> </template>
</template>
<template v-else>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index,'fzl')" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view> </view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<checkbox-group @change="checkChange"> <checkbox-group @change="checkChange">
@ -404,6 +457,32 @@
</view> </view>
</view> </view>
</view> </view>
<view class="tjList">
<view class="tab">
<view class="bottom">装船进度</view>
<view class="changBox">
<view class="change" @click.stop="clickTab('td')" :class="[filterType == 'MNF_BL_TYPE' ? 'ava' : '']">按提单</view>
<view class="change" @click.stop="clickTab('pp')" :class="[filterType == 'BRD_TYPE' ? 'ava' : '']">按品牌</view>
<view class="change" @click.stop="clickTab('gk')" :class="[filterType == 'POT_TYPE' ? 'ava' : '']">按港口</view>
</view>
</view>
<template>
<view class="tjInfo" v-for="(item,index) in jobProgressList" :key="item.id" @click="jobProgress(item,index)" :class="{active:jobActive == index || brdName == item.label}">
<view class="label">{{ item.label }}</view>
<lx-progress-bar title="" :total="item.totalProgress" :firstValue="item.progress"
contentColor="#0067CF"
backColor="#f2f2f2" textPosition="outside" percentum precision="0" />
<view class="bottomBox">
<p>已装船:<text>{{ item.progress }}</text></p>
<p style="margin-left: 16px;">待卸船:<text>{{ item.totalProgress - item.progress }}</text></p>
</view>
<view class="imgBox" v-if="jobActive == index || brdName == item.label">
<image src="../../static/images/tjxz2.png" mode=""></image>
</view>
</view>
</template>
</view>
<template v-if="itemList.length > 0"> <template v-if="itemList.length > 0">
<view class="itemBox"> <view class="itemBox">
<view class="itemList"> <view class="itemList">
@ -955,6 +1034,11 @@
// //
cwtIsShow: false, cwtIsShow: false,
cwtName: "", cwtName: "",
zzlFlag:true,
jobProgressList:[],
jobActive:null,
fzlFlag:true,
filterType:'MNF_BL_TYPE'
} }
}, },
computed: { computed: {
@ -1006,6 +1090,7 @@
this.getPotList() this.getPotList()
this.getImgInfo() this.getImgInfo()
this.getGoodsInfo() this.getGoodsInfo()
this.getJobProgress() //
}, },
components: { components: {
HeadView, HeadView,
@ -1045,6 +1130,8 @@
} }
this.directorList = [] this.directorList = []
this.getRoleId() this.getRoleId()
this.zzlFlag = true
this.fzlFlag = true
}, },
// //
refresh() { refresh() {
@ -1091,6 +1178,7 @@
// //
this.sendText = "" this.sendText = ""
this.sendValue = "" this.sendValue = ""
this.jobActive = null
}, },
// //
confirm() { confirm() {
@ -1103,6 +1191,7 @@
} else if (this.tabsValue == 4) { } else if (this.tabsValue == 4) {
this.getQy() this.getQy()
} }
this.jobActive = null
this.$refs.showRight.close(); this.$refs.showRight.close();
}, },
// //
@ -1859,6 +1948,51 @@
modifyPlaceTabs(data) { modifyPlaceTabs(data) {
this.isCwnum = data; this.isCwnum = data;
}, },
//
getJobProgress() {
uni.request({
url: `${this.$local}/api/instruction/statistics/JobProgress?filterType=${this.filterType}&target=W_L&vvyId=${this.shipInfo.vvyId}`,
header: {
'Content-Type': 'application/x-www-form-urlencoded', //
'Authorization': `Bearer ${this.loginObj.access_token}`
},
method: 'GET', //
success: (res) => {
this.jobProgressList = res.data.data.records
}
})
},
//
jobProgress(item,index,type) {
this.jobActive = index
if(this.filterType == 'BRD_TYPE') {
this.brdId = item.id
this.brdName = item.label
} else if(this.filterType == 'POT_TYPE'){
this.potName = item.label
this.potId = item.id
} else if(this.filterType == 'MNF_BL_TYPE') {
this.mnfBl = item.id
}
this.itemList = []
if(type == 'zzl') {
this.loadSumOrder()
} else if(type == 'fzl') {
this.loadOtherOrder()
}
},
//
clickTab(type) {
this.jobActive = null
if(type == 'pp') {
this.filterType = 'BRD_TYPE'
} else if(type == 'td') {
this.filterType = 'MNF_BL_TYPE'
} else if(type == 'gk') {
this.filterType = 'POT_TYPE'
}
this.getJobProgress()
}
} }
}; };
</script> </script>
@ -2074,6 +2208,32 @@
float: left; float: left;
overflow: scroll; overflow: scroll;
margin-right: 4px; margin-right: 4px;
.tab {
width: 100%;
height: 103px;
display: flex;
background: white;
margin-bottom: 15px;
justify-content: space-evenly;
align-items: center;
flex-wrap: wrap;
.changBox {
display: flex;
background: rgba(113, 142, 244, 0.1);
.change {
padding: 7px 12px;
}
.ava {
background: #1677FF;
color: white;
}
}
}
.bottom {
color: #1677FF;
line-height: 44px;
border-bottom: 1px solid #1677FF;
}
.active { .active {
border: 1px solid #0067CF; border: 1px solid #0067CF;
@ -2182,6 +2342,20 @@
right: 0; right: 0;
bottom: 0; bottom: 0;
} }
.label {
height: 32px;
border-bottom: 0.5px solid #E1E5ED;
}
.bottomBox {
display: flex;
margin-top: 9px;
p {
color: #666666;
}
text {
color: #252525;
}
}
} }
} }