【新增】MALL: 满减送活动赠送优惠券(50%)

This commit is contained in:
puhui999 2024-08-22 18:19:54 +08:00
parent 25b23881b0
commit 10cb91ad59
5 changed files with 87 additions and 6 deletions

View File

@ -12,7 +12,7 @@ export interface RewardActivityVO {
productScopeValues?: number[] // 商品范围:值为 品类编号列表 或 商品编号列表 ,用于提交
productCategoryIds?: number[] // 仅用于表单,不提交
productSpuIds?: number[] // 仅用于表单,不提交
rules?: RewardRule[]
rules: RewardRule[]
}
// 优惠规则

View File

@ -153,11 +153,12 @@ import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate'
defineOptions({ name: 'CouponSelect' })
defineProps<{
multipleSelection: CouponTemplateApi.CouponTemplateVO[]
const props = defineProps<{
multipleSelection?: CouponTemplateApi.CouponTemplateVO[]
}>()
const emit = defineEmits<{
(e: 'update:multipleSelection', v: CouponTemplateApi.CouponTemplateVO[])
(e: 'update:multipleSelection', v: CouponTemplateApi.CouponTemplateVO[]): void
(e: 'change', v: CouponTemplateApi.CouponTemplateVO[]): void
}>()
const dialogVisible = ref(false) //
const dialogTitle = ref('选择优惠卷') //
@ -209,7 +210,11 @@ const open = async () => {
defineExpose({ open }) // open
const handleSelectionChange = (val: CouponTemplateApi.CouponTemplateVO[]) => {
emit('update:multipleSelection', val)
if (props.multipleSelection) {
emit('update:multipleSelection', val)
return
}
emit('change', val)
}
const submitForm = () => {

View File

@ -1,5 +1,5 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle">
<Dialog v-model="dialogVisible" :title="dialogTitle" width="60%">
<el-form
ref="formRef"
v-loading="formLoading"

View File

@ -73,6 +73,7 @@
inactive-text="否"
inline-prompt
/>
<RewardRuleCouponShowcase v-if="rule.giveCoupon" />
</el-col>
</el-form-item>
</el-form>
@ -85,6 +86,7 @@
</template>
<script lang="ts" setup>
import RewardRuleCouponShowcase from './RewardRuleCouponShowcase.vue'
import { RewardActivityVO } from '@/api/mall/promotion/reward/rewardActivity'
import { PromotionConditionTypeEnum } from '@/utils/constants'
import { useVModel } from '@vueuse/core'
@ -120,6 +122,8 @@ const addRule = () => {
couponCounts: []
})
}
// TODO puhui999:
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,72 @@
<template>
<ContentWrap>
<el-button @click="selectCoupon">添加优惠卷</el-button>
<el-table :data="list">
<el-table-column label="优惠券名称" prop="name" />
<el-table-column label="类型" prop="productScope">
<template #default="scope">
<dict-tag :type="DICT_TYPE.PROMOTION_PRODUCT_SCOPE" :value="scope.row.productScope" />
</template>
</el-table-column>
<el-table-column label="优惠" prop="discount">
<template #default="scope">
<dict-tag :type="DICT_TYPE.PROMOTION_DISCOUNT_TYPE" :value="scope.row.discountType" />
{{ discountFormat(scope.row) }}
</template>
</el-table-column>
<el-table-column
:formatter="validityTypeFormat"
align="center"
label="使用时间"
prop="validityType"
/>
<el-table-column
:formatter="remainedCountFormat"
align="center"
label="剩余数量"
prop="totalCount"
/>
<el-table-column align="center" fixed="right" label="状态" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
</el-table>
</ContentWrap>
<!-- 优惠券选择 -->
<CouponSelect ref="couponSelectRef" @change="handleCouponChange" />
</template>
<script lang="ts" setup>
// TODO puhui999: fix
import { CouponSelect } from '@/views/mall/promotion/coupon/components'
import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate'
import { DICT_TYPE } from '@/utils/dict'
import {
discountFormat,
remainedCountFormat,
validityTypeFormat
} from '@/views/mall/promotion/coupon/formatter'
defineOptions({ name: 'RewardRuleCouponShowcase' })
const list = ref<CouponTemplateApi.CouponTemplateVO[]>([]) //
const couponSelectRef = ref<InstanceType<typeof CouponSelect>>() //
/** 选择优惠券 */
const selectCoupon = () => {
couponSelectRef.value?.open()
}
/** 选择优惠券后的回调 */
const handleCouponChange = (val: CouponTemplateApi.CouponTemplateVO[]) => {
for (const item of val) {
if (list.value.some((v) => v.id === item.id)) {
continue
}
list.value.push(item)
}
}
</script>
<style lang="scss" scoped></style>