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
9aa77067
authored
Sep 02, 2024
by
puhui999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【代码优化】】商城: 满减送活动
parent
a13e8b77
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
37 additions
and
83 deletions
+37
-83
src/api/mall/promotion/reward/rewardActivity.ts
+4
-5
src/views/mall/promotion/coupon/components/CouponSelect.vue
+3
-37
src/views/mall/promotion/rewardActivity/RewardForm.vue
+2
-0
src/views/mall/promotion/rewardActivity/components/RewardRule.vue
+6
-31
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
+22
-10
No files found.
src/api/mall/promotion/reward/rewardActivity.ts
View file @
9aa77067
...
@@ -21,11 +21,10 @@ export interface RewardRule {
...
@@ -21,11 +21,10 @@ export interface RewardRule {
limit
?:
number
limit
?:
number
discountPrice
?:
number
discountPrice
?:
number
freeDelivery
?:
boolean
freeDelivery
?:
boolean
givePoint
?:
boolean
point
:
number
point
?:
number
giveCoupons
?:
{
giveCoupon
?:
boolean
[
key
:
number
]:
number
couponIds
?:
number
[]
}
couponCounts
?:
number
[]
}
}
// 新增满减送活动
// 新增满减送活动
...
...
src/views/mall/promotion/coupon/components/CouponSelect.vue
View file @
9aa77067
...
@@ -33,32 +33,6 @@
...
@@ -33,32 +33,6 @@
/>
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"优惠券状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
class=
"!w-240px"
clearable
placeholder=
"请选择优惠券状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
end-placeholder=
"结束日期"
start-placeholder=
"开始日期"
type=
"daterange"
value-format=
"YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
>
<el-button
@
click=
"handleQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
...
@@ -118,13 +92,6 @@
...
@@ -118,13 +92,6 @@
<dict-tag
:type=
"DICT_TYPE.COMMON_STATUS"
:value=
"scope.row.status"
/>
<dict-tag
:type=
"DICT_TYPE.COMMON_STATUS"
:value=
"scope.row.status"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
:formatter=
"dateFormatter"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
/>
</el-table>
</el-table>
<!-- 分页 -->
<!-- 分页 -->
<Pagination
<Pagination
...
@@ -148,13 +115,13 @@ import {
...
@@ -148,13 +115,13 @@ import {
takeLimitCountFormat
,
takeLimitCountFormat
,
validityTypeFormat
validityTypeFormat
}
from
'@/views/mall/promotion/coupon/formatter'
}
from
'@/views/mall/promotion/coupon/formatter'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
*
as
CouponTemplateApi
from
'@/api/mall/promotion/coupon/couponTemplate'
import
*
as
CouponTemplateApi
from
'@/api/mall/promotion/coupon/couponTemplate'
defineOptions
({
name
:
'CouponSelect'
})
defineOptions
({
name
:
'CouponSelect'
})
const
props
=
defineProps
<
{
const
props
=
defineProps
<
{
multipleSelection
?:
CouponTemplateApi
.
CouponTemplateVO
[]
multipleSelection
?:
CouponTemplateApi
.
CouponTemplateVO
[]
takeType
:
number
// 领取方式
}
>
()
}
>
()
const
emit
=
defineEmits
<
{
const
emit
=
defineEmits
<
{
(
e
:
'update:multipleSelection'
,
v
:
CouponTemplateApi
.
CouponTemplateVO
[]):
void
(
e
:
'update:multipleSelection'
,
v
:
CouponTemplateApi
.
CouponTemplateVO
[]):
void
...
@@ -170,10 +137,8 @@ const queryParams = reactive({
...
@@ -170,10 +137,8 @@ const queryParams = reactive({
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
10
,
pageSize
:
10
,
name
:
null
,
name
:
null
,
status
:
null
,
discountType
:
null
,
discountType
:
null
,
type
:
null
,
canTakeTypes
:
null
createTime
:
[]
})
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
queryFormRef
=
ref
()
// 搜索的表单
const
selectedCouponList
=
ref
<
CouponTemplateApi
.
CouponTemplateVO
[]
>
([])
// 选择的数据
const
selectedCouponList
=
ref
<
CouponTemplateApi
.
CouponTemplateVO
[]
>
([])
// 选择的数据
...
@@ -183,6 +148,7 @@ const getList = async () => {
...
@@ -183,6 +148,7 @@ const getList = async () => {
loading
.
value
=
true
loading
.
value
=
true
try
{
try
{
// 执行查询
// 执行查询
queryParams
.
canTakeTypes
=
[
props
.
takeType
]
as
any
const
data
=
await
CouponTemplateApi
.
getCouponTemplatePage
(
queryParams
)
const
data
=
await
CouponTemplateApi
.
getCouponTemplatePage
(
queryParams
)
list
.
value
=
data
.
list
list
.
value
=
data
.
list
total
.
value
=
data
.
total
total
.
value
=
data
.
total
...
...
src/views/mall/promotion/rewardActivity/RewardForm.vue
View file @
9aa77067
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
:start-placeholder=
"t('common.startTimeText')"
:start-placeholder=
"t('common.startTimeText')"
range-separator=
"-"
range-separator=
"-"
type=
"datetimerange"
type=
"datetimerange"
value-format=
"x"
/>
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"条件类型"
prop=
"conditionType"
>
<el-form-item
label=
"条件类型"
prop=
"conditionType"
>
...
@@ -146,6 +147,7 @@ const submitForm = async () => {
...
@@ -146,6 +147,7 @@ const submitForm = async () => {
// 时间段转换
// 时间段转换
data
.
startTime
=
data
.
startAndEndTime
!
[
0
]
data
.
startTime
=
data
.
startAndEndTime
!
[
0
]
data
.
endTime
=
data
.
startAndEndTime
!
[
1
]
data
.
endTime
=
data
.
startAndEndTime
!
[
1
]
delete
data
.
startAndEndTime
// 规则元转分
// 规则元转分
data
.
rules
.
forEach
((
item
)
=>
{
data
.
rules
.
forEach
((
item
)
=>
{
item
.
discountPrice
=
yuanToFen
(
item
.
discountPrice
||
0
)
item
.
discountPrice
=
yuanToFen
(
item
.
discountPrice
||
0
)
...
...
src/views/mall/promotion/rewardActivity/components/RewardRule.vue
View file @
9aa77067
...
@@ -47,13 +47,7 @@
...
@@ -47,13 +47,7 @@
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<span>
送积分:
</span>
<span>
送积分:
</span>
<el-switch
<el-form-item>
v-model=
"rule.givePoint"
active-text=
"是"
inactive-text=
"否"
inline-prompt
/>
<el-form-item
v-if=
"rule.givePoint"
>
送
送
<el-input
<el-input
v-model=
"rule.point"
v-model=
"rule.point"
...
@@ -65,18 +59,11 @@
...
@@ -65,18 +59,11 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-tag
type=
"warning"
>
当赠送积分为 0 时,表示不赠送积分
</el-tag>
</el-col>
<el-col
:span=
"24"
>
<span>
送优惠券:
</span>
<span>
送优惠券:
</span>
<el-switch
<RewardRuleCouponSelect
ref=
"rewardRuleCouponSelectRef"
v-model=
"rule!"
/>
v-model=
"rule.giveCoupon"
active-text=
"是"
inactive-text=
"否"
inline-prompt
/>
<RewardRuleCouponSelect
v-if=
"rule.giveCoupon"
ref=
"rewardRuleCouponSelectRef"
v-model=
"rule!"
/>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
...
@@ -120,11 +107,7 @@ const addRule = () => {
...
@@ -120,11 +107,7 @@ const addRule = () => {
limit
:
0
,
limit
:
0
,
discountPrice
:
0
,
discountPrice
:
0
,
freeDelivery
:
false
,
freeDelivery
:
false
,
givePoint
:
false
,
point
:
0
point
:
0
,
giveCoupon
:
false
,
couponIds
:
[],
couponCounts
:
[]
})
})
}
}
...
@@ -134,14 +117,6 @@ const setRuleCoupon = () => {
...
@@ -134,14 +117,6 @@ const setRuleCoupon = () => {
return
return
}
}
// 情况一:不赠送优惠券
formData
.
value
.
rules
.
forEach
((
rule
)
=>
{
if
(
!
rule
.
giveCoupon
)
{
rule
.
couponIds
=
[]
rule
.
couponCounts
=
[]
}
})
// 情况二:赠送优惠券
rewardRuleCouponSelectRef
.
value
?.
forEach
((
item
)
=>
item
.
setGiveCouponList
())
rewardRuleCouponSelectRef
.
value
?.
forEach
((
item
)
=>
item
.
setGiveCouponList
())
}
}
...
...
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
View file @
9aa77067
<
template
>
<
template
>
<el-button
class=
"ml-10px"
type=
"text"
@
click=
"selectCoupon"
>
添加优惠卷
</el-button>
<el-button
class=
"ml-10px"
type=
"text"
@
click=
"selectCoupon"
>
添加优惠卷
</el-button>
<el-col
:span=
"24"
>
<el-tag
type=
"warning"
>
当没有选择优惠券时,表示不赠送优惠券
</el-tag>
</el-col>
<div
<div
v-for=
"(item, index) in list"
v-for=
"(item, index) in list"
:key=
"item.id"
:key=
"item.id"
...
@@ -27,7 +29,11 @@
...
@@ -27,7 +29,11 @@
</div>
</div>
<!-- 优惠券选择 -->
<!-- 优惠券选择 -->
<CouponSelect
ref=
"couponSelectRef"
@
change=
"handleCouponChange"
/>
<CouponSelect
ref=
"couponSelectRef"
:take-type=
"CouponTemplateTakeTypeEnum.ADMIN.type"
@
change=
"handleCouponChange"
/>
</
template
>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
...
@@ -35,10 +41,10 @@ import { CouponSelect } from '@/views/mall/promotion/coupon/components'
...
@@ -35,10 +41,10 @@ import { CouponSelect } from '@/views/mall/promotion/coupon/components'
import
*
as
CouponTemplateApi
from
'@/api/mall/promotion/coupon/couponTemplate'
import
*
as
CouponTemplateApi
from
'@/api/mall/promotion/coupon/couponTemplate'
import
{
RewardRule
}
from
'@/api/mall/promotion/reward/rewardActivity'
import
{
RewardRule
}
from
'@/api/mall/promotion/reward/rewardActivity'
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
CouponTemplateTakeTypeEnum
}
from
'@/utils/constants'
import
{
discountFormat
}
from
'@/views/mall/promotion/coupon/formatter'
import
{
discountFormat
}
from
'@/views/mall/promotion/coupon/formatter'
import
{
isEmpty
}
from
'@/utils/is'
import
{
isEmpty
}
from
'@/utils/is'
import
{
useVModel
}
from
'@vueuse/core'
import
{
useVModel
}
from
'@vueuse/core'
import
{
findIndex
}
from
'@/utils'
defineOptions
({
name
:
'RewardRuleCouponSelect'
})
defineOptions
({
name
:
'RewardRuleCouponSelect'
})
...
@@ -81,19 +87,20 @@ const deleteCoupon = (index: number) => {
...
@@ -81,19 +87,20 @@ const deleteCoupon = (index: number) => {
/** 初始化赠送的优惠券列表 */
/** 初始化赠送的优惠券列表 */
const
initGiveCouponList
=
async
()
=>
{
const
initGiveCouponList
=
async
()
=>
{
//
朝赵优惠劵
//
校验优惠券存在
if
(
isEmpty
(
rewardRule
.
value
)
||
isEmpty
(
rewardRule
.
value
.
couponId
s
))
{
if
(
isEmpty
(
rewardRule
.
value
)
||
isEmpty
(
rewardRule
.
value
.
giveCoupon
s
))
{
return
return
}
}
const
data
=
await
CouponTemplateApi
.
getCouponTemplateList
(
rewardRule
.
value
.
couponIds
!
)
const
tempLateIds
=
Object
.
keys
(
rewardRule
.
value
.
giveCoupons
!
).
map
((
item
)
=>
parseInt
(
item
))
const
data
=
await
CouponTemplateApi
.
getCouponTemplateList
(
tempLateIds
)
if
(
!
data
)
{
if
(
!
data
)
{
return
return
}
}
// 回显
data
.
forEach
((
coupon
)
=>
{
data
.
forEach
((
coupon
)
=>
{
const
index
=
findIndex
(
rewardRule
.
value
.
couponIds
!
,
(
couponId
)
=>
couponId
===
coupon
.
id
)
list
.
value
.
push
({
list
.
value
.
push
({
...
coupon
,
...
coupon
,
giveCount
:
rewardRule
.
value
.
couponCounts
!
[
index
]
giveCount
:
rewardRule
.
value
.
giveCoupons
!
[
coupon
.
id
]
})
})
})
})
}
}
...
@@ -104,8 +111,13 @@ const setGiveCouponList = () => {
...
@@ -104,8 +111,13 @@ const setGiveCouponList = () => {
return
return
}
}
rewardRule
.
value
.
couponIds
=
list
.
value
.
map
((
rule
)
=>
rule
.
id
)
// 设置优惠券和其数量的对应
rewardRule
.
value
.
couponCounts
=
list
.
value
.
map
((
rule
)
=>
rule
.
giveCount
||
0
)
list
.
value
.
forEach
((
rule
)
=>
{
if
(
!
rewardRule
.
value
.
giveCoupons
)
{
rewardRule
.
value
.
giveCoupons
=
{}
}
rewardRule
.
value
.
giveCoupons
[
rule
.
id
]
=
rule
.
giveCount
!
})
}
}
defineExpose
({
setGiveCouponList
})
defineExpose
({
setGiveCouponList
})
...
...
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