diff --git a/src/views/assets/asset/component/editAsset.vue b/src/views/assets/asset/component/editAsset.vue index db2c16d..e5d3989 100644 --- a/src/views/assets/asset/component/editAsset.vue +++ b/src/views/assets/asset/component/editAsset.vue @@ -777,7 +777,15 @@ const openDialog = (row?: any, edit?: boolean) => { // 元数据 if (data.metadata) { - Object.assign(ruleForm.metadata, data.metadata); + if (Array.isArray(data.metadata)) { + data.metadata.forEach((item: any) => { + if (item.name) { + ruleForm.metadata[item.name] = item.value; + } + }); + } else { + Object.assign(ruleForm.metadata, data.metadata); + } } // 加载分类属性 @@ -865,16 +873,24 @@ const buildFormData = (): FormData => { }); // 元数据(分类属性值) - if (Object.keys(ruleForm.metadata).length > 0) { - // 过滤掉 blob url,避免传给后端 - const metadataToSend = { ...ruleForm.metadata }; - Object.keys(metadataToSend).forEach((key) => { - if (typeof metadataToSend[key] === 'string' && metadataToSend[key].startsWith('blob:')) { - // 如果有对应的文件在 attrImageFiles 中,则置空或不传,这里选择置空 - metadataToSend[key] = ''; + if (categoryAttrs.value.length > 0) { + const metadataArray = categoryAttrs.value.map((attr) => { + const key = getAttrKey(attr); + let value = ruleForm.metadata[key]; + + // 过滤掉 blob url,避免传给后端 + if (typeof value === 'string' && value.startsWith('blob:')) { + value = ''; } + + return { + name: attr.name, + type: attr.type, + value: value, + options: attr.options || [], + }; }); - formData.append('metadata', JSON.stringify(metadataToSend)); + formData.append('metadata', JSON.stringify(metadataArray)); } return formData;