Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
70c50827
authored
May 27, 2023
by
jason
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
运费模板区域改成多选
parent
b12aefe4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
40 additions
and
31 deletions
+40
-31
src/api/mall/trade/delivery/expressTemplate/index.ts
+2
-2
src/api/system/area/index.ts
+3
-3
src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
+33
-24
src/views/mall/trade/delivery/expressTemplate/index.vue
+2
-2
No files found.
src/api/mall/trade/delivery/expressTemplate/index.ts
View file @
70c50827
...
...
@@ -10,7 +10,7 @@ export interface DeliveryExpressTemplateVO {
}
export
declare
type
ExpressTemplateChargeVO
=
{
areaId
:
number
areaId
s
:
number
[]
startCount
:
number
startPrice
:
number
extraCount
:
number
...
...
@@ -18,7 +18,7 @@ export declare type ExpressTemplateChargeVO = {
}
export
declare
type
ExpressTemplateFreeVO
=
{
areaId
:
number
areaId
s
:
number
[]
freeCount
:
number
freePrice
:
number
}
...
...
src/api/system/area/index.ts
View file @
70c50827
...
...
@@ -6,11 +6,11 @@ export const getAreaTree = async () => {
}
export
const
getChildrenArea
=
async
(
id
:
number
)
=>
{
return
await
request
.
get
({
url
:
'/system/area/get
ChildrenArea
?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 对应的地区名
...
...
src/views/mall/trade/delivery/expressTemplate/
Delivery
ExpressTemplateForm.vue
→
src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
View file @
70c50827
...
...
@@ -27,10 +27,11 @@
<template
#
default=
"
{ row }">
<!-- 区域数据太多,用赖加载方式,要不然性能有问题 -->
<el-tree-select
v-model=
"row.areaId"
v-model=
"row.areaId
s
"
lazy
:load=
"loadChargeArea"
:props=
"defaultProps"
multiple
node-key=
"id"
check-strictly
show-checkbox
...
...
@@ -90,7 +91,8 @@
<
template
#
default=
"{ row }"
>
<!-- 区域数据太多,用赖加载方式,要不然性能有问题 -->
<el-tree-select
v-model=
"row.areaId"
v-model=
"row.areaIds"
multiple
lazy
:load=
"loadFreeArea"
:props=
"defaultProps"
...
...
@@ -98,7 +100,7 @@
check-strictly
show-checkbox
check-on-click-node
:render-after-expand=
"
fals
e"
:render-after-expand=
"
tru
e"
:cache-data=
"areaCache"
/>
</
template
>
...
...
@@ -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
a
reaIds
=
[]
const
chargeAreaIds
=
[]
const
freeA
reaIds
=
[]
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
,
areaId
s
:
[
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
.
areaId
s
.
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
.
areaId
s
.
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
,
areaId
s
:
[]
,
startCount
:
1
,
startPrice
:
1
,
extraCount
:
1
,
...
...
@@ -378,7 +387,7 @@ const deleteChargeArea = (index) => {
const
addFreeArea
=
()
=>
{
const
data
=
formData
.
value
data
.
templateFree
.
push
({
areaId
:
undefined
,
areaId
s
:
[]
,
freeCount
:
1
,
freePrice
:
1
})
...
...
src/views/mall/trade/delivery/expressTemplate/index.vue
View file @
70c50827
...
...
@@ -90,13 +90,13 @@
</ContentWrap>
<!-- 表单弹窗:添加/修改 -->
<
Delivery
ExpressTemplateForm
ref=
"formRef"
@
success=
"getList"
/>
<ExpressTemplateForm
ref=
"formRef"
@
success=
"getList"
/>
</template>
<
script
setup
lang=
"ts"
name=
"DeliveryExpressTemplate"
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
*
as
DeliveryExpressTemplateApi
from
'@/api/mall/trade/delivery/expressTemplate'
import
DeliveryExpressTemplateForm
from
'./Delivery
ExpressTemplateForm.vue'
import
ExpressTemplateForm
from
'./
ExpressTemplateForm.vue'
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment