Commit 1df20f6a authored by 我在何方's avatar 我在何方
parents 50fe2f07 275abef7
......@@ -610,6 +610,20 @@ export function boxUpdate(data) {
});
}
/**
* 拆单审核
*
* @param {*} params
* @returns
*/
export function createApproval(data) {
return request({
url: "/ecw/box-approval/create",
method: "post",
data,
});
}
/***************************** 装柜 end **********************************/
/***************************** 卸柜 start **********************************/
......
......@@ -40,10 +40,6 @@ export default {
type: [Function, String],
default: String
},
/* forceString: {
type: Boolean,
default: true
}, */
defaultable: Boolean, // 是否默认选择第一个
disabled: Boolean,
/**
......@@ -80,11 +76,10 @@ export default {
},
watch:{
valueSync(val){
//this.$emit('input', this.forceString ? String(this.valueSync) : this.valueSync)
this.$emit('input', this.format(val))
this.$emit('input', val)
},
value(val){
this.setValueSync()
if(val != this.valueSync)this.setValueSync()
},
dictList(){
this.setDefault()
......@@ -96,7 +91,7 @@ export default {
},
methods:{
format(val){
if(val === null || val == undefined) return val
if(val === null || val == undefined || val == '') return val
let formatter = typeof this.formatter == 'function' ? this.formatter : FORMATTERS[this.formatter]
if(!formatter){
console.warn('格式器无效', this.formatter)
......@@ -108,7 +103,9 @@ export default {
this.valueSync = val
},
setValueSync(){
if(this.value === null || this.value === undefined || this.value === '') return
if(this.value === null || this.value === undefined || this.value === ''){
return this.valueSync = this.multiple ? [] : this.value
}
if(this.multiple){
let value = []
if(typeof this.value == 'string'){
......@@ -118,17 +115,13 @@ export default {
}else{
this.valueSync = this.format(this.value)
}
/* if(this.forceString && this.multiple){
this.valueSync = this.value.split(',')
}else this.valueSync = this.forceString ? String(this.value) : this.value */
},
getList(){
return this.getDictDatas(this.type)
},
setDefault(){
if(!this.defaultable) return
if(this.dictList.length && (this.valueSync === null || this.valueSync == '')){
if(this.dictList.length && (this.valueSync === null || this.valueSync == undefined || this.valueSync == '')){
this.valueSync = this.multiple ? [] : this.formattedList[0].value
}
}
......
......@@ -2,7 +2,7 @@
<el-select
v-model="index"
filterable
clearable
:clearable="clearable"
remote
reserve-keyword
placeholder="请选择"
......@@ -20,7 +20,8 @@ import {getCustomerContactsSelect, getCustomerContacts} from '@/api/ecw/customer
import {listSimpleUsers} from '@/api/system/user'
export default {
props:{
value: [String, Number]
value: [String, Number],
clearable: Boolean
},
data(){
return {
......@@ -36,7 +37,10 @@ export default {
this.$emit('change', val !== null ? this.list[val]: null)
},
value(val){
// this.init()
this.resetIndex()
},
list(){
this.resetIndex()
}
},
created(){
......@@ -46,6 +50,11 @@ export default {
// this.init()
},
methods:{
resetIndex(){
let index = this.list.findIndex(item => item.id == this.value)
if(index < 0) this.index = null
else this.index = index
}
/* init(){
console.log('初始化联系人选择', this.value)
if(!this.value) return
......
......@@ -317,8 +317,7 @@ export default {
};
</script>
<style>
<style scoped>
/** 处理中 */
.highlight-todo.djs-connection > .djs-visual > path {
stroke: #1890ff !important;
......
......@@ -37,7 +37,7 @@
</el-col>
</el-card>
<!-- 申请信息 -->
<el-card class="box-card" v-loading="processInstanceLoading">
<el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix">
<span class="el-icon-document">申请信息【{{ processInstance.name }}</span>
</div>
......@@ -59,7 +59,7 @@
</div>
</el-card>
<el-card class="box-card" v-loading="tasksLoad">
<el-card class="box-card mt-10" v-loading="tasksLoad">
<div slot="header" class="clearfix">
<span class="el-icon-picture-outline">审批记录</span>
</div>
......@@ -94,7 +94,7 @@
</el-card>
<!-- 高亮流程图 -->
<el-card class="box-card" v-loading="processInstanceLoading">
<el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix">
<span class="el-icon-picture-outline">流程图</span>
</div>
......@@ -594,7 +594,7 @@ export default {
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.my-process-designer {
height: calc(100vh - 200px);
}
......
......@@ -7,16 +7,16 @@
<!-- <el-select v-model="queryParams.transportType" placeholder="请选择运输方式" clearable size="small">
<el-option v-for="dict in transportTypes" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> -->
<dict-selector :type="DICT_TYPE.TRANSPORT_TYPE" v-model="queryParams.transportType" />
<dict-selector :type="DICT_TYPE.TRANSPORT_TYPE" v-model="queryParams.transportType" clearable/>
</el-form-item>
<el-form-item label="始发仓" prop="startWarehouseId">
<el-select v-model="queryParams.startWarehouseId" placeholder="请选择始发地">
<el-select v-model="queryParams.startWarehouseId" placeholder="请选择始发地" clearable>
<el-option v-for="item in exportWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="目的仓" prop="destWarehouseId">
<el-select v-model="queryParams.destWarehouseId" placeholder="请选择目的地">
<el-select v-model="queryParams.destWarehouseId" placeholder="请选择目的地" clearable>
<el-option v-for="item in importWarehouseList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
......@@ -179,6 +179,7 @@ import {getCabinetPage} from "@/api/ecw/cabinet";
import { getChannelList } from '@/api/ecw/channel';
import { getWarehouseList } from "@/api/ecw/warehouse"
import {getTradeCityList} from '@/api/ecw/region'
import Decimal from 'decimal.js'
export default {
name: "indexFutureBox",
components: {
......@@ -327,11 +328,11 @@ export default {
},
'form.warehousedNumber'(){
//在仓 = 已入仓-已封柜
this.$set(this.form, 'warehousingNumber', this.form.warehousedNumber - this.form.loadingNumber)
this.$set(this.form, 'warehousingNumber', Decimal(this.form.warehousedNumber).minus(this.form.loadingNumber))
},
'form.loadingNumber'(){
//在仓 = 已入仓-已封柜
this.$set(this.form, 'warehousingNumber', this.form.warehousedNumber - this.form.loadingNumber)
this.$set(this.form, 'warehousingNumber', Decimal(this.form.warehousedNumber).minus(this.form.loadingNumber))
}
},
methods: {
......
......@@ -175,7 +175,11 @@ export default {
this.$set(this.dialogCfg, "visible", true);
},
makeBill(row) {
makeBillService({ orderId: row.orderId }).then((res) => {
const { bookSeaInfo } = this.shipmentObj;
makeBillService({
orderId: row.orderId,
zgDate: bookSeaInfo.sailTime,
}).then((res) => {
const { data } = res;
const { titleZh = "", contentZh = "" } = data?.ladingTemplate ?? {};
let billContent = `${titleZh}${contentZh}`,
......
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<div class="app-container shipping-split-order">
<el-card>
<div slot="header" class="card-title">拆单申请-{{orderData.orderNo||''}}</div>
<div class="btn-header">
<span class="card-title">原单信息</span>
<div>
<span v-if="orderData.status==99" class="red">异常无法拆单</span>
<el-button v-else type="primary" @click="addSplit">新建拆单 </el-button>
</div>
</div>
<el-descriptions :column="4">
<el-descriptions-item label="唛头">
{{orderData.marks?orderData.marks:''}}
</el-descriptions-item>
<el-descriptions-item label="已箱数/总箱数">
<span>{{orderData.sumNum||0}}/{{orderData.costVO?orderData.costVO.totalNum:0}}</span>
<el-descriptions-item label="已实装箱数/总箱数">
<span>{{currRow.installNum||0}}/{{orderData.costVO?orderData.costVO.totalNum:0}}</span>
</el-descriptions-item>
<el-descriptions-item label="订单状态">
<!-- <dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="orderData.status" /> -->
{{orderData.status==99?'异常':'正常'}}
</el-descriptions-item>
<el-descriptions-item label="送货日期">
......@@ -55,11 +49,11 @@
{{orderData.consigneeVO?orderData.consigneeVO.company||'':''}}
</el-descriptions-item>
<el-descriptions-item label="收货电话">
{{orderData.consigneeVO?(orderData.consigneeVO.phone?(orderData.consigneeVo.countryCode+orderData.consigneeVO.phone):''):''}}
{{orderData.consigneeVO?orderData.consigneeVO.phone?orderData.consigneeVO.countryCode+orderData.consigneeVO.phone :'':''}}
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="card">
<!-- 列表 -->
<div slot="header" class="card-title">货物信息</div>
......@@ -77,16 +71,21 @@
</el-table-column>
<el-table-column label="装柜货物属性" align="center" width="600">
<template slot-scope="scope">
<el-row>
<span>规格:{{scope.row.boxGauge}}</span>
</el-row>
<el-row>
<span>品牌:
<dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="scope.row.brandType" />
</span>
<span style="margin-left: 10px;">箱数:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.cartonsNum : 0 }}</span>
<span style="margin-left: 10px;">体积:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.volume : 0 }}</span>
<span style="margin-left: 10px;">重量:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.weight : 0 }}kg</span>
<el-row style="text-align:left;">
<el-row>
<span>规格:{{scope.row.boxGauge}}</span>
</el-row>
<el-row>
<span>品牌:
<dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="scope.row.brandType" />
</span>
<span style="margin-left: 10px;">箱数:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.cartonsNum : 0 }}</span>
<span style="margin-left: 10px;">体积:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.volume : 0 }}</span>
<span style="margin-left: 10px;">重量:{{scope.row.warehouseInInfoVO ? scope.row.warehouseInInfoVO.weight : 0 }}kg</span>
</el-row>
<el-row>
<span>计划装柜:无返回</span>
</el-row>
</el-row>
</template>
</el-table-column>
......@@ -102,27 +101,26 @@
</el-table-column>
</el-table>
</el-card>
<el-card class="card" v-if="splitData.length>0">
<el-card class="card" v-if="splitData">
<!-- 列表 -->
<div slot="header" class="card-title">拆单信息</div>
<div v-for="(item, index) in splitData" :key="index">
<div>
<div class="btn-header">
<div>
<p class="card-info">
<span class="card-title">
{{item.orderNo}}
{{splitData.orderNo}}
</span>
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="item.transportId" />
<span>发往:{{importCityName(item.dstWarehouseId)}}</span>
<span>{{orderData.logisticsInfoDto?orderData.logisticsInfoDto.startTitleZh:'无'}}</span>
<span>发往:{{splitData.dstWarehouseName}}</span>
</p>
</div>
<div>
<el-button v-if="index==0" disabled type="primary" @click="addShop(index)">放入</el-button>
<el-button v-if="index!=0" type="primary" @click="addShop(index)">放入</el-button>
<el-button type="primary" plain @click="deleteSplit(item.id)">删除</el-button>
<el-button type="primary" @click="addShop">放入</el-button>
</div>
</div>
<el-table border :data="item.orderSplitItemBackVOList">
<el-table border :data="splitData.orderSplitItemBackVOList">
<el-table-column label="序号" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
......@@ -155,71 +153,49 @@
</template>
</el-table-column>
<el-table-column label="计划装柜" align="center">
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button v-if="index==0" disabled size="mini" type="text" icon="el-icon-delete" @click="removeShop(scope.row.id)">移出</el-button>
<el-button v-else size="mini" type="text" icon="el-icon-delete" @click="removeShop(scope.row.id)">移出</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="removeShop(scope.row.id)">移出</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<work-flow xmlkey="split_order" v-model="selectedUsers"></work-flow>
<el-row style="marginTop:15px;">
<work-flow xmlkey="split_order" v-model="selectedUsers"></work-flow>
</el-row>
<div slot="footer" class="card footer_btn" v-if="orderData.status!=99">
<el-button v-if="orderData.status!=19" type="primary" @click="submitForm">提交申请</el-button>
<el-button v-if="orderData.status!=19" plain type="primary" @click="$emit('closeDialog')">取消</el-button>
<el-button v-if="orderData.status==19" type="primary" disabled>审核中</el-button>
<el-button v-if="orderData.status==19" type="primary">审核中</el-button>
<el-button v-if="orderData.status==19" plain type="primary" @click="cancelSplit">取消审核</el-button>
<el-button v-if="orderData.status==19" plain type="primary" @click="$emit('closeDialog')">返回</el-button>
</div>
<!-- 对话框(添加 / 修改) -->
<el-dialog title="新建拆单" :visible.sync="open" width="400px" append-to-body>
<el-form ref="formSplit" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-form-item label="运输方式">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" formatter="number" />
</el-form-item>
</el-row>
<el-row>
<el-form-item label="目的仓库:">
<el-select v-model="form.destWarehouseId" placeholder="请选择目的仓库">
<el-option v-for="item in importCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出货渠道" v-if="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'">
<el-select v-model="form.channelId" placeholder="请选择出货渠道">
<el-option :disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'" v-for="item in channelData" :key="item.channelId" :label="item.nameZh" :value="item.channelId" />
</el-select>
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="haddleAdd">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 对话框(添加 / 修改) -->
<el-dialog title="放入品名" :visible.sync="shopOpen" width="400px" append-to-body>
<el-form ref="shopForm" :model="shopForm" :rules="shopRules" label-width="80px">
<el-form ref="shopForm" :model="shopForm" :rules="shopRules" label-width="100px">
<el-row>
<el-form-item label="中文品名:">
<el-form-item label="中文品名:" prop="prodTitleZh">
<el-select v-model="shopForm.prodTitleZh" placeholder="请选择中文品名" @change="changeProdTitleZh">
<el-option v-for="item in orderData.orderItemVOList" :label="item.prodTitleZh" :value="item.prodTitleZh" :key="item.prodTitleZh"></el-option>
<el-option v-for="item in orderItems" :label="item.prodTitleZh" :value="item.prodTitleZh" :key="item.prodTitleZh"></el-option>
</el-select>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="英文品名:">
<el-form-item label="英文品名:" prop="prodTitleEn">
<el-select v-model="shopForm.prodTitleEn" placeholder="请选择英文品名" @change="changeProdTitleEn">
<el-option v-for="item in orderData.orderItemVOList" :label="item.prodTitleEn" :value="item.prodTitleEn" :key="item.prodTitleEn"></el-option>
<el-option v-for="item in orderItems" :label="item.prodTitleEn" :value="item.prodTitleEn" :key="item.prodTitleEn"></el-option>
</el-select>
</el-form-item>
<el-form-item label="剩余箱数:">
{{shopForm.sum||0}}
</el-form-item>
<el-form-item label="放入箱数:">
<el-form-item label="放入箱数:" prop="num">
<el-input-number v-model="shopForm.num" controls-position="right" :min="1" :max="shopForm.sum"></el-input-number>
</el-form-item>
<el-form-item label="备注信息:">
......@@ -236,23 +212,22 @@
</template>
<script>
import { getDictData, getDictDatas } from "@/utils/dict";
import {
getSplitList,
splitApply,
createSplit,
cancelApply,
createSplitItem,
deleteSplitItem,
deleteSplit,
} from "@/api/ecw/orderHandle";
import { getTradeCityList } from "@/api/ecw/region";
import { getChannelList } from "@/api/ecw/channel";
import WorkFlow from "@/components/WorkFlow";
import { getOrder } from "@/api/ecw/order";
import { serviceMsg } from "../../utils";
import { createApproval } from "@/api/ecw/boxSea";
export default {
name: "splitOrder",
inheritAttrs: false,
components: {
WorkFlow,
},
......@@ -261,33 +236,17 @@ export default {
},
data() {
return {
checked: false,
orderData: {},
splitData: [],
splitIndex: 0,
channelData: [],
tradeCityList: [],
multipleSelection: [],
splitData: {},
detail: {},
loading: false,
open: false,
form: {},
selectedUsers: [],
shopOpen: false,
tradeCityList: [],
shopOpen: false,
orderItems: [],
shopForm: {},
// 表单校验
rules: {
transportId: [
{ required: true, message: "请选择运输方式", trigger: "change" },
],
warehouseIds: [
{ required: true, message: "请选择目的仓库", trigger: "change" },
],
channelId: [
{ required: true, message: "请选择出货渠道", trigger: "change" },
],
},
// 表单校验
shopRules: {
prodTitleZh: [
{ required: true, message: "请选择中文品名", trigger: "change" },
......@@ -295,24 +254,19 @@ export default {
prodTitleEn: [
{ required: true, message: "请选择英文品名", trigger: "change" },
],
num: [{ required: true, message: "请输入箱数", trigger: "change" }],
},
queryParams: {
orderId: 96,
orderId: 0,
lang: 0,
},
query: {
page: 1,
rows: 20,
},
splitItemIndex: 0,
};
},
created() {
this.getChannel();
getTradeCityList().then((res) => (this.tradeCityList = res.data));
this.queryParams.orderId = this.currRow.orderId;
this.getList();
this.getOrder();
this.getOrderDetail();
this.getSplit();
},
watch: {
//监听table这个对象
......@@ -334,51 +288,64 @@ export default {
},
},
},
computed: {
getDictData() {
return (type, value) => getDictData(type, value) || {};
methods: {
/* 拆箱总数 */
totalSplitNum() {
let _total = 0;
const { orderSplitItemBackVOList = [] } = this.splitData;
orderSplitItemBackVOList.forEach((v) => {
_total += Number(v.splitNum);
});
return _total;
},
getDictDatas() {
return getDictDatas;
/* 打开拆单 */
getSplit() {
this.querySplitGoods().then((res) => {
if (res) {
if (this.currRow.goodsList && this.currRow.goodsList.length) {
const [orderItem] = this.currRow.goodsList;
createSplit({
parentOrderId: this.currRow.orderId,
parentOrderNo: this.currRow.orderNo,
dstWarehouseId: orderItem.destWarehouseId,
transportId: orderItem.transportId,
shipmentType: 1,
}).then((res) => {
this.querySplitGoods();
});
}
}
});
},
importCityList() {
return this.tradeCityList.filter((item) => item.type == 1);
/* 查询拆单项 */
querySplitGoods() {
return new Promise((resolve, reject) => {
getSplitList({
lang: 0,
orderId: this.currRow.orderId,
shipmentType: 1,
}).then((res) => {
const { orderSplitBackVOList } = res.data;
if (orderSplitBackVOList && orderSplitBackVOList.length) {
this.orderItems = this.currRow.goodsList ?? [];
// 取拆单项
this.splitData = orderSplitBackVOList.filter(
(item) => !item.isMaster
)[0];
resolve(false);
} else {
resolve(true);
}
});
});
},
},
methods: {
getOrder() {
getOrderDetail() {
this.loading = true;
getOrder(this.queryParams.orderId).then((response) => {
this.orderData = response.data;
this.query.destWarehouseId =
response.data.logisticsInfoDto.startWarehouseId;
this.loading = false;
});
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getSplitList(this.queryParams).then((response) => {
this.splitData = response.data;
this.loading = false;
});
},
getChannel() {
getChannelList().then((res) => (this.channelData = res.data));
},
changeDest() {
this.query.warehouseIds = this.form.destWarehouseId;
},
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
if (rowIndex == this.orderData.orderItemVOList.length) {
if (columnIndex === 1) {
return [2, 3];
} else if (columnIndex > 1) {
return [0, 0];
}
}
},
getSummaries() {
const sums = [];
......@@ -390,12 +357,12 @@ export default {
) {
return sums;
}
var orderSum = 0;
var orderV = 0;
var orderW = 0;
var leviteSum = 0;
var leviteV = 0;
var leviteW = 0;
let orderSum = 0;
let orderV = 0;
let orderW = 0;
let leviteSum = 0;
let leviteV = 0;
let leviteW = 0;
this.orderData.orderItemVOList.forEach((column, index) => {
orderSum += column.num ?? 0;
orderV += column.volume ?? 0;
......@@ -422,31 +389,32 @@ export default {
return sums;
},
importCityName(id) {
var arr = this.tradeCityList.filter((item) => item.id == id);
let arr = this.tradeCityList.filter((item) => item.id == id);
return arr.length > 0 ? arr[0].titleZh : "";
},
submitForm() {
var params = {
orderId: this.queryParams.orderId,
const { shipmentObj } = this.$attrs;
// 创建拆单审核
createApproval({
applyReason: "拆单审核",
approvalStatus: 0,
approvalType: 8,
copyUserId: this.selectedUsers,
};
splitApply(params).then((res) => {
this.$modal.msgSuccess("申请成功");
that.getList();
orderId: this.currRow.orderId,
shipmentId: shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then((res) => {
this.getSplit();
});
});
},
addShop(index) {
this.splitItemIndex = index;
addShop() {
this.shopOpen = true;
},
addSplit() {
this.open = true;
},
changeProdTitleZh() {
var list = [];
list = this.orderData.orderItemVOList.filter(
let list = [];
list = this.currRow.goodsList.filter(
(item) => item.prodTitleZh == this.shopForm.prodTitleZh
);
this.shopForm.sum = list[0].num;
......@@ -454,73 +422,58 @@ export default {
this.shopForm.prodTitleEn = list[0].prodTitleEn;
},
changeProdTitleEn() {
var list = [];
let list = [];
list = this.orderData.orderItemVOList.filter(
(item) => item.prodTitleEn == this.shopForm.prodTitleEn
);
this.shopForm.sum = list[0].num;
this.shopForm.prodTitleZh = list[0].prodTitleZh;
},
haddleAdd() {
let that = this;
if (!that.form.transportId) {
that.$message.error("请选择运输方式");
}
if (!that.form.destWarehouseId) {
that.$message.error("请选择目的仓库");
}
// if(!this.form.channelId){
// this.$modal.msgError("请选择出货渠道");
// }
var params = {
dstWarehouseId: that.form.destWarehouseId,
parentOrderId: that.orderData.orderId,
parentOrderNo: that.orderData.orderNo,
transportId: that.form.transportId,
};
createSplit(params).then((res) => {
that.getList();
});
that.open = false;
},
cancel() {
this.open = false;
this.form = {};
},
shopAdd() {
this.$refs["shopForm"].validate((valid) => {
if (!valid) {
return;
if (valid) {
// 输入箱数大于实装箱数
const total = this.totalSplitNum();
const canSplitNum = this.currRow.num - this.currRow.installNum;
const remain = canSplitNum - total;
if (this.shopForm.num > remain) {
this.$message.error("放入箱数不能大于总箱数");
return;
}
let params = {
num: this.shopForm.num,
orderItemId: this.shopForm.orderItemId,
orderSplitId: this.splitData.id,
remarks: this.shopForm.remarks,
};
createSplitItem(params).then((res) => {
this.$message.success("放入成功");
this.getSplit();
this.shopForm = {};
});
this.shopOpen = false;
}
});
var params = {
num: this.shopForm.num,
orderItemId: this.shopForm.orderItemId,
orderSplitId: this.splitData[this.splitItemIndex].id,
remarks: this.shopForm.remarks,
};
createSplitItem(params).then((res) => {
this.$message.success("放入成功");
this.getList();
this.shopForm = {};
});
this.shopOpen = false;
},
removeShop(id) {
let that = this;
that.$confirm("是否移除货物吗?").then(function () {
deleteSplitItem(id).then((res) => {
that.$message.success("移除成功");
that.getList();
that.getSplit();
});
});
},
cancelSplit() {
let that = this;
that.$confirm("是否取消审核吗?").then(function () {
cancelApply({ orderId: that.queryParams.orderId }).then((res) => {
that.$message.success("取消成功");
that.getList();
const { shipmentObj } = this.$attrs;
approvalCancel({
applyReason: "取消审核",
id: shipmentObj["cabinetApprovalInfo"].id,
shipmentId: shipmentObj.id,
}).then((res) => {
serviceMsg(res, this).then(() => {
this.$emit("closeDialog");
});
});
},
......@@ -528,43 +481,39 @@ export default {
this.shopOpen = false;
this.shopForm = {};
},
/** 删除按钮操作 */
deleteSplit(id) {
let that = this;
that.$confirm("是否确认删除新拆的订单吗?").then(function () {
deleteSplit(id).then((res) => {
that.$message.success("删除成功");
that.getList();
});
});
},
},
};
</script>
<style>
.card-title {
font-size: 18px;
font-weight: bold;
margin-top: 10px;
}
.card-info {
font-size: 16px;
}
.card {
margin-top: 20px;
}
.btn-header {
width: 90%;
display: flex;
align-items: center;
justify-content: space-between;
margin: 20px 0;
}
.red {
color: #ff3430;
font-size: 15px;
}
.footer_btn {
padding-bottom: 60px;
<style lang="scss">
.shipping-split-order {
.card-title {
font-size: 18px;
font-weight: bold;
margin-top: 10px;
}
.card-info {
font-size: 16px;
> span {
margin-right: 10px;
}
}
.card {
margin-top: 20px;
}
.btn-header {
width: 90%;
display: flex;
align-items: center;
justify-content: space-between;
margin: 20px 0;
}
.red {
color: #ff3430;
font-size: 15px;
}
.footer_btn {
padding-bottom: 60px;
}
}
</style>
......@@ -80,7 +80,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="text" size="small" @click="moveOut(scope.row)" v-if="!isUnderReview && scope.row.installNum === 0">移出</el-button>
<!-- <el-button type="text" size="small" v-if="isShowSplitOrder(scope.row)" @click="handlerSplitOrder(scope.row, 'splitOrder','拆单')">拆单</el-button> -->
<el-button type="text" size="small" v-if="isShowSplitOrder(scope.row)" @click="handlerSplitOrder(scope.row, 'splitOrder','拆单')">拆单</el-button>
</template>
</el-table-column>
</el-table>
......@@ -194,7 +194,7 @@
</el-row>
</template>
<!-- 拆单 -->
<splitOrder v-if="dialogConfig.type === 'splitOrder' && dialogConfig.dialogVisible" :currRow="currRow" @closeDialog="closeDialog" />
<splitOrder v-bind="$attrs" :shipmentObj="shipmentObj" v-if="dialogConfig.type === 'splitOrder' && dialogConfig.dialogVisible" :currRow="currRow" @closeDialog="closeDialog" />
</el-dialog>
</div>
</template>
......
......@@ -2,11 +2,12 @@
<div>
<el-form ref="reviewForm" :model="reviewObj" label-width="120px">
<el-form-item label="申请理由">
<el-input v-model="reviewObj.applyReason" type="textarea" rows="2" placeholder="请输入申请理由"></el-input>
<el-input v-model="reviewObj.applyReason" type="textarea" rows="2" placeholder="请输入申请理由" :disabled="isReview"></el-input>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="success" @click="onSubmit">发起申请</el-button>
<el-button type="success" @click="onSubmit" :disabled="isReview">发起申请</el-button>
<el-button type="primary" @click="jumpReviewDetail" :disabled="!isReview">审核中</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
......@@ -14,7 +15,7 @@
<script>
import { approvalCreate } from "@/api/ecw/boxSea";
import { serviceMsg } from "../utils";
import { serviceMsg, toReviewDetail } from "../utils";
/**
* 反审
......@@ -26,9 +27,29 @@ export default {
return {
// 反审对象
reviewObj: {},
isReview: false,
bpmProcessId: "",
};
},
created() {
const { currNode, shipmentObj } = this.$attrs;
if (currNode.type === "preinstall") {
this.isReview = shipmentObj["preInstallBackInfo"] ? true : false;
this.bpmProcessId = shipmentObj["preInstallBackInfo"]?.bpmProcessId;
}
if (currNode.type === "unloading") {
this.isReview = shipmentObj["cabinetUnloadBackApprovalInfo"]
? true
: false;
this.bpmProcessId =
shipmentObj["cabinetUnloadBackApprovalInfo"]?.bpmProcessId;
}
},
methods: {
jumpReviewDetail() {
toReviewDetail.apply(this, [this.bpmProcessId]);
this.$emit("closeDialog");
},
/** 提交 */
onSubmit() {
this.$refs["reviewForm"].validate((valid) => {
......
......@@ -229,21 +229,11 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
return this.$router.push('edit')
this.reset();
this.open = true;
this.title = "添加渠道管理";
return this.$router.push('create_channel')
},
/** 修改按钮操作 */
handleUpdate(row) {
return this.$router.push('edit?id=' + row.channelId)
this.reset();
const channelId = row.channelId;
getChannel(channelId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改渠道管理";
});
return this.$router.push('edit_channel?id=' + row.channelId)
},
/** 删除按钮操作 */
......
......@@ -10,36 +10,50 @@
<el-input v-model="queryParams.name" placeholder="请输入客户名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="客户等级" prop="level">
<el-select v-model="queryParams.level" placeholder="请选择客户等级" clearable size="small">
<el-select clearable v-model="queryParams.level" placeholder="请选择客户等级" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="联系方式">
<el-input placeholder="请输入联系方式" v-model="queryParams.defaultContactPhone"></el-input>
</el-form-item>
<el-form-item label="客户类别" prop="level">
<dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" multiple v-model="queryParams.type"></dict-selector>
</el-form-item>
<el-form-item label="客户经理" prop="customerService">
<el-select clearable v-model="queryParams.customerService" placeholder="请选择客户经理" 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="客户来源" prop="source">
<el-select v-model="queryParams.source" placeholder="请选择客户来源" clearable size="small">
<el-select clearable v-model="queryParams.source" placeholder="请选择客户来源" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="客户经理" prop="customerService">
<el-select v-model="queryParams.customerService" placeholder="请选择客户经理" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
<el-form-item label="国家" prop="source">
<el-select clearable v-model="form.country" placeholder="请选择国家">
<el-option v-for="dict in countryList"
:key="dict.id" :label="dict.nameZh" :value="parseInt(dict.id)" />
</el-select>
</el-form-item>
<el-form-item label="客户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
<el-select clearable v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="部门" prop="department">
<el-input v-model="queryParams.department" placeholder="请输入部门" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
<el-date-picker clearable v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item label="信用等级" prop="department">
<el-select clearable v-model="form.level" >
<el-option v-for="(item,index) in creditList" :label="item.nameZh" :key="index" :value="item.id" ></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
......@@ -56,36 +70,42 @@
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">导出</el-button>
</el-col>
<el-col :span="1.5" >
<el-button :disabled="selectCustomerList.length === 0" type="warning" plain icon="el-icon-download" size="mini" @click="transferShow = true;" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">批量移交</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="客户编号" align="center" prop="number" />
<el-table-column label="客户名称" align="center" prop="name" />
<el-table-column label="客户等级" align="center" prop="level">
<el-table-column label="客户等级" align="center" prop="vipLevelNameZh">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column label="国家" align="center" prop="country" :formatter="countryFormatter"></el-table-column>
<el-table-column label="客户经理" align="center" prop="customerService" :formatter="customerServiceFn">
</el-table-column>
<el-table-column label="信用等级" prop="creditLevelNameZh"></el-table-column>
<el-table-column label="客户状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="部门" align="center" prop="department">
<template v-slot:default="scope">
{{scope.row.department}}
</template>
</el-table-column>
<el-table-column label="主联系人" prop="defaultContactName"></el-table-column>
<el-table-column label="主联系方式" prop="defaultContactPhone"></el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="客户经理" align="center" prop="customerService" :formatter="customerServiceFn">
</el-table-column>
<el-table-column label="国家" align="center" prop="country" :formatter="countryFormatter"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
......@@ -451,6 +471,7 @@
</el-dialog>
<customer-follow-list :customer-id="customerId" :id="customerId" ref="CustomerFollowList"></customer-follow-list>
<customer-complaints :customer-id="customerId" ref="customerComplaints"></customer-complaints>
<transfer-customer :show.sync="transferShow" :customer-ids.sync="selectCustomerList"></transfer-customer>
</div>
</template>
......@@ -467,13 +488,16 @@ import CustomerFollowList from "@/components/CustomerFollowList"
import customerComplaints from "@/components/customerComplaints"
import {listServiceUser} from "@/api/system/user";
import { getCountryListAll } from '@/api/ecw/country'
import {getCreditPage} from "@/api/customer/credit";
import transferCustomer from "@/views/ecw/customer/transferCustomer";
export default {
name: "Customer",
components: {
upload,
CustomerFollowList,
customerComplaints
customerComplaints,
transferCustomer
},
data() {
return {
......@@ -525,11 +549,16 @@ export default {
showLine: false,
customerId:undefined,
customerServiceList:[],
countryList: []
countryList: [],
creditList:[],
selectCustomerList:[],
transferShow:false
};
},
created() {
getCreditPage({page:1,rows:999}).then(r => {
this.creditList = r.data.list
})
this.getList();
// getNodeList().then(r => {
// this.nodeList = r.data
......@@ -682,7 +711,6 @@ export default {
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
......@@ -693,6 +721,8 @@ export default {
return exportCustomerExcel(params);
}).then(response => {
this.$download.excel(response, '客户信息.xls');
console.log(response,'response')
this.$download.excel(response, '全部客户信息.xls');
this.exportLoading = false;
}).catch(() => {});
},
......@@ -707,7 +737,19 @@ export default {
this.$nextTick(()=>{
this.$refs.customerComplaints.handleAdd();
})
},
handleSelectionChange(val){
this.selectCustomerList = val.map(i => i.id);
}
},
watch:{
selectCustomerList(val){
if(val.length === 0){
this.getList()
this.$refs.multipleTable.clearSelection();
}
},
}
};
</script>
<template>
<el-dialog
center
title="客服"
:visible.sync="show"
width="30%">
<div style="width: 100%;min-height: 200px;text-align: center">
<el-select filterable v-model="service">
<el-option v-for="(item,index) in customerServiceList" :key="index" :label="item.nickname" :value="item.id"></el-option>
</el-select>
</div>
<span slot="footer" class="dialog-footer">
<el-button >取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import {listServiceUser} from "@/api/system/user";
import {handOverCustomer} from "@/api/ecw/customer";
export default {
name: "transferCustomer",
props:{
show:{
type:Boolean ,
default:false
},
customerIds:[Array,String],
tableName:String
},
created() {
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
},
computed:{
getCustomerIds(){
if(this.customerIds instanceof Array) return this.customerIds
else return this.customerIds.split(',')
}
},
data(){
return {
customerServiceList:[],
service:'',
}
},
methods:{
submit(){
if(!this.service){
return this.$message.warning('请选择客户经理!');
}
handOverCustomer({
customerServiceId:this.service,
customerIdList:this.getCustomerIds
}).then(r=>{
if(r.code === 0){
this.$emit('update:show',false)
this.$emit('update:customerIds',[])
this.$message.success('用户批量转移成功!')
}
})
},
}
}
</script>
<style scoped>
</style>
......@@ -315,8 +315,8 @@
setTime(item) {
this.targetPeriod.forEach((i, index) => {
if (i.name === item) {
this.form.startTime = i.startDate;
this.form.endTime = i.endDate;
this.form.startTime = i.startDate + " 00:00:00";
this.form.endTime = i.endDate + " 23:59:59";
}
})
},
......
......@@ -11,30 +11,50 @@
<el-input v-model="queryParams.name" placeholder="请输入客户名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="客户等级" prop="level">
<el-select v-model="queryParams.level" placeholder="请选择客户等级" clearable size="small">
<el-select clearable v-model="queryParams.level" placeholder="请选择客户等级" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="联系方式">
<el-input placeholder="请输入联系方式" v-model="queryParams.defaultContactPhone"></el-input>
</el-form-item>
<el-form-item label="客户类别" prop="level">
<dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" multiple v-model="queryParams.type"></dict-selector>
</el-form-item>
<el-form-item label="客户经理" prop="customerService">
<el-select clearable v-model="queryParams.customerService" placeholder="请选择客户经理" 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="客户来源" prop="source">
<el-select v-model="queryParams.source" placeholder="请选择客户来源" clearable size="small">
<el-select clearable v-model="queryParams.source" placeholder="请选择客户来源" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="国家" prop="source">
<el-select clearable v-model="form.country" placeholder="请选择国家">
<el-option v-for="dict in countryList"
:key="dict.id" :label="dict.nameZh" :value="parseInt(dict.id)" />
</el-select>
</el-form-item>
<el-form-item label="客户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
<el-select clearable v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="部门" prop="department">
<el-input v-model="queryParams.department" placeholder="请输入部门" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
<el-date-picker clearable v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item label="信用等级" prop="department">
<el-select clearable v-model="form.level" >
<el-option v-for="(item,index) in creditList" :label="item.nameZh" :key="index" :value="item.id" ></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
......@@ -51,34 +71,42 @@
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button :disabled="selectCustomerList.length === 0" type="warning" plain icon="el-icon-download" size="mini" @click="show = true;" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">批量移交</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="客户编号" align="center" prop="number" />
<el-table-column label="客户名称" align="center" prop="name" />
<el-table-column label="客户等级" align="center" prop="level">
<el-table-column label="客户等级" align="center" prop="vipLevelNameZh">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column label="国家" align="center" prop="country">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COUNTRY" :value="scope.row.country" />
</template>
</el-table-column>
<el-table-column label="信用等级" prop="creditLevelNameZh"></el-table-column>
<el-table-column label="客户状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="部门" align="center" prop="department" />
<el-table-column label="主联系人" prop="defaultContactName"></el-table-column>
<el-table-column label="主联系方式" prop="defaultContactPhone"></el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="客户经理" align="center" prop="customerService" :formatter="customerServiceFn">
</el-table-column>
<el-table-column label="国家" align="center" prop="country" :formatter="countryFormatter"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
......@@ -98,6 +126,7 @@
@pagination="getList"/>
<customer-follow-list ref="customerFollowList" :customer-id="customerId" :id="customerId"></customer-follow-list>
<customer-complaints ref="customerComplaint" :customer-id.sync="customerId"></customer-complaints>
<transfer-customer :show.sync="show" :customer-ids.sync="selectCustomerList"></transfer-customer>
</div>
</template>
......@@ -108,15 +137,24 @@ import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import upload from '@/components/ImageUpload'
import customerFollowList from "@/components/CustomerFollowList";
import customerComplaints from "@/components/customerComplaints";
import {listServiceUser} from "@/api/system/user";
import {getCountryListAll} from "@/api/ecw/country";
import {getCreditPage} from "@/api/customer/credit";
import transferCustomer from "@/views/ecw/customer/transferCustomer";
export default {
name: "myCustomerService",
components: {
upload,
customerFollowList,
customerComplaints
customerComplaints,
transferCustomer
},
data() {
return {
show:false,
creditList:[],
countryList:[],
customerServiceList:[],
getDictDatas,
DICT_TYPE,
// 遮罩层
......@@ -163,6 +201,7 @@ export default {
nodeList: [],
showLine: false,
customerId:undefined,
selectCustomerList:[],
};
},
created() {
......@@ -170,8 +209,32 @@ export default {
// getNodeList().then(r => {
// this.nodeList = r.data
// })
getCreditPage({page:1,rows:999}).then(r => {
this.creditList = r.data.list
})
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
getCountryListAll().then(r => {
this.countryList = r.data
})
},
methods: {
handleSelectionChange(val){
this.selectCustomerList = val.map(i => i.id);
},
countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue)
return country?.nameZh
},
customerServiceFn(val){
if(this.customerServiceList.length > 0){
let index =this.customerServiceList.findIndex(item => item.id === val.customerService);
return index !== -1 ? this.customerServiceList[index]?.nickname :''
}else {
return ''
}
},
/** 查询列表 */
getList() {
this.loading = true;
......@@ -323,6 +386,15 @@ export default {
this.$refs['customerComplaint'].handleAdd()
})
}
},
watch:{
selectCustomerList(val){
if(val.length === 0){
this.getList()
this.$refs.multipleTable.clearSelection();
}
},
}
};
</script>
......@@ -499,7 +499,7 @@ import ChooseContactDialog from '@/components/ChooseContactDialog'
import QuickCreateCustomer from '@/components/QuickCreateCustomer'
import {getCustomerContactsSelect} from '@/api/ecw/customerContacts'
import Decimal from 'decimal.js'
window.Decimal= Decimal
export default {
name: "EcwOfferEdit",
components: {
......@@ -657,26 +657,61 @@ export default {
originalFeeList(){
let arr = []
this.clearanceFeeList.forEach(item => {
let it = {...item}
let it = {
src: '清关费',
currencyId: item.currencyId,
amount: Decimal(item.amount)
}
let freight = this.freightFeeList.find(fee => fee.currencyId == item.currencyId)
if(freight){
it.amount += freight.amount
it.amount = it.amount.plus(freight.amount)
}
arr.push(it)
})
// 判断是否有运费单位不在清关费里的
this.freightFeeList.forEach(item => {
if(!arr.find(arrItem => arrItem.currencyId == item.currencyId)){
arr.push({
src: '未计算的运费',
currencyId: item.currencyId,
amount: Decimal(item.amount)
})
}
})
return arr
},
// 预计费用(原价 - 优惠金额)
// 预计费用(原价 - 优惠金额 + 其他费用 + 保价费)
estimatedCosts(){
let arr = []
let withInsuranceFee = false
this.originalFeeList.forEach(item => {
let it = {...item}
let it = {
currencyId: item.currencyId,
amount: Decimal(item.amount)
}
let coupon = this.couponList.find(coupon => coupon.reduceCurrencyId == item.currencyId)
if(coupon){
it.amount -= coupon.reduceAmount
it.amount = it.amount.minus(coupon.reduceAmount)
}
if(this.form.otherFee && this.form.otherFeeCurrencyId == item.currencyId){
it.amount = it.amount.plus(this.form.otherFee)
}
// 保价费(美元)
if(item.currencyId == 1 && this.fee && this.fee.insuranceFee){
it.amount = it.amount.plus(this.fee.insuranceFee)
withInsuranceFee = true
}
arr.push(it)
})
// 没有累加保价费(没有美元计价)但是有保价费则需要加上去
if(!withInsuranceFee && this.fee && this.fee.insuranceFee){
arr.push({
currencyId: 1,
amount: Decimal(this.fee.insuranceFee)
})
}
return arr
},
// 路线开通的服务
......@@ -935,8 +970,11 @@ export default {
orderType: this.form.orderType,
}).then(res => {
this.$set(this, 'fee', res.data.costDto)
this.$set(this, 'couponTotalAmountList', res.data.availableDto.couponTotalAmountList)
this.$set(this, 'couponAvailableGroupDtoList', res.data.availableDto.couponAvailableGroupDtoList)
if(res.data.availableDto){
this.$set(this, 'couponTotalAmountList', res.data.availableDto.couponTotalAmountList)
this.$set(this, 'couponAvailableGroupDtoList', res.data.availableDto.couponAvailableGroupDtoList)
}
this.form.prodCreateReqVOList.map((item, index) => {
this.$set(item, 'fee', res.data.prodCostDtoList[index] || null)
......
......@@ -18,33 +18,33 @@
</el-form-item>
<el-form-item :label="$t('始发地')" prop="departureId">
<el-select v-model="queryParams.departureId" :placeholder="$t('请选择始发地')">
<el-select v-model="queryParams.departureId" :placeholder="$t('请选择始发地')" clearable>
<el-option v-for="item in exportCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="objectiveId">
<el-select v-model="queryParams.objectiveId" :placeholder="$t('请选择目的地')">
<el-select v-model="queryParams.objectiveId" :placeholder="$t('请选择目的地')" clearable>
<el-option v-for="item in importCityList" :label="$l(item, 'title')" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" />
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" clearable />
</el-form-item>
<el-form-item :label="$t('商品')" prop="prodTitle">
<el-input v-model="queryParams.prodTitle" :placeholder="$t('请输入商品类型、品名或品牌')" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item :label="$t('控货')" prop="control">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" v-model="queryParams.control" />
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" v-model="queryParams.control" clearable />
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="followUpSalesmanId">
<user-selector v-model="queryParams.followUpSalesmanId" />
<user-selector v-model="queryParams.followUpSalesmanId" clearable />
</el-form-item>
<el-form-item :label="$t('销售阶段')" prop="status">
<dict-selector :type="DICT_TYPE.ECW_OFFER_STATUS" v-model="queryParams.status" />
<dict-selector :type="DICT_TYPE.ECW_OFFER_STATUS" v-model="queryParams.status" clearable />
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" />
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" clearable />
</el-form-item>
<div>
......@@ -164,44 +164,10 @@ export default {
total: 0,
// 报价单管理列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
dateRangeStopTime: [],
dateRangeStartTime: [],
dateRangeEndTime: [],
dateRangeCreateTime: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
number: null,
orderIds: null,
orderNo: null,
consignorId: null,
consigneeId: null,
marks: null,
customsType: null,
departureId: null,
departure: null,
objectiveId: null,
objective: null,
control: null,
competitor: null,
importance: null,
tradeType: null,
tradeAdress: null,
remarks: null,
status: null,
oldStatus: null,
relation: null,
relationId: null,
commissionType: null,
warehousingType: null,
reason: null,
estCost: null,
sendstatus: null,
pageSize: 10
},
currencyList: [],
tradeCityList:[]
......@@ -236,14 +202,8 @@ export default {
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeStopTime, 'stopTime');
this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');
this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行查询
getOfferPage(params).then(response => {
getOfferPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
......@@ -257,16 +217,15 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.dateRangeStopTime = [];
this.dateRangeStartTime = [];
this.dateRangeEndTime = [];
this.dateRangeCreateTime = [];
this.resetForm("queryForm");
this.queryParams = {
pageNo: 1,
pageSize: 10
}
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
return this.$router.push('edit')
return this.$router.push('create')
},
/** 修改按钮操作 */
handleUpdate(row) {
......@@ -289,16 +248,12 @@ export default {
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.addBeginAndEndTime(params, this.dateRangeStopTime, 'stopTime');
this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');
this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行导出
this.$modal.confirm(this.$t('是否确认导出所有报价单管理数据项?')).then(() => {
this.exportLoading = true;
return exportOfferExcel(params);
}).then(response => {
this.$download.excel(response, '${table.classComment}.xls');
this.$download.excel(response, '报价列表.xls');
this.exportLoading = false;
}).catch(() => {});
},
......
......@@ -87,11 +87,12 @@ export default {
}
let data = Object.assign({}, this.form)
updateOfferResult(data).then(response => {
this.$modal.msgSuccess(this.$t("赢单成功"));
if(response.data > 0){
this.$message.success(this.$t('赢单成功'))
this.$redirect('../order/edit?id=' + response.data)
return
}
this.$message.success(this.$t('输单成功'))
this.$router.back();
});
});
......
编辑
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
status != 20,21
shipmentState != 320,322,323
inWarehouseState != 212, 218, 213, 214, 215 && status != 5,8
取消
status = 0,2
费用申请
status != 0,
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
shipmentState != 320,322,323
特需,关联,互斥
status != 0,
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
status > 5
inWarehouseState == 204
特价
status !=0
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
shipmentState != 320,322,323
确认提货
status != 0,2
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
shipmentState != 320,322,323
合单,拆单
status != 0,2
abnormalState != 1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
shipmentState > 320
入仓操作
status == 0,2
abnormalState == 1
入仓补充
inWarehouseState == 201,202, 208, 202, 210, 202, 211, 202, 213, 214, 215, 216
abnormalState != 99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14
入仓修改
inWarehouseState == 202, 207, 208, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216, 204, 205, 206
退仓
inWarehouseState == 201, 202, 207, 208, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216
abnormalState != 1
调仓
inWarehouseState == 201, 202, 208, 202, 210, 202, 211, 202, 213, 215, 216
取消调仓
inWarehouseState == 212,213,214
调拨出仓
inWarehouseState == 213
调拨到仓
inWarehouseState= 214
打印标签
status != 0
shipmentState != 320,322,323
abnormalState !=5,6,7,8
打印入仓单
status != 0,2
abnormalState != 1,5,6,7,8
shipmentState != 320,322,323
打印提单
......@@ -8,29 +8,29 @@
<el-date-picker v-model="dateFilter" type="daterange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startWarehouseId">
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')">
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')" clearable>
<el-option v-for="item in expoerCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destWarehouseId">
<el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')">
<el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')" clearable>
<el-option v-for="item in importCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" />
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable />
</el-form-item>
<el-form-item :label="$t('订单编号')" prop="orderNo">
<el-input v-model="queryParams.orderNo" :placeholder="$t('订单编号')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('品名')" prop="prodId">
<product-selector v-model="queryParams.prodId" @keyup.enter.native="handleQuery" />
<product-selector v-model="queryParams.prodId" @keyup.enter.native="handleQuery" clearable/>
</el-form-item>
<el-form-item :label="$t('控货')" prop="isCargoControl">
<dict-selector v-model="queryParams.isCargoControl" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="queryParams.isCargoControl" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable />
</el-form-item>
<el-form-item :label="$t('订单状态')" prop="status">
<dict-selector :type="DICT_TYPE.PAY_ORDER_STATUS" v-model="queryParams.status"
<dict-selector :type="DICT_TYPE.PAY_ORDER_STATUS" v-model="queryParams.status" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('提单号')" prop="tidanNo">
......
......@@ -409,7 +409,7 @@
<div v-if="[2,3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('是否双清')">
<dict-selector v-model="form.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" />
<dict-selector v-model="form.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" defaultable />
</el-form-item>
</div>
......@@ -425,7 +425,7 @@
</div>
<div v-if="[2,3,4].indexOf(+form.transportId) > -1">
<el-form-item :label="$t('清关证书')">
<dict-selector v-model="form.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="form.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" defaultable />
</el-form-item>
<el-form-item label="清关证书备注" >
<el-input v-model="form.remarks" ></el-input>
......@@ -433,18 +433,18 @@
</div>
<div v-if="[3,4].indexOf(+form.transportId) > -1">
<el-form-item label="是否拆包">
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" defaultable />
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('单票立刻转运')" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" defaultable />
<span style="margin-left:10px">{{$t('注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”')}}</span>
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('特殊要求')" >
<dict-selector v-model="form.packageType" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple />
<dict-selector v-model="form.packageTypeArr" form-type="checkbox" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" multiple />
</el-form-item>
</div>
<el-form-item :label="$t('特殊要求备注')">
......@@ -462,7 +462,7 @@
<el-dialog :title="$t('批量导入')" :visible.sync="showBatchImportDialog" width="1000px" :close-on-click-modal="false">
<el-steps :active="importList.length > 0 ? 1 : 0" finish-status="success" class="w-500" style="margin: 20px auto">
<el-step :title="$t('上传集装箱')"></el-step>
<el-step :title="$t('上传装箱单')"></el-step>
<el-step :title="$t('开始导入')"></el-step>
<el-step :title="$t('完成')"></el-step>
</el-steps>
......@@ -718,6 +718,9 @@ export default {
this.$set(this.form, 'departureId', router.startCityId)
this.$set(this.form, 'objectiveId', router.destCityId)
},
'form.packageTypeArr'(val){
this.$set(this.form, 'form.packageType', val.join(','))
},
// 选择的路线变化后,需要判断是否开通了对应的服务,如果没开通需要取消对应的服务选择
selectedRouter(val){
if(!val) return
......
......@@ -9,7 +9,7 @@
<!-- <el-form-item label="唛头" prop="marks">
<el-input v-model="queryParams.marks" placeholder="唛头" clearable @keyup.enter.native="handleQuery" />
</el-form-item> -->
<el-form-item :label="$t('发货人')" prop="consignorId">
<el-input v-model="queryParams.consignorId" :placeholder="$t('发货人')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
......@@ -21,18 +21,18 @@
<el-date-picker v-model="dateFilter" type="daterange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startWarehouseId">
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')">
<el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发地')" clearable>
<el-option v-for="item in exportCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destWarehouseId">
<el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')">
<el-select v-model="queryParams.destWarehouseId" :placeholder="$t('请选择目的地')" clearable>
<el-option v-for="item in importCityList" :label="item.titleZh" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId" v-if="!transportId">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" />
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable/>
</el-form-item>
<!-- <el-form-item label="商品分类" prop="goodsType">
......@@ -52,17 +52,17 @@
</el-form-item>
<el-form-item :label="$t('控货')" prop="isCargoControl">
<dict-selector v-model="queryParams.isCargoControl" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="queryParams.isCargoControl" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable />
</el-form-item>
<el-form-item :label="$t('入仓类型')" prop="warehouseType">
<dict-selector :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" v-model="queryParams.warehousingType" />
<dict-selector :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" v-model="queryParams.warehousingType" clearable/>
</el-form-item>
<el-form-item :label="$t('客户经理')" >
<user-selector v-model="queryParams.salesmanId" />
</el-form-item>
<el-form-item :label="$t('订单状态')" prop="status">
<dict-selector :type="DICT_TYPE.ORDER_STATUS" v-model="queryParams.status"
@keyup.enter.native="handleQuery" />
@keyup.enter.native="handleQuery" clearable />
</el-form-item>
<el-form-item :label="$t('报关方式')" prop="customsType">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" clearable
......@@ -70,7 +70,7 @@
</el-form-item>
<el-form-item :label="$t('是否齐货')" >
<!--// 字段存疑-->
<dict-selector v-model="queryParams.isNeat" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<dict-selector v-model="queryParams.isNeat" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" clearable/>
</el-form-item>
<!-- <el-form-item label="重货比" prop="weightRatio">
<el-input style="width: 100px;" v-model="molecule" placeholder="" clearable @change="moleculeChange"
......@@ -162,20 +162,80 @@
<el-dropdown>
<el-button type="text">{{$t('操作')}}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="handleUpdate(scope.row)" v-hasPermi="['ecw:order:update']" >{{$t('编辑')}}</el-dropdown-item>
<el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'deleteOrder')" v-hasPermi="['ecw:order:delete']" >{{$t('删除')}}</el-dropdown-item>
<el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'cancelOrder')" >{{$t('取消订单')}}</el-dropdown-item>
<el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'recoveryOrder')" >{{$t('恢复订单')}}</el-dropdown-item>
<el-dropdown-item @click.native="feeApplicationBol = true; orderId = scope.row.orderId" >{{$t('费用申请')}}</el-dropdown-item>
<el-dropdown-item @click.native="orderId = scope.row.orderId;orderNo = scope.row.orderNo;isShow = true" >{{$t('特需')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/associated-order/${scope.row.orderId}`)" >{{$t('关联')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/mutex-order/${scope.row.orderId}`)" >{{$t('互斥')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push('/order/special/' + scope.row.orderId)" v-hasPermi="['ecw:order:update']" >{{$t('特价')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/release?orderId=${scope.row.orderId}`)" >{{$t('确认放货')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/singleApply?orderNo=${scope.row.orderNo}`)" >{{$t('合单申请')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/splitApply?orderId=${scope.row.orderId}`)" >{{$t('拆单申请')}}</el-dropdown-item>
<el-dropdown-item @click.native="showMergedLogOrderNo=scope.row.orderNo" >{{$t('合单日志')}}</el-dropdown-item>
<el-dropdown-item @click.native="showPickupLogOrderNo=scope.row.orderNo" >{{$t('提货日志')}}</el-dropdown-item>
<!-- 编辑 -->
<template v-if="
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
exclude(scope.row.status, [20,21]) &&
exclude(scope.row.shipmentState, [320,322,323]) &&
(exclude(scope.row.inWarehouseState, [ 212, 218, 213, 214, 215]) && exclude(scope.row.status, [5,8]) )
">
<el-dropdown-item @click.native="handleUpdate(scope.row)" v-hasPermi="['ecw:order:update']" >{{$t('编辑')}}</el-dropdown-item>
</template>
<!-- 删除 -->
<template v-if="include(scope.row.status, [0,2])">
<el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'deleteOrder')" v-hasPermi="['ecw:order:delete']" >{{$t('删除')}}</el-dropdown-item>
</template>
<!-- 取消 -->
<template v-if="include(scope.row.status, [2])">
<el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'cancelOrder')" >{{$t('取消订单')}}</el-dropdown-item>
</template>
<!-- 恢复 -->
<!-- <el-dropdown-item @click.native="oprateOrder(scope.row.orderId, 'recoveryOrder')" >{{$t('恢复订单')}}</el-dropdown-item>-->
<!-- 费用申请 -->
<template v-if="
exclude(scope.row.status, [0]) &&
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
exclude(scope.row.shipmentState, [320,322,323])
">
<el-dropdown-item @click.native="feeApplicationBol = true; orderId = scope.row.orderId" >{{$t('费用申请')}}</el-dropdown-item>
</template>
<!-- 特需,互斥,关联 -->
<template v-if="
exclude(scope.row.status, [0]) &&
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
exclude(scope.row.inWarehouseState, [204])
">
<el-dropdown-item @click.native="orderId = scope.row.orderId;orderNo = scope.row.orderNo;isShow = true" >{{$t('特需')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/associated-order/${scope.row.orderId}`)" >{{$t('关联')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/mutex-order/${scope.row.orderId}`)" >{{$t('互斥')}}</el-dropdown-item>
</template>
<!-- 特价 -->
<template v-if="
exclude(scope.row.status, [0]) &&
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
exclude(scope.row.shipmentState, [320,322,323])
">
<el-dropdown-item @click.native="$router.push('/order/special/' + scope.row.orderId)" v-hasPermi="['ecw:order:update']" >{{$t('特价')}}</el-dropdown-item>
</template>
<!-- 确认放货 -->
<template v-if="
exclude(scope.row.status, [0,2]) &&
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
exclude(scope.row.shipmentState, [320,322,323])
">
<el-dropdown-item @click.native="$router.push(`/order/release?orderId=${scope.row.orderId}`)" >{{$t('确认放货')}}</el-dropdown-item>
</template>
<!-- 合单,拆单 -->
<template v-if="
exclude(scope.row.status, [0,2]) &&
exclude(scope.row.abnormalState, [1 ,99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14]) &&
scope.row.shipmentState > 320
">
<el-dropdown-item @click.native="$router.push(`/order/singleApply?orderNo=${scope.row.orderNo}`)" >{{$t('合单申请')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push(`/order/splitApply?orderId=${scope.row.orderId}`)" >{{$t('拆单申请')}}</el-dropdown-item>
</template>
<!-- 合单日志,提货日志 -->
<el-dropdown-item @click.native="showMergedLogOrderNo=scope.row.orderNo" >{{$t('合单日志')}}</el-dropdown-item>
<el-dropdown-item @click.native="showPickupLogOrderNo=scope.row.orderNo" >{{$t('提货日志')}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
......@@ -185,11 +245,61 @@
<el-dropdown>
<el-button type="text">{{$t('仓库')}}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="$router.push('/order/warehousing?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓')}}</el-dropdown-item>
<el-dropdown-item @click.native="show = true;orderId = scope.row.orderId; " v-hasPermi="['ecw:order:update']">{{$t('退仓')}}</el-dropdown-item>
<el-dropdown-item @click.native="orderId = scope.row.orderId;warehouseBol=true;" >{{$t('调仓')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push({path:'/order/transfer-warehousing/' + scope.row.orderId + '/' + 1 })" >{{$t('调拨出仓')}}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push({path:'/order/transfer-to-warehouse/' + scope.row.orderId + '/' + 2 })" >{{$t('调拨到仓')}}</el-dropdown-item>
<!-- 入仓操作 -->
<template v-if="include(scope.row.status, [0,2]) || include(scope.row.abnormalState, [1])">
<el-dropdown-item @click.native="$router.push('/order/warehousing?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓操作')}}</el-dropdown-item>
</template>
<!-- 入仓补充 -->
<template v-if="
include(scope.row.inWarehouseState, [201,202, 208, 202, 210, 202, 211, 202, 213, 214, 215, 216]) ||
include(scope.row.abnormalState, [99 ,2 ,3 ,4 ,9 ,10 ,11 ,12 ,14])
">
<el-dropdown-item @click.native="$router.push('/order/warehousing?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓补充')}}</el-dropdown-item>
</template>
<!-- 入仓修改 -->
<template v-if="
include(scope.row.inWarehouseState, [202, 207, 208, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216, 204, 205, 206])
">
<el-dropdown-item @click.native="$router.push('/order/warehousing?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓修改')}}</el-dropdown-item>
</template>
<!-- 退仓 -->
<template v-if="
include(scope.row.inWarehouseState, [201, 202, 207, 208, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216]) &&
exclude(scope.row.abnormalState, [1])
">
<el-dropdown-item @click.native="show = true;orderId = scope.row.orderId; " v-hasPermi="['ecw:order:update']">{{$t('退仓')}}</el-dropdown-item>
</template>
<!-- 调仓 -->
<template v-if="
include(scope.row.inWarehouseState, [201, 202, 208, 202, 210, 202, 211, 202, 213, 215, 216])
">
<el-dropdown-item @click.native="orderId = scope.row.orderId;warehouseBol=true;" >{{$t('调仓')}}</el-dropdown-item>
</template>
<!-- 取消调仓 -->
<!-- <template v-if="
include(scope.row.inWarehouseState, [212,213,214])
">
<el-dropdown-item @click.native="$alert('// TODO')" >{{$t('取消调仓')}}</el-dropdown-item>
</template> -->
<!-- 调拨出仓 -->
<template v-if="
include(scope.row.inWarehouseState, [213])
">
<el-dropdown-item @click.native="$router.push({path:'/order/transfer-warehousing/' + scope.row.orderId + '/' + 1 })" >{{$t('调拨出仓')}}</el-dropdown-item>
</template>
<!-- 调拨到仓 -->
<template v-if="
include(scope.row.inWarehouseState, [214])
">
<el-dropdown-item @click.native="$router.push({path:'/order/transfer-to-warehouse/' + scope.row.orderId + '/' + 2 })" >{{$t('调拨到仓')}}</el-dropdown-item>
</template>
</el-dropdown-menu>
</el-dropdown>
......@@ -199,8 +309,25 @@
<el-dropdown>
<el-button type="text">{{$t('操作')}}</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="printTagOrderId=scope.row.orderId">{{$t('打印标签')}}</el-dropdown-item>
<el-dropdown-item @click.native="printWarehouseReceiptOrderId=scope.row.orderId">{{$t('打印入仓单')}}</el-dropdown-item>
<!-- 打印标签 -->
<template v-if="
exclude(scope.row.status, [0]) &&
exclude(scope.row.shipmentState, [320,322,323]) &&
exclude(scope.row.abnormalState, [5,6,7,8])
">
<el-dropdown-item @click.native="printTagOrderId=scope.row.orderId">{{$t('打印标签')}}</el-dropdown-item>
</template>
<!-- 打印入仓单 -->
<template v-if="
exclude(scope.row.status, [0, 2]) &&
exclude(scope.row.shipmentState, [320,322,323]) &&
exclude(scope.row.abnormalState, [1, 5,6,7,8])
">
<el-dropdown-item @click.native="printWarehouseReceiptOrderId=scope.row.orderId">{{$t('打印入仓单')}}</el-dropdown-item>
</template>
<!-- 打印提单 -->
<el-dropdown-item @click.native="printLadingBillInfo={tidanNO: scope.row.tidanNo, transportType: scope.row.transportId}" :disabled="!scope.row.tidanNo">{{$t('打印提单')}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
......@@ -340,7 +467,16 @@ export default {
batchWarehouseAdjustment(){
return this.multipleSelection.length > 0 && this.multipleSelection.every(e => e.status === 5)
},
include(){
return (state, arr) => {
return arr.indexOf(state) > -1
}
},
exclude(){
return (state, arr) => {
return arr.indexOf(state) == -1
}
}
},
created() {
this.getTransportFromRoute()
......
......@@ -214,6 +214,8 @@ export default {
getOrderSpecial(){
getOrderSpecial(this.form.orderItemId).then(r => {
this.form = r.data
this.form.freight = ''
this.form.clearanceFreight = ''
})
},
getOrderSpecialByApproveId(){
......
......@@ -79,9 +79,11 @@
prop="address"
label="操作">
<template v-slot="{row}">
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/discount/${row.orderItemId}?orderId=${row.orderId}`)">优惠申请</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/specialCommission/${row.orderItemId}`)">佣金规则</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/discount1/${row.orderItemId}?orderId=${row.orderId}&discount=1`)">管理折扣</el-button>
<template v-if="row.originalSeaFreight !== 0 && row.originalClearanceFreight !== 0">
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/discount/${row.orderItemId}?orderId=${row.orderId}`)">优惠申请</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/specialCommission/${row.orderItemId}`)">佣金规则</el-button>
<el-button size="mini" type="text" v-hasPermi="['ecw:order:update']" @click="$router.push(`/order/discount1/${row.orderItemId}?orderId=${row.orderId}&discount=1`)">管理折扣</el-button>
</template>
</template>
</el-table-column>
......
......@@ -76,11 +76,12 @@
<template v-slot="{ row, column, $index }">
<el-button v-if="order.status === 5" size="mini" type="text" @click="handleWarehousing($index)">修改</el-button>
<template v-else>
<el-button v-if="orderItemList[$index] && orderItemList[$index].orderWarehouseInBackItemDoList && orderItemList[$index].orderWarehouseInBackItemDoList.length > 0" size="mini" type="text" @click="handleWarehousing($index)">追加</el-button>
<template v-if="orderItemList[$index] && orderItemList[$index].orderWarehouseInBackItemDoList && orderItemList[$index].orderWarehouseInBackItemDoList.length > 0">
<el-button size="mini" type="text" @click="handleWarehousing($index)">追加</el-button>
<el-button size="mini" type="text" @click="handleWarehousingReturn(row)">退仓</el-button>
</template>
<el-button v-else size="mini" type="text" @click="handleWarehousing($index)">入仓</el-button>
<el-button size="mini" type="text" @click="handleWarehousingReturn(row)">退仓</el-button>
</template>
</template>
</el-table-column>
</el-table>
......
......@@ -29,27 +29,27 @@
// TODO
</el-form-item> -->
<el-form-item :label="$t('运输方式')" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" />
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" clearable />
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="shippingChannelId">
<el-select v-model="queryParams.shippingChannelId" clearable>
<el-option v-for="item in channelList" :key="item.id" :label="item.nameZh" :value="item.channelId" />
<el-option v-for="item in channelList" :key="item.id" :label="$l(item, 'name')" :value="item.channelId" />
</el-select>
</el-form-item>
<el-form-item :label="$t('始发地')" prop="startCityId">
<el-select v-model="queryParams.startCityId" clearable>
<el-option v-for="city in startCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
<el-option v-for="city in startCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('目的地')" prop="destCityId">
<el-select v-model="queryParams.destCityId" clearable>
<el-option v-for="city in destCityList" :key="city.id" :label="city.titleZh" :value="city.id" />
<el-option v-for="city in destCityList" :key="city.id" :label="$l(city, 'title')" :value="city.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('审核状态')" prop="auditStatus">
<dict-selector :type="DICT_TYPE.ECW_PRICE_AUDIT_STATUS" v-model="queryParams.auditStatus" />
<dict-selector :type="DICT_TYPE.ECW_PRICE_AUDIT_STATUS" v-model="queryParams.auditStatus" clearable/>
</el-form-item>
<el-form-item :label="$t('状态')" prop="status">
// TODO
......
......@@ -44,10 +44,10 @@
<el-option v-for="dict in this.getDictDatas('company_type')"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select-->
<dict-selector :type="DICT_TYPE.ECW_COMPANY_TYPE" v-model="queryParams.companyType" />
<dict-selector :type="DICT_TYPE.ECW_COMPANY_TYPE" v-model="queryParams.companyType" clearable />
</el-form-item>
<el-form-item :label="$t('合作类型')" prop="cooperationType">
<dict-selector :type="DICT_TYPE.ECW_COOPERATION_TYPE" v-model="queryParams.cooperationType" />
<dict-selector :type="DICT_TYPE.ECW_COOPERATION_TYPE" v-model="queryParams.cooperationType" clearable/>
<!--el-select v-model="queryParams.cooperationType" placeholder="请选择合作类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select-->
......
......@@ -318,7 +318,7 @@ export default {
|| this.form.type === SystemMenuTypeEnum.MENU) {
// 如果是外链,则不进行校验
const path = this.form.path
if (path.indexOf('http://') === -1 || path.indexOf('https://') === -1) {
if (path && path.indexOf('http://') === -1 || path.indexOf('https://') === -1) {
// 父权限为根节点,path 必须以 / 开头
if (this.form.parentId === 0 && path.charAt(0) !== '/') {
this.$modal.msgSuccess('前端必须以 / 开头')
......
......@@ -3,9 +3,9 @@
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="来源" prop="fromId">
<!-- <el-form-item label="来源" prop="fromId">
<el-input v-model="queryParams.fromId" placeholder="请输入站内信来源" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
</el-form-item>-->
<el-form-item label="发送时间">
<el-date-picker v-model="dateRangeSendTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
......@@ -39,7 +39,7 @@
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="" align="center" prop="id" />
<el-table-column label="来源" align="center" prop="fromId" />
<!-- <el-table-column label="来源" align="center" prop="fromId" />-->
<el-table-column label="发送时间" align="center" prop="sendTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.sendTime) }}</span>
......
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