diff --git a/src/views/assets/asset/component/editAsset.vue b/src/views/assets/asset/component/editAsset.vue index e82e222..92b57af 100644 --- a/src/views/assets/asset/component/editAsset.vue +++ b/src/views/assets/asset/component/editAsset.vue @@ -1050,11 +1050,19 @@ const openDialog = (row?: any, edit?: boolean) => { }) .catch(() => { categoryAttrs.value = []; + }) + .finally(() => { + // 分类属性加载完成后,保存原始数据用于最小化传参 + buildRequestBody().then((originalBody) => { + assetFormDiff.saveOriginal(JSON.parse(JSON.stringify(originalBody))); + }); }); + } else { + // 没有分类属性,直接保存原始数据 + buildRequestBody().then((originalBody) => { + assetFormDiff.saveOriginal(JSON.parse(JSON.stringify(originalBody))); + }); } - - // 保存原始数据用于最小化传参 - assetFormDiff.saveOriginal(JSON.parse(JSON.stringify(ruleForm))); }) .finally(() => { formLoading.value = false; diff --git a/src/views/assets/category/component/editCategory.vue b/src/views/assets/category/component/editCategory.vue index 7fb5ea5..b29e901 100644 --- a/src/views/assets/category/component/editCategory.vue +++ b/src/views/assets/category/component/editCategory.vue @@ -365,12 +365,12 @@ const openDialog = (row?: CategoryRow | string, edit?: boolean) => { } } }); - // 保存原始数据用于最小化传参 - categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(ruleForm))); + // 保存原始数据用于最小化传参(使用与提交相同的结构) + categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(buildSubmitData()))); }); } else { - // 保存原始数据用于最小化传参 - categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(ruleForm))); + // 保存原始数据用于最小化传参(使用与提交相同的结构) + categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(buildSubmitData()))); } }); } else if (row && typeof row === 'string') { @@ -411,46 +411,55 @@ const formatDictOptions = (attr: CustomAttr) => { }); }; +// 构建提交数据(用于保存原始数据和提交) +const buildSubmitData = () => { + // 处理 attrs:统一清理脏数据 + const processedAttrs = ruleForm.attrs.map((attr) => { + const base = { + type: attr.type, + required: attr.required ?? false, + multiple: attr.type === 'multi_select', + sort: attr.sort ?? 0, + }; + + if (isDictType(attr.type)) { + return { + ...base, + name: attr.name || '', + dictType: attr.dictType || '', + options: formatDictOptions(attr), + }; + } + + return { + ...base, + name: (attr.name || '').trim(), + options: [], + }; + }); + + return { + ...ruleForm, + attrs: processedAttrs, + }; +}; + // 提交 const onSubmit = () => { formRef.value.validate((valid: boolean) => { if (valid) { submitLoading.value = true; - // 处理 attrs:统一清理脏数据 - const processedAttrs = ruleForm.attrs.map((attr) => { - const base = { - type: attr.type, - required: attr.required ?? false, - multiple: attr.type === 'multi_select', - sort: attr.sort ?? 0, - }; - - if (isDictType(attr.type)) { - return { - ...base, - name: attr.name || '', - dictType: attr.dictType || '', - options: formatDictOptions(attr), - }; - } - - return { - ...base, - name: (attr.name || '').trim(), - options: [], - }; - }); + const submitData = buildSubmitData(); if (isEdit.value) { // 编辑模式:通过 _originalData 让拦截器自动处理最小化传参 const originalData = categoryFormDiff.getOriginal(); - const submitData = { - ...ruleForm, - attrs: processedAttrs, + const requestData = { + ...submitData, _originalData: originalData, }; - updateCategory(submitData) + updateCategory(requestData) .then(() => { ElMessage.success('修改成功'); closeDialog(); @@ -461,7 +470,6 @@ const onSubmit = () => { }); } else { // 新增模式:传递所有字段 - const submitData = { ...ruleForm, attrs: processedAttrs }; addCategory(submitData) .then(() => { ElMessage.success('添加成功');