|
@@ -798,6 +798,12 @@ const dataConverter = {
|
|
|
let attrValueObj = {};
|
|
|
try {
|
|
|
attrValueObj = JSON.parse(item.attrValue || '{}');
|
|
|
+ // 对所有的规格值进行trim处理,确保数据一致性
|
|
|
+ Object.keys(attrValueObj).forEach(key => {
|
|
|
+ if (typeof attrValueObj[key] === 'string') {
|
|
|
+ attrValueObj[key] = attrValueObj[key].trim();
|
|
|
+ }
|
|
|
+ });
|
|
|
} catch (e) {
|
|
|
console.warn('解析 attrValue 失败:', item.attrValue, e);
|
|
|
}
|
|
@@ -810,11 +816,19 @@ const dataConverter = {
|
|
|
skus.forEach((sku) => {
|
|
|
const value = attrValueObj[sku.name];
|
|
|
if (value) {
|
|
|
- goods_sku_text.push(value);
|
|
|
- // 找到对应的 temp_id
|
|
|
- const child = sku.children.find((c) => c.name === value);
|
|
|
+ // 去除首尾空格,确保数据一致性
|
|
|
+ const trimmedValue = value.trim();
|
|
|
+ goods_sku_text.push(trimmedValue);
|
|
|
+ // 找到对应的 temp_id,优先匹配trim后的值,如果找不到则匹配原值
|
|
|
+ let child = sku.children.find((c) => c.name === trimmedValue);
|
|
|
+ if (!child) {
|
|
|
+ // 如果trim后找不到,尝试匹配原值
|
|
|
+ child = sku.children.find((c) => c.name.trim() === trimmedValue);
|
|
|
+ }
|
|
|
if (child) {
|
|
|
goods_sku_temp_ids.push(child.temp_id);
|
|
|
+ } else {
|
|
|
+ console.warn('找不到匹配的规格值:', trimmedValue, 'in', sku.children);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
@@ -1162,8 +1176,9 @@ const loadGoodsData = async (id) => {
|
|
|
// 强制触发响应式更新
|
|
|
await new Promise((resolve) => {
|
|
|
setTimeout(() => {
|
|
|
- // 强制重新构建SKU表格
|
|
|
- buildSkuPriceTable();
|
|
|
+ // 注意:加载商品数据时不需要调用 buildSkuPriceTable
|
|
|
+ // 因为从后端转换的数据已经是完整的,不需要重新生成SKU组合
|
|
|
+ // buildSkuPriceTable(); // 移除这行,避免生成额外的SKU
|
|
|
|
|
|
// 强制重新渲染组件
|
|
|
forceUpdateKey.value++;
|