优化SKU规格属性数据结构,将对象格式改为数组格式以匹配metadata规范,同时兼容旧格式数据的回显和编辑
This commit is contained in:
@@ -328,16 +328,33 @@ const onEditSku = async (row: any) => {
|
||||
skuImagePreview.value = formatImageUrl(data.imageUrl);
|
||||
}
|
||||
|
||||
// 处理规格属性
|
||||
if (data.specValues && Object.keys(data.specValues).length > 0) {
|
||||
specValuesList.value = Object.entries(data.specValues).map(([key, value]) => ({
|
||||
key,
|
||||
value: String(value),
|
||||
}));
|
||||
// 回显到 specValuesMap
|
||||
Object.entries(data.specValues).forEach(([key, value]) => {
|
||||
specValuesMap[key] = String(value);
|
||||
});
|
||||
// 处理规格属性(支持新格式数组和旧格式对象)
|
||||
if (data.specValues) {
|
||||
if (Array.isArray(data.specValues)) {
|
||||
// 新格式:与 metadata 相同的数组格式
|
||||
data.specValues.forEach((item: any) => {
|
||||
if (item.name) {
|
||||
// value 可能是数组或字符串
|
||||
const val = Array.isArray(item.value) ? item.value[0] : item.value;
|
||||
specValuesMap[item.name] = String(val || '');
|
||||
}
|
||||
});
|
||||
specValuesList.value = data.specValues.map((item: any) => ({
|
||||
key: item.name,
|
||||
value: String(Array.isArray(item.value) ? item.value[0] : item.value || ''),
|
||||
}));
|
||||
} else if (typeof data.specValues === 'object' && Object.keys(data.specValues).length > 0) {
|
||||
// 旧格式:对象格式 { key: value }
|
||||
specValuesList.value = Object.entries(data.specValues).map(([key, value]) => ({
|
||||
key,
|
||||
value: String(value),
|
||||
}));
|
||||
Object.entries(data.specValues).forEach(([key, value]) => {
|
||||
specValuesMap[key] = String(value);
|
||||
});
|
||||
} else {
|
||||
specValuesList.value = [{ key: '', value: '' }];
|
||||
}
|
||||
} else {
|
||||
specValuesList.value = [{ key: '', value: '' }];
|
||||
}
|
||||
@@ -471,18 +488,26 @@ const onSubmitSku = async () => {
|
||||
|
||||
submitLoading.value = true;
|
||||
|
||||
// 构建规格属性对象(优先使用 specValuesMap)
|
||||
const specValues: Record<string, string> = {};
|
||||
// 从 specValuesMap 获取(直接展示的属性)
|
||||
Object.entries(specValuesMap).forEach(([key, value]) => {
|
||||
if (key && value) {
|
||||
specValues[key] = value;
|
||||
}
|
||||
});
|
||||
// 兼容旧的 specValuesList
|
||||
specValuesList.value.forEach((item) => {
|
||||
if (item.key.trim() && !specValues[item.key.trim()]) {
|
||||
specValues[item.key.trim()] = item.value.trim();
|
||||
// 构建规格属性数组(与 metadata 格式相同)
|
||||
const specValues: any[] = [];
|
||||
assetSpecAttrs.value.forEach((attr) => {
|
||||
const selectedValue = specValuesMap[attr.name];
|
||||
if (selectedValue) {
|
||||
// 构建与 metadata 相同的数据结构
|
||||
const specItem: any = {
|
||||
name: attr.name,
|
||||
type: 'multi_select',
|
||||
value: [selectedValue],
|
||||
};
|
||||
// 添加 dictType
|
||||
if (attr.dictType) {
|
||||
specItem.dictType = attr.dictType;
|
||||
}
|
||||
// 添加 options(只包含选中的值)
|
||||
if (attr.options && attr.options.length > 0) {
|
||||
specItem.options = [{ label: selectedValue, value: selectedValue }];
|
||||
}
|
||||
specValues.push(specItem);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -491,7 +516,7 @@ const onSubmitSku = async () => {
|
||||
assetName: assetName.value,
|
||||
skuName: skuForm.skuName,
|
||||
imageUrl: skuForm.imageUrl || undefined,
|
||||
specValues: Object.keys(specValues).length > 0 ? specValues : undefined,
|
||||
specValues: specValues.length > 0 ? specValues : undefined,
|
||||
price: Math.round(skuForm.price * 100),
|
||||
unlimitedStock: skuForm.unlimitedStock,
|
||||
stock: skuForm.stock,
|
||||
|
||||
Reference in New Issue
Block a user