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 46e6e9cae..e0a62c668 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/data.ts @@ -166,26 +166,87 @@ export function useFormSchema(): VbenFormSchema[] { }, rules: z.number().default(PromotionProductScopeEnum.ALL.scope), }, - // TODO @puhui999:选择完删除后,自动就退出了 modal; { fieldName: 'productSpuIds', label: '选择商品', component: 'Input', dependencies: { - triggerFields: ['productScope'], + triggerFields: ['productScope', 'productScopeValues'], show: (values) => { return values.productScope === PromotionProductScopeEnum.SPU.scope; }, + trigger(values, form) { + // 当加载已有数据时,根据 productScopeValues 设置 productSpuIds + if ( + values.productScope === PromotionProductScopeEnum.SPU.scope && + values.productScopeValues + ) { + form.setFieldValue('productSpuIds', values.productScopeValues); + } + }, + }, + rules: 'required', + }, + { + fieldName: 'productCategoryIds', + label: '选择分类', + component: 'Input', + dependencies: { + triggerFields: ['productScope', 'productScopeValues'], + show: (values) => { + return ( + values.productScope === PromotionProductScopeEnum.CATEGORY.scope + ); + }, + trigger(values, form) { + // 当加载已有数据时,根据 productScopeValues 设置 productCategoryIds + if ( + values.productScope === PromotionProductScopeEnum.CATEGORY.scope && + values.productScopeValues + ) { + const categoryIds = values.productScopeValues; + // 单选时使用数组不能反显,取第一个元素 + form.setFieldValue( + 'productCategoryIds', + Array.isArray(categoryIds) && categoryIds.length > 0 + ? categoryIds[0] + : categoryIds, + ); + } + }, }, rules: 'required', }, - // TODO @puhui999:这里还有个分类; { fieldName: 'rules', label: '优惠设置', component: 'Input', formItemClass: 'items-start', - // TODO @puhui999:这里可能要加个 rules: 'required', + rules: 'required', + }, + // 隐藏字段:用于自动同步 productScopeValues + { + fieldName: 'productScopeValues', + component: 'Input', + dependencies: { + triggerFields: ['productScope', 'productSpuIds', 'productCategoryIds'], + show: () => false, + trigger(values, form) { + switch (values.productScope) { + case PromotionProductScopeEnum.CATEGORY.scope: { + const categoryIds = Array.isArray(values.productCategoryIds) + ? values.productCategoryIds + : [values.productCategoryIds]; + form.setFieldValue('productScopeValues', categoryIds); + break; + } + case PromotionProductScopeEnum.SPU.scope: { + form.setFieldValue('productScopeValues', values.productSpuIds); + break; + } + } + }, + }, }, ]; } diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/form.vue b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/form.vue index 349490824..44180a558 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/form.vue +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/form.vue @@ -1,7 +1,7 @@ diff --git a/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue index b91b63398..5cc7e5b28 100644 --- a/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue +++ b/apps/web-antd/src/views/mall/promotion/rewardActivity/modules/reward-rule-coupon-select.vue @@ -96,7 +96,7 @@ onMounted(async () => {