Commit 27d07b50 authored by 邓春圆's avatar 邓春圆

Merge remote-tracking branch 'origin/dev' into dev

parents 71ee734a 558ab0af
...@@ -360,4 +360,19 @@ export function updateAllOrderClearance(data) { ...@@ -360,4 +360,19 @@ export function updateAllOrderClearance(data) {
method: "post", method: "post",
data: data data: data
}); });
}
/**
* 获取线路配置
*
* @export
* @param {*} data
* @return {*}
*/
export function getLineInfoList(params) {
return request({
url: `/ecw/warehouse/getLineInfoList`,
method: "get",
params
});
} }
\ No newline at end of file
...@@ -834,6 +834,21 @@ export function batchUnload(data) { ...@@ -834,6 +834,21 @@ export function batchUnload(data) {
}); });
} }
/**
* 批量到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airBatchUnload(data) {
return request({
url: "/ecw/box-load-info/airBatchUnload",
method: "post",
data,
});
}
/** /**
* 单个卸柜 * 单个卸柜
* *
...@@ -849,6 +864,21 @@ export function singleUnload(data) { ...@@ -849,6 +864,21 @@ export function singleUnload(data) {
}); });
} }
/**
* 单个到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airSingleUnload(data) {
return request({
url: "/ecw/box-load-info/airSingleUnload",
method: "post",
data,
});
}
/** /**
* 一键卸柜 * 一键卸柜
* *
...@@ -864,6 +894,22 @@ export function allUnload(data) { ...@@ -864,6 +894,22 @@ export function allUnload(data) {
}); });
} }
/**
* 一键到仓
*
* @export
* @param {*} data
* @return {*}
*/
export function airAllUnload(data) {
return request({
url: "/ecw/box-load-info/airAllUnload",
method: "post",
data,
});
}
/** /**
* 异常 * 异常
* *
......
...@@ -1007,3 +1007,11 @@ export function getWaitingShipmentCount(){ ...@@ -1007,3 +1007,11 @@ export function getWaitingShipmentCount(){
method: 'get' method: 'get'
}) })
} }
// 空运订单不可出
export function setCanNotShipment(orderId){
return request({
url: '/air/order/not/can/shipment/' + orderId,
method: 'put',
})
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 735 849" fill="#409eff"><defs><style>.cls-1{fill:none;}</style></defs><title>资源 4</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path d="M235,619c-2-5-3-14-3-19h0c2-103,89-187,193-187a193,193,0,0,1,136,57,15,15,0,0,0,11,4h0c13,0,20-16,11-26l-2-2a222,222,0,0,0-89-53,122,122,0,0,0,56-103c0-67-55-122-122-122a122,122,0,0,0-67,225,222,222,0,0,0-89,53,219,219,0,0,0-67,153c0,3,0,19,5,32s30,24,41,24H448a15,15,0,0,0,15-15h0a15,15,0,0,0-15-15H249s-11,0-14-6Zm97-329a93,93,0,0,1,93-93c50,0,92,42,92,92a93,93,0,1,1-185,1Zm0,0"/><polygon class="cls-1" points="22 96 735 96 725 849 12 849 22 96"/><path d="M614,0H154A102,102,0,0,0,52,102v95h0v3h1c2,12,11,20,23,20a24,24,0,0,0,23-20h0V125a77,77,0,0,1,77-77H592a77,77,0,0,1,77,77V687a77,77,0,0,1-77,77H176a77,77,0,0,1-77-77V606a24,24,0,0,0-47-1h0V711A102,102,0,0,0,154,814H614A102,102,0,0,0,716,711V102A102,102,0,0,0,614,0Zm0,0"/><path d="M26,299H128a26,26,0,1,0,0-51H26a26,26,0,1,0,0,51Z"/><path d="M154,532a26,26,0,0,0-26-26H26a26,26,0,1,0,0,51H128a26,26,0,0,0,26-26Z"/><path d="M52,363v84a24,24,0,0,0,47,0V363a24,24,0,0,0-47,0Z"/><path d="M309,314"/><rect x="456" y="559" width="175" height="30" rx="15" ry="15"/><rect x="456" y="559" width="175" height="30" rx="15" ry="15" transform="translate(1117 30) rotate(90)"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 716 814" fill="#409eff"><defs><style>.cls-1{fill:none;}</style></defs><title>资源 5</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path d="M614,0H154A102,102,0,0,0,52,102v95h0v3h1c2,12,11,20,23,20a24,24,0,0,0,23-20h0V125a77,77,0,0,1,77-77H592a77,77,0,0,1,77,77V687a77,77,0,0,1-77,77H176a77,77,0,0,1-77-77V606a24,24,0,0,0-47-1h0V711A102,102,0,0,0,154,814H614A102,102,0,0,0,716,711V102A102,102,0,0,0,614,0Zm0,0"/><path d="M26,299H128a26,26,0,1,0,0-51H26a26,26,0,1,0,0,51Z"/><path d="M154,532a26,26,0,0,0-26-26H26a26,26,0,1,0,0,51H128a26,26,0,0,0,26-26Z"/><path d="M52,363v84a24,24,0,0,0,47,0V363a24,24,0,0,0-47,0Z"/><path d="M309,314"/><path d="M289,218c-71,53-80,170-17,288S432,682,534,651c26-8,52-31,52-56,0-44-51-132-88-139-11-2-23,2-43,10l-6,3-5,2-15,7h-3l-3-4c-5-6-12-15-18-26l-2-3a302,302,0,0,1-22-44h0l12-5,7-3,7-3,5-3c14-6,22-11,26-16,26-28-26-166-68-174-25-5-56,4-79,19l-2,2Zm75,14c5,1,21,25,33,57,6,16,10,32,13,44v2a73,73,0,0,1,1,11v2h-3l-15,8-10,5-12,5-16,7h-4c-1-1-2,2-8,20,11,46,57,122,85,122h9l7-4,13-6,6-3,6-3h3l17-6h5c18,3,59,75,59,104,0,6-13,18-27,22-83,25-165-26-220-128s-49-201,7-242c15-11,37-18,53-15Zm0,0"/><rect class="cls-1" x="229" y="190" width="357" height="469.26"/></g></g></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1697265053025" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4223" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M874.119618 149.859922A510.816461 510.816461 0 0 0 511.997 0.00208a509.910462 509.910462 0 0 0-362.119618 149.857842c-199.817789 199.679789-199.817789 524.581447 0 724.260236a509.969462 509.969462 0 0 0 362.119618 149.857842A508.872463 508.872463 0 0 0 874.119618 874.120158c199.836789-199.679789 199.836789-524.581447 0-724.260236zM814.94268 378.210681L470.999043 744.132295a15.359984 15.359984 0 0 1-5.887994 4.095996c-1.751998 1.180999-2.913997 2.362998-5.276994 2.913997a34.499964 34.499964 0 0 1-13.469986 2.914997 45.547952 45.547952 0 0 1-12.897986-2.303998l-4.095996-2.363997a45.291952 45.291952 0 0 1-7.009992-4.095996l-196.902793-193.789796a34.126964 34.126964 0 0 1-10.555989-25.186973c0-9.37399 3.583996-18.74698 9.98399-25.186974a36.429962 36.429962 0 0 1 50.372947 0l169.98382 167.423824L763.389735 330.220732a37.059961 37.059961 0 0 1 50.371947-1.732998 33.647965 33.647965 0 0 1 11.165988 25.186973 35.544963 35.544963 0 0 1-9.98399 24.575974v-0.04z m0 0" fill="#52C41A" p-id="4224"></path></svg>
\ No newline at end of file
...@@ -56,7 +56,7 @@ export default { ...@@ -56,7 +56,7 @@ export default {
}, },
computed:{ computed:{
badge(){ badge(){
return this.$store.getters.badgeData[this.item.meta.badgeField] return this.$store.getters.badgeData[this.item.meta?.badgeField]
} }
}, },
methods: { methods: {
......
...@@ -55,11 +55,7 @@ export default { ...@@ -55,11 +55,7 @@ export default {
} }
}, },
created() { created() {
// 查询待出订单数量 waitingShipment this.$store.dispatch('getBadgeData')
getWaitingShipmentCount().then(res => {
console.log('getWaitingShipmentCount', res.data)
this.$store.commit('SET_BADGE_DATA', { waitingShipment: res.data}, )
})
} }
}; };
</script> </script>
...@@ -2,6 +2,7 @@ import {login, logout, getInfo, socialLogin, socialLogin2} from '@/api/login' ...@@ -2,6 +2,7 @@ import {login, logout, getInfo, socialLogin, socialLogin2} from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken } from '@/utils/auth'
import {getNotReadInternalMessageTotal,} from '@/api/system/internalMessage' import {getNotReadInternalMessageTotal,} from '@/api/system/internalMessage'
import {taskTodoCount, userMark} from "@/api/bpm/task"; import {taskTodoCount, userMark} from "@/api/bpm/task";
import {getWaitingShipmentCount} from "@/api/ecw/order";
const user = { const user = {
state: { state: {
...@@ -202,6 +203,14 @@ const user = { ...@@ -202,6 +203,14 @@ const user = {
reject(err) reject(err)
}) })
}) })
},
// 获取菜单角标数据,当前只有空运待出
getBadgeData({commit}){
// 查询待出订单数量 waitingShipment
getWaitingShipmentCount().then(res => {
console.log('getWaitingShipmentCount', res.data)
commit('SET_BADGE_DATA', { waitingShipment: res.data}, )
})
} }
} }
} }
......
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token' const TokenKey = 'Jd-Admin-Token'
export function getToken() { export function getToken() {
return Cookies.get(TokenKey) return Cookies.get(TokenKey)
......
...@@ -193,7 +193,9 @@ export const DICT_TYPE = { ...@@ -193,7 +193,9 @@ export const DICT_TYPE = {
MANUAL_EXCEPTION_TYPE:'manual_exception_type', MANUAL_EXCEPTION_TYPE:'manual_exception_type',
APPLY_STATUS:'apply_status',//特价申请审核状态 APPLY_STATUS:'apply_status',//特价申请审核状态
WAREHOUSING_SPECIFICATION_TYPE: 'warehousing_specification_type', WAREHOUSING_SPECIFICATION_TYPE: 'warehousing_specification_type',
WAREHOUSING_RECORD_DETAIL_USAGE: 'warehousing_record_detail_usage', // 入仓规格类型
ECW_AUTH_TYPE:'auth_type',//品牌授权 ECW_AUTH_TYPE:'auth_type',//品牌授权
OREER_ITEM_USAGE:'order_item_usage',//用途
NEED_ORDER_INQUIRY: 'need_order_inquiry', // 是否需要単询 NEED_ORDER_INQUIRY: 'need_order_inquiry', // 是否需要単询
EXCEPTION_SELECT_FILED:'exception_select_filed', EXCEPTION_SELECT_FILED:'exception_select_filed',
......
...@@ -206,6 +206,7 @@ import { ...@@ -206,6 +206,7 @@ import {
dealCustomsSplitNotify, dealCustomsSplitNotify,
exportPreloadGoodsList, downloadReceivableList, getAirNoticeList, zipDownload, downloadAirReceivableList exportPreloadGoodsList, downloadReceivableList, getAirNoticeList, zipDownload, downloadAirReceivableList
} from '@/api/ecw/box' } from '@/api/ecw/box'
import { getLineInfoList } from '@/api/ecw/boxAir'
import { getChannelList } from '@/api/ecw/channel' import { getChannelList } from '@/api/ecw/channel'
import { getWarehouseList } from '@/api/ecw/warehouse' import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue' import costForm from './costForm.vue'
...@@ -393,6 +394,14 @@ export default { ...@@ -393,6 +394,14 @@ export default {
getboxPage(params).then((response) => { getboxPage(params).then((response) => {
this.list = response.data.list this.list = response.data.list
this.total = response.data.total this.total = response.data.total
// var lineParams = []
// this.list.forEach(item=>{
// let line = lineParams.findIndex(li=>li.startWarehouseId==item.startWarehouseId&&li.destWarehouseId==item.destWarehouseId&&li.transportType==item.transportType)
// if(line == -1){
// lineParams.push({startWarehouseId:item.startWarehouseId,destWarehouseId:item.destWarehouseId,transportType:item.transportType})
// }
// })
// getLineInfoList(lineParams)
this.loading = false this.loading = false
}) })
}, },
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</div> </div>
<div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</div> <div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</div>
<div> <div>
<el-button v-if="toBePreList.sectionGoodList&&item.airShipment==4" type="text" @click="handleGoods('all', item)">[{{$t('全部分拣')}}]</el-button> <el-button v-if="item.airShipment==4" type="text" @click="handleGoods('all', item)">[{{$t('全部分拣')}}]</el-button>
<el-button type="text" @click="foldTable(index, item)">[{{item.fold ? $t('展开') : $t('收起')}}]</el-button> <el-button type="text" @click="foldTable(index, item)">[{{item.fold ? $t('展开') : $t('收起')}}]</el-button>
</div> </div>
</el-row> </el-row>
...@@ -123,7 +123,7 @@ ...@@ -123,7 +123,7 @@
width="120">{{ $t('无返回') }}</el-table-column> --> width="120">{{ $t('无返回') }}</el-table-column> -->
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100"> <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="toBePreList.sectionGoodList&&item.airShipment==4" type="text" size="small" @click="handleGoods('singele',scope.row)">{{$t('分拣')}}</el-button> <el-button v-if="item.airShipment==4" type="text" size="small" @click="handleGoods('singele',scope.row)">{{$t('分拣')}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -287,6 +287,7 @@ export default { ...@@ -287,6 +287,7 @@ export default {
remove(params).then((res) => { remove(params).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.getSecGoods(); this.getSecGoods();
this.getPreLoad();
}); });
}).catch((res) => { }).catch((res) => {
if (res.code === 666) { if (res.code === 666) {
...@@ -300,6 +301,7 @@ export default { ...@@ -300,6 +301,7 @@ export default {
remove({ ...params, deleteType: 2 }).then((res) => { remove({ ...params, deleteType: 2 }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.getSecGoods(); this.getSecGoods();
this.getPreLoad();
}); });
}); });
}) })
...@@ -308,6 +310,7 @@ export default { ...@@ -308,6 +310,7 @@ export default {
remove({ ...params, deleteType: 1 }).then((res) => { remove({ ...params, deleteType: 1 }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.getSecGoods(); this.getSecGoods();
this.getPreLoad();
}); });
}); });
} }
......
...@@ -46,6 +46,18 @@ ...@@ -46,6 +46,18 @@
<el-input v-model="queryParams.weightRatioMin" :placeholder="$t('请输入 小')" clearable /> <el-input v-model="queryParams.weightRatioMin" :placeholder="$t('请输入 小')" clearable />
</el-form-item> </el-form-item>
<el-form-item :label="$t('出货渠道')" prop="shippingChannelId">
<el-select v-model="queryParams.shippingChannelId" :placeholder="$t('请选择出货渠道')" @change="selectChannel">
<el-option v-for="item in channelList" :label="$l(item, 'name')" :value="item.channelId" :key="item.channelId"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('特性')" prop="attrId">
<el-select v-model="queryParams.attrId" :placeholder="$t('特性')">
<el-option v-for="item in attrIdList" :label="item" :value="item*1" :key="item"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="airShipment"> <el-form-item prop="airShipment">
<el-checkbox v-model="queryParams.airShipment" :true-label="4" @change="changeAirShipment">{{$t('已完成备货')}}</el-checkbox> <el-checkbox v-model="queryParams.airShipment" :true-label="4" @change="changeAirShipment">{{$t('已完成备货')}}</el-checkbox>
<!-- <el-radio v-model="queryParams.airShipment" :label="4">{{$t('已完成备货')}}</el-radio> --> <!-- <el-radio v-model="queryParams.airShipment" :label="4">{{$t('已完成备货')}}</el-radio> -->
...@@ -157,7 +169,11 @@ ...@@ -157,7 +169,11 @@
{{$l(row,'prodTitle')}} {{$l(row,'prodTitle')}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum" /> <el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum">
<template slot-scope="scope">
{{scope.row.warehouseInInfoVO.cartonsNum}}
</template>
</el-table-column>
<el-table-column :label="$t('体积') + '/' + $t('重量') + '/' + $t('重货比')" align="center" width="140" prop="volumeWeight"> <el-table-column :label="$t('体积') + '/' + $t('重量') + '/' + $t('重货比')" align="center" width="140" prop="volumeWeight">
<template slot-scope="scope"> <template slot-scope="scope">
<p v-if="scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p> <p v-if="scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
...@@ -270,7 +286,14 @@ ...@@ -270,7 +286,14 @@
<dict-tag :type="DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL" :value="row.feeType" />{{ $t('') }} <dict-tag :type="DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL" :value="row.feeType" />{{ $t('') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum" /> <el-table-column :label="$t('箱数')" align="center" prop="warehouseInInfoVO.cartonsNum">
<template slot-scope="scope">
<span style="color: bule" v-if="scope.row.mixStatus == 1">{{scope.row.warehouseInInfoVO.cartonsNum}}{{$t('(混箱)')}}</span>
<template v-else>
{{scope.row.warehouseInInfoVO.cartonsNum}}
</template>
</template>
</el-table-column>
<el-table-column :label="$t('体积') +'/' + $t('重量')" align="center" prop="volumeWeight"> <el-table-column :label="$t('体积') +'/' + $t('重量')" align="center" prop="volumeWeight">
<template slot-scope="scope"> <template slot-scope="scope">
<p v-if="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p> <p v-if="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
...@@ -485,6 +508,17 @@ export default { ...@@ -485,6 +508,17 @@ export default {
} }
}; };
}, },
/** 特性 */
attrIdList() {
let data = []
if(this.queryParams.shippingChannelId){
let attrs = this.channelList.find(item=>this.queryParams.shippingChannelId == item.channelId)
if(attrs){
data = attrs.attrId.split(',')
}
}
return data
}
}, },
created() { created() {
// 查询待分拣 // 查询待分拣
...@@ -497,6 +531,9 @@ export default { ...@@ -497,6 +531,9 @@ export default {
methods: { methods: {
formatDate, formatDate,
getTotlContent, getTotlContent,
selectChannel(){
this.$set(this.queryParams,'attrId',null)
},
/* 获取城市 */ /* 获取城市 */
importCityName(id) { importCityName(id) {
var arr = this.$attrs.warehouseList.filter((item) => item.id == id); var arr = this.$attrs.warehouseList.filter((item) => item.id == id);
......
...@@ -190,7 +190,7 @@ export default { ...@@ -190,7 +190,7 @@ export default {
list.push({ list.push({
...oItem, ...oItem,
warehouseInInfo, warehouseInInfo,
multiSpecification: item.multiSpecification, multiSpecification: oItem.multiSpecification,
positionNo: oItem.positionNo, positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus, tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime, tallyTime: item.tallyTime,
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
<el-table-column :label="$t('重量')" align="center" prop="weight" /> <el-table-column :label="$t('重量')" align="center" prop="weight" />
<el-table-column :label="$t('订单状态')" align="center" prop=""> <el-table-column :label="$t('订单状态')" align="center" prop="">
<template slot-scope="scope"> <template slot-scope="scope">
{{getOrderError(scope.row, 'orderStatus')}} {{scope.row.statusMsg}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('异常状态')" align="center" prop=""> <el-table-column :label="$t('异常状态')" align="center" prop="">
...@@ -151,12 +151,12 @@ ...@@ -151,12 +151,12 @@
import unloadingError from "./unloadingError.vue"; import unloadingError from "./unloadingError.vue";
import { import {
loadGoodsList, loadGoodsList,
batchUnload, airBatchUnload,
allUnload, airAllUnload,
approvalCreate, approvalCreate,
approvalCancel, approvalCancel,
getSectionList, getSectionList,
singleUnload, airSingleUnload,
boxGoodsDetail boxGoodsDetail
} from "@/api/ecw/boxSea"; } from "@/api/ecw/boxSea";
import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils"; import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils";
...@@ -254,7 +254,7 @@ export default { ...@@ -254,7 +254,7 @@ export default {
this.$message.error(this.$t("请输入箱号标签")); this.$message.error(this.$t("请输入箱号标签"));
return; return;
} }
singleUnload({ airSingleUnload({
orderNumCode: this.labelNo, orderNumCode: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => { }).then((res) => {
...@@ -274,7 +274,7 @@ export default { ...@@ -274,7 +274,7 @@ export default {
this.$message.error(this.$t("请选择到仓时间")); this.$message.error(this.$t("请选择到仓时间"));
return; return;
} }
batchUnload({ airBatchUnload({
orderNo: this.labelNo, orderNo: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id, shipmentId: this.$attrs.shipmentObj.id,
unloadTime: this.ulWarehouseTime unloadTime: this.ulWarehouseTime
...@@ -295,7 +295,7 @@ export default { ...@@ -295,7 +295,7 @@ export default {
type: "warning", type: "warning",
}) })
.then((_) => { .then((_) => {
allUnload({ shipmentId: this.$attrs.shipmentObj.id, unloadTime: this.ulWarehouseTime }).then((res) => { airAllUnload({ shipmentId: this.$attrs.shipmentObj.id, unloadTime: this.ulWarehouseTime }).then((res) => {
serviceMsg(res, this).then((res) => { serviceMsg(res, this).then((res) => {
this.getLoadGoodsList(); this.getLoadGoodsList();
}); });
...@@ -313,7 +313,7 @@ export default { ...@@ -313,7 +313,7 @@ export default {
copyUserId: this.selectedUsers, copyUserId: this.selectedUsers,
}).then((res) => { }).then((res) => {
serviceMsg(res, this).then(() => { serviceMsg(res, this).then(() => {
this.cancel(); this.cancel("submit");
}); });
}); });
}else{ }else{
......
...@@ -184,6 +184,10 @@ export default { ...@@ -184,6 +184,10 @@ export default {
case "cusDeclaration": case "cusDeclaration":
this.$set(this.dialogConfig, "width", "700px"); this.$set(this.dialogConfig, "width", "700px");
break; break;
// 清关
case "cusClearance":
this.$set(this.dialogConfig, "width", "700px");
break;
// AGENT // AGENT
case "agent": case "agent":
this.$set(this.dialogConfig, "title", this.$t("代理商设置")); this.$set(this.dialogConfig, "title", this.$t("代理商设置"));
...@@ -216,13 +220,14 @@ export default { ...@@ -216,13 +220,14 @@ 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)) {
this.currentComponent = `reviewWidget`; this.currentComponent = `reviewWidget`;
this.$set(this.dialogConfig, "width", "700px"); this.$set(this.dialogConfig, "width", "700px");
this.$set(this.dialogConfig, "title", this.$t("到仓反审")); this.$set(this.dialogConfig, "title", this.$t("到仓反审"));
}else{
this.$set(this.dialogConfig, "fullscreen", true);
} }
break; break;
} }
......
...@@ -297,8 +297,8 @@ function airBaseData() { ...@@ -297,8 +297,8 @@ function airBaseData() {
keyName: "toWarehouseStatus", keyName: "toWarehouseStatus",
status: { status: {
start: [181], start: [181],
wait: [182, 183, 184, 185], wait: [182, 183, 184],
end: [186], end: [185, 186],
}, },
}, },
], ],
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<el-form-item :label="$t('客户名称')" prop="customerId"> <el-form-item :label="$t('客户名称')" prop="customerId">
<div style="display: flex"> <div style="display: flex">
<el-input :disabled="true" :placeholder="$t('请输入选择客户')" v-model="customerName"></el-input> <el-input :disabled="true" :placeholder="$t('请输入选择客户')" v-model="customerName"></el-input>
<img v-if="$route.params.dictId == 0" style="width: 40px;height: 40px;margin-left: 40px;" src="@/assets/images/phonebook.png" class="phonebook" @click="customerNameShow= true" /> <img v-if="$route.params.dictId == 0" style="width: 40px;height: 40px;margin-left: 40px;" src="@/assets/svg/contacts.svg" class="phonebook" @click="customerNameShow= true" />
</div> </div>
<!-- <el-select--> <!-- <el-select-->
<!-- v-model="customerForm.name"--> <!-- v-model="customerForm.name"-->
......
...@@ -19,12 +19,6 @@ ...@@ -19,12 +19,6 @@
</el-select> --> </el-select> -->
<dict-selector :type="DICT_TYPE.CUSTOMER_ESOURCE_TYPE" v-model="queryParams.customerType" :placeholder="$t('请选择资源类型')" clearable ></dict-selector> <dict-selector :type="DICT_TYPE.CUSTOMER_ESOURCE_TYPE" v-model="queryParams.customerType" :placeholder="$t('请选择资源类型')" clearable ></dict-selector>
</el-form-item> </el-form-item>
<!-- <el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item> -->
<!-- <el-form-item prop="customerService"> <!-- <el-form-item prop="customerService">
<el-select clearable v-model="queryParams.customerService" clearable size="small"> <el-select clearable v-model="queryParams.customerService" clearable size="small">
<el-option :label="$t('下单时间')" value="createTime"/> <el-option :label="$t('下单时间')" value="createTime"/>
...@@ -39,6 +33,31 @@ ...@@ -39,6 +33,31 @@
<!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>--> <!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-form-item :label="$t('报价单号')" prop="key">
<el-input v-model="queryParams.number" :placeholder="$t('请输入报价单号')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户名称')" prop="key">
<el-input v-model="queryParams.name" :placeholder="$t('请输入客户名称')" clearable/>
</el-form-item>
<el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button type="primary" icon="el-icon-search" @click="resetQuery">{{$t('重置')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="resetQuery">{{$t('重置')}}</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExportDetail" :loading="exportLoading" v-hasPermi="['ecw:achievement:export']">{{ $t('导出明细') }}</el-button> <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExportDetail" :loading="exportLoading" v-hasPermi="['ecw:achievement:export']">{{ $t('导出明细') }}</el-button>
...@@ -129,7 +148,8 @@ ...@@ -129,7 +148,8 @@
import {getChannelList} from '@/api/ecw/channel'; import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs"; import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user"; import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default { export default {
name: "EcwDepttargetAllachievement", name: "EcwDepttargetAllachievement",
components: {}, components: {},
...@@ -204,7 +224,8 @@ ...@@ -204,7 +224,8 @@
sumVolume:0, sumVolume:0,
sumNum:0, sumNum:0,
}, },
myAchievementData:{} myAchievementData:{},
warehouseList:[]
}; };
}, },
computed: { computed: {
...@@ -218,7 +239,14 @@ ...@@ -218,7 +239,14 @@
} }
return '/' return '/'
} }
} },
exportWarehouseList(){
/* tradeType 1 进口,2出口,3进出口 */
return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
},
importWarehouseList(){
return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
},
}, },
activated() { activated() {
this.getChannelList(); this.getChannelList();
...@@ -230,6 +258,7 @@ ...@@ -230,6 +258,7 @@
listServiceUser().then(r=>{ listServiceUser().then(r=>{
this.customerServiceList = r.data; this.customerServiceList = r.data;
}) })
getWarehouseList().then(res => this.warehouseList = res.data)
}, },
methods: { methods: {
getChannelList() { getChannelList() {
......
...@@ -164,7 +164,7 @@ ...@@ -164,7 +164,7 @@
import {listDept, listSimpleDepts} from "@/api/system/dept"; import {listDept, listSimpleDepts} from "@/api/system/dept";
import {getChannelList} from '@/api/ecw/channel'; import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs"; import dayjs from "dayjs";
import { parseTime } from '@/utils/ruoyi'; import { parseTime } from '@/utils/ruoyi';
import Template from "@/views/cms/template/index.vue"; import Template from "@/views/cms/template/index.vue";
export default { export default {
...@@ -234,7 +234,8 @@ import { parseTime } from '@/utils/ruoyi'; ...@@ -234,7 +234,8 @@ import { parseTime } from '@/utils/ruoyi';
cubeNum: [{required: true, message: this.$t("立方数不能为空"), trigger: "blur"}], cubeNum: [{required: true, message: this.$t("立方数不能为空"), trigger: "blur"}],
startTime: [{required: true, message: this.$t("起始时间不能为空"), trigger: "change"}], startTime: [{required: true, message: this.$t("起始时间不能为空"), trigger: "change"}],
endTime: [{required: true, message: this.$t("截止时间不能为空"), trigger: "change"}], endTime: [{required: true, message: this.$t("截止时间不能为空"), trigger: "change"}],
} },
}; };
}, },
computed: { computed: {
......
...@@ -39,6 +39,31 @@ ...@@ -39,6 +39,31 @@
<!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>--> <!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-form-item :label="$t('报价单号')" prop="key">
<el-input v-model="queryParams.number" :placeholder="$t('请输入报价单号')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户名称')" prop="key">
<el-input v-model="queryParams.name" :placeholder="$t('请输入客户名称')" clearable/>
</el-form-item>
<el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button type="primary" icon="el-icon-search" @click="resetQuery">{{$t('重置')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="resetQuery">{{$t('重置')}}</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" <!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
...@@ -125,6 +150,7 @@ ...@@ -125,6 +150,7 @@
import {getChannelList} from '@/api/ecw/channel'; import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs"; import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user"; import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default { export default {
name: "EcwDepttargetMyachievement", name: "EcwDepttargetMyachievement",
...@@ -200,7 +226,8 @@ ...@@ -200,7 +226,8 @@
sumVolume:0, sumVolume:0,
sumNum:0, sumNum:0,
}, },
myAchievementData:{} myAchievementData:{},
warehouseList:[]
}; };
}, },
computed: { computed: {
...@@ -214,7 +241,14 @@ ...@@ -214,7 +241,14 @@
} }
return '/' return '/'
} }
} },
exportWarehouseList(){
/* tradeType 1 进口,2出口,3进出口 */
return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
},
importWarehouseList(){
return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
},
}, },
activated() { activated() {
this.getChannelList(); this.getChannelList();
......
...@@ -39,6 +39,31 @@ ...@@ -39,6 +39,31 @@
<!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>--> <!-- <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-form-item :label="$t('报价单号')" prop="key">
<el-input v-model="queryParams.number" :placeholder="$t('请输入报价单号')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户名称')" prop="key">
<el-input v-model="queryParams.name" :placeholder="$t('请输入客户名称')" clearable/>
</el-form-item>
<el-form-item :label="$t('联系方式')" prop="key">
<el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="destinationId">
<el-select v-model="queryParams.originId" :placeholder="$t('请选择始发仓')" clearable>
<el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的仓')" prop="destinationId">
<el-select :multiple="true" v-model="queryParams.destinationId" multiple :placeholder="$t('请选择目的仓')" clearable>
<el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" <!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
>{{$t('导出')}}</el-button> --> >{{$t('导出')}}</el-button> -->
...@@ -125,7 +150,8 @@ ...@@ -125,7 +150,8 @@
import {getChannelList} from '@/api/ecw/channel'; import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs"; import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user"; import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default { export default {
name: "EcwDepttargetMydeptachievement", name: "EcwDepttargetMydeptachievement",
components: {}, components: {},
...@@ -200,7 +226,8 @@ ...@@ -200,7 +226,8 @@
sumVolume:0, sumVolume:0,
sumNum:0, sumNum:0,
}, },
myAchievementData:{} myAchievementData:{},
warehouseList:[]
}; };
}, },
computed: { computed: {
...@@ -214,7 +241,14 @@ ...@@ -214,7 +241,14 @@
} }
return '/' return '/'
} }
} },
exportWarehouseList(){
/* tradeType 1 进口,2出口,3进出口 */
return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
},
importWarehouseList(){
return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
},
}, },
created() { created() {
this.getChannelList(); this.getChannelList();
......
<template> <template>
<div> <div>
<div class="app-container"> <div class="app-container">
<el-descriptions :column="5" > <el-descriptions :column="4" border>
<el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item> <el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item> <el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')"> <el-descriptions-item :label="$t('创建时间')">
...@@ -14,11 +14,8 @@ ...@@ -14,11 +14,8 @@
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div> <div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div>
</template> </template>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item > <el-descriptions-item >
<template slot="label"> <template slot="label">
{{ $t('实收已核销总金额') }} {{ $t('实收已核销总金额') }}
...@@ -29,7 +26,7 @@ ...@@ -29,7 +26,7 @@
</template> </template>
<div v-else> <div v-else>
<div v-for="(amount, currency) in writeOffTotal" :key="currency"> <div v-for="(amount, currency) in writeOffTotal" :key="currency">
{{amount}}{{getCurrencyLabel(currency)}} {{getCurrencyLabel(currency)}}: {{amount}}
</div> </div>
</div> </div>
</el-descriptions-item> </el-descriptions-item>
...@@ -49,8 +46,56 @@ ...@@ -49,8 +46,56 @@
</template> </template>
{{ WriteOffProportion }}% {{ WriteOffProportion }}%
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div>
<div style="margin: 20px 0;font-size:16px" v-if="form.financeRemark">{{$t('备注')}}:{{form.financeRemark}}</div> <div style="margin: 20px 0;font-size:16px" v-if="form.financeRemark">{{$t('备注')}}:{{form.financeRemark}}</div>
<el-card class="card">
<div slot="header" class="card-title">{{ $t('应收明细') }}</div>
<el-table :data="list" border>
<el-table-column :label="$t('订单号')" align="center" prop="orderNo" />
<el-table-column :label="$t('提单号')" align="center" prop="tidanNo" />
<el-table-column :label="$t('唛头')" align="center" prop="marks" />
<el-table-column :label="$t('品名')" align="center" prop="title">
<template slot-scope="scope">
<span v-if="scope.row.feeType!=5">{{ scope.row.titleZh?(scope.row.titleZh + "(" + scope.row.titleEn + ")"):'' }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="num" />
<el-table-column :label="$t('体积/重量')" align="center" prop="weight">
<template slot-scope="scope">
<span v-if="scope.row.feeType!=5"> {{ scope.row.volume + "/" + scope.row.weight }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('收入类型')" align="center" prop="feeType">
<template slot-scope="scope">
<dict-tag
:type="DICT_TYPE.FEE_TYPE"
:value="scope.row.feeType"
></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('单价金额')" align="center" prop="unitPrice">
<template slot-scope="scope">
<span>{{ scope.row.unitPrice }}</span>
{{getCurrencyLabel(scope.row.currencyId)}}
</template>
</el-table-column>
<el-table-column :label="$t('总金额')" align="center" prop="totalAmount">
<template slot-scope="scope">
<span>{{ scope.row.totalAmount }}</span>
{{getCurrencyLabel(scope.row.currencyId)}}
</template>
</el-table-column>
<el-table-column :label="$t('优惠金额')" align="center">
<template slot-scope="scope">
{{ scope.row.discountTotal ? `${scope.row.discountTotal}(${scope.row.discountRemark})` : 0 }}
</template>
</el-table-column>
</el-table>
</el-card>
<div class="btn"> <div class="btn">
<el-button <el-button
size="mini" size="mini"
...@@ -245,12 +290,19 @@ export default { ...@@ -245,12 +290,19 @@ export default {
} }
.app-container { .app-container {
::v-deep .el-descriptions-item__label { ::v-deep .el-descriptions-item__label {
font-size:16px; font-size:14px;
font-weight:600; // font-weight:600;
} }
::v-deep .el-descriptions-item__content { ::v-deep .el-descriptions-item__content {
font-size:16px; font-size:14px;
font-weight:600; // font-weight:600;
} }
} }
.card {
margin-top: 20px;
}
.card-title {
font-size: 18px;
font-weight: bold;
}
</style> </style>
...@@ -141,9 +141,10 @@ ...@@ -141,9 +141,10 @@
<div> <div>
{{$t('运费')}}{{row.oneSeaFreight}} {{currentcyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}} {{$t('运费')}}{{row.oneSeaFreight}} {{currentcyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}
</div> </div>
<div> <div v-if="row.oneClearanceFreight">
{{$t('清关费')}}{{row.oneClearanceFreight}} {{currentcyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}} {{$t('清关费')}}{{row.oneClearanceFreight}} {{currentcyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}
</div> </div>
<div v-else>{{$t('清关费未报价')}}</div>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
......
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<el-form-item :label="$t('发货人')" prop="consignorId" > <el-form-item :label="$t('发货人')" prop="consignorId" >
<div class="contact"> <div class="contact">
<el-input v-model="form.consignorName" :placeholder="$t('选择或新建')" disabled style="width:120px"/> <el-input v-model="form.consignorName" :placeholder="$t('选择或新建')" disabled style="width:120px"/>
<img src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignor'" /> <img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignor'" />
<img src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='0'" /> <img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='0'" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone"> <el-form-item :label="$t('发货人电话')" prop="consignorPhone">
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
<el-form-item :label="$t('收货人')" prop="consigneeId"> <el-form-item :label="$t('收货人')" prop="consigneeId">
<div class="contact"> <div class="contact">
<el-input v-model="form.consigneeName" :placeholder="$t('请选择或新建')" :disabled="true" style="width:120px"/> <el-input v-model="form.consigneeName" :placeholder="$t('请选择或新建')" :disabled="true" style="width:120px"/>
<img src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignee'" /> <img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignee'" />
<img src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='1'" /> <img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='1'" />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consigneePhone"> <el-form-item :label="$t('收货人电话')" prop="consigneePhone">
......
<template> <template>
<div>
<!-- 订单获取入仓记录 --> <!-- 订单获取入仓记录 -->
<el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="1200px"> <el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="1200px">
<el-card style="margin-bottom:10px"> <el-card style="margin-bottom:10px">
...@@ -15,6 +16,14 @@ ...@@ -15,6 +16,14 @@
<el-descriptions-item :label="$t('数量')">{{orderItem.warehouseInInfoVO ? orderItem.warehouseInInfoVO.quantityAll : orderItem.quantity}}{{$t('个')}}</el-descriptions-item> <el-descriptions-item :label="$t('数量')">{{orderItem.warehouseInInfoVO ? orderItem.warehouseInInfoVO.quantityAll : orderItem.quantity}}{{$t('个')}}</el-descriptions-item>
<el-descriptions-item :label="$t('备货状态')">{{airShipmentData[info.airShipment]}}</el-descriptions-item> <el-descriptions-item :label="$t('备货状态')">{{airShipmentData[info.airShipment]}}</el-descriptions-item>
<el-descriptions-item :label="$t('商品特性')">{{productAttr}}</el-descriptions-item> <el-descriptions-item :label="$t('商品特性')">{{productAttr}}</el-descriptions-item>
<el-descriptions-item :label="$t('用途')">
<div v-if="orderItem.usageIds">
<div v-for="(item,index) in row.usageIds.split(',')">
<dict-tag :type="DICT_TYPE.OREER_ITEM_USAGE" :value="item" />
<span v-if="(index+1)!=row.usageIds.split(',').length">,</span>
</div>
</div>
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
<el-card style="margin-bottom:10px"> <el-card style="margin-bottom:10px">
...@@ -23,7 +32,12 @@ ...@@ -23,7 +32,12 @@
</div> </div>
<el-table v-if="orderWarehouseInContent" :data="orderWarehouseInContent"> <el-table v-if="orderWarehouseInContent" :data="orderWarehouseInContent">
<el-table-column type="index" :label="$t('序号')" /> <el-table-column type="index" :label="$t('序号')" />
<el-table-column :label="$t('箱数')" prop="cartonsNum" /> <el-table-column :label="$t('箱数')" prop="cartonsNum">
<template slot-scope="{row}">
<span>{{row.cartonsNum}}</span>
<!-- <el-button type="primary" @click="seeBox(row)">({{$t('混箱')}})</el-button> -->
</template>
</el-table-column>
<el-table-column :label="$t('入仓类型')" prop="cartonsNum"> <el-table-column :label="$t('入仓类型')" prop="cartonsNum">
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE" :value="row.specificationType" /> <dict-tag :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE" :value="row.specificationType" />
...@@ -61,6 +75,11 @@ ...@@ -61,6 +75,11 @@
{{getLocationName(row.orderLocationBackVOList)}} {{getLocationName(row.orderLocationBackVOList)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<el-button type="primary" @click="seeMv(row.pictureUrls)">{{$t('查看')}}</el-button>
</template>
</el-table-column>
</el-table> </el-table>
</el-card> </el-card>
<el-card style="margin-bottom:10px"> <el-card style="margin-bottom:10px">
...@@ -107,6 +126,11 @@ ...@@ -107,6 +126,11 @@
{{getLocationName(row.orderLocationBackVOList)}} {{getLocationName(row.orderLocationBackVOList)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('入仓影像')" prop="orderLocationBackVOList" >
<template slot-scope="{row}">
<el-button type="primary" @click="seeMv(row.pictureUrls)">{{$t('查看')}}</el-button>
</template>
</el-table-column>
</el-table> </el-table>
</el-card> </el-card>
<el-card style="margin-bottom:10px"> <el-card style="margin-bottom:10px">
...@@ -120,7 +144,20 @@ ...@@ -120,7 +144,20 @@
</el-descriptions> </el-descriptions>
</el-card> </el-card>
<el-button type="primary" @click="closeDialog">{{$t('关闭窗口')}}</el-button> <el-button type="primary" @click="closeDialog">{{$t('关闭窗口')}}</el-button>
</el-dialog>
<el-dialog :title="$t('入仓影像')" :visible="mvShow" :before-close="closeMv" :close-on-click-modal="false" width="600px">
<div style="display:flex;flex-wrap:wrap">
<div v-for="(item, index) in pictureUrls" :index="index" :key="index" style="width:80px;height:80px">
<image v-if="item.type === 'image'" :src="item.url" mode="scaleToFill" style="height: 100%" @tap="previewImage(item.url)" />
<video v-else-if="item.type === 'video'" :id="`video_${index}`" style="width: 100%;height: 100%" :src="item.url" @play="playVideo(index)" @tap="playVideo(index)" @fullscreenchange="fullscreenchange"></video>
</div>
</div>
<div v-if="pictureUrls.length==0">
<span>{{$t('暂无影像')}}</span>
</div>
</el-dialog> </el-dialog>
</div>
</template> </template>
<script> <script>
import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order' import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order'
...@@ -149,7 +186,9 @@ export default { ...@@ -149,7 +186,9 @@ export default {
volume:0, volume:0,
weight:0, weight:0,
quantityAll:0 quantityAll:0
} },
pictureUrls:[],
mvShow:false
} }
}, },
computed:{ computed:{
...@@ -225,6 +264,34 @@ export default { ...@@ -225,6 +264,34 @@ export default {
} }
}) })
}, },
seeMv(list){
this.mvShow=true
if(list){
this.pictureUrls = list.map(e => {
return {
url: e,
type: this.isImageFile(e) ? 'image' : 'video',
}
})
}
},
isImageFile(filename) {
var imageExtensions = [".jpeg", ".jpg", ".png", ".gif", ".bmp", ".tiff"];
var extension = "";
var length = filename.length;
for (var i = length - 1; i >= 0; i--) {
if (filename[i] === ".") {
extension = filename.slice(i).toLowerCase();
break;
}
}
return imageExtensions.indexOf(extension) !== -1;
},
closeMv(){
this.mvShow = false
}
} }
} }
</script> </script>
......
...@@ -264,6 +264,17 @@ ...@@ -264,6 +264,17 @@
<dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.isPayAdvance" /> <dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.isPayAdvance" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" :label="$t('用途')">
<template slot-scope="{row}">
<div v-if="row.usageIds">
<div v-for="(item,index) in row.usageIds.split(',')">
<dict-tag :type="DICT_TYPE.OREER_ITEM_USAGE" :value="item" />
<span v-if="(index+1)!=row.usageIds.split(',').length">,</span>
</div>
</div>
<div v-else></div>
</template>
</el-table-column>
<el-table-column prop="" :label="$t('成交单价')" width="220px"> <el-table-column prop="" :label="$t('成交单价')" width="220px">
<template slot-scope="{row}"> <template slot-scope="{row}">
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
<!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> --> <!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> -->
<div class="contact"> <div class="contact">
<el-input v-model="form.consignorName" placeholder="" :disabled2="inWarehouse"/> <el-input v-model="form.consignorName" placeholder="" :disabled2="inWarehouse"/>
<img v-if="!updateChannel" src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignor'" /> <img v-if="!updateChannel" src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignor'" />
<img v-if="!updateChannel" src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='0'" /> <img v-if="!updateChannel" src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='0'" />
</div> </div>
</el-form-item> </el-form-item>
<!-- v1.7新增 --> <!-- v1.7新增 -->
...@@ -57,8 +57,8 @@ ...@@ -57,8 +57,8 @@
<!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> --> <!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> -->
<div class="contact"> <div class="contact">
<el-input v-model="form.consigneeName" placeholder="" :disabled2="inWarehouse"/> <el-input v-model="form.consigneeName" placeholder="" :disabled2="inWarehouse"/>
<img v-if="!updateChannel" src="@/assets/images/phonebook.png" class="phonebook" @click="contactChooseType='consignee'" /> <img v-if="!updateChannel" src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignee'" />
<img v-if="!updateChannel" src="@/assets/images/new_customer.png" class="phonebook" @click="quickCreateType='1'" /> <img v-if="!updateChannel" src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='1'" />
</div> </div>
</el-form-item> </el-form-item>
<!-- v1.7新增 --> <!-- v1.7新增 -->
......
...@@ -172,7 +172,10 @@ ...@@ -172,7 +172,10 @@
<router-link :to="{path: '/order/detail',query: {orderId: scope.row.orderId}}" class="link-type"> <router-link :to="{path: '/order/detail',query: {orderId: scope.row.orderId}}" class="link-type">
<span>{{ scope.row.orderNo }}</span> <span>{{ scope.row.orderNo }}</span>
</router-link> </router-link>
<span>{{specialNeedTag(scope.row.specialNeed)}}</span> <div style="display: flex;flex-wrap: wrap;" v-if="scope.row.specialNeed">
<el-button size="mini" style="margin-left: 20px" type="danger" circle v-for="(item,index) in specialRendering(scope.row.specialNeed)" :key="index">{{item.symbol}}</el-button>
</div>
<!-- <span>{{specialNeedTag(scope.row.specialNeed)}}</span>-->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('唛头')" align="center" > <el-table-column :label="$t('唛头')" align="center" >
...@@ -420,6 +423,19 @@ export default { ...@@ -420,6 +423,19 @@ export default {
this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载')) this.$message.success(this.$t('已加入导出队列,请稍后在下载日志中下载'))
}) })
}, },
specialRendering(val){
console.log('val', val)
if(val !== undefined){
let i = val.split(',')
return this.getDictDatas(this.DICT_TYPE.ORDER_SPECIAL_NEEDS).filter(e => {
return i.indexOf(e.value) > -1
}).map(item => {
// 打字开头的用最后一个字,否则取第一个字
item.symbol = item.label[0] == '' ? item.label[item.label.length-1]: item.label[0]
return item
})
}
},
} }
} }
</script> </script>
......
...@@ -268,7 +268,8 @@ ...@@ -268,7 +268,8 @@
'ecw:order:reduce', 'ecw:order:reduce',
'ecw:order:commission', 'ecw:order:commission',
'ecw:order:heavy', 'ecw:order:heavy',
'ecw:order:bulky' 'ecw:order:bulky',
'ecw:order:setCanNotShipment'
]" > ]" >
<el-button type="text">{{$t('操作')}}</el-button> <el-button type="text">{{$t('操作')}}</el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
...@@ -370,6 +371,11 @@ ...@@ -370,6 +371,11 @@
)"> )">
<el-dropdown-item @click.native="handleUpdate(scope.row, true)" v-hasPermi="['ecw:order:update_channel']">{{$t('变更出货渠道')}}</el-dropdown-item> <el-dropdown-item @click.native="handleUpdate(scope.row, true)" v-hasPermi="['ecw:order:update_channel']">{{$t('变更出货渠道')}}</el-dropdown-item>
</template> </template>
<!--不可出-->
<template v-if="include(scope.row.airShipment, [2,3,4])">
<el-dropdown-item @click.native="setCanNotShipment(scope.row)" v-hasPermi="['ecw:order:setCanNotShipment']">{{$t('不可出')}}</el-dropdown-item>
</template>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
...@@ -550,7 +556,7 @@ import { ...@@ -550,7 +556,7 @@ import {
exportCustomsDatas, exportCustomsDatas,
exportShippingDatas, exportShippingDatas,
exportShipFee, exportShipFee,
exportUnload, splitCancelApply, orderSplitRevoke, setCanShipment exportUnload, splitCancelApply, orderSplitRevoke, setCanShipment, setCanNotShipment
} from "@/api/ecw/order"; } from "@/api/ecw/order";
/* import { getDictDatas, DICT_TYPE } from '@/utils/dict'; */ /* import { getDictDatas, DICT_TYPE } from '@/utils/dict'; */
import PrintTag from './components/PrintTag' import PrintTag from './components/PrintTag'
...@@ -992,6 +998,14 @@ export default { ...@@ -992,6 +998,14 @@ export default {
return false return false
} }
return true return true
},
// 设置空运订单不可出
async setCanNotShipment(order){
await this.$confirm(this.$t("确定设置订单{orderNo}不可出么?", {orderNo: order.orderNo}))
setCanNotShipment(order.orderId).then(res => {
this.$message(this.$t('操作成功'))
this.getList()
})
} }
} }
}; };
......
...@@ -363,6 +363,7 @@ export default { ...@@ -363,6 +363,7 @@ export default {
}, },
activated(){ activated(){
this.getList() this.getList()
this.$store.dispatch('getBadgeData')
}, },
created() { created() {
this.getList(); this.getList();
...@@ -371,6 +372,8 @@ export default { ...@@ -371,6 +372,8 @@ export default {
getCurrencyPage(this.params).then(res => this.currencyList = res.data.list) getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
getChannelList().then(res => this.channelList = res.data) getChannelList().then(res => this.channelList = res.data)
this.$store.dispatch('getBadgeData')
}, },
methods: { methods: {
/** 查询列表 */ /** 查询列表 */
......
...@@ -114,7 +114,15 @@ ...@@ -114,7 +114,15 @@
</el-row> </el-row>
<el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'||orderExceptionData.orderExceptionType!='goods_add_exception'"> <el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'||orderExceptionData.orderExceptionType!='goods_add_exception'">
<el-form-item :label="$t('收费参数')+':'"> <el-form-item :label="$t('收费参数')+':'">
<span>{{orderData.sumNum||0}}{{$t('')}} {{orderData.wvolume||0}}m³ {{orderData.vweight||0}}Kg {{orderData.sumQuantity||0}}{{$t('')}}</span> <div v-if="shopData">
{{$t('{num}箱 {volume}m³ {weight}kg {quantity}', {
num: shopData.num || 0,
volume: shopData.wvolume || 0,
weight: shopData.vweight || 0,
quantity: shopData.quantity || 0
})}}
</div>
<span v-else>{{orderData.sumNum||0}}{{$t('')}} {{orderData.wvolume||0}}m³ {{orderData.vweight||0}}Kg {{orderData.warehouseInInfoVO ? orderData.warehouseInInfoVO.quantityAll : orderData.sumQuantity}}{{$t('')}}</span>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
...@@ -1196,9 +1204,13 @@ ...@@ -1196,9 +1204,13 @@
} }
} }
if((this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception')||this.orderExceptionData.orderExceptionType=='line_loop_exception'){ if((this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception')||this.orderExceptionData.orderExceptionType=='line_loop_exception'){
this.handlerParams.orderItemVOList = this.orderData.orderItemVOList if(this.orderExceptionData.orderExceptionType=='line_loop_exception'){
this.handlerParams.orderItemVOList = this.loopOrderItem
}else{
this.handlerParams.orderItemVOList = this.orderData.orderItemVOList
}
this.handlerParams.channelPriceList = [] this.handlerParams.channelPriceList = []
this.orderData.orderItemVOList.map(v=>{ this.handlerParams.orderItemVOList.map(v=>{
var listItem = { var listItem = {
orderId:v.orderId, orderId:v.orderId,
orderItemId:v.orderItemId, orderItemId:v.orderItemId,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<el-dialog <el-dialog
:title="title + ' - ' + warehousing.orderNo" :title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible" :visible.sync="visible"
width="1280px" width="90vw"
> >
<el-form ref="form" :model="form" :rules="formRules" label-width="80px"> <el-form ref="form" :model="form" :rules="formRules" label-width="80px">
<el-descriptions border :column="2"> <el-descriptions border :column="2">
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="长(cm)"> <el-table-column label="长(cm)" width="110px">
<template v-slot:header> <template v-slot:header>
<span>{{ $t('') }}</span>(cm) <span>{{ $t('') }}</span>(cm)
</template> </template>
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="宽(cm)"> <el-table-column label="宽(cm)" width="110px">
<template v-slot:header> <template v-slot:header>
<span>{{ $t('') }}</span>(cm) <span>{{ $t('') }}</span>(cm)
</template> </template>
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="高(cm)"> <el-table-column label="高(cm)" width="110px">
<template v-slot:header> <template v-slot:header>
<span>{{ $t('') }}</span>(cm) <span>{{ $t('') }}</span>(cm)
</template> </template>
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="体积(m³)"> <el-table-column label="体积(m³)" width="110px">
<template v-slot:header> <template v-slot:header>
<span style="color: red">*</span> <span>{{ $t('体积') }}</span>(m³) <span style="color: red">*</span> <span>{{ $t('体积') }}</span>(m³)
</template> </template>
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="重量(Kg)"> <el-table-column label="重量(Kg)" width="110px">
<template v-slot:header> <template v-slot:header>
<span style="color: red">*</span> <span>{{ $t('重量') }}</span>(Kg) <span style="color: red">*</span> <span>{{ $t('重量') }}</span>(Kg)
</template> </template>
...@@ -160,7 +160,7 @@ ...@@ -160,7 +160,7 @@
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('快递单号')"> <el-table-column :label="$t('快递单号')" width="150px">
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item> <el-form-item>
<el-input :disabled="$index < protectRowCount" v-model="form.table[$index].expressNo" placeholder=""></el-input> <el-input :disabled="$index < protectRowCount" v-model="form.table[$index].expressNo" placeholder=""></el-input>
...@@ -179,8 +179,16 @@ ...@@ -179,8 +179,16 @@
:is-editing="edit"></warehouse-area-select> :is-editing="edit"></warehouse-area-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('备注')">
<template v-slot="{r,c,$index}">
<el-form-item>
<el-input v-model="form.table[$index].remark" type="textarea" show-word-limit maxlength="100" placeholder=""></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('操作')"> <el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}"> <template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" />
<el-popconfirm <el-popconfirm
v-if="$index >= protectRowCount" v-if="$index >= protectRowCount"
title="确定要删除该行记录吗?" title="确定要删除该行记录吗?"
...@@ -214,11 +222,13 @@ import {finishPacked, orderWarehouseIn, orderWarehouseInUpdateApply} from "@/api ...@@ -214,11 +222,13 @@ import {finishPacked, orderWarehouseIn, orderWarehouseInUpdateApply} from "@/api
import {getProductAttrList} from "@/api/ecw/productAttr" import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType" import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product" import {addProduct} from "@/api/ecw/product"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue";
export default { export default {
name: "Package", name: "Package",
components: { components: {
WarehouseRecordDetail,
ProductSelector, ProductSelector,
WarehouseAreaSelect, WarehouseAreaSelect,
WorkFlow WorkFlow
...@@ -497,12 +507,31 @@ export default { ...@@ -497,12 +507,31 @@ export default {
if (!valid1) { if (!valid1) {
return return
} }
// 复制数据副本,避免修改格式后原数据被影响
const table = JSON.parse(JSON.stringify(this.form.table))
table.forEach(({orderWarehouseInDetailsVOList}) => {
})
// 首次入仓、入仓补充 // 首次入仓、入仓补充
return finishPacked({ return finishPacked({
brand: this.form.brand, brand: this.form.brand,
orderId: this.warehousing.orderId, orderId: this.warehousing.orderId,
orderItemId: this.warehousing.orderItemId, orderItemId: this.warehousing.orderItemId,
orderWarehouseInItemDtoList: this.form.table.map(e => { orderWarehouseInItemDtoList: table.map(e => {
if(!e.orderWarehouseInDetailsVOList){
e.orderWarehouseInDetailsVOList = []
}
e.orderWarehouseInDetailsVOList = e.orderWarehouseInDetailsVOList.map(item => {
if(Array.isArray(item.prodAttrIds)){
item.prodAttrIds = item.prodAttrIds.join(',')
}
if(Array.isArray(item.usageIds)){
item.usageIds = item.usageIds.join(',')
}
return item
})
return { return {
...e, ...e,
boxGauge: e.boxGauge1 + '*' + e.boxGauge2 + '*' + e.boxGauge3, boxGauge: e.boxGauge1 + '*' + e.boxGauge2 + '*' + e.boxGauge3,
......
...@@ -179,7 +179,8 @@ ...@@ -179,7 +179,8 @@
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width actions" width="150px"> <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width actions" width="150px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="$router.push('stocking?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:stockingList:stocking']">{{$t('备货')}}</el-button> <el-button type="text" @click="setCanNotShipment(scope.row)" v-hasPermi="['ecw:order:setCanNotShipment']">{{$t('不可出')}}</el-button>
<el-button type="text" @click="$router.push('stocking?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:stockingList:stocking']">{{$t('备货')}}</el-button>
<el-button type="text" @click="printTagOrderId=scope.row.orderId" v-hasPermi="['ecw:order:stockingList:print_tag']">{{$t('打印标签')}}</el-button> <el-button type="text" @click="printTagOrderId=scope.row.orderId" v-hasPermi="['ecw:order:stockingList:print_tag']">{{$t('打印标签')}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
...@@ -204,7 +205,7 @@ import { ...@@ -204,7 +205,7 @@ import {
exportReadyStock, exportReadyStock,
canShipmentPage, canShipmentPage,
orderSpecialNeed, orderSpecialNeed,
exportCanShipment exportCanShipment, setNotCanShipment, setCanNotShipment
} from "@/api/ecw/order"; } from "@/api/ecw/order";
import PrintTag from './components/PrintTag' import PrintTag from './components/PrintTag'
import PrintWarehouseReceipt from './components/PrintWarehouseReceipt' import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
...@@ -391,6 +392,14 @@ export default { ...@@ -391,6 +392,14 @@ export default {
this.getList() this.getList()
}) })
}, },
// 设置空运订单不可出
async setCanNotShipment(order){
await this.$confirm(this.$t("确定设置订单{orderNo}不可出么?", {orderNo: order.orderNo}))
setCanNotShipment(order.orderId).then(res => {
this.$message(this.$t('操作成功'))
this.getList()
})
}
} }
}; };
</script> </script>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-dialog <el-dialog
:title="title + ' - ' + warehousing.orderNo" :title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible" :visible.sync="visible"
width="1280px" width="100%"
> >
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card">
<el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first"> <el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first">
...@@ -185,8 +185,16 @@ ...@@ -185,8 +185,16 @@
:is-editing="edit"></warehouse-area-select> :is-editing="edit"></warehouse-area-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('备注')">
<template v-slot="{r,c,$index}">
<el-form-item>
<el-input v-model="form.table[$index].remark" type="textarea" show-word-limit maxlength="100" placeholder="" :disabled="$index < protectRowCount"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('操作')"> <el-table-column :label="$t('操作')">
<template v-slot="{ row, column, $index}"> <template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" :readonly="$index < protectRowCount" />
<el-popconfirm <el-popconfirm
v-if="$index >= protectRowCount" v-if="$index >= protectRowCount"
title="确定要删除该行入仓记录吗?" title="确定要删除该行入仓记录吗?"
...@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr" ...@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType" import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product" import {addProduct} from "@/api/ecw/product"
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue" import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue"
export default { export default {
name: "Warehouse", name: "Warehouse",
components: { components: {
WarehouseRecordDetail,
ImageAndVideoUpload, ImageAndVideoUpload,
ProductSelector, ProductSelector,
WarehouseAreaSelect, WarehouseAreaSelect,
......
<template>
<div style="display: inline-block">
<el-button size="mini" type="primary" style="margin-right: 10px" @click="handleOpen">{{ title }}</el-button>
<el-dialog
append-to-body
:title="title"
:visible.sync="dialogVisible"
width="1024px"
:before-close="handleClose">
<el-form v-if="dialogVisible">
<WarehouseRecordDetailItem
v-for="(item, index) in dataList"
:key="index" v-model="dataList[index]"
:index="index" :attr-list="attrList"
@handle-delete="handleDelete(index)"
:readonly="readonly"
/>
</el-form>
<el-button v-show="!readonly" type="primary" size="mini" @click="handleAddItem">添加一条明细</el-button>
<span v-show="!readonly" slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleSave">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import ProductSelector from "@/components/ProductSelector/index.vue";
import WarehouseRecordDetailItem from "@/views/ecw/order/warehousing/components/WarehouseRecordDetailItem.vue";
import {getProductAttrList} from "@/api/ecw/productAttr";
/**
* 入仓明细弹窗
*/
export default {
name: 'WarehouseRecordDetail',
components: {WarehouseRecordDetailItem, ProductSelector},
props: {
value: {
type: Array,
default: () => []
},
readonly: {
type: Boolean,
default: false
}
},
data() {
return {
dialogVisible: false,
dataList: [],
// 特性列表
attrList: []
};
},
mounted() {
this.getAttrList()
},
methods: {
init() {
if (!this.value || this.value.length === 0) {
this.dataList = [{
"boxGauge": "",
"brand": undefined,
"cartonsNum": undefined,
"createTime": "",
"expressNo": "",
"prodAttrIds": [],
"prodId": undefined,
"quantityAll": undefined,
"specificationType": undefined,
"unit": "",
"usageIds": "",
"volume": undefined,
"weight": undefined
}]
} else {
this.dataList = JSON.parse(JSON.stringify(this.value))
}
},
/** 获取产品属性列表 */
getAttrList() {
getProductAttrList().then(response => {
this.attrList = response.data;
})
},
handleAddItem() {
this.dataList.push({
"boxGauge": "",
"brand": undefined,
"cartonsNum": undefined,
"createTime": "",
"expressNo": "",
"prodAttrIds": [],
"prodId": undefined,
"quantityAll": undefined,
"specificationType": undefined,
"unit": "",
"usageIds": "",
"volume": undefined,
"weight": undefined
})
},
handleDelete(index) {
this.dataList.splice(index, 1)
},
handleOpen() {
this.init()
this.dialogVisible = true
},
handleClose(done) {
if (this.readonly) {
return done()
}
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
handleSave() {
this.$emit('input', this.dataList)
this.dialogVisible = false
}
},
computed: {
title() {
if (this.readonly) {
return '查看箱明细'
}
return !this.value || this.value.length === 0 ? '添加箱明细' : '编辑箱明细'
}
}
}
</script>
<style scoped lang="scss">
</style>
<template>
<el-card style="margin-bottom: 10px">
<div slot="header">
<span>序号{{ index + 1 }}</span>
<el-link v-show="!readonly" type="danger" @click="handleDelete" style="float: right">删除</el-link>
</div>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('中文品名')">
<product-selector v-model="value.prodId" determined protect-once :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('品牌')">
<el-select
v-model="value.brand"
:placeholder="$t('可修改')"
filterable
remote
:remote-method="getProductBrandPage"
:disabled="readonly"
clearable>
<el-option
v-for="item in brandList"
:key="item.id"
:label="item.titleZh"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item :label="$t('商品特性')">
<el-checkbox-group v-model="prodAttrIds">
<el-checkbox v-for="item in attrList" :key="item.id" :label="item.id" :disabled="readonly">{{ item.attrName }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('用途')">
<el-checkbox-group v-model="usageIds">
<el-checkbox v-for="item in getDictDatas(DICT_TYPE.WAREHOUSING_RECORD_DETAIL_USAGE)" :key="item.value" :label="item.value" :disabled="readonly">{{ $l(item, 'label') }}</el-checkbox>
</el-checkbox-group>
<!-- <dict-selector
v-model="usageIds"
:type="DICT_TYPE.WAREHOUSING_RECORD_DETAIL_USAGE"
multiple
form-type="checkbox"
:disabled="readonly"
></dict-selector>-->
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4">
<el-form-item :label="$t('长')">
<el-input v-model="boxGauge1" :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('宽')">
<el-input v-model="boxGauge2" :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('高')">
<el-input v-model="boxGauge3" :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('重量')">
<el-input v-model="value.weight" :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('体积')">
<el-input v-model="value.volume" :disabled="readonly" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="4">
<el-form-item :label="$t('快递单号')">
<el-input v-model="value.expressNo" :disabled="readonly" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('包装类型')">
<dict-selector :type="DICT_TYPE.ECW_PACKAGING_TYPE" v-model="value.unit" :disabled="readonly"></dict-selector>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item :label="$t('数量')">
<el-input v-model="value.quantityAll" :disabled="readonly" />
</el-form-item>
</el-col>
</el-row>
</el-card>
</template>
<script>
import ProductSelector from "@/components/ProductSelector/index.vue"
import { getProductBrank, getProductBrankPage } from '@/api/ecw/productBrank'
import {getProductAttrList} from "@/api/ecw/productAttr"
import {DICT_TYPE, getDictDatas} from '@/utils/dict'
export default {
name: "WarehouseRecordDetailItem",
computed: {
DICT_TYPE() {
return DICT_TYPE
}
},
components: {ProductSelector},
props: {
value: {
type: Object,
default: () => {}
},
index: {
type: Number,
default: 0
},
readonly: {
type: Boolean,
default: false
},
// 特性列表
attrList: {
type: Array,
default: () => []
}
},
data() {
return {
brandList: [],
prodAttrIds: [],
usageIds: [],
boxGauge1: '',
boxGauge2: '',
boxGauge3: '',
}
},
async mounted() {
// 品牌回显
if (this.value.brand) {
await getProductBrank(this.value.brand).then(r => {
this.brandList = [r.data]
})
}
if (typeof this.value.prodAttrIds === 'string') {
this.prodAttrIds = this.value.prodAttrIds.split(',').map(e => +e) || []
}
if (this.value.usageIds) {
console.log('this.value.usageIds',this.value.usageIds)
await this.$nextTick()
this.usageIds = this.value.usageIds.split(',') || []
}
if (this.value.boxGauge) {
const boxGauge = this.value.boxGauge.split('*')
if (boxGauge?.length === 3) {
this.boxGauge1 = boxGauge[0]
this.boxGauge2 = boxGauge[1]
this.boxGauge3 = boxGauge[2]
}
}
},
methods: {
getDictDatas,
/** 获取产品属性列表 */
getAttrList() {
getProductAttrList().then(response => {
this.attrList = response.data;
})
},
getProductBrandPage(titleZh = undefined) {
getProductBrankPage({pageSize: 20, titleZh}).then(r => {
this.brandList = r.data.list
})
},
handleDelete() {
this.$emit('handle-delete')
}
},
watch: {
prodAttrIds(val) {
this.value.prodAttrIds = val.join(',')
},
usageIds(val) {
console.log('val', val)
this.$nextTick(() => {
this.value.usageIds = val.join(',')
})
},
boxGauge1() {
this.value.boxGauge = this.boxGauge1 + '*' + this.boxGauge2 + '*' + this.boxGauge3
},
boxGauge2() {
this.value.boxGauge = this.boxGauge1 + '*' + this.boxGauge2 + '*' + this.boxGauge3
},
boxGauge3() {
this.value.boxGauge = this.boxGauge1 + '*' + this.boxGauge2 + '*' + this.boxGauge3
}
}
}
</script>
<style scoped lang="scss">
</style>
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<span style="margin-right:10px">{{(orderData.sumWeight||0)+'kg '}}</span> <span style="margin-right:10px">{{(orderData.sumWeight||0)+'kg '}}</span>
<span>{{(orderData.sumQuantity||0) +$t('')}}</span> <span>{{(orderData.sumQuantity||0) +$t('')}}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('收费参数')"> <el-descriptions-item :label="$t('收费数据')">
<span style="margin-right:10px">{{(orderData.sumNum||0)+$t('')}}</span> <span style="margin-right:10px">{{(orderData.sumNum||0)+$t('')}}</span>
<span style="margin-right:10px">{{(orderData.wvolume||0)+''}}</span> <span style="margin-right:10px">{{(orderData.wvolume||0)+''}}</span>
<span style="margin-right:10px">{{(orderData.vweight||0)+'kg '}}</span> <span style="margin-right:10px">{{(orderData.vweight||0)+'kg '}}</span>
......
...@@ -576,7 +576,7 @@ export default { ...@@ -576,7 +576,7 @@ export default {
let res = await getProductPrice(this.$route.query.id) let res = await getProductPrice(this.$route.query.id)
this.$set(this, 'form', res.data) this.$set(this, 'form', res.data)
// 显示渠道 // 显示渠道
if(this.readonly && this.form.shippingChannelId){ if(this.form.shippingChannelId){
getChannel(this.form.shippingChannelId).then(res => { getChannel(this.form.shippingChannelId).then(res => {
this.channel = res.data this.channel = res.data
}) })
......
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