Commit 2cc44653 authored by 我在何方's avatar 我在何方
parents 71c01571 83f7efc1
...@@ -486,3 +486,12 @@ export function deptExportExcel(){ ...@@ -486,3 +486,12 @@ export function deptExportExcel(){
method:'get' method:'get'
}) })
} }
export function recycleUnconfirmedCustomer(data){
return request({
url:'ecw/customer/recycle-unconfirmed-customer',
method:'put',
data
})
}
...@@ -814,7 +814,7 @@ export function splitItemUpdate(data){ ...@@ -814,7 +814,7 @@ export function splitItemUpdate(data){
// 待备货(可出)订单列表 // 待备货(可出)订单列表
export function canShipmentPage(params){ export function canShipmentPage(params){
return request({ return request({
url: '/air/order/can/shipment/page', url: '/air/order/data/scope/can/shipment/page',
method: 'get', method: 'get',
params params
}) })
...@@ -822,7 +822,7 @@ export function canShipmentPage(params){ ...@@ -822,7 +822,7 @@ export function canShipmentPage(params){
// 待出订单列表 // 待出订单列表
export function waitingShipmentPage(params){ export function waitingShipmentPage(params){
return request({ return request({
url: '/air/order/waiting/shipment/page', url: '/air/order/data/scope/waiting/shipment/page',
method: 'get', method: 'get',
params params
}) })
...@@ -999,3 +999,11 @@ export function exportOrderSummaryByContainerNumber(params){ ...@@ -999,3 +999,11 @@ export function exportOrderSummaryByContainerNumber(params){
responseType: 'blob' responseType: 'blob'
}) })
} }
// 查询权限范围内待出订单数量
export function getWaitingShipmentCount(){
return request({
url: '/air/order/data/scope/waiting/shipment/count',
method: 'get'
})
}
...@@ -10,20 +10,32 @@ export default { ...@@ -10,20 +10,32 @@ export default {
title: { title: {
type: String, type: String,
default: '' default: ''
} },
badge: Number
}, },
render(h, context) { render(h, context) {
const { icon, title } = context.props const { icon, title, badge } = context.props
const vnodes = [] const vnodes = []
if (icon) { if (icon) {
vnodes.push(<svg-icon icon-class={icon}/>) vnodes.push(<svg-icon icon-class={icon} test="1"/>)
} }
if (title) { if (title) {
vnodes.push(<span slot='title'>{(title)}</span>) vnodes.push(<span><span>{(title)}</span><span class="badge">{badge}</span></span>)
} }
return vnodes return vnodes
} }
} }
</script> </script>
<style lang="scss" scoped>
.badge:not(:empty){
background: red;
color: #fff;
padding: 2px 8px;
font-size: 12px;
border-radius: 10px;
margin-left: 5px;
}
</style>
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)"> <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" /> <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" :badge="badge" />
</el-menu-item> </el-menu-item>
</app-link> </app-link>
</template> </template>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<template slot="title"> <template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$l(item.meta, 'title')" /> <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$l(item.meta, 'title')" :badge="badge" />
</template> </template>
<sidebar-item <sidebar-item
v-for="child in item.children" v-for="child in item.children"
...@@ -54,6 +54,11 @@ export default { ...@@ -54,6 +54,11 @@ export default {
this.onlyOneChild = null this.onlyOneChild = null
return {} return {}
}, },
computed:{
badge(){
return this.$store.getters.badgeData[this.item.meta.badgeField]
}
},
methods: { methods: {
hasOneShowingChild(children = [], parent) { hasOneShowingChild(children = [], parent) {
if (!children) { if (!children) {
......
...@@ -28,6 +28,7 @@ import { mapGetters, mapState } from "vuex"; ...@@ -28,6 +28,7 @@ import { mapGetters, mapState } from "vuex";
import Logo from "./Logo"; import Logo from "./Logo";
import SidebarItem from "./SidebarItem"; import SidebarItem from "./SidebarItem";
import variables from "@/assets/styles/variables.scss"; import variables from "@/assets/styles/variables.scss";
import {getWaitingShipmentCount} from "@/api/ecw/order";
export default { export default {
components: { SidebarItem, Logo }, components: { SidebarItem, Logo },
...@@ -52,6 +53,13 @@ export default { ...@@ -52,6 +53,13 @@ export default {
isCollapse() { isCollapse() {
return !this.sidebar.opened; return !this.sidebar.opened;
} }
},
created() {
// 查询待出订单数量 waitingShipment
getWaitingShipmentCount().then(res => {
console.log('getWaitingShipmentCount', res.data)
this.$store.commit('SET_BADGE_DATA', { waitingShipment: res.data}, )
})
} }
}; };
</script> </script>
...@@ -17,6 +17,8 @@ const getters = { ...@@ -17,6 +17,8 @@ const getters = {
defaultRoutes:state => state.permission.defaultRoutes, defaultRoutes:state => state.permission.defaultRoutes,
sidebarRouters:state => state.permission.sidebarRouters, sidebarRouters:state => state.permission.sidebarRouters,
// 数据字典 // 数据字典
dict_datas: state => state.dict.dictDatas dict_datas: state => state.dict.dictDatas,
// 角标数据
badgeData: state => state.user.badgeData
} }
export default getters export default getters
...@@ -56,7 +56,8 @@ function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { ...@@ -56,7 +56,8 @@ function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
titleEn: route.nameEn, titleEn: route.nameEn,
icon: route.icon, icon: route.icon,
noCache: !route.keepalive, // 不缓存,如果需要缓存则需要组件名称能对应上 noCache: !route.keepalive, // 不缓存,如果需要缓存则需要组件名称能对应上
componentPath: route.component componentPath: route.component,
badgeField: route.badgeField
} }
route.hidden = typeof route.isShowInMenuBar != 'undefined' && (route.isShowInMenuBar == 'false' || !route.isShowInMenuBar) route.hidden = typeof route.isShowInMenuBar != 'undefined' && (route.isShowInMenuBar == 'false' || !route.isShowInMenuBar)
// 处理 component 属性 // 处理 component 属性
......
...@@ -13,7 +13,11 @@ const user = { ...@@ -13,7 +13,11 @@ const user = {
permissions: [], permissions: [],
notMessage:0, notMessage:0,
matterNum:0, matterNum:0,
download: 0 download: 0,
badgeData:{
// 待出订单数量
waitingShipment: 0
}
}, },
mutations: { mutations: {
...@@ -43,6 +47,9 @@ const user = { ...@@ -43,6 +47,9 @@ const user = {
}, },
SET_DOWNLOAD(state, cnt){ SET_DOWNLOAD(state, cnt){
state.download = cnt; state.download = cnt;
},
SET_BADGE_DATA(state, data){
state.badgeData = Object.assign({}, state.badgeData, data)
} }
}, },
......
...@@ -455,6 +455,10 @@ export default { ...@@ -455,6 +455,10 @@ export default {
component: "shippingDetail", component: "shippingDetail",
processId: this.processInstance.businessKey, processId: this.processInstance.businessKey,
type: 'air_warehouse' type: 'air_warehouse'
},
revoke_clear:{
component:() => import("@/views/ecw/box/components/RevokeClear"),
id: this.processInstance.businessKey
} }
} }
console.log('formCustomViewPath', this.processInstance.processDefinition.formCustomViewPath.trim()) console.log('formCustomViewPath', this.processInstance.processDefinition.formCustomViewPath.trim())
......
...@@ -3,12 +3,16 @@ ...@@ -3,12 +3,16 @@
<div class="message-title">{{$t(`您确定撤销${cancelClearInfo.orderNo}已清关状态吗?`)}}</div> <div class="message-title">{{$t(`您确定撤销${cancelClearInfo.orderNo}已清关状态吗?`)}}</div>
<el-form ref="arrivalForm" :rules="rules" :model="cusClearanceObj" label-width="120px"> <el-form ref="arrivalForm" :rules="rules" :model="cusClearanceObj" label-width="120px">
<el-form-item :label="$t('撤销理由')" prop="clEstTime"> <el-form-item :label="$t('撤销理由')" prop="clEstTime">
<el-input v-model="cusClearanceObj.applyReason" type="textarea" :rows="4"></el-input> <el-input v-if="flag" v-model="cusClearanceObj.applyReason" type="textarea" :rows="4"></el-input>
<template v-else>
{{apply.applyReason}}
</template>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row class="operate-button"> <el-row class="operate-button">
<el-button type="primary" @click="onSubmit">{{$t('确定')}}</el-button> <el-button v-if="flag" type="primary" @click="onSubmit">{{$t('确定')}}</el-button>
<el-button v-if="!flag" type="primary" @click="$router.push({path: '/bpm/process-instance/detail', query: {id: apply.bpmProcessId}})">{{$t('审核中')}}</el-button>
<el-button @click="cancel">{{$t('取消')}}</el-button> <el-button @click="cancel">{{$t('取消')}}</el-button>
</el-row> </el-row>
</div> </div>
...@@ -34,9 +38,19 @@ export default { ...@@ -34,9 +38,19 @@ export default {
applyReason: [ applyReason: [
{ required: true, message: this.$t("必填"), trigger: "change" }, { required: true, message: this.$t("必填"), trigger: "change" },
] ]
} },
apply: {},
flag: true
}; };
}, },
created() {
let orders = this.shipmentObj.clearanceInfo?.clearanceOrderBackList
let order = orders.find(item=>item.orderId == this.cancelClearInfo.orderId)
if(order){
this.apply = order
this.flag = false
}
},
methods: { methods: {
onSubmit() { onSubmit() {
this.$refs["arrivalForm"].validate((valid) => { this.$refs["arrivalForm"].validate((valid) => {
......
<template>
<div v-if="order">
<el-descriptions :column="4" v-if="order" :colon="false">
<el-descriptions-item :label="$t('订单号')">{{order.orderNo}}</el-descriptions-item>
<el-descriptions-item :label="$t('运输方式')">
<dict-tag class="mr-10" :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId" />
</el-descriptions-item>
<el-descriptions-item :label="$t('出货渠道')">
{{order.channelName}}
</el-descriptions-item>
<el-descriptions-item :label="$t('订单状态')">
{{order.statusMsg}}
</el-descriptions-item>
<el-descriptions-item :label="$t('唛头')">{{order.marks}}</el-descriptions-item>
<el-descriptions-item :label="$t('始发仓')">
{{order.logisticsInfoDto.startTitleZh}}
</el-descriptions-item>
<el-descriptions-item :label="$t('目的仓')" :span="2">
{{order.logisticsInfoDto.destAddressZh}}
</el-descriptions-item>
<!-- 优惠申请 -->
<el-descriptions-item :label="$t('申请理由')" :span="4">
<div class="bold">
{{applyReason}}
</div>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
import {getOrder} from '@/api/ecw/order'
import {getBoxApproval} from "@/api/ecw/box";
/*
撤销清关审核
*/
export default {
name: 'RevokeClear',
props:{
id: [String, Number]
},
data(){
return {
order: null,
applyReason: null
}
},
created(){
if(this.id){
// id是出货审核ID
getBoxApproval({id: this.id}).then(res => {
this.applyReason = res.data.applyReason
getOrder(res.data.orderId).then(res => {
this.order = res.data
})
})
}
}
}
</script>
<style scoped lang="scss">
.title{
padding: 10px 0;
span{
font-size: 14px;
font-weight: bold;
}
}
.bold{
font-weight: bold;
}
</style>
...@@ -205,7 +205,8 @@ export default { ...@@ -205,7 +205,8 @@ export default {
/* doc.save("a4.pdf"); /* doc.save("a4.pdf");
return Promise.reject() */ return Promise.reject() */
let form = new FormData() let form = new FormData()
let file = this.selfNo + "-" + this.currRow.tidanNo + ' ' + orderData.marks + '.pdf' //this.selfNo + '-' + this.currRow.tidanNo + '.pdf' const dst = this.$l(orderData.logisticsInfoDto, 'destTitle')
let file = this.selfNo + "-" + this.currRow.tidanNo + ' ' + orderData.marks + '-' + dst + '.pdf' //this.selfNo + '-' + this.currRow.tidanNo + '.pdf'
form.append('file', new File([doc.output('arraybuffer')], file, {type: 'application/pdf'})) form.append('file', new File([doc.output('arraybuffer')], file, {type: 'application/pdf'}))
form.append('path', `admin/shipment/${this.selfNo}/pdf/${file}`) // 最前面不能有/,否则返回的url会有两个/ form.append('path', `admin/shipment/${this.selfNo}/pdf/${file}`) // 最前面不能有/,否则返回的url会有两个/
......
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
<el-table-column prop="" :label="$t('操作')" align="center" width="120px"> <el-table-column prop="" :label="$t('操作')" align="center" width="120px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="small" :disabled="scope.row.abnormalDealStatus === 1" @click="()=>updateStatus('single', scope.row)">{{$t('更新状态')}}</el-button> <el-button type="primary" size="small" :disabled="scope.row.abnormalDealStatus === 1" @click="()=>updateStatus('single', scope.row)">{{$t('更新状态')}}</el-button>
<el-button type="primary" size="small" :disabled="shipmentObj.clStatus==132||(shipmentObj.clearanceInfo&&shipmentObj.clearanceInfo.clearanceOrderList.findIndex(ff=>ff.orderId == scope.row.orderId) == -1)" @click="()=>cancleClear(scope.row)">{{$t('撤销清关申请')}}</el-button> <el-button type="primary" size="small" :disabled="shipmentObj.clStatus==132|| (shipmentObj.clearanceInfo == null) || (shipmentObj.clearanceInfo&&shipmentObj.clearanceInfo.clearanceOrderList.findIndex(ff=>ff.orderId == scope.row.orderId) == -1)" @click="()=>cancleClear(scope.row)">{{$t('撤销清关申请')}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -102,8 +102,8 @@ export default { ...@@ -102,8 +102,8 @@ export default {
this.cusClearanceObj = oldData this.cusClearanceObj = oldData
if (!this.cusClearanceObj.clearanceType) this.$set(this.cusClearanceObj, 'clearanceType', 0) if (!this.cusClearanceObj.clearanceType) this.$set(this.cusClearanceObj, 'clearanceType', 0)
this.$set(this.cusClearanceObj, 'clearanceOrderIdList', []) this.$set(this.cusClearanceObj, 'clearanceOrderIdList', [])
if (this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList) this.arrivalOrderList = this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList if (typeof this.$attrs.shipmentObj.airArrivalInfo?.arrivalOrderList != 'undefined' && this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList) this.arrivalOrderList = this.$attrs.shipmentObj.airArrivalInfo.arrivalOrderList
if (this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList) this.clearanceOrderList = this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList if (typeof this.$attrs.shipmentObj.clearanceInfo?.clearanceOrderList != 'undefined' && this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList) this.clearanceOrderList = this.$attrs.shipmentObj.clearanceInfo.clearanceOrderList
shipmentOrderList(this.$attrs.shipmentObj.id).then((r) => { shipmentOrderList(this.$attrs.shipmentObj.id).then((r) => {
this.orderList = r.data this.orderList = r.data
this.orderListFilter = r.data this.orderListFilter = r.data
......
...@@ -110,7 +110,7 @@ ...@@ -110,7 +110,7 @@
<el-radio-button :label="2">{{ $t('已装箱列表') }}</el-radio-button> <el-radio-button :label="2">{{ $t('已装箱列表') }}</el-radio-button>
</el-radio-group> </el-radio-group>
</div> </div>
<un-pkg-page v-if="pkgPageType == 1" :pkgData="pkgData" :shipmentObj="shipmentObj" /> <un-pkg-page v-if="pkgPageType == 1" :pkgData="pkgData" :shipmentObj="shipmentObj" @reload="getList" />
<pkg-page v-if="pkgPageType == 2" :pkgData="pkgData" :shipmentObj="shipmentObj" @closeDialog="closeDialog" @reload="getList" /> <pkg-page v-if="pkgPageType == 2" :pkgData="pkgData" :shipmentObj="shipmentObj" @closeDialog="closeDialog" @reload="getList" />
</el-dialog> </el-dialog>
<!-- 打印标签 --> <!-- 打印标签 -->
......
...@@ -125,6 +125,7 @@ export default { ...@@ -125,6 +125,7 @@ export default {
createPkgOrder(data).then(() => { createPkgOrder(data).then(() => {
this.$message.success(this.$t('装箱成功')) this.$message.success(this.$t('装箱成功'))
this.getList() this.getList()
this.$emit('reload')
}) })
}, },
// 选中 // 选中
......
...@@ -4,10 +4,13 @@ ...@@ -4,10 +4,13 @@
<el-form-item :label="$t('预计起飞时间')"> <el-form-item :label="$t('预计起飞时间')">
{{getTakeOffTime()}} {{getTakeOffTime()}}
</el-form-item> </el-form-item>
<el-form-item :label="$t('预计到港时间')" prop="est_time">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.est_time" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('实际起飞时间')" prop="dtRealFlyTime"> <el-form-item :label="$t('实际起飞时间')" prop="dtRealFlyTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.dtRealFlyTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.dtRealFlyTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item v-if="dtRealHeadTimeFlag" :label="$t('实际头程时间')" prop="dtRealHeadTime"> <el-form-item v-if="dtRealHeadTimeFlag" :label="$t('预计二程起飞时间')" prop="dtRealHeadTime">
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.dtRealHeadTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> <el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="twoWayTakeoffObj.dtRealHeadTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -62,6 +65,7 @@ export default { ...@@ -62,6 +65,7 @@ export default {
let oldData = { ...this.$attrs.shipmentObj[voName] }; let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["dtRealFlyTime"], "YYYY-MM-DD HH:mm:ss"); oldData = formatDateStr(oldData, ["dtRealFlyTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["dtRealHeadTime"], "YYYY-MM-DD HH:mm:ss"); oldData = formatDateStr(oldData, ["dtRealHeadTime"], "YYYY-MM-DD HH:mm:ss");
oldData = formatDateStr(oldData, ["est_time"], "YYYY-MM-DD HH:mm:ss");
this.twoWayTakeoffObj = oldData; this.twoWayTakeoffObj = oldData;
if(this.$attrs.shipmentObj['bookAirInfo'].voyage && this.$attrs.shipmentObj['bookAirInfo'].voyage == 2){ if(this.$attrs.shipmentObj['bookAirInfo'].voyage && this.$attrs.shipmentObj['bookAirInfo'].voyage == 2){
this.dtRealHeadTimeFlag = true this.dtRealHeadTimeFlag = true
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
{{$t('过机重量异常')}}: {{$t('过机放行-已找到重货订单')}}:<span v-for="order in strToArray(pageData.boxCustomsBackVO.overOrders)" :key="order">{{ getOrders(order) }}</span> {{$t('过机重量异常')}}: {{$t('过机放行-已找到重货订单')}}:<span v-for="order in strToArray(pageData.boxCustomsBackVO.overOrders)" :key="order">{{ getOrders(order) }}</span>
</p> </p>
</el-row> </el-row>
<el-row class="number-area">
<p class="label-font"><span style="color:red">*</span>{{$t('到仓时间')}}</p>
<el-date-picker type="datetime" :placeholder="$t('请选择日期')" v-model="ulWarehouseTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-row>
<el-row class="number-area"> <el-row class="number-area">
<p class="label-font">{{$t('自编号')}}</p> <p class="label-font">{{$t('自编号')}}</p>
<p class="label-font">{{selfNo}}</p> <p class="label-font">{{selfNo}}</p>
...@@ -127,12 +131,12 @@ ...@@ -127,12 +131,12 @@
<!-- 操作 --> <!-- 操作 -->
<div v-if="!isUnderReview"> <div v-if="!isUnderReview">
<el-button type="success" @click="onSubmit">{{$t('提交完成到仓审核')}}</el-button> <el-button type="success" @click="onSubmit">{{$t('提交完成到仓审核')}}</el-button>
<el-button plain type="primary" @click="$emit('closeStart')">{{$t('返回')}}</el-button> <el-button plain type="primary" @click="$emit('closeDialog')">{{$t('返回')}}</el-button>
</div> </div>
<div v-if="isUnderReview"> <div v-if="isUnderReview">
<el-button type="primary" @click="jumpReviewDetail">{{$t('到仓审核中')}}</el-button> <el-button type="primary" @click="jumpReviewDetail">{{$t('到仓审核中')}}</el-button>
<el-button plain type="primary" @click="canclAudit">{{$t('取消审核')}}</el-button> <el-button plain type="primary" @click="canclAudit">{{$t('取消审核')}}</el-button>
<el-button plain type="primary" @click="$emit('closeStart')">{{$t('返回')}}</el-button> <el-button plain type="primary" @click="$emit('closeDialog')">{{$t('返回')}}</el-button>
</div> </div>
</el-row> </el-row>
...@@ -193,7 +197,8 @@ export default { ...@@ -193,7 +197,8 @@ export default {
totalStatistics: {}, totalStatistics: {},
}, },
selectedUsers: [], selectedUsers: [],
sectionOrderList: [] sectionOrderList: [],
ulWarehouseTime: null
}; };
}, },
created() { created() {
...@@ -265,9 +270,14 @@ export default { ...@@ -265,9 +270,14 @@ export default {
this.$message.error(this.$t("请输入订单号")); this.$message.error(this.$t("请输入订单号"));
return; return;
} }
if (!this.ulWarehouseTime) {
this.$message.error(this.$t("请选择到仓时间"));
return;
}
batchUnload({ batchUnload({
orderNo: this.labelNo, orderNo: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
unloadTime: this.ulWarehouseTime
}).then((res) => { }).then((res) => {
serviceMsg(res, this).then((res) => { serviceMsg(res, this).then((res) => {
this.labelNo = ""; this.labelNo = "";
...@@ -277,11 +287,15 @@ export default { ...@@ -277,11 +287,15 @@ export default {
}, },
/* 一键卸柜 */ /* 一键卸柜 */
modifyAllUnload() { modifyAllUnload() {
if (!this.ulWarehouseTime) {
this.$message.error(this.$t("请选择到仓时间"));
return;
}
this.$confirm(this.$t("确认到仓?"), this.$t("提示"), { this.$confirm(this.$t("确认到仓?"), this.$t("提示"), {
type: "warning", type: "warning",
}) })
.then((_) => { .then((_) => {
allUnload({ shipmentId: this.$attrs.shipmentObj.id }).then((res) => { allUnload({ shipmentId: this.$attrs.shipmentObj.id, unloadTime: this.ulWarehouseTime }).then((res) => {
serviceMsg(res, this).then((res) => { serviceMsg(res, this).then((res) => {
this.getLoadGoodsList(); this.getLoadGoodsList();
}); });
......
...@@ -42,7 +42,7 @@ import arrivalWidget from "./nodePage/arrival.vue"; ...@@ -42,7 +42,7 @@ import arrivalWidget from "./nodePage/arrival.vue";
import cusClearanceWidget from "./nodePage/cusClearance.vue"; import cusClearanceWidget from "./nodePage/cusClearance.vue";
import twoWayTakeoffWidget from "./nodePage/twoWayTakeoff.vue"; import twoWayTakeoffWidget from "./nodePage/twoWayTakeoff.vue";
import twoWayArrivalWidget from "./nodePage/twoWayArrival.vue"; import twoWayArrivalWidget from "./nodePage/twoWayArrival.vue";
import unloadingWidget from "./nodePage/unloading/index.vue"; import unloadingWidget from "./nodePage/unloading/startUnloading.vue";
import settlementWidget from "./nodePage/settlement.vue"; import settlementWidget from "./nodePage/settlement.vue";
import reviewWidget from "./nodePage/review.vue"; import reviewWidget from "./nodePage/review.vue";
import shipmentWidget from "./nodePage/shipment.vue"; import shipmentWidget from "./nodePage/shipment.vue";
...@@ -216,6 +216,7 @@ export default { ...@@ -216,6 +216,7 @@ export default {
break; break;
// 卸柜 // 卸柜
case "unloading": case "unloading":
this.$set(this.dialogConfig, "fullscreen", true);
// 卸柜反审 // 卸柜反审
const unStatus = this.shipmentObj[node.keyName]; const unStatus = this.shipmentObj[node.keyName];
if ([186].includes(unStatus)) { if ([186].includes(unStatus)) {
......
...@@ -752,6 +752,27 @@ function getColmnMapping() { ...@@ -752,6 +752,27 @@ function getColmnMapping() {
key: "operator", key: "operator",
}, },
], ],
boxAirFlyInfo: [
{
title: i18n.$t("预计到港时间"),
key: "dtRealFlyTime",
type: "datetime",
},
{
title: i18n.$t("实际起飞时间"),
key: "dtRealFlyTime",
type: "datetime",
},
{
title: i18n.$t("预计二程起飞时间"),
key: "dtRealHeadTime",
type: "datetime",
},
{
title: i18n.$t("业务员"),
key: "operator",
},
],
clearanceDocInfo: [ clearanceDocInfo: [
{ {
title: "agent list", title: "agent list",
......
...@@ -157,6 +157,11 @@ ...@@ -157,6 +157,11 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('特性')" align="center" prop="attrNameList" width="120">
<template slot-scope="scope">
{{scope.row.warehouseInAttrNameList?scope.row.warehouseInAttrNameList.toString():""}}
</template>
</el-table-column>
<el-table-column :label="$t('备案')" align="center" prop="productRecord" width="100"> <el-table-column :label="$t('备案')" align="center" prop="productRecord" width="100">
<template slot-scope="{row}"> <template slot-scope="{row}">
<template v-if="row.brandName">{{row.brandName}}</template> <template v-if="row.brandName">{{row.brandName}}</template>
...@@ -274,6 +279,11 @@ ...@@ -274,6 +279,11 @@
<dict-tag :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" :value="scope.row.material" /> <dict-tag :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" :value="scope.row.material" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('特性')" align="center" prop="warehouseInAttrNameList" width="120">
<template slot-scope="scope">
{{scope.row.warehouseInAttrNameList?scope.row.warehouseInAttrNameList.toString():""}}
</template>
</el-table-column>
<!-- <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width"> <!-- <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-dropdown trigger="click" @command="(command)=>handleGoods('single',scope.row,command)"> <el-dropdown trigger="click" @command="(command)=>handleGoods('single',scope.row,command)">
......
...@@ -136,7 +136,9 @@ ...@@ -136,7 +136,9 @@
</router-link> </router-link>
<el-button size="mini" type="text" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:customer:treat-perfect']">{{$t('完善')}}</el-button> v-hasPermi="['ecw:customer:treat-perfect']">{{$t('完善')}}</el-button>
<el-button v-has-permi="['ecw:customer:treat-recovery']" size="mini" type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
...@@ -360,7 +362,7 @@ import { ...@@ -360,7 +362,7 @@ import {
exportCustomerExcel, exportCustomerExcel,
getWaitForConfirmList, getWaitForConfirmList,
confirm, confirm,
waiteConfirmExportExcel, waiteConfirEexportExcel waiteConfirmExportExcel, waiteConfirEexportExcel, recycleUnconfirmedCustomer
} from "@/api/ecw/customer"; } from "@/api/ecw/customer";
import { listServiceUser } from "@/api/system/user" import { listServiceUser } from "@/api/system/user"
import { getDictDatas, DICT_TYPE } from '@/utils/dict' import { getDictDatas, DICT_TYPE } from '@/utils/dict'
...@@ -455,6 +457,20 @@ export default { ...@@ -455,6 +457,20 @@ export default {
}) })
}, },
methods: { methods: {
recovery(row){
console.log(row,'row')
this.$confirm(this.$t('是否要回收当前{name}',row), '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{
this.$message.success(this.$t('回收成功。'))
})
}).catch(() => {
this.$message.info(this.$t('已取消'))
});
},
getDictDatas, getDictDatas,
countryFormatter(row, column, cellValue) { countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue) const country = this.countryList.find((e) => e.id === cellValue)
......
...@@ -267,7 +267,7 @@ ...@@ -267,7 +267,7 @@
<el-timeline v-if="order.orderTimeVOList && order.orderTimeVOList.length" :reverse="true"> <el-timeline v-if="order.orderTimeVOList && order.orderTimeVOList.length" :reverse="true">
<el-timeline-item v-for="(activity, index) in order.orderTimeVOList" :key="index" :timestamp="parseTime(activity.businessTime)"> <el-timeline-item v-for="(activity, index) in order.orderTimeVOList" :key="index" :timestamp="parseTime(activity.businessTime)">
{{ $l(activity, 'title') }} {{ $l(activity, 'title') }}
<div>{{$l(activity, 'remarks')}}</div> <div :class="{red: !!activity.mark}">{{$l(activity, 'remarks')}}</div>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
<el-result v-else icon="info " :title="$t('暂无数据')" :subTitle="$t('暂无订单动态数据')" /> <el-result v-else icon="info " :title="$t('暂无数据')" :subTitle="$t('暂无订单动态数据')" />
...@@ -809,6 +809,9 @@ export default { ...@@ -809,6 +809,9 @@ export default {
</script> </script>
<style scoped> <style scoped>
.red{
color: red;
}
.card { .card {
margin-bottom: 20px; margin-bottom: 20px;
} }
......
...@@ -490,6 +490,14 @@ ...@@ -490,6 +490,14 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<div>
<el-form-item :label="$t('提单是否显示价格')" prop="displayBillLadingPrice">
<el-radio-group v-model="form.displayBillLadingPrice">
<el-radio :label="true">{{$t('显示')}}</el-radio>
<el-radio :label="false">{{$t('不显示')}}</el-radio>
</el-radio-group>
</el-form-item>
</div>
</el-card> </el-card>
<el-card class="mt-10" v-if="transport"> <el-card class="mt-10" v-if="transport">
......
...@@ -124,6 +124,13 @@ ...@@ -124,6 +124,13 @@
<el-form-item :label="$t('出货渠道')" prop="channelId" v-if="channelList.length"> <el-form-item :label="$t('出货渠道')" prop="channelId" v-if="channelList.length">
<selector :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelId"></selector> <selector :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelId"></selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('特需')" prop="packageType">
<el-select v-model="queryParams.packageTypeArr" multiple :placeholder="$t('请选择')" clearable >
<template v-for="item in getDictDatas(DICT_TYPE.ORDER_SPECIAL_NEEDS)">
<el-option :label="$l(item, 'label')" :value="item.value"></el-option>
</template>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery" :loading="loading">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery" :loading="loading">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
...@@ -561,6 +568,7 @@ import { getCurrencyPage } from "@/api/ecw/currency"; ...@@ -561,6 +568,7 @@ import { getCurrencyPage } from "@/api/ecw/currency";
import SplitRevoke from "@/views/ecw/order/components/SplitRevoke"; import SplitRevoke from "@/views/ecw/order/components/SplitRevoke";
import {getChannelList} from "@/api/ecw/channel"; import {getChannelList} from "@/api/ecw/channel";
import Template from "@/views/cms/template/index.vue"; import Template from "@/views/cms/template/index.vue";
import {getDictDatas} from "@/utils/dict";
export default { export default {
name: "EcwOrderIndex", name: "EcwOrderIndex",
components: { components: {
...@@ -602,7 +610,8 @@ export default { ...@@ -602,7 +610,8 @@ export default {
// 查询参数 // 查询参数
queryParams: { queryParams: {
page: 1, page: 1,
rows: 10 rows: 10,
packageTypeArr: []
}, },
warehouseList:[], warehouseList:[],
// tradeCityList: [], // tradeCityList: [],
...@@ -734,6 +743,7 @@ export default { ...@@ -734,6 +743,7 @@ export default {
} }
}, },
methods: { methods: {
getDictDatas,
// 取消拆单申请 // 取消拆单申请
splitRevoke(row){ splitRevoke(row){
...@@ -844,6 +854,10 @@ export default { ...@@ -844,6 +854,10 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
console.log('this.combinedQueryParams', this.combinedQueryParams) console.log('this.combinedQueryParams', this.combinedQueryParams)
const query = {...this.combinedQueryParams}
if(query.packageTypeArr && query.packageTypeArr.length){
query.packageType = query.packageTypeArr.join(',')
}
let func = getOrderPage let func = getOrderPage
if(this.mine){ if(this.mine){
func = getMyOrderPage func = getMyOrderPage
...@@ -856,7 +870,7 @@ export default { ...@@ -856,7 +870,7 @@ export default {
func = deptOrderPage func = deptOrderPage
} }
// 执行查询 // 执行查询
func(this.combinedQueryParams).then(response => { func(query).then(response => {
// 部分情况下,订单后面的操作下拉菜单会显示按钮,但是下来没有选项,在elTable组件更新的时候会导致渲染错误,所以要在更新渲染前清空一次list让table彻底重新渲染,避免部分更新导致异常 // 部分情况下,订单后面的操作下拉菜单会显示按钮,但是下来没有选项,在elTable组件更新的时候会导致渲染错误,所以要在更新渲染前清空一次list让table彻底重新渲染,避免部分更新导致异常
this.list = [] this.list = []
this.$nextTick(() => { this.$nextTick(() => {
...@@ -890,7 +904,8 @@ export default { ...@@ -890,7 +904,8 @@ export default {
resetQuery() { resetQuery() {
this.queryParams = { this.queryParams = {
page: 1, page: 1,
rows: 10 rows: 10,
packageTypeArr: []
} }
this.noParam.value = '' this.noParam.value = ''
this.prodParam.value = '' this.prodParam.value = ''
......
<script>
export default {
name: "showContacts",
props:{
phoneString:[String]
},
data(){
return {
phoneList:[],
}
},
mounted() {
let phone = this.phoneString
this.phoneList = phone.split('(;)');
console.log(this.phoneList)
}
}
</script>
<template>
<div>
<div v-for="(item, index) in phoneList" :key="index" >
<div>
<span>联系人{{index + 1}}</span>
<span>{{item.split('(@)')[1]}}</span>
</div>
<div>
<span>联系电话{{index + 1}}</span>
<span>+{{item.split('(@)')[0]}}</span>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
</style>
...@@ -43,9 +43,10 @@ ...@@ -43,9 +43,10 @@
:label="$t('客户名称')"> :label="$t('客户名称')">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="phone"
:formatter="(row, column, cellValue) => '+' + cellValue"
:label="$t('客户号码')"> :label="$t('客户号码')">
<template v-slot="{row}">
<show-contacts :phone-string="row.phone" ></show-contacts>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="feeScale" prop="feeScale"
...@@ -78,9 +79,11 @@ ...@@ -78,9 +79,11 @@
:label="$t('客户名称')"> :label="$t('客户名称')">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="phone" width="210"
:formatter="(row, column, cellValue) => '+' + cellValue"
:label="$t('客户号码')"> :label="$t('客户号码')">
<template v-slot="{row}">
<show-contacts :phone-string="row.phone" ></show-contacts>
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="fileUrl" prop="fileUrl"
...@@ -211,10 +214,12 @@ import DictSelector from "@/components/DictSelector" ...@@ -211,10 +214,12 @@ import DictSelector from "@/components/DictSelector"
import { DICT_TYPE, getDictDataLabel } from '@/utils/dict' import { DICT_TYPE, getDictDataLabel } from '@/utils/dict'
import FileUpload from '@/components/FileUpload' import FileUpload from '@/components/FileUpload'
import { parseTime } from '@/utils/ruoyi' import { parseTime } from '@/utils/ruoyi'
import ShowContacts from "@/views/ecw/productBrank/Empower/components/showContacts.vue";
export default { export default {
name: "Empower", name: "Empower",
components: { components: {
ShowContacts,
DictSelector, DictSelector,
FileUpload FileUpload
}, },
......
...@@ -9,7 +9,12 @@ ...@@ -9,7 +9,12 @@
<el-form-item :label="$t('商品类型')" prop="typeId" v-if="!$route.query.product_id"> <el-form-item :label="$t('商品类型')" prop="typeId" v-if="!$route.query.product_id">
<el-select v-model="queryParams.typeId" :placeholder="$t('选择商品类型')" clearable> <el-select v-model="queryParams.typeId" :placeholder="$t('选择商品类型')" clearable>
<el-option v-for="type in typeList" :key="type.id" :label="type.titleZh" :value="type.id"/> <el-option v-for="type in typeList" :key="type.id" :label="$l(type, 'titleZh')" :value="type.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('商品属性')" prop="typeId" v-if="!$route.query.product_id">
<el-select v-model="queryParams.attrId" :placeholder="$t('选择商品类型')" clearable>
<el-option v-for="attr in attrList" :key="attr.id" :label="$l(attr, 'attrName')" :value="attr.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportType" v-if="!transportType"> <el-form-item :label="$t('运输方式')" prop="transportType" v-if="!transportType">
...@@ -562,7 +567,6 @@ export default { ...@@ -562,7 +567,6 @@ export default {
this.$set(this.queryParams, 'transportType', +this.transportType) this.$set(this.queryParams, 'transportType', +this.transportType)
} }
} }
this.getAttrList();
} }
}, },
watch:{ watch:{
...@@ -622,6 +626,8 @@ export default { ...@@ -622,6 +626,8 @@ export default {
this.getChannelList() this.getChannelList()
this.getTypeList() this.getTypeList()
this.getAttrList();
//获取货币列表 //获取货币列表
this.requestCurrencyList(); this.requestCurrencyList();
//获取单位列表 //获取单位列表
......
...@@ -148,6 +148,11 @@ ...@@ -148,6 +148,11 @@
<el-input v-model="form.redirect" :placeholder="$t('请输入重定向地址')" /> <el-input v-model="form.redirect" :placeholder="$t('请输入重定向地址')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item :label="$t('角标字段')" prop="redirect">
<el-input v-model="form.badgeField" :placeholder="$t('不清楚请留空,已设勿改')" />
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment