From 58a0636959e805734cdf8580bf9457eeec2d477a Mon Sep 17 00:00:00 2001 From: puhui999 Date: Fri, 31 Oct 2025 23:00:21 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=20=E5=95=86=E5=9F=8E?= =?UTF-8?q?=E3=80=91=E6=BB=A1=E5=87=8F=E9=80=81=E6=B4=BB=E5=8A=A8=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=88antd=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rewardActivity/components/index.ts | 2 - .../mall/promotion/rewardActivity/data.ts | 47 ++++++-- .../mall/promotion/rewardActivity/index.vue | 16 ++- .../promotion/rewardActivity/modules/form.vue | 82 ++++++-------- .../reward-rule-coupon-select.vue | 70 +++++++----- .../{components => modules}/reward-rule.vue | 102 +++++++++--------- 6 files changed, 174 insertions(+), 145 deletions(-) delete mode 100644 apps/web-antd/src/views/mall/promotion/rewardActivity/components/index.ts rename apps/web-antd/src/views/mall/promotion/rewardActivity/{components => modules}/reward-rule-coupon-select.vue (63%) rename apps/web-antd/src/views/mall/promotion/rewardActivity/{components => modules}/reward-rule.vue (63%) diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/components/index.ts b/apps/web-antd/src/views/mall/promotion/rewardActivity/components/index.ts deleted file mode 100644 index 93b72c326..000000000 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as RewardRuleCouponSelect } from './reward-rule-coupon-select.vue'; -export { default as RewardRule } from './reward-rule.vue'; diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts b/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts index 238a23961..f2cffcf12 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts @@ -1,10 +1,15 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; -import { DICT_TYPE } from '@vben/constants'; +import { + DICT_TYPE, + PromotionConditionTypeEnum, + PromotionProductScopeEnum, +} from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { $t } from '@vben/locales'; +import { z } from '#/adapter/form'; import { getRangePickerDefaultProps } from '#/utils'; /** 列表的搜索表单 */ @@ -97,35 +102,40 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { /** 新增/修改的表单 */ export function useFormSchema(): VbenFormSchema[] { return [ + // 隐藏 ID 字段 { - component: 'Input', fieldName: 'id', + component: 'Input', dependencies: { triggerFields: [''], show: () => false, }, }, + // 活动名称 { fieldName: 'name', label: '活动名称', component: 'Input', + rules: 'required', componentProps: { placeholder: '请输入活动名称', + allowClear: true, }, - rules: 'required', }, + // 活动时间 { fieldName: 'startAndEndTime', label: '活动时间', component: 'RangePicker', + rules: 'required', componentProps: { showTime: true, format: 'YYYY-MM-DD HH:mm:ss', placeholder: [$t('common.startTimeText'), $t('common.endTimeText')], + allowClear: true, }, - rules: 'required', }, - // TODO @puhui999:增加一个 defaultValue + // 条件类型 { fieldName: 'conditionType', label: '条件类型', @@ -135,9 +145,9 @@ export function useFormSchema(): VbenFormSchema[] { buttonStyle: 'solid', optionType: 'button', }, - defaultValue: PromotionConditionTypeEnum.PRICE.type, - rules: 'required', + rules: z.number().default(PromotionConditionTypeEnum.PRICE.type), }, + // 活动范围 { fieldName: 'productScope', label: '活动范围', @@ -147,8 +157,9 @@ export function useFormSchema(): VbenFormSchema[] { buttonStyle: 'solid', optionType: 'button', }, - rules: 'required', + rules: z.number().default(PromotionProductScopeEnum.ALL.scope), }, + // 备注 { fieldName: 'remark', label: '备注', @@ -156,6 +167,26 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { placeholder: '请输入备注', rows: 4, + allowClear: true, + }, + }, + // 优惠规则(自定义组件插槽) + { + fieldName: 'rules', + label: '优惠设置', + component: 'Input', + formItemClass: 'items-start', + }, + // 商品范围选择(自定义组件插槽) + { + fieldName: 'productSpuIds', + label: '选择商品', + component: 'Input', + dependencies: { + triggerFields: ['productScope'], + show: (values) => { + return values.productScope === PromotionProductScopeEnum.SPU.scope; + }, }, }, ]; diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/index.vue b/apps/web-antd/src/views/mall/promotion/rewardActivity/index.vue index c0e384190..046be07fc 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/index.vue +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/index.vue @@ -42,12 +42,12 @@ function handleEdit(row: MallRewardActivityApi.RewardActivity) { /** 关闭满减送活动 */ async function handleClose(row: MallRewardActivityApi.RewardActivity) { const hideLoading = message.loading({ - content: '正在关闭中...', + content: $t('ui.actionMessage.closing', [row.name]), duration: 0, }); try { await closeRewardActivity(row.id!); - message.success('关闭成功'); + message.success($t('ui.actionMessage.closeSuccess', [row.name])); handleRefresh(); } finally { hideLoading(); @@ -96,7 +96,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ refresh: true, search: true, }, - } as VxeTableGridOptions, + } as VxeTableGridOptions, }); @@ -104,6 +104,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ + + + diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/components/reward-rule-coupon-select.vue b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue similarity index 63% rename from apps/web-antd/src/views/mall/promotion/rewardActivity/components/reward-rule-coupon-select.vue rename to apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue index e2844fc11..3404b2b59 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/components/reward-rule-coupon-select.vue +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue @@ -1,16 +1,19 @@