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

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

parents 71ee734a 558ab0af
......@@ -361,3 +361,18 @@ export function updateAllOrderClearance(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) {
});
}
/**
* 批量到仓
*
* @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) {
});
}
/**
* 单个到仓
*
* @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) {
});
}
/**
* 一键到仓
*
* @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(){
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 {
},
computed:{
badge(){
return this.$store.getters.badgeData[this.item.meta.badgeField]
return this.$store.getters.badgeData[this.item.meta?.badgeField]
}
},
methods: {
......
......@@ -55,11 +55,7 @@ export default {
}
},
created() {
// 查询待出订单数量 waitingShipment
getWaitingShipmentCount().then(res => {
console.log('getWaitingShipmentCount', res.data)
this.$store.commit('SET_BADGE_DATA', { waitingShipment: res.data}, )
})
this.$store.dispatch('getBadgeData')
}
};
</script>
......@@ -2,6 +2,7 @@ import {login, logout, getInfo, socialLogin, socialLogin2} from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import {getNotReadInternalMessageTotal,} from '@/api/system/internalMessage'
import {taskTodoCount, userMark} from "@/api/bpm/task";
import {getWaitingShipmentCount} from "@/api/ecw/order";
const user = {
state: {
......@@ -202,6 +203,14 @@ const user = {
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'
const TokenKey = 'Admin-Token'
const TokenKey = 'Jd-Admin-Token'
export function getToken() {
return Cookies.get(TokenKey)
......
......@@ -193,7 +193,9 @@ export const DICT_TYPE = {
MANUAL_EXCEPTION_TYPE:'manual_exception_type',
APPLY_STATUS:'apply_status',//特价申请审核状态
WAREHOUSING_SPECIFICATION_TYPE: 'warehousing_specification_type',
WAREHOUSING_RECORD_DETAIL_USAGE: 'warehousing_record_detail_usage', // 入仓规格类型
ECW_AUTH_TYPE:'auth_type',//品牌授权
OREER_ITEM_USAGE:'order_item_usage',//用途
NEED_ORDER_INQUIRY: 'need_order_inquiry', // 是否需要単询
EXCEPTION_SELECT_FILED:'exception_select_filed',
......
......@@ -206,6 +206,7 @@ import {
dealCustomsSplitNotify,
exportPreloadGoodsList, downloadReceivableList, getAirNoticeList, zipDownload, downloadAirReceivableList
} from '@/api/ecw/box'
import { getLineInfoList } from '@/api/ecw/boxAir'
import { getChannelList } from '@/api/ecw/channel'
import { getWarehouseList } from '@/api/ecw/warehouse'
import costForm from './costForm.vue'
......@@ -393,6 +394,14 @@ export default {
getboxPage(params).then((response) => {
this.list = response.data.list
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
})
},
......
......@@ -87,7 +87,7 @@
</div>
<div>{{$t('入仓时间')}}:{{formatDate(item.rucangTime)}}</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>
</div>
</el-row>
......@@ -123,7 +123,7 @@
width="120">{{ $t('无返回') }}</el-table-column> -->
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="100">
<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>
</el-table-column>
</el-table>
......@@ -287,6 +287,7 @@ export default {
remove(params).then((res) => {
serviceMsg(res, this).then(() => {
this.getSecGoods();
this.getPreLoad();
});
}).catch((res) => {
if (res.code === 666) {
......@@ -300,6 +301,7 @@ export default {
remove({ ...params, deleteType: 2 }).then((res) => {
serviceMsg(res, this).then(() => {
this.getSecGoods();
this.getPreLoad();
});
});
})
......@@ -308,6 +310,7 @@ export default {
remove({ ...params, deleteType: 1 }).then((res) => {
serviceMsg(res, this).then(() => {
this.getSecGoods();
this.getPreLoad();
});
});
}
......
......@@ -46,6 +46,18 @@
<el-input v-model="queryParams.weightRatioMin" :placeholder="$t('请输入 小')" clearable />
</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-checkbox v-model="queryParams.airShipment" :true-label="4" @change="changeAirShipment">{{$t('已完成备货')}}</el-checkbox>
<!-- <el-radio v-model="queryParams.airShipment" :label="4">{{$t('已完成备货')}}</el-radio> -->
......@@ -157,7 +169,11 @@
{{$l(row,'prodTitle')}}
</template>
</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">
<template slot-scope="scope">
<p v-if="scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
......@@ -270,7 +286,14 @@
<dict-tag :type="DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL" :value="row.feeType" />{{ $t('') }}
</template>
</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">
<template slot-scope="scope">
<p v-if="scope.row.warehouseInInfoVO && scope.row.warehouseInInfoVO.volume">{{getTotlContent(scope.row.warehouseInInfoVO,['volume'])}}</p>
......@@ -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() {
// 查询待分拣
......@@ -497,6 +531,9 @@ export default {
methods: {
formatDate,
getTotlContent,
selectChannel(){
this.$set(this.queryParams,'attrId',null)
},
/* 获取城市 */
importCityName(id) {
var arr = this.$attrs.warehouseList.filter((item) => item.id == id);
......
......@@ -190,7 +190,7 @@ export default {
list.push({
...oItem,
warehouseInInfo,
multiSpecification: item.multiSpecification,
multiSpecification: oItem.multiSpecification,
positionNo: oItem.positionNo,
tallyStatus: item.tallyStatus,
tallyTime: item.tallyTime,
......
......@@ -82,7 +82,7 @@
<el-table-column :label="$t('重量')" align="center" prop="weight" />
<el-table-column :label="$t('订单状态')" align="center" prop="">
<template slot-scope="scope">
{{getOrderError(scope.row, 'orderStatus')}}
{{scope.row.statusMsg}}
</template>
</el-table-column>
<el-table-column :label="$t('异常状态')" align="center" prop="">
......@@ -151,12 +151,12 @@
import unloadingError from "./unloadingError.vue";
import {
loadGoodsList,
batchUnload,
allUnload,
airBatchUnload,
airAllUnload,
approvalCreate,
approvalCancel,
getSectionList,
singleUnload,
airSingleUnload,
boxGoodsDetail
} from "@/api/ecw/boxSea";
import { serviceMsg, getTotlContent, toReviewDetail } from "../../utils";
......@@ -254,7 +254,7 @@ export default {
this.$message.error(this.$t("请输入箱号标签"));
return;
}
singleUnload({
airSingleUnload({
orderNumCode: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id,
}).then((res) => {
......@@ -274,7 +274,7 @@ export default {
this.$message.error(this.$t("请选择到仓时间"));
return;
}
batchUnload({
airBatchUnload({
orderNo: this.labelNo,
shipmentId: this.$attrs.shipmentObj.id,
unloadTime: this.ulWarehouseTime
......@@ -295,7 +295,7 @@ export default {
type: "warning",
})
.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) => {
this.getLoadGoodsList();
});
......@@ -313,7 +313,7 @@ export default {
copyUserId: this.selectedUsers,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.cancel();
this.cancel("submit");
});
});
}else{
......
......@@ -184,6 +184,10 @@ export default {
case "cusDeclaration":
this.$set(this.dialogConfig, "width", "700px");
break;
// 清关
case "cusClearance":
this.$set(this.dialogConfig, "width", "700px");
break;
// AGENT
case "agent":
this.$set(this.dialogConfig, "title", this.$t("代理商设置"));
......@@ -216,13 +220,14 @@ export default {
break;
// 卸柜
case "unloading":
this.$set(this.dialogConfig, "fullscreen", true);
// 卸柜反审
const unStatus = this.shipmentObj[node.keyName];
if ([186].includes(unStatus)) {
this.currentComponent = `reviewWidget`;
this.$set(this.dialogConfig, "width", "700px");
this.$set(this.dialogConfig, "title", this.$t("到仓反审"));
}else{
this.$set(this.dialogConfig, "fullscreen", true);
}
break;
}
......
......@@ -297,8 +297,8 @@ function airBaseData() {
keyName: "toWarehouseStatus",
status: {
start: [181],
wait: [182, 183, 184, 185],
end: [186],
wait: [182, 183, 184],
end: [185, 186],
},
},
],
......
......@@ -8,7 +8,7 @@
<el-form-item :label="$t('客户名称')" prop="customerId">
<div style="display: flex">
<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>
<!-- <el-select-->
<!-- v-model="customerForm.name"-->
......
......@@ -19,12 +19,6 @@
</el-select> -->
<dict-selector :type="DICT_TYPE.CUSTOMER_ESOURCE_TYPE" v-model="queryParams.customerType" :placeholder="$t('请选择资源类型')" clearable ></dict-selector>
</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-select clearable v-model="queryParams.customerService" clearable size="small">
<el-option :label="$t('下单时间')" value="createTime"/>
......@@ -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-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="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>
......@@ -129,6 +148,7 @@
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default {
name: "EcwDepttargetAllachievement",
......@@ -204,7 +224,8 @@
sumVolume:0,
sumNum:0,
},
myAchievementData:{}
myAchievementData:{},
warehouseList:[]
};
},
computed: {
......@@ -218,7 +239,14 @@
}
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() {
this.getChannelList();
......@@ -230,6 +258,7 @@
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
getWarehouseList().then(res => this.warehouseList = res.data)
},
methods: {
getChannelList() {
......
......@@ -164,7 +164,7 @@
import {listDept, listSimpleDepts} from "@/api/system/dept";
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import { parseTime } from '@/utils/ruoyi';
import { parseTime } from '@/utils/ruoyi';
import Template from "@/views/cms/template/index.vue";
export default {
......@@ -234,7 +234,8 @@ import { parseTime } from '@/utils/ruoyi';
cubeNum: [{required: true, message: this.$t("立方数不能为空"), trigger: "blur"}],
startTime: [{required: true, message: this.$t("起始时间不能为空"), trigger: "change"}],
endTime: [{required: true, message: this.$t("截止时间不能为空"), trigger: "change"}],
}
},
};
},
computed: {
......
......@@ -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-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="resetQuery">{{$t('重置')}}</el-button>
<!-- <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
......@@ -125,6 +150,7 @@
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default {
name: "EcwDepttargetMyachievement",
......@@ -200,7 +226,8 @@
sumVolume:0,
sumNum:0,
},
myAchievementData:{}
myAchievementData:{},
warehouseList:[]
};
},
computed: {
......@@ -214,7 +241,14 @@
}
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() {
this.getChannelList();
......
......@@ -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-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="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
>{{$t('导出')}}</el-button> -->
......@@ -125,6 +150,7 @@
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
export default {
name: "EcwDepttargetMydeptachievement",
......@@ -200,7 +226,8 @@
sumVolume:0,
sumNum:0,
},
myAchievementData:{}
myAchievementData:{},
warehouseList:[]
};
},
computed: {
......@@ -214,7 +241,14 @@
}
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() {
this.getChannelList();
......
<template>
<div>
<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.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('创建时间')">
......@@ -14,11 +14,8 @@
<div v-for="itemAmount in collectionAmount" :key="itemAmount.currencyNameZh">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div>
</template>
</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 >
<template slot="label">
{{ $t('实收已核销总金额') }}
......@@ -29,7 +26,7 @@
</template>
<div v-else>
<div v-for="(amount, currency) in writeOffTotal" :key="currency">
{{amount}}{{getCurrencyLabel(currency)}}
{{getCurrencyLabel(currency)}}: {{amount}}
</div>
</div>
</el-descriptions-item>
......@@ -49,8 +46,56 @@
</template>
{{ WriteOffProportion }}%
</el-descriptions-item>
<el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
</el-descriptions>
</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">
<el-button
size="mini"
......@@ -245,12 +290,19 @@ export default {
}
.app-container {
::v-deep .el-descriptions-item__label {
font-size:16px;
font-weight:600;
font-size:14px;
// font-weight:600;
}
::v-deep .el-descriptions-item__content {
font-size:16px;
font-weight:600;
font-size:14px;
// font-weight:600;
}
}
.card {
margin-top: 20px;
}
.card-title {
font-size: 18px;
font-weight: bold;
}
</style>
......@@ -141,9 +141,10 @@
<div>
{{$t('运费')}}{{row.oneSeaFreight}} {{currentcyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}
</div>
<div>
<div v-if="row.oneClearanceFreight">
{{$t('清关费')}}{{row.oneClearanceFreight}} {{currentcyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}
</div>
<div v-else>{{$t('清关费未报价')}}</div>
</template>
</template>
</el-table-column>
......
......@@ -22,8 +22,8 @@
<el-form-item :label="$t('发货人')" prop="consignorId" >
<div class="contact">
<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/images/new_customer.png" class="phonebook" @click="quickCreateType='0'" />
<img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignor'" />
<img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='0'" />
</div>
</el-form-item>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone">
......@@ -41,8 +41,8 @@
<el-form-item :label="$t('收货人')" prop="consigneeId">
<div class="contact">
<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/images/new_customer.png" class="phonebook" @click="quickCreateType='1'" />
<img src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignee'" />
<img src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='1'" />
</div>
</el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consigneePhone">
......
<template>
<div>
<!-- 订单获取入仓记录 -->
<el-dialog :title="title" visible :before-close="closeDialog" :close-on-click-modal="false" width="1200px">
<el-card style="margin-bottom:10px">
......@@ -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('备货状态')">{{airShipmentData[info.airShipment]}}</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-card>
<el-card style="margin-bottom:10px">
......@@ -23,7 +32,12 @@
</div>
<el-table v-if="orderWarehouseInContent" :data="orderWarehouseInContent">
<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">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE" :value="row.specificationType" />
......@@ -61,6 +75,11 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</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-card>
<el-card style="margin-bottom:10px">
......@@ -107,6 +126,11 @@
{{getLocationName(row.orderLocationBackVOList)}}
</template>
</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-card>
<el-card style="margin-bottom:10px">
......@@ -120,7 +144,20 @@
</el-descriptions>
</el-card>
<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>
</div>
</template>
<script>
import { getOrder, getOrderWarehouseIn } from '@/api/ecw/order'
......@@ -149,7 +186,9 @@ export default {
volume:0,
weight:0,
quantityAll:0
}
},
pictureUrls:[],
mvShow:false
}
},
computed:{
......@@ -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>
......
......@@ -264,6 +264,17 @@
<dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.isPayAdvance" />
</template>
</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">
<template slot-scope="{row}">
......
......@@ -26,8 +26,8 @@
<!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> -->
<div class="contact">
<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/images/new_customer.png" class="phonebook" @click="quickCreateType='0'" />
<img v-if="!updateChannel" src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignor'" />
<img v-if="!updateChannel" src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='0'" />
</div>
</el-form-item>
<!-- v1.7新增 -->
......@@ -57,8 +57,8 @@
<!-- <customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" type="1" /> -->
<div class="contact">
<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/images/new_customer.png" class="phonebook" @click="quickCreateType='1'" />
<img v-if="!updateChannel" src="@/assets/svg/contacts.svg" class="phonebook" @click="contactChooseType='consignee'" />
<img v-if="!updateChannel" src="@/assets/svg/contact_create.svg" class="phonebook" @click="quickCreateType='1'" />
</div>
</el-form-item>
<!-- v1.7新增 -->
......
......@@ -172,7 +172,10 @@
<router-link :to="{path: '/order/detail',query: {orderId: scope.row.orderId}}" class="link-type">
<span>{{ scope.row.orderNo }}</span>
</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>
</el-table-column>
<el-table-column :label="$t('唛头')" align="center" >
......@@ -420,6 +423,19 @@ export default {
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>
......
......@@ -268,7 +268,8 @@
'ecw:order:reduce',
'ecw:order:commission',
'ecw:order:heavy',
'ecw:order:bulky'
'ecw:order:bulky',
'ecw:order:setCanNotShipment'
]" >
<el-button type="text">{{$t('操作')}}</el-button>
<el-dropdown-menu slot="dropdown">
......@@ -370,6 +371,11 @@
)">
<el-dropdown-item @click.native="handleUpdate(scope.row, true)" v-hasPermi="['ecw:order:update_channel']">{{$t('变更出货渠道')}}</el-dropdown-item>
</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>
......@@ -550,7 +556,7 @@ import {
exportCustomsDatas,
exportShippingDatas,
exportShipFee,
exportUnload, splitCancelApply, orderSplitRevoke, setCanShipment
exportUnload, splitCancelApply, orderSplitRevoke, setCanShipment, setCanNotShipment
} from "@/api/ecw/order";
/* import { getDictDatas, DICT_TYPE } from '@/utils/dict'; */
import PrintTag from './components/PrintTag'
......@@ -992,6 +998,14 @@ export default {
return false
}
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 {
},
activated(){
this.getList()
this.$store.dispatch('getBadgeData')
},
created() {
this.getList();
......@@ -371,6 +372,8 @@ export default {
getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
getChannelList().then(res => this.channelList = res.data)
this.$store.dispatch('getBadgeData')
},
methods: {
/** 查询列表 */
......
......@@ -114,7 +114,15 @@
</el-row>
<el-row v-if="orderExceptionData.orderExceptionType=='order_pay_exception'||orderExceptionData.orderExceptionType!='goods_add_exception'">
<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-row>
<el-row>
......@@ -1196,9 +1204,13 @@
}
}
if((this.orderExceptionData.orderExceptionType=='not_shipping_channel_exception')||this.orderExceptionData.orderExceptionType=='line_loop_exception'){
if(this.orderExceptionData.orderExceptionType=='line_loop_exception'){
this.handlerParams.orderItemVOList = this.loopOrderItem
}else{
this.handlerParams.orderItemVOList = this.orderData.orderItemVOList
}
this.handlerParams.channelPriceList = []
this.orderData.orderItemVOList.map(v=>{
this.handlerParams.orderItemVOList.map(v=>{
var listItem = {
orderId:v.orderId,
orderItemId:v.orderItemId,
......
......@@ -2,7 +2,7 @@
<el-dialog
:title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible"
width="1280px"
width="90vw"
>
<el-form ref="form" :model="form" :rules="formRules" label-width="80px">
<el-descriptions border :column="2">
......@@ -101,7 +101,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="长(cm)">
<el-table-column label="长(cm)" width="110px">
<template v-slot:header>
<span>{{ $t('') }}</span>(cm)
</template>
......@@ -111,7 +111,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="宽(cm)">
<el-table-column label="宽(cm)" width="110px">
<template v-slot:header>
<span>{{ $t('') }}</span>(cm)
</template>
......@@ -121,7 +121,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="高(cm)">
<el-table-column label="高(cm)" width="110px">
<template v-slot:header>
<span>{{ $t('') }}</span>(cm)
</template>
......@@ -131,7 +131,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="体积(m³)">
<el-table-column label="体积(m³)" width="110px">
<template v-slot:header>
<span style="color: red">*</span> <span>{{ $t('体积') }}</span>(m³)
</template>
......@@ -141,7 +141,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="重量(Kg)">
<el-table-column label="重量(Kg)" width="110px">
<template v-slot:header>
<span style="color: red">*</span> <span>{{ $t('重量') }}</span>(Kg)
</template>
......@@ -160,7 +160,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('快递单号')">
<el-table-column :label="$t('快递单号')" width="150px">
<template v-slot="{r,c,$index}">
<el-form-item>
<el-input :disabled="$index < protectRowCount" v-model="form.table[$index].expressNo" placeholder=""></el-input>
......@@ -179,8 +179,16 @@
:is-editing="edit"></warehouse-area-select>
</template>
</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('操作')">
<template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" />
<el-popconfirm
v-if="$index >= protectRowCount"
title="确定要删除该行记录吗?"
......@@ -214,11 +222,13 @@ import {finishPacked, orderWarehouseIn, orderWarehouseInUpdateApply} from "@/api
import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue";
export default {
name: "Package",
components: {
WarehouseRecordDetail,
ProductSelector,
WarehouseAreaSelect,
WorkFlow
......@@ -497,12 +507,31 @@ export default {
if (!valid1) {
return
}
// 复制数据副本,避免修改格式后原数据被影响
const table = JSON.parse(JSON.stringify(this.form.table))
table.forEach(({orderWarehouseInDetailsVOList}) => {
})
// 首次入仓、入仓补充
return finishPacked({
brand: this.form.brand,
orderId: this.warehousing.orderId,
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 {
...e,
boxGauge: e.boxGauge1 + '*' + e.boxGauge2 + '*' + e.boxGauge3,
......
......@@ -179,6 +179,7 @@
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width actions" width="150px">
<template slot-scope="scope">
<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>
</template>
......@@ -204,7 +205,7 @@ import {
exportReadyStock,
canShipmentPage,
orderSpecialNeed,
exportCanShipment
exportCanShipment, setNotCanShipment, setCanNotShipment
} from "@/api/ecw/order";
import PrintTag from './components/PrintTag'
import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
......@@ -391,6 +392,14 @@ export default {
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>
......
......@@ -4,7 +4,7 @@
<el-dialog
:title="title + ' - ' + warehousing.orderNo"
:visible.sync="visible"
width="1280px"
width="100%"
>
<el-tabs v-model="activeName" type="card">
<el-tab-pane :label="edit ? $t('货物修改') : $t('货物入仓')" name="first">
......@@ -185,8 +185,16 @@
:is-editing="edit"></warehouse-area-select>
</template>
</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('操作')">
<template v-slot="{ row, column, $index}">
<WarehouseRecordDetail v-model="form.table[$index].orderWarehouseInDetailsVOList" :readonly="$index < protectRowCount" />
<el-popconfirm
v-if="$index >= protectRowCount"
title="确定要删除该行入仓记录吗?"
......@@ -505,11 +513,13 @@ import {getProductAttrList} from "@/api/ecw/productAttr"
import {getProductTypeList} from "@/api/ecw/productType"
import {addProduct} from "@/api/ecw/product"
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index.vue"
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue"
export default {
name: "Warehouse",
components: {
WarehouseRecordDetail,
ImageAndVideoUpload,
ProductSelector,
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 @@
<span style="margin-right:10px">{{(orderData.sumWeight||0)+'kg '}}</span>
<span>{{(orderData.sumQuantity||0) +$t('')}}</span>
</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.wvolume||0)+''}}</span>
<span style="margin-right:10px">{{(orderData.vweight||0)+'kg '}}</span>
......
......@@ -576,7 +576,7 @@ export default {
let res = await getProductPrice(this.$route.query.id)
this.$set(this, 'form', res.data)
// 显示渠道
if(this.readonly && this.form.shippingChannelId){
if(this.form.shippingChannelId){
getChannel(this.form.shippingChannelId).then(res => {
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