优化表单原始数据保存时机和结构,在资产编辑中将原始数据保存移至分类属性加载完成后,在分类编辑中统一使用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,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 = () => { const onSubmit = () => {
formRef.value.validate((valid: boolean) => { formRef.value.validate((valid: boolean) => {
if (valid) { if (valid) {
submitLoading.value = true; submitLoading.value = true;
// 处理 attrs统一清理脏数据 const submitData = buildSubmitData();
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: [],
};
});
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('添加成功');