From 70c50827761104b9eb41282d37e1405137e5f1b3 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sat, 27 May 2023 11:32:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=B4=B9=E6=A8=A1=E6=9D=BF=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=94=B9=E6=88=90=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trade/delivery/expressTemplate/index.ts | 4 +- src/api/system/area/index.ts | 6 +- ...mplateForm.vue => ExpressTemplateForm.vue} | 57 +++++++++++-------- .../trade/delivery/expressTemplate/index.vue | 4 +- 4 files changed, 40 insertions(+), 31 deletions(-) rename src/views/mall/trade/delivery/expressTemplate/{DeliveryExpressTemplateForm.vue => ExpressTemplateForm.vue} (89%) diff --git a/src/api/mall/trade/delivery/expressTemplate/index.ts b/src/api/mall/trade/delivery/expressTemplate/index.ts index 0504dde1..9414c847 100644 --- a/src/api/mall/trade/delivery/expressTemplate/index.ts +++ b/src/api/mall/trade/delivery/expressTemplate/index.ts @@ -10,7 +10,7 @@ export interface DeliveryExpressTemplateVO { } export declare type ExpressTemplateChargeVO = { - areaId: number + areaIds: number[] startCount: number startPrice: number extraCount: number @@ -18,7 +18,7 @@ export declare type ExpressTemplateChargeVO = { } export declare type ExpressTemplateFreeVO = { - areaId: number + areaIds: number[] freeCount: number freePrice: number } diff --git a/src/api/system/area/index.ts b/src/api/system/area/index.ts index 69dd519b..b7da941f 100644 --- a/src/api/system/area/index.ts +++ b/src/api/system/area/index.ts @@ -6,11 +6,11 @@ export const getAreaTree = async () => { } export const getChildrenArea = async (id: number) => { - return await request.get({ url: '/system/area/getChildrenArea?id=' + id }) + return await request.get({ url: '/system/area/get-children?id=' + id }) } -export const getAreaListByIds = async (data) => { - return await request.post({ url: '/system/area/list', data }) +export const getAreaListByIds = async (ids) => { + return await request.get({ url: '/system/area/get-by-ids?ids=' + ids }) } // 获得 IP 对应的地区名 diff --git a/src/views/mall/trade/delivery/expressTemplate/DeliveryExpressTemplateForm.vue b/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue similarity index 89% rename from src/views/mall/trade/delivery/expressTemplate/DeliveryExpressTemplateForm.vue rename to src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue index aa52f83b..5b25422d 100644 --- a/src/views/mall/trade/delivery/expressTemplate/DeliveryExpressTemplateForm.vue +++ b/src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue @@ -27,10 +27,11 @@ @@ -170,7 +172,6 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref const areaCache = ref([]) //由于区域节点懒加载,已选区域节点需要缓存展示 -// let areaTree: any[] /** 打开弹窗 */ const open = async (type: string, id?: number) => { dialogVisible.value = true @@ -183,25 +184,30 @@ const open = async (type: string, id?: number) => { formLoading.value = true formData.value = await DeliveryExpressTemplateApi.getDeliveryExpressTemplate(id) columnTitle.value = columnTitleMap.get(formData.value.chargeMode) - //已选的区域节点 - const areaIds = [] + const chargeAreaIds = [] + const freeAreaIds = [] formData.value.templateCharge.forEach((item) => { - //不等于全国的节点 - if (item.areaId !== 1) { - areaIds.push(item.areaId) + for (let i = 0; i < item.areaIds.length; i++) { + if (!chargeAreaIds.includes(item.areaIds[i])) { + chargeAreaIds.push(item.areaIds[i]) + } } //前端价格以元展示 item.startPrice = fenToYuan(item.startPrice) item.extraPrice = fenToYuan(item.extraPrice) }) formData.value.templateFree.forEach((item) => { - if (item.areaId !== 1 && !areaIds.includes(item.areaId)) { - areaIds.push(item.areaId) + for (let i = 0; i < item.areaIds.length; i++) { + if (!chargeAreaIds.includes(item.areaIds[i]) && !freeAreaIds.includes(item.areaIds[i])) { + freeAreaIds.push(item.areaIds[i]) + } } item.freePrice = fenToYuan(item.freePrice) }) + //已选的区域节点 + const areaIds = chargeAreaIds.concat(freeAreaIds) //区域节点,懒加载方式。 已选节点需要缓存展示 - areaCache.value = await getAreaListByIds(areaIds) + areaCache.value = await getAreaListByIds(areaIds.join(',')) } } finally { formLoading.value = false @@ -250,7 +256,7 @@ const resetForm = () => { chargeMode: 1, templateCharge: [ { - areaId: 1, + areaIds: [1], startCount: 2, startPrice: 5, extraCount: 5, @@ -300,10 +306,11 @@ const initData = async () => { /** 懒加载运费区域树 */ const loadChargeArea = async (node, resolve) => { + //已选区域需要禁止再次选择 const areaIds = [] formData.value.templateCharge.forEach((item) => { - if (item.areaId) { - areaIds.push(item.areaId) + if (item.areaIds.length > 0) { + item.areaIds.forEach((areaId) => areaIds.push(areaId)) } }) if (node.isLeaf) return resolve([]) @@ -312,7 +319,8 @@ const loadChargeArea = async (node, resolve) => { const data = cloneDeep(defaultArea) const item = data[0] if (areaIds.includes(item.id)) { - item.disabled = true + // TODO 禁止选中的区域有些问题, 导致修改时候不能重新选择 不知道如何处理。 暂时注释掉 @芋艿 有空瞅瞅 + //item.disabled = true } resolve(data) } else { @@ -320,7 +328,7 @@ const loadChargeArea = async (node, resolve) => { const data = await getChildrenArea(id) data.forEach((item) => { if (areaIds.includes(item.id)) { - item.disabled = true + //item.disabled = true } }) resolve(data) @@ -330,11 +338,11 @@ const loadChargeArea = async (node, resolve) => { /** 懒加载包邮区域树 */ const loadFreeArea = async (node, resolve) => { if (node.isLeaf) return resolve([]) - //已经选择的区域id + //已选区域需要禁止再次选择 const areaIds = [] formData.value.templateFree.forEach((item) => { - if (item.areaId) { - areaIds.push(item.areaId) + if (item.areaIds.length > 0) { + item.areaIds.forEach((areaId) => areaIds.push(areaId)) } }) const length = node.data.length @@ -343,7 +351,7 @@ const loadFreeArea = async (node, resolve) => { const data = cloneDeep(defaultArea) const item = data[0] if (areaIds.includes(item.id)) { - item.disabled = true + //item.disabled = true } resolve(data) } else { @@ -352,7 +360,8 @@ const loadFreeArea = async (node, resolve) => { //已选区域需要禁止再次选择 data.forEach((item) => { if (areaIds.includes(item.id)) { - item.disabled = true + // TODO 禁止选中的区域有些问题, 导致修改时候不能重新选择 不知道如何处理。 暂时注释掉 @芋艿 有空瞅瞅 + //item.disabled = true } }) resolve(data) @@ -362,7 +371,7 @@ const loadFreeArea = async (node, resolve) => { const addChargeArea = () => { const data = formData.value data.templateCharge.push({ - areaId: undefined, + areaIds: [], startCount: 1, startPrice: 1, extraCount: 1, @@ -378,7 +387,7 @@ const deleteChargeArea = (index) => { const addFreeArea = () => { const data = formData.value data.templateFree.push({ - areaId: undefined, + areaIds: [], freeCount: 1, freePrice: 1 }) diff --git a/src/views/mall/trade/delivery/expressTemplate/index.vue b/src/views/mall/trade/delivery/expressTemplate/index.vue index 99f90ada..e9f670f5 100644 --- a/src/views/mall/trade/delivery/expressTemplate/index.vue +++ b/src/views/mall/trade/delivery/expressTemplate/index.vue @@ -90,13 +90,13 @@ - +