优化表单原始数据保存时机和结构,在资产编辑中将原始数据保存移至分类属性加载完成后,在分类编辑中统一使用buildSubmitData构建原始数据以确保与提交数据结构一致,避免因数据结构差异导致的最小化传参失效
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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('添加成功');
|
||||||
|
|||||||
Reference in New Issue
Block a user