7
7
:rules =" rules"
8
8
:schema =" allSchemas.formSchema"
9
9
>
10
- <template #spuIds >
10
+ <template #spuId >
11
11
<el-button @click =" spuSelectRef.open()" >选择商品</el-button >
12
12
<SpuAndSkuList
13
13
ref =" spuAndSkuListRef"
34
34
<el-button @click =" dialogVisible = false" >取 消</el-button >
35
35
</template >
36
36
</Dialog >
37
- <SpuSelect ref =" spuSelectRef" @confirm =" selectSpu" />
37
+ <SpuSelect ref =" spuSelectRef" :isSelectSku = " true " @confirm =" selectSpu" />
38
38
</template >
39
39
<script lang="ts" setup>
40
40
import * as CombinationActivityApi from ' @/api/mall/promotion/combination/combinationactivity'
@@ -43,7 +43,7 @@ import { allSchemas, rules } from './combinationActivity.data'
43
43
import { SpuAndSkuList , SpuProperty , SpuSelect } from ' @/views/mall/promotion/components'
44
44
import { getPropertyList , RuleConfig } from ' @/views/mall/product/spu/components'
45
45
import * as ProductSpuApi from ' @/api/mall/product/spu'
46
- import { convertToInteger } from ' @/utils'
46
+ import { convertToInteger , formatToFraction } from ' @/utils'
47
47
48
48
defineOptions ({ name: ' PromotionCombinationActivityForm' })
49
49
@@ -71,32 +71,51 @@ const ruleConfig: RuleConfig[] = [
71
71
]
72
72
const selectSpu = (spuId : number , skuIds : number []) => {
73
73
formRef .value .setValues ({ spuId })
74
- getSpuDetails ([spuId ])
75
- console .log (skuIds )
74
+ getSpuDetails (spuId , skuIds )
76
75
}
77
76
/**
78
77
* 获取 SPU 详情
79
- * @param spuIds
80
78
*/
81
- const getSpuDetails = async (spuIds : number []) => {
79
+ const getSpuDetails = async (
80
+ spuId : number ,
81
+ skuIds : number [] | undefined ,
82
+ products ? : CombinationProductVO []
83
+ ) => {
82
84
const spuProperties: SpuProperty <CombinationActivityApi .SpuExtension >[] = []
83
- const res = (await ProductSpuApi .getSpuDetailList (
84
- spuIds
85
- )) as CombinationActivityApi .SpuExtension []
85
+ const res = (await ProductSpuApi .getSpuDetailList ([
86
+ spuId
87
+ ])) as CombinationActivityApi .SpuExtension []
88
+ if (res .length == 0 ) {
89
+ return
90
+ }
86
91
spuList .value = []
87
- res ?.forEach ((spu ) => {
88
- // 初始化每个 sku 秒杀配置
89
- spu .skus ?.forEach ((sku ) => {
90
- const config: CombinationActivityApi .CombinationProductVO = {
91
- spuId: spu .id ! ,
92
- skuId: sku .id ! ,
93
- activePrice: 0
92
+ // 因为只能选择一个
93
+ const spu = res [0 ]
94
+ const selectSkus =
95
+ typeof skuIds === ' undefined' ? spu ?.skus : spu ?.skus ?.filter ((sku ) => skuIds .includes (sku .id ! ))
96
+ selectSkus ?.forEach ((sku ) => {
97
+ let config: CombinationProductVO = {
98
+ spuId: spu .id ! ,
99
+ skuId: sku .id ! ,
100
+ activePrice: 0
101
+ }
102
+ if (typeof products !== ' undefined' ) {
103
+ const product = products .find ((item ) => item .skuId === sku .id )
104
+ if (product ) {
105
+ // 分转元
106
+ product .activePrice = formatToFraction (product .activePrice )
94
107
}
95
- sku . productConfig = config
96
- })
97
- spuProperties . push ({ spuId: spu . id ! , spuDetail: spu , propertyList: getPropertyList ( spu ) })
108
+ config = product || config
109
+ }
110
+ sku . productConfig = config
98
111
})
99
- spuList .value .push (... res )
112
+ spu .skus = selectSkus as CombinationActivityApi .SkuExtension []
113
+ spuProperties .push ({
114
+ spuId: spu .id ! ,
115
+ spuDetail: spu ,
116
+ propertyList: getPropertyList (spu )
117
+ })
118
+ spuList .value .push (spu )
100
119
spuPropertyList .value = spuProperties
101
120
}
102
121
@@ -107,11 +126,19 @@ const open = async (type: string, id?: number) => {
107
126
dialogVisible .value = true
108
127
dialogTitle .value = t (' action.' + type )
109
128
formType .value = type
129
+ await resetForm ()
110
130
// 修改时,设置数据
111
131
if (id ) {
112
132
formLoading .value = true
113
133
try {
114
- const data = await CombinationActivityApi .getCombinationActivity (id )
134
+ const data = (await CombinationActivityApi .getCombinationActivity (
135
+ id
136
+ )) as CombinationActivityApi .CombinationActivityVO
137
+ await getSpuDetails (
138
+ data .spuId ! ,
139
+ data .products ?.map ((sku ) => sku .skuId ),
140
+ data .products
141
+ )
115
142
formRef .value .setValues (data )
116
143
} finally {
117
144
formLoading .value = false
@@ -120,6 +147,14 @@ const open = async (type: string, id?: number) => {
120
147
}
121
148
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
122
149
150
+ /** 重置表单 */
151
+ const resetForm = async () => {
152
+ spuList .value = []
153
+ spuPropertyList .value = []
154
+ await nextTick ()
155
+ formRef .value .getElFormRef ().resetFields ()
156
+ }
157
+
123
158
/** 提交表单 */
124
159
const emit = defineEmits ([' success' ]) // 定义 success 事件,用于操作成功后的回调
125
160
const submitForm = async () => {
0 commit comments