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 @@
-
+