From f317508d39267d9ec181b729e0e0be32e401856e Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Tue, 26 Aug 2025 17:07:27 +0800 Subject: [PATCH] fix: build bugs --- .../mall/product/spu/components/sku-list.vue | 333 +----------------- 1 file changed, 5 insertions(+), 328 deletions(-) diff --git a/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue b/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue index 8d9d377e4..49f788027 100644 --- a/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue +++ b/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue @@ -45,7 +45,8 @@ const props = defineProps({ const emit = defineEmits<{ (e: 'selectionChange', value: MallSpuApi.Sku[]): void; -}>(); const formData = ref(); // 表单数据 +}>(); +const formData = ref(); // 表单数据 const skuList = ref([ { price: 0, // 商品价格 @@ -88,7 +89,7 @@ const deleteSku = (row: MallSpuApi.Sku) => { ); formData.value!.skus!.splice(index, 1); }; -const tableHeaders = ref<{ label: string; prop: string; }[]>([]); // 多属性表头 +const tableHeaders = ref<{ label: string; prop: string }[]>([]); // 多属性表头 /** * 保存时,每个商品规格的表单要校验下。例如说,销售金额最低是 0.01 这种。 */ @@ -204,7 +205,7 @@ const validateData = (propertyList: any[]) => { sku.properties ?.map((property: any) => property.propertyId) ?.forEach((propertyId: number) => { - if (!skuPropertyIds.indexOf(propertyId!) === -1) { + if (!skuPropertyIds.includes(propertyId!)) { skuPropertyIds.push(propertyId!); } }), @@ -463,333 +464,9 @@ defineExpose({ generateTableData, validateSku, getSkuTableRef }); size="small" type="primary" @click="deleteSku(row)" - > -删除 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.includes(propertyId!)) { - skuPropertyIds.push(propertyId!); - } - }), - ); - const propertyIds = propertyList.map((item) => item.id); - return skuPropertyIds.length === propertyIds.length; -}; - -/** 构建所有排列组合 */ -const build = ( - propertyValuesList: MallSpuApi.Property[][], -): MallSpuApi.Property[] | MallSpuApi.Property[][] => { - if (!propertyValuesList || propertyValuesList.length === 0) { - return []; - } else if (propertyValuesList.length === 1) { - return propertyValuesList[0] || []; - } else { - const result: MallSpuApi.Property[][] = []; - const rest = build(propertyValuesList.slice(1)); - if (propertyValuesList[0] && Array.isArray(rest)) { - for (let i = 0; i < propertyValuesList[0].length; i++) { - for (const restItem of rest) { - const currentItem = propertyValuesList[0][i]; - // 第一次不是数组结构,后面的都是数组结构 - if (Array.isArray(restItem)) { - result.push([currentItem!, ...restItem]); - } else if (restItem) { - // 确保restItem不是undefined,并进行类型断言 - result.push([currentItem!, restItem as MallSpuApi.Property]); - } - } - } - } - return result; - } -}; - -/** 监听属性列表,生成相关参数和表头 */ -watch( - () => props.propertyList, - (propertyList: PropertyAndValues[]) => { - // 如果不是多规格则结束 - if (!formData.value!.specType) { - return; - } - // 如果当前组件作为批量添加数据使用,则重置表数据 - if (props.isBatch) { - skuList.value = [ - { - price: 0, - marketPrice: 0, - costPrice: 0, - barCode: '', - picUrl: '', - stock: 0, - weight: 0, - volume: 0, - firstBrokeragePrice: 0, - secondBrokeragePrice: 0, - }, - ]; - } - - // 判断代理对象是否为空 - if (JSON.stringify(propertyList) === '[]') { - return; - } - // 重置表头 - tableHeaders.value = []; - // 生成表头 - propertyList.forEach((item, index) => { - // name加属性项index区分属性值 - tableHeaders.value.push({ prop: `name${index}`, label: item.name }); - }); - // 如果回显的 sku 属性和添加的属性一致则不处理 - if (validateData(propertyList)) { - return; - } - // 添加新属性没有属性值也不做处理 - if (propertyList.some((item) => !item.values || isEmpty(item.values))) { - return; - } - // 生成 table 数据,即 sku 列表 - generateTableData(propertyList); - }, - { - deep: true, - immediate: true, - }, -); -const activitySkuListRef = ref>(); - -const getSkuTableRef = () => { - return activitySkuListRef.value; -}; -// 暴露出生成 sku 方法,给添加属性成功时调用 -defineExpose({ generateTableData, validateSku, getSkuTableRef }); - -