优化表单原始数据保存时机和结构,在资产编辑中将原始数据保存移至分类属性加载完成后,在分类编辑中统一使用buildSubmitData构建原始数据以确保与提交数据结构一致,避免因数据结构差异导致的最小化传参失效

This commit is contained in:
WUSIJIAN
2026-01-15 16:43:02 +08:00
parent e77bb4005b
commit 404f0b719d
2 changed files with 52 additions and 36 deletions

View File

@@ -1050,11 +1050,19 @@ const openDialog = (row?: any, edit?: boolean) => {
}) })
.catch(() => { .catch(() => {
categoryAttrs.value = []; 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(() => { .finally(() => {
formLoading.value = false; formLoading.value = false;

View File

@@ -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 { } else {
// 保存原始数据用于最小化传参 // 保存原始数据用于最小化传参(使用与提交相同的结构)
categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(ruleForm))); categoryFormDiff.saveOriginal(JSON.parse(JSON.stringify(buildSubmitData())));
} }
}); });
} else if (row && typeof row === 'string') { } else if (row && typeof row === 'string') {
@@ -411,11 +411,8 @@ const formatDictOptions = (attr: CustomAttr) => {
}); });
}; };
// 提交 // 构建提交数据(用于保存原始数据和提交)
const onSubmit = () => { const buildSubmitData = () => {
formRef.value.validate((valid: boolean) => {
if (valid) {
submitLoading.value = true;
// 处理 attrs统一清理脏数据 // 处理 attrs统一清理脏数据
const processedAttrs = ruleForm.attrs.map((attr) => { const processedAttrs = ruleForm.attrs.map((attr) => {
const base = { const base = {
@@ -441,16 +438,28 @@ const onSubmit = () => {
}; };
}); });
return {
...ruleForm,
attrs: processedAttrs,
};
};
// 提交
const onSubmit = () => {
formRef.value.validate((valid: boolean) => {
if (valid) {
submitLoading.value = true;
const submitData = buildSubmitData();
if (isEdit.value) { if (isEdit.value) {
// 编辑模式:通过 _originalData 让拦截器自动处理最小化传参 // 编辑模式:通过 _originalData 让拦截器自动处理最小化传参
const originalData = categoryFormDiff.getOriginal(); const originalData = categoryFormDiff.getOriginal();
const submitData = { const requestData = {
...ruleForm, ...submitData,
attrs: processedAttrs,
_originalData: originalData, _originalData: originalData,
}; };
updateCategory(submitData) updateCategory(requestData)
.then(() => { .then(() => {
ElMessage.success('修改成功'); ElMessage.success('修改成功');
closeDialog(); closeDialog();
@@ -461,7 +470,6 @@ const onSubmit = () => {
}); });
} else { } else {
// 新增模式:传递所有字段 // 新增模式:传递所有字段
const submitData = { ...ruleForm, attrs: processedAttrs };
addCategory(submitData) addCategory(submitData)
.then(() => { .then(() => {
ElMessage.success('添加成功'); ElMessage.success('添加成功');