From 05e100109b8746dfc5f57fc56067c8abaef5d080 Mon Sep 17 00:00:00 2001 From: qb <1191961160@qq.com> Date: Mon, 29 Jan 2024 22:18:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=80=E5=8D=95=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/util.js | 7 +- .../distribution/inventory/CreateOrder.vue | 150 ++++++++++++++---- src/views/waybill/CreateZeroOrder.vue | 148 ++++++++--------- src/views/waybill/WaybillOrderList.vue | 2 + 4 files changed, 195 insertions(+), 112 deletions(-) diff --git a/src/utils/util.js b/src/utils/util.js index 3b19383a..d443c6c3 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -518,7 +518,7 @@ const updateDetailQuery = (index, propName, obj) => { export const processRowProperty = (index, row, details) => { const nameRegex = /(\w+)NameS$/; // 捕获以'NameS'结尾的属性名 const match = row.prop.match(nameRegex); - console.log(match,'获取到的参数'); + console.log(match, '获取到的参数'); // 如果属性以'NameS'结尾,则更新相应的查询参数 if (match) { const basePropName = match[1]; // 获取不包含'Name'的属性名 @@ -601,10 +601,7 @@ export function computeNumber(a, type, b) { * @param {any} value 传入值, 判断该值是否为数字 */ export const isNumer = value => { - // if (typeof value !== 'number' || typeof value !== 'string') return false; - const _value = Number(value); - if (_value !== _value) return false; - return true; + return !isNaN(parseFloat(value)) && isFinite(value); }; /** 防抖函数 */ diff --git a/src/views/distribution/inventory/CreateOrder.vue b/src/views/distribution/inventory/CreateOrder.vue index d0f200c0..1a40cfc4 100644 --- a/src/views/distribution/inventory/CreateOrder.vue +++ b/src/views/distribution/inventory/CreateOrder.vue @@ -1169,7 +1169,7 @@ const details = reactive({ { required: true, message: '请填写或选择到站地', - trigger: 'change', + trigger: ['change', 'blur'], }, ], /** 目的站名称 */ @@ -1177,7 +1177,7 @@ const details = reactive({ { required: true, message: '请选择目的仓', - trigger: 'blur', + trigger: ['blur', 'change'], }, ], /** 发货单位 */ @@ -1217,7 +1217,7 @@ const details = reactive({ { required: true, message: '请选择或输入收货人', - trigger: 'blur', + trigger: ['change', 'blur'], }, ], /** 收货人电话 */ @@ -1225,7 +1225,7 @@ const details = reactive({ { required: true, message: '请选择或输入收货人电话', - trigger: 'blur', + trigger: ['change', 'blur'], }, ], /** 付款方式 */ @@ -1233,7 +1233,7 @@ const details = reactive({ { required: true, message: '请选择付款方式', - trigger: 'change', + trigger: ['change', 'blur'], }, ], /** 送货方式 */ @@ -1241,7 +1241,7 @@ const details = reactive({ { required: true, message: '请选择送货方式', - trigger: 'change', + trigger: ['change', 'blur'], }, ], /** 紧急度 */ @@ -1249,7 +1249,7 @@ const details = reactive({ { required: true, message: '请选择紧急度', - trigger: 'change', + trigger: ['change', 'blur'], }, ], }, @@ -1286,12 +1286,17 @@ const details = reactive({ listNode: '', // 页面请求的问题 form: {}, + /** 修改 -- goodsList里的id, 区别:新增 / 删除 */ + goodsListIds: [], + /** 提交数据 */ + submitData: {}, }); const info = ref({}); const { query, data, drawerShow, page, loadingObj } = toRefs(details); +// 组件实例 const consignee = ref(); const consigneeName = ref(); const consigneeMobile = ref(); @@ -1348,21 +1353,27 @@ const onLoad = async (idsArr = []) => { for (let key in data) { if (data[key]) details.query[key] = data[key]; } + info.value.maxNum = 0; details.goodsList = data.goodsList.map(val => { for (let valKey in val) { + console.log('val[valKey] :>> ', val[valKey]); const _item = Number(val[valKey]); // 判断是否为数字并将字符串的数字转为数字 if (isNumer(_item)) { val[valKey] = _item; } } + + val.chargeType = val.chargeType || 1; + // 计算运费小计 handleComputed(val); // 计算件数最大值 - info.value.maxNum = 0; info.value.maxNum += val.num; + + // val.subtotalFreight = console.log('val :>> ', val); return val; }); @@ -1410,29 +1421,32 @@ const initPageInfo = async () => { }, ]; else { + console.log('111 :>> ', 111); + info.value.maxNum = 0; + details.goodsListIds = []; details.goodsList = data.warehouseWaybill.detailList.map(val => { - for (let valKey in val) { - const _item = Number(val[valKey]); - // 判断是否为数字并将字符串的数字转为数字 - if (isNumer(_item)) { - val[valKey] = _item; - } - } + val.num = Number(val.num); + val.volume = Number(val.volume); + val.weight = Number(val.weight); + val.price = Number(val.price); + val.subtotalFreight = Number(val.subtotalFreight); + + details.goodsListIds.push(val.id); + val.goodsName = val.productName; + // 计算运费小计 - handleComputed(val); + if (!val.subtotalFreight) handleComputed(val); // 计算件数最大值 - info.value.maxNum = 0; info.value.maxNum += val.num; console.log('val :>> ', val); return val; }); + console.log('details.goodsListIds :>> ', details.goodsListIds); } } }; -// initPageInfo(); - /** 新增货物 */ const handleAdd = () => { if (info.value.maxNum <= details.totalObj.totalCount) { @@ -1716,7 +1730,8 @@ const handleChooseConsigner = (column, prop, order) => { /** 返回上一个页面 */ function back() { useStores.commit('DEL_TAG_CURRENT'); - $router.back('-1'); + if (details.pageInfo.backPath) return $router.push(details.pageInfo.backPath); + $router.back(); } /** 重置数据 */ @@ -1745,6 +1760,40 @@ const handleRefresh = () => { }); }; +/** 检测支付金额 */ +const handleDetectionPayWay = () => { + const minNum = 0; + const payType = Number(details.query.payWay); + let content = ''; + + switch (payType) { + // 现付 + case 1: + if (Number(details.query.xianPay) <= minNum) content = '请输入大于0的现付金额'; + break; + + // 到付 + case 2: + if (Number(details.query.daoPay) <= minNum) content = '请输入大于0的到付金额'; + break; + + // 月结 + case 3: + if (Number(details.query.yuePay) <= minNum) content = '请输入大于0的月结金额'; + break; + + // 回付 + case 4: + if (Number(details.query.huiPay) <= minNum) content = '请输入大于0的回付金额'; + break; + + default: + break; + } + + return content; +}; + /** 提交 */ const handleSubmit = (formEl: FormInstance | undefined) => { if (!formEl) return; @@ -1794,19 +1843,62 @@ const handleSubmit = (formEl: FormInstance | undefined) => { ).label; } - submitData.addList = submitData.goodsList; - submitData.removeList = []; + let numFlag = false; + + for (const iterator of submitData.goodsList) { + if (iterator.subtotalFreight <= 0 || !iterator.subtotalFreight) { + numFlag = true; + break; + } + } - delete submitData.goodsList; + if (numFlag) return ElMessage.warning('小计费用存在异常'); + const _content = handleDetectionPayWay(); + if (_content) return ElMessage.warning(_content); submitData.goodsName = submitData.waybillDetailList.map(val => val.goodsName).join(','); - submitData.waybillType = 1; - if (typeof submitData.receipt === 'object') - submitData.receipt = submitData.receipt.join(','); - console.log('submitData :>> ', submitData); - const res = await postOpenOrderOpenWaybill(submitData); - const { code } = res.data; + + let res: any = {}; + // 新增提交 + if (details.pageInfo.type !== 'edit') { + submitData.addList = submitData.goodsList; + submitData.removeList = []; + + delete submitData.goodsList; + + submitData.waybillType = 1; + if (typeof submitData.receipt === 'object') + submitData.receipt = submitData.receipt.join(','); + console.log('submitData :>> ', submitData); + + // 记录提交参数 + details.submitData = submitData; + + res = await postOpenOrderOpenWaybill(submitData); + } else { + for (let iterator of submitData.goodsList) { + // 查看每一项是否存在Id + if (iterator.id) { + // 存在则证明为老数据 + } + } + + submitData.addList = submitData.goodsList; + submitData.removeList = []; + + delete submitData.goodsList; + + submitData.waybillType = 1; + if (typeof submitData.receipt === 'object') + submitData.receipt = submitData.receipt.join(','); + console.log('submitData :>> ', submitData); + + // 记录提交参数 + details.submitData = submitData; + } + const { code, msg } = res.data; if (code !== 200) return; + if (msg) ElMessage.success(msg); back(); console.log('res :>> ', res); } catch (error) { diff --git a/src/views/waybill/CreateZeroOrder.vue b/src/views/waybill/CreateZeroOrder.vue index da18ffcb..c9a35196 100644 --- a/src/views/waybill/CreateZeroOrder.vue +++ b/src/views/waybill/CreateZeroOrder.vue @@ -1209,7 +1209,6 @@ const details = reactive({ }, ], }, - payRules: [], itemRules: { @@ -1239,9 +1238,6 @@ const details = reactive({ }, ], }, - - /** 列表数据 */ - data: [{}], /** 页面loading */ loadingObj: { loading: false, @@ -1253,6 +1249,8 @@ const details = reactive({ /** 列表Dom节点 */ listNode: '', form: {}, + /** 页面数据 */ + pageInfo: {}, }); const { query, data, drawerShow, page, loadingObj } = toRefs(details); @@ -1291,12 +1289,67 @@ console.log('permission :>> ', permission); onMounted(() => {}); -const initPageInfo = () => { +const initPageInfo = async () => { + details.pageInfo = $route.query; + console.log('$route :>> ', $route); + if ($route.query.type !== 'edit') onLoad(); + else { + const res = await postFindWaybillDetail({ waybillId: details.pageInfo.id }); + const { code, data } = res.data; + if (code !== 200) return; + + details.query = { ...data, ...data.warehouseWaybill }; + details.info = { ...data }; + delete details.query.warehouseWaybill; + details.query.orderCode = data.warehouseWaybill.orderNo; + if (data.warehouseWaybill.detailList.length === 0) { + details.goodsList = [ + { + index: 0, + /** 货物名称 */ + goodsName: '', + /** 品类Id */ + goodsId: '', + /** 计费方式 */ + chargeType: 1, + /** 件数 */ + num: 0, + /** 重量(kg) */ + weight: 0, + /** 体积(方) */ + volume: 0, + /** 单价 */ + price: 0, + /** 运费小计 */ + subtotalFreight: 0, + }, + ]; + } else { + console.log('111 :>> ', 111); + details.goodsListIds = []; + details.goodsList = data.warehouseWaybill.detailList.map(val => { + val.num = Number(val.num); + val.volume = Number(val.volume); + val.weight = Number(val.weight); + val.price = Number(val.price); + val.subtotalFreight = Number(val.subtotalFreight); + + details.goodsListIds.push(val.id); + val.goodsName = val.productName; + + // 计算运费小计 + if (!val.subtotalFreight) handleComputed(val); + + // 计算件数最大值 + console.log('val :>> ', val); + return val; + }); + console.log('details.goodsListIds :>> ', details.goodsListIds); + } + } }; -initPageInfo(); - getLazyTreeAll().then(res => { if (res.data.success) { details.regionOptione = res.data.data; @@ -1304,7 +1357,7 @@ getLazyTreeAll().then(res => { }); /** 初始化获取暂存单转运单信息 */ -const onLoad = async (idsArr = []) => { +const onLoad = async () => { const res = await postOpenOrderOpenZeroWaybillInfo(); const { code, data } = res.data; console.log('data :>> ', data); @@ -1323,7 +1376,6 @@ const onLoad = async (idsArr = []) => { details.info.payWayList.find(val => val.dictValue === '到付').dictKey || '2'; } }; -onLoad(); /** 新增 */ const handleAdd = () => { @@ -1377,75 +1429,6 @@ const handleAdd = () => { }); }; -/** 请求订单数据 */ -const initOrderList = async () => { - try { - } catch (error) { - } finally { - return null; - } -}; - -/** 选择订单 */ -const handleChooseOrder = () => { - try { - details.loadingObj.stowageLoading = true; - details.popUpShow.columnListVisited = true; - } catch (error) { - } finally { - details.loadingObj.stowageLoading = false; - } -}; - -/** 表格表头输入框搜索 */ -const inputsc = (index, row) => { - details.query[row.prop] = index; - onLoad(details.page); -}; - -/** 表格表头时间选择 */ -const timesc = (index, row) => { - if (!!index) { - index = dayjs(index).format('YYYY-MM-DD'); - } - details.query[row.prop] = index; - if (!index) { - delete details.query[row.prop]; - } - onLoad(details.page); -}; - -/** 表格表头输入框搜索 */ -const btnsc = () => {}; - -/** 表格表头下拉框选择 */ -const selectsc = (index, row) => { - details.query[row.prop] = index; - if (!index) delete details.query[row.prop]; - if (row.prop === 'certificateTypeName') { - details.query['certificateType'] = index; - if (!index) delete details.query['certificateType']; - } - onLoad(details.page); -}; - -/** 表格表头复选框选择 */ -const selectionChange = (list: any) => { - details.selectionList = list; -}; - -/** 每页数量改变执行的回调 */ -const sizeChange = (pageSize: number) => { - details.page.pageSize = pageSize; - onLoad(details.page); -}; - -/** 页码改变执行的回调 */ -const currentChange = current => { - details.page.pageNum = current; - onLoad(details.page); -}; - /** 移除 */ const handleRemove = (index: number) => { details.goodsList.splice(index, 1); @@ -1565,6 +1548,7 @@ const back = () => { $router.back(); }; +/** 提交 */ const handleSubmit = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate(async valid => { @@ -1612,6 +1596,14 @@ const handleSubmit = (formEl: FormInstance | undefined) => { } }); }; + +watch( + () => $route.query, + () => { + initPageInfo(); + }, + { immediate: true } +);