Skip to content

Commit 70c5082

Browse files
committed
运费模板区域改成多选
1 parent b12aefe commit 70c5082

File tree

4 files changed

+40
-31
lines changed

4 files changed

+40
-31
lines changed

src/api/mall/trade/delivery/expressTemplate/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ export interface DeliveryExpressTemplateVO {
1010
}
1111

1212
export declare type ExpressTemplateChargeVO = {
13-
areaId: number
13+
areaIds: number[]
1414
startCount: number
1515
startPrice: number
1616
extraCount: number
1717
extraPrice: number
1818
}
1919

2020
export declare type ExpressTemplateFreeVO = {
21-
areaId: number
21+
areaIds: number[]
2222
freeCount: number
2323
freePrice: number
2424
}

src/api/system/area/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ export const getAreaTree = async () => {
66
}
77

88
export const getChildrenArea = async (id: number) => {
9-
return await request.get({ url: '/system/area/getChildrenArea?id=' + id })
9+
return await request.get({ url: '/system/area/get-children?id=' + id })
1010
}
1111

12-
export const getAreaListByIds = async (data) => {
13-
return await request.post({ url: '/system/area/list', data })
12+
export const getAreaListByIds = async (ids) => {
13+
return await request.get({ url: '/system/area/get-by-ids?ids=' + ids })
1414
}
1515

1616
// 获得 IP 对应的地区名

src/views/mall/trade/delivery/expressTemplate/DeliveryExpressTemplateForm.vue renamed to src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
<template #default="{ row }">
2828
<!-- 区域数据太多,用赖加载方式,要不然性能有问题 -->
2929
<el-tree-select
30-
v-model="row.areaId"
30+
v-model="row.areaIds"
3131
lazy
3232
:load="loadChargeArea"
3333
:props="defaultProps"
34+
multiple
3435
node-key="id"
3536
check-strictly
3637
show-checkbox
@@ -90,15 +91,16 @@
9091
<template #default="{ row }">
9192
<!-- 区域数据太多,用赖加载方式,要不然性能有问题 -->
9293
<el-tree-select
93-
v-model="row.areaId"
94+
v-model="row.areaIds"
95+
multiple
9496
lazy
9597
:load="loadFreeArea"
9698
:props="defaultProps"
9799
node-key="id"
98100
check-strictly
99101
show-checkbox
100102
check-on-click-node
101-
:render-after-expand="false"
103+
:render-after-expand="true"
102104
:cache-data="areaCache"
103105
/>
104106
</template>
@@ -170,7 +172,6 @@ const formRules = reactive({
170172
})
171173
const formRef = ref() // 表单 Ref
172174
const areaCache = ref([]) //由于区域节点懒加载,已选区域节点需要缓存展示
173-
// let areaTree: any[]
174175
/** 打开弹窗 */
175176
const open = async (type: string, id?: number) => {
176177
dialogVisible.value = true
@@ -183,25 +184,30 @@ const open = async (type: string, id?: number) => {
183184
formLoading.value = true
184185
formData.value = await DeliveryExpressTemplateApi.getDeliveryExpressTemplate(id)
185186
columnTitle.value = columnTitleMap.get(formData.value.chargeMode)
186-
//已选的区域节点
187-
const areaIds = []
187+
const chargeAreaIds = []
188+
const freeAreaIds = []
188189
formData.value.templateCharge.forEach((item) => {
189-
//不等于全国的节点
190-
if (item.areaId !== 1) {
191-
areaIds.push(item.areaId)
190+
for (let i = 0; i < item.areaIds.length; i++) {
191+
if (!chargeAreaIds.includes(item.areaIds[i])) {
192+
chargeAreaIds.push(item.areaIds[i])
193+
}
192194
}
193195
//前端价格以元展示
194196
item.startPrice = fenToYuan(item.startPrice)
195197
item.extraPrice = fenToYuan(item.extraPrice)
196198
})
197199
formData.value.templateFree.forEach((item) => {
198-
if (item.areaId !== 1 && !areaIds.includes(item.areaId)) {
199-
areaIds.push(item.areaId)
200+
for (let i = 0; i < item.areaIds.length; i++) {
201+
if (!chargeAreaIds.includes(item.areaIds[i]) && !freeAreaIds.includes(item.areaIds[i])) {
202+
freeAreaIds.push(item.areaIds[i])
203+
}
200204
}
201205
item.freePrice = fenToYuan(item.freePrice)
202206
})
207+
//已选的区域节点
208+
const areaIds = chargeAreaIds.concat(freeAreaIds)
203209
//区域节点,懒加载方式。 已选节点需要缓存展示
204-
areaCache.value = await getAreaListByIds(areaIds)
210+
areaCache.value = await getAreaListByIds(areaIds.join(','))
205211
}
206212
} finally {
207213
formLoading.value = false
@@ -250,7 +256,7 @@ const resetForm = () => {
250256
chargeMode: 1,
251257
templateCharge: [
252258
{
253-
areaId: 1,
259+
areaIds: [1],
254260
startCount: 2,
255261
startPrice: 5,
256262
extraCount: 5,
@@ -300,10 +306,11 @@ const initData = async () => {
300306
301307
/** 懒加载运费区域树 */
302308
const loadChargeArea = async (node, resolve) => {
309+
//已选区域需要禁止再次选择
303310
const areaIds = []
304311
formData.value.templateCharge.forEach((item) => {
305-
if (item.areaId) {
306-
areaIds.push(item.areaId)
312+
if (item.areaIds.length > 0) {
313+
item.areaIds.forEach((areaId) => areaIds.push(areaId))
307314
}
308315
})
309316
if (node.isLeaf) return resolve([])
@@ -312,15 +319,16 @@ const loadChargeArea = async (node, resolve) => {
312319
const data = cloneDeep(defaultArea)
313320
const item = data[0]
314321
if (areaIds.includes(item.id)) {
315-
item.disabled = true
322+
// TODO 禁止选中的区域有些问题, 导致修改时候不能重新选择 不知道如何处理。 暂时注释掉 @芋艿 有空瞅瞅
323+
//item.disabled = true
316324
}
317325
resolve(data)
318326
} else {
319327
const id = node.data.id
320328
const data = await getChildrenArea(id)
321329
data.forEach((item) => {
322330
if (areaIds.includes(item.id)) {
323-
item.disabled = true
331+
//item.disabled = true
324332
}
325333
})
326334
resolve(data)
@@ -330,11 +338,11 @@ const loadChargeArea = async (node, resolve) => {
330338
/** 懒加载包邮区域树 */
331339
const loadFreeArea = async (node, resolve) => {
332340
if (node.isLeaf) return resolve([])
333-
//已经选择的区域id
341+
//已选区域需要禁止再次选择
334342
const areaIds = []
335343
formData.value.templateFree.forEach((item) => {
336-
if (item.areaId) {
337-
areaIds.push(item.areaId)
344+
if (item.areaIds.length > 0) {
345+
item.areaIds.forEach((areaId) => areaIds.push(areaId))
338346
}
339347
})
340348
const length = node.data.length
@@ -343,7 +351,7 @@ const loadFreeArea = async (node, resolve) => {
343351
const data = cloneDeep(defaultArea)
344352
const item = data[0]
345353
if (areaIds.includes(item.id)) {
346-
item.disabled = true
354+
//item.disabled = true
347355
}
348356
resolve(data)
349357
} else {
@@ -352,7 +360,8 @@ const loadFreeArea = async (node, resolve) => {
352360
//已选区域需要禁止再次选择
353361
data.forEach((item) => {
354362
if (areaIds.includes(item.id)) {
355-
item.disabled = true
363+
// TODO 禁止选中的区域有些问题, 导致修改时候不能重新选择 不知道如何处理。 暂时注释掉 @芋艿 有空瞅瞅
364+
//item.disabled = true
356365
}
357366
})
358367
resolve(data)
@@ -362,7 +371,7 @@ const loadFreeArea = async (node, resolve) => {
362371
const addChargeArea = () => {
363372
const data = formData.value
364373
data.templateCharge.push({
365-
areaId: undefined,
374+
areaIds: [],
366375
startCount: 1,
367376
startPrice: 1,
368377
extraCount: 1,
@@ -378,7 +387,7 @@ const deleteChargeArea = (index) => {
378387
const addFreeArea = () => {
379388
const data = formData.value
380389
data.templateFree.push({
381-
areaId: undefined,
390+
areaIds: [],
382391
freeCount: 1,
383392
freePrice: 1
384393
})

src/views/mall/trade/delivery/expressTemplate/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@
9090
</ContentWrap>
9191

9292
<!-- 表单弹窗:添加/修改 -->
93-
<DeliveryExpressTemplateForm ref="formRef" @success="getList" />
93+
<ExpressTemplateForm ref="formRef" @success="getList" />
9494
</template>
9595
<script setup lang="ts" name="DeliveryExpressTemplate">
9696
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
9797
import { dateFormatter } from '@/utils/formatTime'
9898
import * as DeliveryExpressTemplateApi from '@/api/mall/trade/delivery/expressTemplate'
99-
import DeliveryExpressTemplateForm from './DeliveryExpressTemplateForm.vue'
99+
import ExpressTemplateForm from './ExpressTemplateForm.vue'
100100
101101
const message = useMessage() // 消息弹窗
102102
const { t } = useI18n() // 国际化

0 commit comments

Comments
 (0)