Commit cf4ca788 authored by Smile's avatar Smile

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

parents 1536c0d1 8e9cb974
......@@ -5,7 +5,7 @@ NODE_ENV = 'production'
VUE_APP_TITLE = 捷道管理系统 - 测试版
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'http://127.0.0.1:48080'
VUE_APP_BASE_API = 'http://admdp.groupage.cn'
# VUE_APP_BASE_API = 'http://110.41.143.128:48080'
# VUE_APP_BASE_API = '/api'
......
......@@ -6,7 +6,7 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://devapi.jd.qipx.top'
VUE_APP_BASE_API = 'http://admdp.groupage.cn'
# VUE_APP_BASE_API = 'https://apitest.groupage.cn'
# VUE_APP_BASE_API = 'http://110.41.143.128:48080'
# VUE_APP_BASE_API = 'http://127.0.0.1:48080'
......
......@@ -189,3 +189,21 @@ export function getReleaseTypeUpdateInfo(orderId) {
method: "get"
})
}
//获得控货订单列表查询订单分页
export function getCargoControlDetailListPage(params) {
return request({
url: "/ecw/order-cargo-control-pick/cargo/control/orderDetail",
method: "get",
params
})
}
//查询控货订单列表统计
export function statisticsOrderControl(params) {
return request({
url: "/ecw/order-cargo-control-pick/cargo/control/statistics",
method: "get",
params
})
}
<template>
<div v-if="!item.hidden">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<template v-if="hasOneShowingChild(item.children, item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" :badge="badge" />
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{ 'submenu-title-noDropdown': !isNest }">
<item :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)" :title="$l(onlyOneChild.meta, 'title')" :badge="badge" />
</el-menu-item>
</app-link>
</template>
......@@ -12,27 +12,20 @@
<template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$l(item.meta, 'title')" :badge="badge" />
</template>
<sidebar-item
v-for="child in item.children"
:key="child.path"
:is-nest="true"
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
/>
<sidebar-item v-for="(child, index) in item.children" :key="index" :is-nest="true" :item="child" :base-path="resolvePath(child.path)" class="nest-menu" />
</el-submenu>
</div>
</template>
<script>
import path from 'path'
import { isExternal } from '@/utils/validate'
import Item from './Item'
import AppLink from './Link'
import FixiOSBug from './FixiOSBug'
import path from "path"
import { isExternal } from "@/utils/validate"
import Item from "./Item"
import AppLink from "./Link"
import FixiOSBug from "./FixiOSBug"
export default {
name: 'SidebarItem',
name: "SidebarItem",
components: { Item, AppLink },
mixins: [FixiOSBug],
props: {
......@@ -47,24 +40,24 @@ export default {
},
basePath: {
type: String,
default: ''
default: ""
}
},
data() {
this.onlyOneChild = null
return {}
},
computed:{
badge(){
computed: {
badge() {
return this.$store.getters.badgeData[this.item.meta?.badgeField]
}
},
methods: {
hasOneShowingChild(children = [], parent) {
if (!children) {
children = [];
children = []
}
const showingChildren = children.filter(item => {
const showingChildren = children.filter((item) => {
if (item.hidden) {
return false
} else {
......@@ -81,7 +74,7 @@ export default {
// Show parent if there are no child router to display
if (showingChildren.length === 0) {
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
this.onlyOneChild = { ...parent, path: "", noShowingChildren: true }
return true
}
......
......@@ -67,6 +67,12 @@
</div>
</template>
</el-table-column>
<el-table-column :label="$t('关联单')" align="center" prop="hasRelationOrder" width="120">
<template slot-scope="scope">
<el-link type="primary" v-if="scope.row.hasRelationOrder" @click.native="showRelatedOrder(scope.row)">{{ $t('') }}</el-link>
<span v-else>{{ $t('') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('计划箱数')" align="center" prop="num">
<template slot-scope="scope">
{{getTotlContent(scope.row,['num'])}}
......@@ -74,7 +80,7 @@
</el-table-column>
<el-table-column :label="$t('实装箱数')" align="center" prop="installNum">
<template slot-scope="scope">
{{ scope.row.installNum }}{{$t('')}}
{{ scope.row.installNum }}{{$t('')}}<span v-if="scope.row.mixStatus === 1">{{$t('混箱')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('体积')" align="center" prop="volume">
......@@ -237,12 +243,15 @@
<!-- 拆单 -->
<splitOrder v-bind="$attrs" v-on="$listeners" :shipmentObj="shipmentObj" v-if="dialogConfig.type === 'splitOrder' && dialogConfig.dialogVisible" :currRow="currRow" @closeDialog2="closeDialog2" />
</el-dialog>
<!-- 关联单 -->
<realated-order :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
</div>
</template>
<script>
import dayjs from "dayjs";
import supplementOrder from "./supplementOrder.vue";
import RealatedOrder from "../../../shippingSea/nodePage/tally/realatedOrder.vue";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getbox } from "@/api/ecw/box";
import {
......@@ -280,12 +289,14 @@ export default {
supplementOrder,
splitOrder,
WorkFlow,
RealatedOrder,
},
props: {
shipmentObj: Object,
},
data() {
return {
showRelatedItemId: null,
// 表格数据
listData: [],
// 表格数据
......@@ -524,6 +535,10 @@ export default {
});
}
},
// 显示关联单
showRelatedOrder(row) {
this.showRelatedItemId = row.orderId
},
/* 移出 */
moveOut(row) {
let params = {
......
......@@ -278,6 +278,7 @@ export default {
let params = {
secId: this.partData.id,
shipmentId: this.$attrs.shipmentObj.id,
isTally: this.$attrs.shipmentObj.isTally,
orderId: item.orderId,
};
if (type === "all") {
......@@ -354,6 +355,7 @@ export default {
createSection({
shipmentId: this.$attrs.shipmentObj.id,
isCover: 1,
isTally: this.$attrs.shipmentObj.isTally
}).then((res) => {
serviceMsg(res, this).then(() => {
this.getSecGoods();
......
......@@ -36,6 +36,21 @@ export default {
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["slSettlementTime", "slSettledTime"]);
// 2024-12-13,可结算和已结算默认赋值当前完整时间
// 获取当前时间精确至[年、月、日、时、分、秒]
let nTime = new Date();
let nYear = nTime.getFullYear();
let nMonth = nTime.getMonth() + 1;
let nDay = nTime.getDate();
let nHour = nTime.getHours();
let nMin = nTime.getMinutes();
let nSecond = nTime.getSeconds();
if(oldData['slSettlementTime'] == undefined){
oldData['slSettlementTime'] = nYear+'-'+nMonth+'-'+nDay+' '+nHour+':'+nMin+':'+nSecond
}
if(oldData['slSettledTime'] == undefined){
oldData['slSettledTime'] = nYear+'-'+nMonth+'-'+nDay+' '+nHour+':'+nMin+':'+nSecond
}
this.settlementObj = oldData;
},
methods: {
......
......@@ -142,6 +142,7 @@
</el-row>
<el-row style="margin-top: 15px" class="operate-button">
<el-button size="small" type="primary" @click="supplementClick('supplementOrder',$t('补单'))">{{$t('补单')}}</el-button>
<el-button :disabled="shipmentObj.approvaling" size="small" type="primary" @click="tallyFinish">{{$t('完成理货')}}</el-button>
<el-button size="small" @click="cancel">{{$t('取消')}}</el-button>
</el-row>
......@@ -149,7 +150,9 @@
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body>
<batchTally v-if="dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
<!-- 补单 -->
<supplementOrder v-if="dialogConfig.type === 'supplementOrder' && dialogConfig.dialogVisible" v-bind="$attrs" :shipmentObj="shipmentObj" @supplementFinish="supplementFinish" />
<batchTally v-if="dialogConfig.type !== 'supplementOrder' && dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
</el-dialog>
<warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" />
<exception
......@@ -241,6 +244,7 @@
</template>
<script>
import supplementOrder from "../cabinet/supplementOrder.vue";
import batchTally from "./batchTally.vue";
import { getTallyList, tallyRemove, tallyCommit, getOrderDetailByBoxNo } from "@/api/ecw/boxSea";
import { checkInfoSingleCreate, checkInfoBatchCreate, getOrderTagList, checkInfoSingleDelete, checkInfoBatchDelete } from "@/api/ecw/boxAir";
......@@ -255,6 +259,7 @@ export default {
inheritAttrs: false,
components: {
Exception,
supplementOrder,
batchTally,
WarehouseDetail,
RealatedOrder,
......@@ -397,6 +402,15 @@ export default {
checkboxSelect(selection) {
this.selectedRows = selection;
},
/** 点击补单 */
supplementClick(type, title) {
this.shipmentObj.isTally = 1
this.showDialog(type);
},
/* 补单完成 */
supplementFinish() {
this.closeDialog();
},
// 理货点击
tallyClick(type, data) {
if(this.shipmentObj.approvaling){
......@@ -486,11 +500,17 @@ export default {
// 打开弹窗
showDialog(type) {
switch (type) {
case "supplementOrder":
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", this.$t("补单"));
break;
case "batchTally":
this.$set(this.dialogConfig, "fullscreen", false);
this.$set(this.dialogConfig, "title", this.$t("批量理货"));
this.$set(this.dialogConfig, "width", "500px");
break;
case "singleTally":
this.$set(this.dialogConfig, "fullscreen", false);
this.$set(this.dialogConfig, "title", this.$t("理货确认"));
this.$set(this.dialogConfig, "width", "500px");
break;
......
......@@ -67,6 +67,12 @@
</div>
</template>
</el-table-column>
<el-table-column :label="$t('关联单')" align="center" prop="hasRelationOrder" width="120">
<template slot-scope="scope">
<el-link type="primary" v-if="scope.row.hasRelationOrder" @click.native="showRelatedOrder(scope.row)">{{ $t('') }}</el-link>
<span v-else>{{ $t('') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('计划箱数')" align="center" prop="num">
<template slot-scope="scope">
{{getTotlContent(scope.row,['num'])}}
......@@ -74,7 +80,7 @@
</el-table-column>
<el-table-column :label="$t('实装箱数')" align="center" prop="installNum">
<template slot-scope="scope">
{{ scope.row.installNum }}{{$t('')}}
{{ scope.row.installNum }}{{$t('')}}<span v-if="scope.row.mixStatus === 1">{{$t('混箱')}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('体积')" align="center" prop="volume">
......@@ -237,12 +243,15 @@
<!-- 拆单 -->
<splitOrder v-bind="$attrs" v-on="$listeners" :shipmentObj="shipmentObj" v-if="dialogConfig.type === 'splitOrder' && dialogConfig.dialogVisible" :currRow="currRow" @closeDialog2="closeDialog2" />
</el-dialog>
<!-- 关联单 -->
<realated-order :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
</div>
</template>
<script>
import dayjs from "dayjs";
import supplementOrder from "./supplementOrder.vue";
import RealatedOrder from "../tally/realatedOrder.vue";
import { getCabinetPage } from "@/api/ecw/cabinet";
import { getbox } from "@/api/ecw/box";
import {
......@@ -280,12 +289,14 @@ export default {
supplementOrder,
splitOrder,
WorkFlow,
RealatedOrder,
},
props: {
shipmentObj: Object,
},
data() {
return {
showRelatedItemId: null,
// 表格数据
listData: [],
// 表格数据
......@@ -524,6 +535,10 @@ export default {
});
}
},
// 显示关联单
showRelatedOrder(row) {
this.showRelatedItemId = row.orderId
},
/* 移出 */
moveOut(row) {
let params = {
......
......@@ -303,6 +303,7 @@ export default {
secId: this.partData.id,
shipmentId: this.$attrs.shipmentObj.id,
orderId: item.orderId,
isTally: this.$attrs.shipmentObj.isTally,
isCover: 1
};
if (type === "all") {
......@@ -387,6 +388,7 @@ export default {
createSection({
shipmentId: this.$attrs.shipmentObj.id,
isCover: 1,
isTally: this.$attrs.shipmentObj.isTally
}).then((res) => {
serviceMsg(res, this).then(() => {
this.getSecGoods();
......
......@@ -36,6 +36,21 @@ export default {
const voName = this.$attrs.currNode.voName;
let oldData = { ...this.$attrs.shipmentObj[voName] };
oldData = formatDateStr(oldData, ["slSettlementTime", "slSettledTime"]);
// 2024-12-13,可结算和已结算默认赋值当前完整时间
// 获取当前时间精确至[年、月、日、时、分、秒]
let nTime = new Date();
let nYear = nTime.getFullYear();
let nMonth = nTime.getMonth() + 1;
let nDay = nTime.getDate();
let nHour = nTime.getHours();
let nMin = nTime.getMinutes();
let nSecond = nTime.getSeconds();
if(oldData['slSettlementTime'] == undefined){
oldData['slSettlementTime'] = nYear+'-'+nMonth+'-'+nDay+' '+nHour+':'+nMin+':'+nSecond
}
if(oldData['slSettledTime'] == undefined){
oldData['slSettledTime'] = nYear+'-'+nMonth+'-'+nDay+' '+nHour+':'+nMin+':'+nSecond
}
this.settlementObj = oldData;
},
methods: {
......
......@@ -129,6 +129,7 @@
</el-row>
<el-row style="margin-top: 15px" class="operate-button">
<el-button type="small" size="primary" @click="supplementClick('supplementOrder')">{{$t('补单')}}</el-button>
<el-button size="small" type="primary" @click="tallyFinish">{{$t('完成理货')}}</el-button>
<el-button size="small" @click="cancel">{{$t('取消')}}</el-button>
</el-row>
......@@ -136,14 +137,17 @@
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body>
<batchTally v-if="dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
<!-- 补单 -->
<supplementOrder v-if="dialogConfig.type === 'supplementOrder' && dialogConfig.dialogVisible" v-bind="$attrs" :shipmentObj="shipmentObj" @supplementFinish="supplementFinish" />
<batchTally v-if="dialogConfig.type !== 'supplementOrder' && dialogConfig.dialogVisible" v-bind="$attrs" @closeDialog="closeDialog" :type="dialogConfig.type" :tallyRows="tallyRows" :shipmentObj="shipmentObj" />
</el-dialog>
<warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" />
<realated-order :order="order" :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
<realated-order :orderItemId="showRelatedItemId" v-if="showRelatedItemId" @close="showRelatedItemId=null"></realated-order>
</div>
</template>
<script>
import supplementOrder from "../cabinet/supplementOrder.vue";
import batchTally from "./batchTally.vue";
import { getTallyList, tallyRemove, tallyCommit } from "@/api/ecw/boxSea";
import { formatDate, serviceMsg } from "../../utils";
......@@ -155,6 +159,7 @@ export default {
name: "tally",
inheritAttrs: false,
components: {
supplementOrder,
batchTally,
WarehouseDetail,
RealatedOrder,
......@@ -253,6 +258,15 @@ export default {
checkboxSelect(selection) {
this.selectedRows = selection;
},
/** 点击补单 */
supplementClick(type, title) {
this.shipmentObj.isTally = 1
this.showDialog(type);
},
/* 补单完成 */
supplementFinish() {
this.closeDialog();
},
// 理货点击
tallyClick(type, data) {
if (type === "batch") {
......@@ -339,11 +353,17 @@ export default {
// 打开弹窗
showDialog(type) {
switch (type) {
case "supplementOrder":
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", this.$t("补单"));
break;
case "batchTally":
this.$set(this.dialogConfig, "fullscreen", false);
this.$set(this.dialogConfig, "title", this.$t("批量理货"));
this.$set(this.dialogConfig, "width", "500px");
break;
case "singleTally":
this.$set(this.dialogConfig, "fullscreen", false);
this.$set(this.dialogConfig, "title", this.$t("理货确认"));
this.$set(this.dialogConfig, "width", "500px");
break;
......
......@@ -213,19 +213,27 @@
</el-col>
<el-col :span="12">
<el-form-item :label="$t('主营类别')" prop="productTypes">
<el-form-item :label="$t('主营类别')" prop="products">
<div style="overflow: hidden">
<div style="margin-bottom: 10px" v-for="(ITEM, INDEX) in form.products" :key="INDEX">
<el-row :gutter="10">
<el-col :span="11">
<el-select @change="change" v-model="form.productTypes" filterable multiple :placeholder="$t('请选择产品类别')">
<el-col :span="9">
<el-select @change="change(INDEX, $event)" v-model="form.products[INDEX].typeId" filterable :placeholder="$t('请选择产品类别')">
<el-option :label="isChinese ? item.titleZh : item.titleEn" :value="item.id" v-for="item in productTypeList" :key="item.id" />
</el-select>
</el-col>
<el-col :span="11">
<el-select @change="productIdsChange" multiple filterable clearable v-model="form.productIds" :placeholder="$t('请选择')">
<el-option :label="`${isChinese ? item.typeTitleZh : item.typeTitleEn}: ${item.titleZh}`" :value="parseInt(item.id)" v-for="item in productList" :key="item.id" />
<el-col :span="9">
<el-select @change="productIdsChange(INDEX, $event)" multiple filterable clearable v-model="form.products[INDEX].productIds" :placeholder="$t('请选择')">
<el-option :label="`${item.titleZh}`" :value="parseInt(item.id)" v-for="item in form.products[INDEX].productList" :key="item.id" />
</el-select>
</el-col>
<el-col :span="6">
<el-button type="danger" @click="form.products.splice(INDEX, 1)" style="padding: 10px" :disabled="!INDEX"><i class="el-icon-minus"></i></el-button>
<el-button type="primary" @click="handleAddProduct" style="padding: 10px" v-if="INDEX === form.products.length - 1"><i class="el-icon-plus"></i></el-button>
</el-col>
</el-row>
</div>
</div>
</el-form-item>
</el-col>
......@@ -695,8 +703,8 @@ export default {
}
// 掉入公海时间
this.enterOpenSeaTime = this.form.estimateEnterOpenSeaTime || this.form.enterOpenSeaTime || undefined
if (!this.form.customerService || (this.form.customerService !== user.state.id)){
console.log(!this.form.customerService? "当前客户没有客户经理" : "与当前登录用户的客户经理不同")
if (!this.form.customerService || this.form.customerService !== user.state.id) {
console.log(!this.form.customerService ? "当前客户没有客户经理" : "与当前登录用户的客户经理不同")
// 当前客户没有客户经理,或者与当前登录用户的客户经理不同, 可以不校验部分必填字段
// 2024-12-03 客户-编辑,当客户所属客户经理非当前用户,保存必填校验去掉客户类别,常用提货网点,业务国家,主营类别
// 2024-12-05 客户-编辑,当客户所属客户经理非当前用户,保存必填校验去补充掉竞争对手
......@@ -760,7 +768,7 @@ export default {
}
})
// 判断当前客登录用户是否为当前客户的客户经理
this.getProductListFn([])
this.getProductListFn(0, [undefined])
} else {
this.getZhongPao()
// 新建客户
......@@ -768,7 +776,8 @@ export default {
if (this.isCustomerServiceConfirmed) {
this.form.customerService = this.userId
}
this.getProductListFn([])
this.form.products.push({ typeId: undefined, productIds: [], productList: [] })
this.getProductListFn(0, [undefined])
}
getNodeList().then((r) => {
......@@ -806,6 +815,13 @@ export default {
form: {},
// 表单校验
rules: {
products: [
{
required: true,
trigger: "blur",
validator: this.productsValidator
}
],
name: [
{
required: true,
......@@ -906,7 +922,7 @@ export default {
// 网点
nodeList: [],
productTypeList: [],
productList: [],
productList: {},
showZhong: false,
showZhong1: false,
showPao: false,
......@@ -941,25 +957,31 @@ export default {
deleteEmail(row, index) {
row.splice(index, 1)
},
change(val) {
this.form.productIds = []
this.getProductListFn(val)
change(INDEX, val) {
this.form.products[INDEX].productIds = []
this.getProductListFn(INDEX, [val])
this.$refs["form"].validateField("products")
},
getProductListFn(val) {
getProductList({ typeIds: val }).then((r) => {
this.productList = r.data
getProductListFn(INDEX, val) {
getProductList({ typeIds: !val[0] ? [] : val }).then((r) => {
this.form.products[INDEX].productList = r.data
})
},
productIdsChange(val) {
console.log(val)
let typeIds = this.productList.filter((item) => val.indexOf(item.id) > -1).map((item) => item.typeId)
handleAddProduct() {
this.form.products.push({ typeId: undefined, productIds: [], productList: [] })
this.getProductListFn(this.form.products.length - 1, [undefined])
},
productIdsChange(INDEX, val) {
let typeIds = this.form.products[INDEX].productList.filter((item) => val.indexOf(item.id) > -1).map((item) => item.typeId)
typeIds = [...new Set(typeIds)]
console.log(typeIds)
typeIds.forEach((item) => {
if (this.form.productTypes.indexOf(item) < 0) {
this.form.productTypes.push(item)
let typeId = undefined
if (typeIds.length) {
typeId = typeIds[0]
}
if (typeId !== this.form.products[INDEX].typeId) {
this.form.products[INDEX].typeId = typeId
this.getProductListFn(INDEX, [typeId])
}
})
},
deleteBankData(index) {
this.form.customerBanks.splice(index, 1)
......@@ -992,6 +1014,22 @@ export default {
this.customerSelect = res.data.list
})
},
productsValidator(rule, value, callback) {
let r = this.form.products.some((item) => {
if (!item.typeId) {
callback(new Error(this.$t("主营类别不能为空")))
return true
}
})
let typeIds = this.form.products.map((item) => item.typeId)
if (new Set(typeIds).size !== typeIds.length) {
callback(new Error(this.$t("主营类别不能重复")))
return
}
if (!r) {
callback()
}
},
phoneValidator(rule, value, callback) {
if (!value) {
return callback(new Error(this.$t("请输入联系方式")))
......@@ -1105,6 +1143,9 @@ export default {
this.$modal.msgError(this.$t("请重新选择主要竞争对手"))
return
}
if (this.form.competitorIds == 0 && !this.potential) {
return
}
// 重货标准和泡货标准,未打开就不传,提交前清空一下
if (!this.showZhong) {
......@@ -1212,6 +1253,7 @@ export default {
productTypes: [],
pickupPoints: [],
productIds: [],
products: [],
memberId: undefined,
birthday: undefined,
balance: undefined,
......@@ -1279,9 +1321,15 @@ export default {
competitorIds: Number(response.data.competitorIds),
productTypes: this.stringArrToNumberArr(response.data.productTypes)
}
if (this.form.productTypes.length) {
this.getProductListFn(this.form.productTypes)
if (!this.form.products) {
this.form.products = []
}
if (!this.form.products.length) {
this.form.products.push({ typeId: undefined, productIds: [], productList: [] })
}
this.form.products.forEach((ITEM, INDEX) => {
this.getProductListFn(INDEX, [ITEM.typeId])
})
console.log(this.form)
......
......@@ -164,8 +164,8 @@
<el-date-picker type="datetimerange" clearable v-model="firstDealTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
</el-form-item>
<el-form-item :label="$t('创建时间')" v-show="showSearch">
<el-date-picker type="datetimerange" clearable v-model="dateRangeCreateTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
<el-form-item :label="$t('创建时间')">
<el-date-picker type="datetimerange" clearable v-model="createTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
</el-form-item>
<el-form-item style="padding-left: 20px">
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
......@@ -794,7 +794,6 @@ export default {
title: "",
// 是否显示弹出层
open: false,
dateRangeCreateTime: [],
// 查询参数
queryParams: {
pageNo: 1,
......@@ -890,6 +889,7 @@ export default {
enterOpenSeaTime: [],
customerServiceConfirmedTime: [],
firstDealTime: [],
createTime: [],
customerSelect: [],
recommended: [],
getNodeLists: [],
......@@ -966,14 +966,14 @@ export default {
queryParams.beginCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[0]
queryParams.endCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[1]
}
if (this.dateRangeCreateTime && this.dateRangeCreateTime.length == 2) {
queryParams.beginCreateTime = this.dateRangeCreateTime[0]
queryParams.endCreateTime = this.dateRangeCreateTime[1]
}
if (this.firstDealTime && this.firstDealTime.length == 2) {
queryParams.beginFirstDealTime = this.firstDealTime[0]
queryParams.endFirstDealTime = this.firstDealTime[1]
}
if (this.createTime && this.createTime.length == 2) {
queryParams.beginCreateTime = this.createTime[0]
queryParams.endCreateTime = this.createTime[1]
}
if (this.weightYearly.value) {
let key = "eqWeightYearly"
if (this.weightYearly.key == "leNumberKey") {
......@@ -1006,10 +1006,13 @@ export default {
},
created() {
console.log("created")
getCreditPage({ page: 1, rows: 999 }).then((r) => {
this.creditList = r.data.list
})
this.getList()
// 获取当前时间的年份开始时间与结束时间值,并赋值给创建时间,再查询当年创建的客户
this.getCurrentYearList()
// this.getList()
listServiceUser().then((r) => {
this.customerServiceList = r.data
})
......@@ -1062,6 +1065,17 @@ export default {
})
}
},
getCurrentYearList(){
const today = new Date();
const targetday_milliseconds = today.getTime();
today.setTime(targetday_milliseconds); //注意,这行是关键代码
const tYear = today.getFullYear();
console.log("年份:", tYear)
if (tYear){
this.createTime = [(tYear + "-01-01 00:00:00"),(tYear + "-12-31 23:59:59")]
}
this.getList()
},
//合并客户
handleMergeCus() {
this.customerMergeVisible = true
......@@ -1155,10 +1169,11 @@ export default {
//报价
quote(row) {
//lanbm 2024-05-23 添加报价是判断客户所属客户经理,不是就不能报价
if (row.customerService != this.userId) {
this.$message.error(this.$t("此客户属于其他客户经理名下的客户。"))
return
}
//jayden 2024-12-12 添加报价是判断客户所属客户经理,不是就不能报价(删除限制)
// if (row.customerService != this.userId) {
// this.$message.error(this.$t("此客户属于其他客户经理名下的客户。"))
// return
// }
//this.$router.push({path:'/offer/create',query:{id:row.id}})
this.$router.push({ path: "/offer/create", query: { customerId: row.id, customerType: row.type, type: 1 } }).then({
//this.$refs.push({path:'/customer-contacts/select',query:{pageNo:1,pageSize:10,searchKey:row.defaultContactPhone}})
......@@ -1169,12 +1184,7 @@ export default {
this.loading = true
// 处理查询参数}
let params = { ...this.queryParams, ...this.combinedQueryParams }
/*this.addBeginAndEndTime(
params,
this.dateRangeCreateTime,
"createTime",
false
);*/
// 执行查询
switch (this.$route.path) {
case "/customer/customer":
......@@ -1343,10 +1353,10 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.dateRangeCreateTime = []
this.enterOpenSeaTime = []
this.customerServiceConfirmedTime = []
this.firstDealTime = []
this.createTime = []
this.resetForm("queryForm")
this.queryParams = {
pageNo: 1,
......
......@@ -1126,10 +1126,11 @@ export default {
},
quote() {
const row = this.customer
if (row.customerService != this.userId) {
this.$message.error(this.$t("此客户属于其他客户经理名下的客户。"))
return
}
//jayden 2024-12-12 添加报价是判断客户所属客户经理,不是就不能报价(删除限制)
// if (row.customerService != this.userId) {
// this.$message.error(this.$t("此客户属于其他客户经理名下的客户。"))
// return
// }
this.$router.push({ path: "/offer/create", query: { customerId: row.id, customerType: row.type, type: 1 } })
},
......
......@@ -540,7 +540,7 @@
</el-form-item>
</el-form>
<choose-contact-dialog v-if="!!contactChooseType" :type="1" @choose="onContactChoose" @close="contactChooseType = null" />
<choose-contact-dialog v-if="!!contactChooseType" :type="2" @choose="onContactChoose" @close="contactChooseType = null" />
<quick-create-customer v-if="quickCreateType" :type="quickCreateType" @success="onContactChoose" @close="quickCreateType = null" />
</div>
</template>
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="100px" class="search-z">
<el-form-item :label="$t('订单号')" prop="orderNo">
<el-input
v-model.trim="noParam.value"
clearable
class="w-200"
:placeholder="$t('请输入订单号')"
@input="replaceSpace(noParam, 'value')"
@keyup.enter.native="getList">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.ORDER_QUERY_NO_FIELD" defaultable v-model="noParam.key" />
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('提单号')" prop="tidanNo">
<el-input
v-model.trim="noParam2.value"
clearable
class="w-200"
:placeholder="$t('请输入提单号')"
@input="replaceSpace(noParam2, 'value')"
@keyup.enter.native="getList">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.ORDER_QUERY_PROD_FIELD" defaultable v-model="noParam2.key" />
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('发货人')" prop="consignorKey">
<el-input v-model.trim="queryParams.consignorKey" :placeholder="$t('发货人')" clearable @keyup.enter.native="getList" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('收货人')" prop="consigneeKey">
<el-input v-model.trim="queryParams.consigneeKey" :placeholder="$t('收货人')" clearable @keyup.enter.native="getList" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('状态')" prop="pickStateList">
<dict-selector :type="DICT_TYPE.ECW_RELEASE_STATUS" multiple v-model="queryParams.pickStateList" @keyup.enter.native="getList" clearable class="w-200" />
</el-form-item>
<el-form-item :label="$t('放货日期')">
<el-date-picker v-model="dateCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone" v-show="showSearch">
<el-input v-model.trim="queryParams.consignorPhone" :placeholder="$t('发货人电话')" clearable @keyup.enter.native="getList" @input="queryParams.consignorPhone = queryParams.consignorPhone.replace(/\s+/g, '')" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consignorPhone" v-show="showSearch">
<el-input v-model.trim="queryParams.consigneePhone" :placeholder="$t('收货人电话')" clearable @keyup.enter.native="getList" @input="queryParams.consigneePhone = queryParams.consigneePhone.replace(/\s+/g, '')" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('复核日期')" v-show="showSearch">
<el-date-picker v-model="checkTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item :label="$t('控货状态')" prop="cargoControlStatusList" v-show="showSearch">
<dict-selector :type="DICT_TYPE.CONTROL_GOODS_STATUS" multiple v-model="queryParams.cargoControlStatusList" clearable class="w-200" />
</el-form-item>
<el-form-item :label="$t('订单状态')" prop="statusList" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ORDER_STATUS" multiple v-model="queryParams.statusList" clearable class="w-200" />
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="dynamicTransportIdList" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" multiple v-model="queryParams.dynamicTransportIdList" clearable class="w-200" />
</el-form-item>
<el-form-item :label="$t('始发仓')" prop="consignorPhone" v-show="showSearch">
<el-select v-model="queryParams.startWarehouseIds" multiple :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="destCountryIds" v-show="showSearch">
<el-select v-model="queryParams.destCountryIds" multiple :placeholder="$t('请选择目的国')" clearable>
<el-option v-for="item in AddressProvince" :key="item.guojia" :label="item.guojiaName" :value="item.guojia"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('目的城市')" prop="destCityIds" v-show="showSearch">
<el-select v-model="queryParams.destCityIds" multiple :placeholder="$t('请选择目的城市')" style="width: 200px" clearable>
<el-option v-for="item in AddressCity" :key="item.shi" :label="item.shiName" :value="item.shi"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="shippingChannelIdList" v-show="showSearch">
<el-select v-model="queryParams.shippingChannelIdList" multiple :placeholder="$t('请选择出货渠道')" clearable>
<el-option v-for="item in channelList" :label="$l(item, 'name')" :value="item.channelId" :key="item.channelId"></el-option>
</el-select>
</el-form-item>
<div class="flex pb-20" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ECW_BEGINTIME_TYPE_ENDTIME" v-model="dateFilterType" defaultable class="w-200 mr-5" />
<el-date-picker v-model="dateFilter" type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss" @change="getList"> </el-date-picker>
</div>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList" :loading="loading" class="ml-10">{{ $t("搜索") }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="15" v-if="statistics">
<!-- 订单列表显示搜索条件对应箱数、仓库实测、收款方数、重量 -->
{{ $t("合计:{totalNum}箱,{totalVolume}m³(测) {totalChargeVolume}m³(重) {totalWeight}KG(测), {totalChargeWeight}kg(收费)", statistics) }}
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="list" border @sort-change="sortChange">
<el-table-column :label="$t('序号')" width="50px">
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column :label="$t('订单号')" prop="orderNo" width="120px">
<template slot-scope="scope">
<router-link :to="`/order/detail?orderId=` + scope.row.orderId">{{ scope.row.orderNo }}</router-link>
</template>
</el-table-column>
<el-table-column :label="$t('发货人编号')" prop="consignerNumber" width="90px">
<template slot-scope="{ row }">
<router-link :to="`/customer/query/${row.consignerId}`" class="link-type">
{{ row.consignerNumber }}
</router-link>
</template>
</el-table-column>
<el-table-column :label="$t('收货人编号')" prop="consigneeNumber" width="90px">
<template slot-scope="{ row }">
<router-link :to="`/customer/query/${row.consigneeId}`" class="link-type">
{{ row.consigneeNumber }}
</router-link>
</template>
</el-table-column>
<el-table-column :label="$t('收货人')" prop="consigneeName" width="120px"/>
<el-table-column :label="$t('收货人电话')" prop="consigneePhone" width="140px">
<template slot-scope="{ row }"> +{{ row.consigneeCountryCode }} {{ row.consigneePhone }} </template>
</el-table-column>
<el-table-column :label="$t('入仓箱数')" prop="sumNum" sortable="custom" width="100px"></el-table-column>
<el-table-column :label="$t('放货箱数')" prop="pickNum" sortable="custom" width="100px" ></el-table-column>
<el-table-column :label="$t('体积') + '(m³)'" prop="pickVolume"></el-table-column>
<el-table-column :label="$t('收费体积') + '(m³)'" prop="chargeVolume" width="100px"></el-table-column>
<el-table-column :label="$t('重量') + '(KG)'" prop="pickWeight"></el-table-column>
<el-table-column :label="$t('收费重量') + '(KG)'" prop="chargeWeight" width="100px"></el-table-column>
<el-table-column :label="$t('状态')" prop="status">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_RELEASE_STATUS" :value="row.status" />
</template>
</el-table-column>
<el-table-column :label="$t('备注')" prop="remarks"></el-table-column>
<el-table-column :label="$t('操作人')" prop="operator" width="120px"></el-table-column>
<el-table-column :label="$t('放货日期')" prop="createTime" sortable="custom" width="150px">
<template slot-scope="{ row }">
{{ row.createTime | parseTime }}
</template>
</el-table-column>
<el-table-column :label="$t('复核日期')" prop="checkTime" sortable="custom" width="150px">
<template slot-scope="{ row }">
{{ row.checkTime | parseTime }}
</template>
</el-table-column>
<el-table-column :label="$t('控货状态')" prop="cargoControlStatus">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.CONTROL_GOODS_STATUS" :value="row.cargoControlStatus" />
</template>
</el-table-column>
<el-table-column :label="$t('始发仓')" prop="startTitleZh"></el-table-column>
<el-table-column :label="$t('运输方式-渠道/目的地')" align="center" prop="transportId" width="200px">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="row.transportId" />
<template v-if="row.channelName"> - {{ row.channelName }} </template>
/ {{ row.destCityTitleZh }}
</template>
</el-table-column>
<el-table-column :label="$t('卸柜/到仓时间')" prop="createTime" sortable="custom" width="150px">
<template slot-scope="{ row }">
{{ row.unloadTime | parseTime }}
</template>
</el-table-column>
<el-table-column :label="$t('操作')" width="300px">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 1" type="primary" size="mini" @click="edit(scope)">{{ $t("修改") }}</el-button>
<el-button v-if="scope.row.status == 1" type="danger" size="mini" @click="cancelCargoPick(scope)">{{ $t("取消") }}</el-button>
<el-button v-if="scope.row.status == 1" type="success" size="mini" @click="review(scope.row.id)">{{ $t("放货复核") }}</el-button>
<el-button v-if="scope.row.status == 3" type="danger" size="mini" @click="fallback(scope)">{{ $t("反复核") }}</el-button>
<el-button v-if="scope.row.status == 3" type="success" size="mini" @click="cargoControlPick(scope)">{{ $t("调货") }}</el-button>
<el-button v-if="[2, 4, 5, 6].indexOf(scope.row.status) > -1" type="primary" size="mini" @click="showApprovalDetail(scope.row)">{{ $t("审核详情") }}</el-button>
<el-button v-if="[2, 4, 5, 6].indexOf(scope.row.status) > -1" type="danger" size="mini" @click="cancelApproval(scope.row)">{{ $t("取消审核") }}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" />
<fallback v-if="fallbackIndex !== null" :order="detail" :index="fallbackIndex" @close="fallbackIndex = null" @success="onFallbackSuccess" />
<edit v-if="editIndex !== null" @close="editIndex = null" :order="detail" :index="editIndex" @success="onEditSuccess" />
<transfer-cargo v-if="cargoControlPickId !== null" :order-id="detail.orderId" :cargo-control-pick-id="cargoControlPickId" @close="cargoControlPickId = null" @success="onTransferCargoSuccess" />
<cancel-cargo v-if="!!cancelCargoPickId" :order="detail" :cargo-control-pick-id="cancelCargoPickId" @close="cancelCargoPickId = null" @success="onCancelCargoSuccess" />
</div>
</template>
<script>
import edit from "./components/CargoControlEdit.vue"
import {
review,
cancel,
cancelApproval,
getCargoControlDetailListPage,
getPickRleaseInfo,
statisticsOrderControl
} from "@/api/ecw/orderCargoControl"
import { parseTime } from "@/utils/ruoyi"
import Fallback from "./components/Fallback"
import TransferCargo from "@/views/ecw/order/components/TransferCargo"
import Template from "@/views/cms/template/index.vue"
import { getWarehouseList } from "@/api/ecw/warehouse"
import { getChannelList } from "@/api/ecw/channel"
import { getRegionList } from "@/api/ecw/order"
import CancelCargo from "@/views/ecw/order/components/CancelCargo.vue"
export default {
filters: { parseTime },
components: { CancelCargo, Template, edit, Fallback, TransferCargo },
data() {
return {
detail: null,
formData: {},
rules: {},
editIndex: null, // 修改索引
fallbackIndex: null, // 反复核索引
cargoControlPickId: null, // 调货ID
cancelCargoPickId: null ,// 取消返货ID
queryParams: {
page: 1,
rows: 10,
packageTypeArr: [],
channelIds: [],
goodsTypes: [],
field: null,
sort: null,
},
list: [],
loading: false,
// 显示搜索条件
showSearch: false,
// 编号搜索条件
noParam: {
key: "numberKey",
value: ""
},
noParam2: {
key: "prodKey",
value: ""
},
dateCreateTime: [],
checkTime: [],
exportWarehouseList: [],
channelList: [],
AddressProvince: [],
AddressCity: [],
dateFilterType: "", //日期筛选类别
dateFilter: [], //筛选日期
countryIdList: null,
destCityIdList: null,
destWarehouseIdList: null,
statistics: null, // 统计数据
// 总条数
total: 0,
sortProp: null,
sortType: null,
}
},
created() {
const year = new Date().getFullYear();
const firstDay = new Date(year, 0, 1); // 第一天,月份从0开始,所以是0
const lastDay = new Date(year, 11, 31); // 最后一天,月份从0开始,所以是11
let year1 = firstDay.getFullYear(); //得到年份
let month1 = (firstDay.getMonth() + 1).toString().padStart(2, "0"); //得到月份
let day1 = firstDay.getDate().toString().padStart(2, "0"); //得到日期
let year2 = lastDay.getFullYear(); //得到年份
let month2 = (lastDay.getMonth() + 1).toString().padStart(2, "0"); //得到月份
let day2 = lastDay.getDate().toString().padStart(2, "0"); //得到日期
this.dateCreateTime = [year1+'-'+month1+'-'+day1, year2+'-'+month2+'-'+day2]
this.getList()
getWarehouseList().then(({ data }) => {
this.exportWarehouseList = data.filter((item) => item.tradeType == '2' || item.type == '3')
})
getChannelList().then((res) => (this.channelList = res.data))
getRegionList(1, 1).then(({ data }) => {
this.AddressProvince = data
})
getRegionList(4, 4).then(({ data }) => {
this.AddressCity = data
})
},
methods: {
// 自动去除空格
replaceSpace(obj, field) {
obj[field] = obj[field].replace(/\s+/g, "")
},
/** 查询列表 */
getList() {
this.loading = true;
let timeParams = {}
if (this.dateFilterType && this.dateFilter) {
timeParams["begin" + this.dateFilterType] = this.dateFilter[0]
timeParams["end" + this.dateFilterType] = this.dateFilter[1]
}
// 处理查询参数
let params =Object.assign({}, this.queryParams, timeParams)
if (this.noParam.value) {
params[this.noParam.key] = this.noParam.value
}
if (this.noParam2.value) {
params[this.noParam2.key] = this.noParam2.value
}
this.addBeginAndEndTime(params, this.dateCreateTime, 'releaseTime');
this.addBeginAndEndTime(params, this.checkTime, 'checkTime');
// 执行查询
getCargoControlDetailListPage(params).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
statisticsOrderControl(params).then(response => {
this.statistics = response.data
});
},
sortChange(obj) {
if(obj.order==null) {
this.queryParams.field = null
} else {
this.queryParams.field = obj.prop; //排序字段名称
this.queryParams.sort = obj.order=="ascending"?0:1; //排序方式
}
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm")
this.queryParams = {
page: 1,
rows: 10
}
this.noParam.value = ""
this.noParam2.value = ""
this.dateFilter = []
this.checkTime = []
this.getList()
},
review(id) {
this.$confirm(this.$t("已核实放货信息,确认放货?"))
.then((res) => {
return review(id)
})
.then((res) => {
this.$message.success(this.$t("操作成功"))
this.getList()
})
},
unReview() {},
cancel(id) {
this.$confirm(this.$t("确定取消这条放货么?"))
.then((res) => {
return cancel(id)
})
.then((res) => {
this.$message.success(this.$t("操作成功"))
this.getList()
})
},
onEditSuccess() {
console.log("onEditSuccess")
this.getList()
this.editIndex = null
},
onFallbackSuccess() {
this.fallbackIndex = null
this.getList()
},
// 查看审核详情
showApprovalDetail(row) {
getPickRleaseInfo(row.orderId).then((res) => {
this.detail = res.data
this.$router.push("/bpm/process-instance/detail?id=" + this.getApproval(row.id,"formId"))
})
},
// 取消审核
cancelApproval(row) {
this.$confirm(this.$t("确定取消此申请么?"))
.then((res) => {
getPickRleaseInfo(row.orderId).then((res) => {
this.detail = res.data
let approvalId = this.getApproval(row.id)
return cancelApproval(approvalId, { reason: this.$t("") })
})
})
.then((res) => {
this.$message.success(this.$t("操作成功"))
this.getList()
})
},
// 根据id查找审核id
getApproval(id, field = "orderApprovalId") {
if (!this.detail.orderApprovalBackVOList || !this.detail.orderApprovalBackVOList.length) {
this.$message.error(this.$t("未找到审批ID"))
Promise.reject(this.$t("未找到审批ID"))
}
let item = this.detail.orderApprovalBackVOList.find((item) => {
let details = JSON.parse(item.details)
return details.cargoControlPickId == id && details.applyStatus == 1
})
console.log({ item })
return item[field]
},
onTransferCargoSuccess() {
this.cargoControlPickId = null
this.getList()
},
onCancelCargoSuccess() {
this.cancelCargoPickId = null
this.getList()
},
edit(scope) {
getPickRleaseInfo(scope.row.orderId).then((res) => {
this.detail = res.data
this.editIndex = scope.$index
})
},
cancelCargoPick(scope) {
getPickRleaseInfo(scope.row.orderId).then((res) => {
this.detail = res.data
this.cancelCargoPickId = scope.row.id
})
},
fallback(scope) {
getPickRleaseInfo(scope.row.orderId).then((res) => {
this.detail = res.data
this.fallbackIndex = scope.$index
})
},
cargoControlPick(scope) {
getPickRleaseInfo(scope.row.orderId).then((res) => {
this.detail = res.data
this.cargoControlPickId = scope.row.id
})
}
}
}
</script>
......@@ -124,6 +124,8 @@
<el-descriptions-item :label="$t('特殊要求备注')">
{{ order.packageRemarks }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions class="mr-10" border :column="2" :class="showMore?'showInfo':'hiddenInfo'" :labelStyle="{width:'110px'}" :contentStyle="{width:'150px'}">
<el-descriptions-item :label="$t('到仓数据')"> {{ order.checkNum }}{{ $t("箱") }} {{ order.checkWeight }}Kg {{ order.checkVolume }}m³ {{ order.checkQuantity }}{{ $t("个") }} </el-descriptions-item>
<el-descriptions-item :label="$t('提货数据')"> {{ order.pickNum }} {{ $t("箱") }} {{ order.pickRatio }}% </el-descriptions-item>
<el-descriptions-item :label="$t('送货时间')" v-if="!order.isExternalWarehouse">{{ order.deliveryDate }}</el-descriptions-item>
......
......@@ -1087,8 +1087,10 @@ export default {
// this.$set(this.form, 'drawee', 1)
// 清除收货人必填校验
this.$refs.form?.clearValidate("consigneeContactsId")
if (!this.initing){
this.setDefaultDrawee()
}
}
},
ccIdArr(arr) {
this.$set(this.form, 'ccIds', arr.join(","))
......@@ -1423,6 +1425,10 @@ export default {
this.form.lockConsigneeDay = null
this.form.lockConsigneeTime = null
this.form.firstStockedTime = null
this.form.adjustToStartWarehouseId = null
this.form.adjustToDestWarehouseId = null
this.form.destAdjustToStartWarehouseId = null
this.form.destAdjustToDestWarehouseId = null
// 状态重置
this.form.status = 0
this.form.cargoControlStatus = 0
......@@ -1438,6 +1444,7 @@ export default {
this.form.oldInWarehouseState = null
this.form.oldStatus = null
this.form.oldShipmentState = null
this.form.orderType = null
// 时间重置
this.form.takeTime = null
this.form.unloadTime = null
......@@ -1556,7 +1563,6 @@ export default {
newItem.num = item.num
newItem.worth = item.worth
newItem.boxGauge = item.boxGauge
newItem.brand = item.brand
newItem.brandType = item.brandType
}else {
newItem = item
......@@ -1628,7 +1634,9 @@ export default {
if (this.contactChooseType == 'consignor') {
this.noConsignee = contact.noConsignee
}
if (!this.initing) {
this.setDefaultDrawee()
}
this.contactChooseType = null
this.quickCreateType = null
if (this.form.lineId) this.getOfferData()
......@@ -1873,10 +1881,10 @@ export default {
// 校验手机号跟目的国是否匹配
if (this.hasConsignee && this.form.consigneeCountryCode && this.form.consigneePhone) {
if (this.form.consigneeCountryCode == "86" || this.form.consigneeCountryCode == "+86") {
this.$message.error(this.$t("控货订单的收货人手机号不能是国内号码"))
return
}
// if (this.form.consigneeCountryCode == "86" || this.form.consigneeCountryCode == "+86") {
// this.$message.error(this.$t("控货订单的收货人手机号不能是国内号码"))
// return
// }
const res = await checkCountryCode({
areaCode: this.form.consigneeCountryCode,
currencyId: this.form.destCountryId
......
......@@ -17,11 +17,11 @@
<!-- <el-form-item :label="$t('唛头')" prop="marks">
<el-input v-model="queryParams.marks" :placeholder="$t('唛头')" clearable @keyup.enter.native="handleQuery" />
</el-form-item> -->
<el-form-item :label="$t('发货人电话')" prop="consigneeKey">
<el-input v-model.trim="queryParams.consignorPhone" :placeholder="$t('发货人电话')" clearable @keyup.enter.native="handleQuery" class="w-200"/>
<el-form-item :label="$t('发货人电话')" prop="consignorPhone">
<el-input v-model.trim="queryParams.consignorPhone" :placeholder="$t('发货人电话')" clearable @keyup.enter.native="handleQuery" @input="queryParams.consignorPhone = queryParams.consignorPhone.replace(/\s+/g, '')" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('收货人电话')" prop="consigneeKey">
<el-input v-model.trim="queryParams.consigneePhone" :placeholder="$t('收货人电话')" clearable @keyup.enter.native="handleQuery" class="w-200"/>
<el-form-item :label="$t('收货人电话')" prop="consignorPhone">
<el-input v-model.trim="queryParams.consigneePhone" :placeholder="$t('收货人电话')" clearable @keyup.enter.native="handleQuery" @input="queryParams.consigneePhone = queryParams.consigneePhone.replace(/\s+/g, '')" class="w-200"/>
</el-form-item>
<el-form-item :label="$t('控货')" prop="isCargoControl" v-show="showSearch">
......@@ -340,7 +340,10 @@
<el-dropdown-menu slot="dropdown">
<!--出货订单编辑,shipmentState > 0表示出货后,inWarehouseState == 0 表示预装未审核或者是卸柜到仓 , shipmentState==307 表示已预装,待封柜, shipmentState==407 表示已预装,待封柜)-->
<template
v-if="scope.row.shipmentState > 0 && scope.row.inWarehouseState == 0 && scope.row.shipmentState != 305 && scope.row.shipmentState != 307 && scope.row.shipmentState != 407"
v-if="scope.row.shipmentState > 0 &&
scope.row.inWarehouseState == 0 &&
exclude(scope.row.auditType, [1, 2, 3, 4, 5, 6, 11, 23, 28, 31, 32]) &&
exclude(scope.row.shipmentState, [305, 307, 309, 310, 311, 313, 407,409,411])"
>
<el-dropdown-item
@click.native="handleUpdate(scope.row)"
......@@ -354,7 +357,7 @@
(scope.row.status < 12 ||
(scope.row.status == 12 &&
scope.row.shipmentState == 314)) &&
!scope.row.abnormalState &&
exclude(scope.row.auditType, [1, 2, 3, 4, 5, 6, 11, 23, 28, 31, 32]) &&
exclude(scope.row.inWarehouseState, [204, 205, 206]) &&
exclude(scope.row.shipmentState, [305, 307, 407])
"
......@@ -497,7 +500,7 @@
</template>
<!-- 入仓补充 -->
<template
v-if="scope.row.shipmentState > 0 && scope.row.inWarehouseState == 0 && scope.row.shipmentState != 305 && scope.row.shipmentState != 307 && scope.row.shipmentState != 407"
v-if="scope.row.shipmentState > 0 && scope.row.inWarehouseState == 0 && exclude(scope.row.shipmentState, [305, 307, 309, 310, 311, 313, 407,409,411])"
>
<el-dropdown-item
@click.native="$router.push('/order/warehousing-add?shipment=1&id=' + scope.row.orderId)"
......@@ -525,7 +528,8 @@
</template>
<!-- 入仓修改 -->
<template
v-if="scope.row.shipmentState > 0 && scope.row.inWarehouseState == 0 && scope.row.shipmentState != 305 && scope.row.shipmentState != 307 && scope.row.shipmentState != 407"
v-if="scope.row.shipmentState > 0 && scope.row.inWarehouseState == 0
&& exclude(scope.row.shipmentState, [305, 307, 309, 310, 311, 313, 407,409,411])"
>
<el-dropdown-item
@click.native="$router.push('/order/warehousing-update?shipment=1&id=' + scope.row.orderId)"
......
......@@ -26,7 +26,7 @@
@select="checkboxSelect"
@select-all="checkboxSelect"
>
<el-table-column type="selection" align="center" width="55" fixed="left" />
<el-table-column type="selection" align="center" width="55" fixed="left" :selectable="checkSelectable"/>
<!--入仓记录-->
<el-table-column type="expand">
<template slot-scope="props">
......@@ -690,7 +690,11 @@ export default {
this.getList();
});
},
// 批量打包
checkSelectable(row) {
console.log(this.wareItem(row.orderItemId).packStatus)
return this.wareItem(row.orderItemId).packStatus == 1
},
// 批量无需打包
noNeedPacks() {
this.$confirm("确认货物无需打包").then(() => {
if (this.selectedRows.length === 0) {
......
......@@ -92,9 +92,9 @@
</el-table-column>
<el-table-column :label="$t('模板编号')" align="center" prop="templateId">
<template slot-scope="{ row }">
<router-link :to="`/system/sms/sms-template?apiTemplateId=${row.apiTemplateId}`" class="link-type">
<el-button size="mini" type="text" @click="look(row.templateId)">
{{ row.templateId }}
</router-link>
</el-button>
</template>
</el-table-column>
<el-table-column :label="$t('短信类型')" align="center" prop="templateType">
......@@ -196,12 +196,80 @@
</div>
</el-dialog>
<!-- 预览模板 -->
<el-dialog :visible.sync="open2" width="500px" append-to-body>
<el-form label-width="140px">
<el-form-item :label="$t('短信渠道编号')" prop="channelId">
<el-select v-model="form2.channelId" :placeholder="$t('请选择短信渠道编号')">
<el-option v-for="channel in channelOptions"
:key="channel.id" :value="channel.id"
:label="channel.signature + '【' + getDictDataLabel(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE, channel.code) + '】'" />
</el-select>
</el-form-item>
<el-form-item :label="$t('发送类型')" prop="messageType">
<el-select v-model="form2.messageType" placeholder="请选择发送类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_TEMPLATE_MESSAGE_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item :label="$t('短信类型')" prop="type">
<el-select v-model="form2.type" :placeholder="$t('请选择短信类型')">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item label="节点" prop="nodeValue">
<el-select v-model="form2.nodeValue" placeholder="请选择节点类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_NODE_NODE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId">
<el-select v-model="form2.transportId" :placeholder="$t('请选择运输方式类型')">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_TRANSPORT_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-option key="0" label="无" :value="parseInt(0)" />
</el-select>
</el-form-item>
<el-form-item :label="$t('模板编号')" prop="code">
<el-input v-model="form2.code" :placeholder="$t('请输入模板编号')" />
</el-form-item>
<el-form-item :label="$t('模板名称')" prop="name">
<el-input v-model="form2.name" :placeholder="$t('请输入模板名称')" />
</el-form-item>
<el-form-item :label="$t('开启状态')" prop="status">
<el-radio-group v-model="form2.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="短信API模板编号" prop="apiTemplateId">
<el-input v-model="form2.apiTemplateId" placeholder="请输入短信 API 的模板编号" />
</el-form-item>
<el-form-item :label="$t('模板内容')" prop="content">
<el-input type="textarea" v-model="form2.content" :placeholder="$t('请输入模板内容')" />
</el-form-item>
<el-form-item :label="$t('备注')" prop="remark">
<el-input v-model="form2.remark" :placeholder="$t('请输入备注')" />
</el-form-item>
<el-form-item label="语言" prop="language">
<el-select v-model="form2.language" placeholder="请选择语言">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_TEMPLATE_LANGUAGE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { getSmsLogPage, exportSmsLogExcel } from "@/api/system/sms/smsLog";
import { getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
import {getSmsTemplate} from '@/api/system/sms/smsTemplate'
export default {
name: "SmsLog",
......@@ -239,6 +307,8 @@ export default {
},
// 短信渠道
channelOptions: [],
form2: {},
open2: false,
};
},
created() {
......@@ -310,6 +380,12 @@ export default {
}
}
return this.$t('找不到签名:') + channelId;
},
look(templateId) {
getSmsTemplate(templateId).then(response => {
this.form2 = response.data
this.open2 = true
});
}
}
};
......
......@@ -42,6 +42,15 @@
<el-option key="1" label="是" :value="parseInt(1)" />
</el-select>
</el-form-item>
<el-form-item label="目的仓" prop="extra">
<el-cascader
:options="regionTreeList2"
collapse-tags
v-model="queryParams.extra2"
:props="cascaderProps"
clearable>
</el-cascader>
</el-form-item>
<el-form-item :label="$t('创建时间')">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
......@@ -102,32 +111,43 @@
{{ scope.row.isOrders == 0 ?'':'' }}
</template>
</el-table-column>
<el-table-column label="模板1" align="center" prop="templateIdOne">
<el-table-column label="模板1" align="center" prop="templateIdOne" width="130">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="look(smsTemplateMap.get(scope.row.templateIdOne))">
<el-link type="primary" @click="look(smsTemplateMap.get(scope.row.templateIdOne))">
{{ scope.row.templateIdOne!=null?smsTemplateMap.get(scope.row.templateIdOne)!=null?smsTemplateMap.get(scope.row.templateIdOne).name:'':'' }}
</el-button>
</el-link>
</template>
</el-table-column>
<el-table-column label="模板2" align="center" prop="templateIdTwo">
<el-table-column label="模板2" align="center" prop="templateIdTwo" width="130">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="look(smsTemplateMap.get(scope.row.templateIdTwo))">
<el-link type="primary" @click="look(smsTemplateMap.get(scope.row.templateIdTwo))">
{{ scope.row.templateIdTwo!=null?smsTemplateMap.get(scope.row.templateIdTwo)!=null?smsTemplateMap.get(scope.row.templateIdTwo).name:'':'' }}
</el-button>
</el-link>
</template>
</el-table-column>
<el-table-column label="模板3" align="center" prop="templateIdThree">
<el-table-column label="模板3" align="center" prop="templateIdThree" width="130">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="look(smsTemplateMap.get(scope.row.templateIdThree))">
<el-link type="primary" @click="look(smsTemplateMap.get(scope.row.templateIdThree))">
{{ scope.row.templateIdThree!=null?smsTemplateMap.get(scope.row.templateIdThree)!=null?smsTemplateMap.get(scope.row.templateIdThree).name:'':'' }}
</el-button>
</el-link>
</template>
</el-table-column>
<el-table-column label="模板4" align="center" prop="templateIdFour">
<el-table-column label="模板4" align="center" prop="templateIdFour" width="130">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="look(smsTemplateMap.get(scope.row.templateIdFour))">
<el-link type="primary" @click="look(smsTemplateMap.get(scope.row.templateIdFour))">
{{ scope.row.templateIdFour!=null?smsTemplateMap.get(scope.row.templateIdFour)!=null?smsTemplateMap.get(scope.row.templateIdFour).name:'':'' }}
</el-button>
</el-link>
</template>
</el-table-column>
<el-table-column label="目的仓" align="center" width="200">
<template slot-scope="scope" v-if="scope.row.extra!=null">
<el-cascader
style="width: 180px"
:options="regionTreeList2"
collapse-tags
v-model="JSON.parse(scope.row.extra).receiveAddrList"
:props="cascaderProps">
</el-cascader>
</template>
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
......@@ -135,6 +155,7 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('备注')" align="center" prop="remark" />
<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-edit" @click="test(scope.row)">测试</el-button>
......@@ -159,13 +180,28 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId" @change="handleChangeTransportId">
<el-select v-model="form.transportId" :placeholder="$t('请选择运输方式类型')">
<el-form-item label="是否匹配运输方式" prop="isTransport">
<el-select v-model="form.isTransport" @change="handleChangeIsTransport">
<el-option key="0" label="否" :value="parseInt(0)" />
<el-option key="1" label="是" :value="parseInt(1)" />
</el-select>
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId">
<el-select v-model="form.transportId" :placeholder="$t('请选择运输方式类型')" @change="handleChangeTransportId">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_TRANSPORT_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-option key="0" label="其他" :value="parseInt(0)" />
</el-select>
</el-form-item>
<el-form-item label="多订单" prop="isOrders">
<el-select v-model="form.isOrders">
<el-option key="0" label="否" :value="parseInt(0)" />
<el-option key="1" label="是" :value="parseInt(1)" />
</el-select>
</el-form-item>
<el-form-item label="国家" prop="countryIds">
<el-select filterable clearable multiple v-model="form.countryIds" :placeholder="$t('请选择国家')">
<el-option key="0" label="全部" :value="parseInt(0)" />
......@@ -177,24 +213,26 @@
<el-form-item label="国家区号" prop="countryCode">
{{form.countryCode}}
</el-form-item>
<el-form-item label="目的仓" prop="receiveAddrList">
<el-cascader
:disabled="cascaderState"
style="width: 300px"
:options="regionTreeList"
@change="selectHandle"
collapse-tags
v-model="form.receiveAddrList"
:props="cascaderProps"
clearable>
</el-cascader>
</el-form-item>
<el-form-item :label="$t('开启状态')" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否匹配运输方式" prop="isTransport">
<el-select v-model="form.isTransport">
<el-option key="0" label="否" :value="parseInt(0)" />
<el-option key="1" label="是" :value="parseInt(1)" />
</el-select>
</el-form-item>
<el-form-item label="多订单" prop="isOrders">
<el-select v-model="form.isOrders">
<el-option key="0" label="否" :value="parseInt(0)" />
<el-option key="1" label="是" :value="parseInt(1)" />
</el-select>
</el-form-item>
<el-form-item label="模板1" prop="templateIdOne">
<el-select filterable clearable v-model="form.templateIdOne" placeholder="请选择模板1">
<el-option v-for="dict in smsTemplateList2"
......@@ -219,6 +257,9 @@
:key="dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('备注')" prop="remark">
<el-input v-model="form.remark" :placeholder="$t('请输入备注')" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
......@@ -247,6 +288,16 @@
<el-form-item label="参数(JSON)" prop="templateParams">
<el-input v-model="sendSmsForm.templateParams" type="textarea"/>
</el-form-item>
<el-form-item label="目的仓" prop="receiveAddrList">
<el-cascader
style="width: 300px"
:options="regionTreeList"
collapse-tags
v-model="sendSmsForm.receiveAddrList"
:props="cascaderProps"
clearable>
</el-cascader>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSendSmsForm">{{ $t('确 定') }}</el-button>
......@@ -330,6 +381,8 @@ import { createSmsNode, updateSmsNode, deleteSmsNode, getSmsNode, getSmsNodePage
import {getCountryListAll} from '@/api/ecw/country'
import {getSmsTemplateList} from '@/api/system/sms/smsTemplate'
import { getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
import { getRegionTreeList } from "@/api/ecw/memberManagement"
import { deepClone } from "@/utils/index"
export default {
name: "SmsNode",
......@@ -369,7 +422,8 @@ export default {
templateIdThree: null,
templateIdFour: null,
isTransport: null,
isOrders: null
isOrders: null,
extra2: []
},
// 表单参数
form: {},
......@@ -398,7 +452,12 @@ export default {
nodeTemplateSn: [{ required: true, message: "模板序号不能为空", trigger: "blur" }],
templateParams: [{ required: true, message: "参数(JSON)不能为空", trigger: "blur" }],
},
node: {}
node: {},
cascaderState: true,
regionTreeList: [],
regionTreeList2: [],
lastSelectedList: [], //上一次选中数据
oneDimensionalList: [],
};
},
created() {
......@@ -423,6 +482,34 @@ export default {
getSimpleSmsChannels().then(response => {
this.channelOptions = response.data;
})
getRegionTreeList().then((res) => {
this.regionTreeList = res.data
this.regionTreeList2 = JSON.parse(JSON.stringify(res.data))
this.regionTreeList2.unshift({
id: 0,
labelZh: "全选",
labelEn: "select ALL",
children: [
{
id: 0,
labelZh: "全选",
labelEn: "select ALL",
children: [
{
id: 0,
labelZh: "全选",
labelEn: "select ALL"
}
]
}
]
})
this.regionTreeList.unshift({
id: "000",
labelZh: "全选",
labelEn: "select ALL"
})
})
},
filters: {
guojia: function(value,countryMap) {
......@@ -439,13 +526,132 @@ export default {
return text
}
},
computed: {
isChinese() {
return this.$i18n.locale === "zh_CN"
},
cascaderProps() {
const label = this.isChinese ? "labelZh" : "labelEn"
return { multiple: true, value: "id", label }
}
},
methods: {
selectHandle(val, defaultStatus = false) {
this.form.receiveAddrList = []
let current = [] // 获取当前选中的哪个数据
if (val.length >= this.lastSelectedList.length) {
let keys = this.lastSelectedList.map((item) => JSON.stringify(item))
current = val.filter((item) => !keys.includes(JSON.stringify(item)))
} else {
// 取消选中
let keys = val.map((item) => JSON.stringify(item))
current = this.lastSelectedList.filter((item) => !keys.includes(JSON.stringify(item)))
}
const currentValue = current.length > 0 ? current[0][0] || "" : ""
if (currentValue == "000") {
if (this.judgetAllSelected(val)) {
this.traverseTree(this.regionTreeList) //获取全选时回显的数据
} else {
this.form.receiveAddrList = [] //不选
}
} else {
this.form.receiveAddrList = val //半选
}
if (!defaultStatus) {
this.checkIsAddAllSelected()
}
// this.$nextTick(() => {
//
this.lastSelectedList = this.form.receiveAddrList
// });
},
checkIsAddAllSelected() {
//这里你要判断好你的dom是否正确
let label1 = document.querySelectorAll(".el-cascader-panel")[0].querySelector(".el-cascader-menu__wrap").querySelectorAll("li")[0].querySelectorAll("label")[0]
let span1 = document.querySelectorAll(".el-cascader-panel")[0].querySelector(".el-cascader-menu__wrap").querySelectorAll("li")[0].querySelectorAll("label")[0].querySelectorAll("span")[0]
// 获取所有的数据
let list = this.regionTreeList // 原始数据列表
if (this.oneDimensionalList.length === 0) {
this.getTreeList(list) // 把所有的父子级平铺成一个一级列表
}
let origin = [...this.oneDimensionalList].filter((item) => !item.children) //获取所有的叶子节点
let nowList = [...this.form.receiveAddrList].filter((item) => item[0] !== "000")
// 半选时, 如果有之前选过全选,要把全选过滤掉
if (origin.length > nowList.length && nowList.length != 0) {
this.form.receiveAddrList = deepClone(this.form.receiveAddrList.filter((item) => item[0] !== "000"))
//设置半选样式,setTimeout可以解决样式渲染不上的问题
setTimeout(function () {
label1.className = "el-checkbox"
span1.className = "el-checkbox__input is-indeterminate"
}, 1)
} else if (nowList.length == 0) {
//不选时, 如果有之前选过全选,要把全选过滤掉
this.form.receiveAddrList = deepClone(this.form.receiveAddrList.filter((item) => item[0] !== "000"))
label1.className = "el-checkbox"
span1.className = "el-checkbox__input"
} else {
// 当所有的数据都选择时, 要自动把全选勾选上 最后这种是:origin.length == nowList.length
if (this.form.receiveAddrList[0] && this.form.receiveAddrList[0][0] !== "000") {
this.form.receiveAddrList = [["000"], ...this.form.receiveAddrList]
label1.className = "el-checkbox"
span1.className = "el-checkbox__input is-checked"
}
}
},
getTreeList(list) {
let _this = this
for (let i = 0; i < list.length; i++) {
let a = list[i]
if (a.id !== "000") {
this.oneDimensionalList.push(list[i])
}
if (a.children && a.children.length > 0) {
let res = _this.getTreeList(a.children)
if (res) {
return res
}
}
}
},
judgetAllSelected(node) {
// 判断是否是全选,也就是看已选择的选中中包不包含"全选"
let isAllSelected = false
for (let i = 0; i < node.length; i++) {
if (node[i][0] == "000") {
isAllSelected = true
break
}
}
return isAllSelected
},
traverseTree(list, parentNode = []) {
list.length > 0 &&
list.forEach((e) => {
let pNode = deepClone(parentNode)
if (e.children && e.children.length > 0) {
pNode.push(e.id) // 1 11
this.traverseTree(e.children, pNode)
} else {
if (parentNode.length > 0) {
this.form.receiveAddrList.push([...parentNode, e.id])
} else {
this.form.receiveAddrList.push([e.id])
}
}
})
},
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
console.log(this.queryParams)
params['extra'] = JSON.stringify(this.queryParams.extra2)
// 执行查询
getSmsNodePage(params).then(response => {
this.list = response.data.list;
......@@ -460,6 +666,7 @@ export default {
},
/** 表单重置 */
reset() {
this.cascaderState = true
this.form = {
id: undefined,
nodeValue: undefined,
......@@ -472,8 +679,12 @@ export default {
templateIdThree: undefined,
templateIdFour: undefined,
isTransport: undefined,
isOrders: undefined
isOrders: undefined,
receiveAddrList: [],
extra: undefined,
remark: undefined
};
this.lastSelectedList = []
this.resetForm("form");
},
/** 搜索按钮操作 */
......@@ -500,9 +711,15 @@ export default {
const id = row.id;
getSmsNode(id).then(response => {
this.smsTemplateList2 = this.smsTemplateList.filter(a=>(a.nodeValue == response.data.nodeValue)&&(a.transportId == response.data.transportId))
if (response.data.receiveAddrList!=null&&response.data.receiveAddrList.length>0&&response.data.receiveAddrList[0].toString() == "0,0,0") {
response.data.receiveAddrList = [["000"]]
}
this.form = response.data;
this.open = true;
this.title = "修改短信节点";
if(this.form.isTransport==1) {
this.cascaderState = false
}
});
},
/** 提交按钮 */
......@@ -518,6 +735,9 @@ export default {
}
this.form.countryId = [...this.form.countryIds].join(',')
this.form.countryCode = [...countryCodes].join(',')
if (this.form.receiveAddrList.length>0 &&this.form.receiveAddrList[0][0] == "000") {
this.form.receiveAddrList = [[0, 0, 0]]
}
// 修改的提交
if (this.form.id != null) {
updateSmsNode(this.form).then(response => {
......@@ -565,6 +785,14 @@ export default {
handleChangeNode(val) {
this.smsTemplateList2 = this.smsTemplateList.filter(a=>(a.nodeValue == this.form.nodeValue)&&(a.transportId == this.form.transportId))
},
handleChangeIsTransport(val) {
this.form.receiveAddrList = []
if(val==1) {
this.cascaderState = false
} else {
this.cascaderState = true
}
},
handleChangeTransportId(val) {
this.smsTemplateList2 = this.smsTemplateList.filter(a=>(a.nodeValue == this.form.nodeValue)&&(a.transportId == this.form.transportId))
},
......@@ -574,7 +802,8 @@ export default {
countryCode: '',
templateParams: '',
messageType: null,
nodeTemplateSn: 1
nodeTemplateSn: 1,
receiveAddrList: []
}
this.node = row
this.sendSmsOpen = true
......@@ -589,14 +818,24 @@ export default {
if (!valid) {
return;
}
var node = this.node
var node = JSON.parse(JSON.stringify(this.node))
node['countryCode'] = this.sendSmsForm.countryCode
node['mobile'] = this.sendSmsForm.countryCode +''+this.sendSmsForm.mobile
node['templateParams'] = JSON.parse(this.sendSmsForm.templateParams)
node['messageType'] = this.sendSmsForm.messageType
node['nodeTemplateSn'] = this.sendSmsForm.nodeTemplateSn
if (this.sendSmsForm.receiveAddrList.length>0) {
if(this.sendSmsForm.receiveAddrList[0][0] == "000") {
node['receiveAddrList'] = [[0, 0, 0]]
} else {
node['receiveAddrList'] = this.sendSmsForm.receiveAddrList
}
} else {
node['receiveAddrList'] = [[1, 1, 1]]
}
// 添加的提交
testSms(this.node).then(response => {
testSms(node).then(response => {
this.$modal.msgSuccess("提交发送成功!");
this.sendSmsOpen = false;
});
......
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