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
af1bec2a
authored
Aug 26, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
c3b210d2
35c1551f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
40 deletions
+51
-40
src/components/UploadFile/src/UploadFile.vue
+0
-1
src/views/mall/promotion/rewardActivity/RewardForm.vue
+24
-12
src/views/mall/promotion/rewardActivity/components/RewardRule.vue
+21
-12
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
+6
-15
No files found.
src/components/UploadFile/src/UploadFile.vue
View file @
af1bec2a
...
...
@@ -32,7 +32,6 @@
格式为
<b
style=
"color: #f56c6c"
>
{{
fileType
.
join
(
'/'
)
}}
</b>
的文件
</div>
</
template
>
<!-- TODO @puhui999:1)表单展示的时候,位置会偏掉,已发微信-->
<
template
#
file=
"row"
>
<div
class=
"flex items-center"
>
<span>
{{
row
.
file
.
name
}}
</span>
...
...
src/views/mall/promotion/rewardActivity/RewardForm.vue
View file @
af1bec2a
...
...
@@ -74,6 +74,8 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import
*
as
RewardActivityApi
from
'@/api/mall/promotion/reward/rewardActivity'
import
{
PromotionConditionTypeEnum
,
PromotionProductScopeEnum
}
from
'@/utils/constants'
import
ProductCategorySelect
from
'@/views/mall/product/category/components/ProductCategorySelect.vue'
import
{
cloneDeep
}
from
'lodash-es'
import
{
fenToYuan
,
yuanToFen
}
from
'@/utils'
defineOptions
({
name
:
'ProductBrandForm'
})
...
...
@@ -111,7 +113,12 @@ const open = async (type: string, id?: number) => {
formLoading
.
value
=
true
try
{
const
data
=
await
RewardActivityApi
.
getReward
(
id
)
// 转区段时间
data
.
startAndEndTime
=
[
data
.
startTime
,
data
.
endTime
]
// 规则分转元
data
.
rules
.
forEach
((
item
:
any
)
=>
{
item
.
discountPrice
=
fenToYuan
(
item
.
discountPrice
||
0
)
})
formData
.
value
=
data
// 获得商品范围
await
getProductScope
()
...
...
@@ -126,7 +133,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
const
emit
=
defineEmits
([
'success'
])
// 定义 success 事件,用于操作成功后的回调
const
submitForm
=
async
()
=>
{
// 校验表单
if
(
!
formRef
)
return
if
(
!
formRef
.
value
)
return
const
valid
=
await
formRef
.
value
.
validate
()
if
(
!
valid
)
return
...
...
@@ -135,7 +142,14 @@ const submitForm = async () => {
try
{
// 设置活动规则优惠券
rewardRuleRef
.
value
?.
setRuleCoupon
()
const
data
=
formData
.
value
const
data
=
cloneDeep
(
formData
.
value
)
// 时间段转换
data
.
startTime
=
data
.
startAndEndTime
!
[
0
]
data
.
endTime
=
data
.
startAndEndTime
!
[
1
]
// 规则元转分
data
.
rules
.
forEach
((
item
)
=>
{
item
.
discountPrice
=
yuanToFen
(
item
.
discountPrice
||
0
)
})
// 设置商品范围
setProductScopeValues
(
data
)
if
(
formType
.
value
===
'create'
)
{
...
...
@@ -170,16 +184,14 @@ const getProductScope = async () => {
formData
.
value
.
productSpuIds
=
formData
.
value
.
productScopeValues
break
case
PromotionProductScopeEnum
.
CATEGORY
.
scope
:
// TODO @puhui999:可以直接 await nextTick() 呀。
await
nextTick
(()
=>
{
let
productCategoryIds
=
formData
.
value
.
productScopeValues
as
any
if
(
Array
.
isArray
(
productCategoryIds
)
&&
productCategoryIds
.
length
>
0
)
{
// 单选时使用数组不能反显
productCategoryIds
=
productCategoryIds
[
0
]
}
// 设置品类编号
formData
.
value
.
productCategoryIds
=
productCategoryIds
})
await
nextTick
()
let
productCategoryIds
=
formData
.
value
.
productScopeValues
as
any
if
(
Array
.
isArray
(
productCategoryIds
)
&&
productCategoryIds
.
length
>
0
)
{
// 单选时使用数组不能反显
productCategoryIds
=
productCategoryIds
[
0
]
}
// 设置品类编号
formData
.
value
.
productCategoryIds
=
productCategoryIds
break
default
:
break
...
...
src/views/mall/promotion/rewardActivity/components/RewardRule.vue
View file @
af1bec2a
...
...
@@ -25,12 +25,13 @@
订单金额优惠
<el-form-item>
减
<!-- TODO @puhui999:需要考虑 100 换算哈 -->
<el-input
<el-input-number
v-model=
"rule.discountPrice"
:min=
"0"
:precision=
"2"
:step=
"0.1"
class=
"w-150px! p-x-20px!"
placeholder=
""
type=
"number"
controls-position=
"right"
/>
元
</el-form-item>
...
...
@@ -71,9 +72,9 @@
inactive-text=
"否"
inline-prompt
/>
<RewardRuleCouponS
howcase
<RewardRuleCouponS
elect
v-if=
"rule.giveCoupon"
ref=
"rewardRuleCouponS
howcase
Ref"
ref=
"rewardRuleCouponS
elect
Ref"
v-model=
"rule!"
/>
</el-col>
...
...
@@ -88,12 +89,14 @@
</template>
<
script
lang=
"ts"
setup
>
import
RewardRuleCouponS
howcase
from
'./RewardRuleCouponShowcase
.vue'
import
RewardRuleCouponS
elect
from
'./RewardRuleCouponSelect
.vue'
import
{
RewardActivityVO
}
from
'@/api/mall/promotion/reward/rewardActivity'
import
{
PromotionConditionTypeEnum
}
from
'@/utils/constants'
import
{
useVModel
}
from
'@vueuse/core'
import
{
isEmpty
}
from
'@/utils/is'
defineOptions
({
name
:
'RewardRule'
})
const
props
=
defineProps
<
{
modelValue
:
RewardActivityVO
}
>
()
...
...
@@ -104,7 +107,7 @@ const emits = defineEmits<{
}
>
()
const
formData
=
useVModel
(
props
,
'modelValue'
,
emits
)
// 活动数据
const
rewardRuleCouponS
howcaseRef
=
ref
<
InstanceType
<
typeof
RewardRuleCouponShowcase
>
[]
>
()
// 活动规则优惠券 Ref
const
rewardRuleCouponS
electRef
=
ref
<
InstanceType
<
typeof
RewardRuleCouponSelect
>
[]
>
()
// 活动规则优惠券 Ref
/** 删除优惠规则 */
const
deleteRule
=
(
ruleIndex
:
number
)
=>
{
...
...
@@ -127,14 +130,20 @@ const addRule = () => {
/** 设置规则优惠券-提交时 */
const
setRuleCoupon
=
()
=>
{
if
(
isEmpty
(
rewardRuleCouponS
howcase
Ref
.
value
))
{
if
(
isEmpty
(
rewardRuleCouponS
elect
Ref
.
value
))
{
return
}
rewardRuleCouponShowcaseRef
.
value
?.
forEach
((
item
)
=>
item
.
setGiveCouponList
())
// 情况一:不赠送优惠券
formData
.
value
.
rules
.
forEach
((
rule
)
=>
{
if
(
!
rule
.
giveCoupon
)
{
rule
.
couponIds
=
[]
rule
.
couponCounts
=
[]
}
})
// 情况二:赠送优惠券
rewardRuleCouponSelectRef
.
value
?.
forEach
((
item
)
=>
item
.
setGiveCouponList
())
}
defineExpose
({
setRuleCoupon
})
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponS
howcase
.vue
→
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponS
elect
.vue
View file @
af1bec2a
...
...
@@ -40,7 +40,7 @@ import { isEmpty } from '@/utils/is'
import
{
useVModel
}
from
'@vueuse/core'
import
{
findIndex
}
from
'@/utils'
// TODO @puhui999:要不就叫 RewardRuleCouponSelect
defineOptions
({
name
:
'RewardRuleCouponSelect'
})
const
props
=
defineProps
<
{
modelValue
:
RewardRule
...
...
@@ -89,15 +89,13 @@ const initGiveCouponList = async () => {
if
(
!
data
)
{
return
}
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
const
coupon
=
data
[
i
]
const
index
=
findIndex
(
rewardRule
.
value
.
couponIds
!
,
(
item
)
=>
item
.
id
===
coupon
.
id
)
data
.
forEach
((
coupon
)
=>
{
const
index
=
findIndex
(
rewardRule
.
value
.
couponIds
!
,
(
couponId
)
=>
couponId
===
coupon
.
id
)
list
.
value
.
push
({
...
coupon
,
giveCount
:
rewardRule
.
value
.
couponCounts
!
[
index
]
})
}
}
)
}
/** 设置赠送的优惠券 */
...
...
@@ -106,15 +104,8 @@ const setGiveCouponList = () => {
return
}
const
couponIds
:
number
[]
=
[]
const
couponCounts
:
number
[]
=
[]
for
(
let
i
=
0
,
len
=
list
.
value
.
length
;
i
<
len
;
i
++
)
{
couponIds
.
push
(
list
.
value
[
i
].
id
)
couponCounts
.
push
(
list
.
value
[
i
].
giveCount
!
)
}
// TODO @puhui999:可以考虑,直接使用 list 的 map 操作,简单一些。性能没啥差别的
rewardRule
.
value
.
couponIds
=
couponIds
rewardRule
.
value
.
couponCounts
=
couponCounts
rewardRule
.
value
.
couponIds
=
list
.
value
.
map
((
rule
)
=>
rule
.
id
)
rewardRule
.
value
.
couponCounts
=
list
.
value
.
map
((
rule
)
=>
rule
.
giveCount
||
0
)
}
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