优化PUT请求传参机制,实现最小化传参以减少网络传输和提高性能,在请求拦截器中自动计算差异只传递修改过的字段,同时新增通用的表单差异比较工具函数,
This commit is contained in:
@@ -445,6 +445,7 @@ import type { FormInstance, FormRules } from 'element-plus';
|
||||
import { Plus, Delete } from '@element-plus/icons-vue';
|
||||
import { getAsset, createAsset, updateAsset, uploadAssetImage } from '/@/api/assets/asset';
|
||||
import { getCategoryTree, getCategory } from '/@/api/assets/category';
|
||||
import { createFormDiff } from '/@/utils/diffUtils';
|
||||
import Editor from '/@/components/editor/index.vue';
|
||||
import type { UploadFile, UploadUserFile, UploadRequestOptions } from 'element-plus';
|
||||
|
||||
@@ -555,6 +556,8 @@ const dialogVisible = ref(false);
|
||||
const dialogImageUrl = ref('');
|
||||
// 图片拼接
|
||||
const fileAddressPrefix = ref('');
|
||||
// 使用通用工具函数保存原始数据,用于最小化传参
|
||||
const assetFormDiff = createFormDiff<Record<string, any>>();
|
||||
|
||||
const formatImageUrl = (url?: string) => {
|
||||
if (!url) return '';
|
||||
@@ -1021,6 +1024,9 @@ const openDialog = (row?: any, edit?: boolean) => {
|
||||
categoryAttrs.value = [];
|
||||
});
|
||||
}
|
||||
|
||||
// 保存原始数据用于最小化传参
|
||||
assetFormDiff.saveOriginal(JSON.parse(JSON.stringify(ruleForm)));
|
||||
})
|
||||
.finally(() => {
|
||||
formLoading.value = false;
|
||||
@@ -1187,7 +1193,21 @@ const onSubmit = async () => {
|
||||
if (valid) {
|
||||
submitLoading.value = true;
|
||||
try {
|
||||
const requestBody = await buildRequestBody();
|
||||
const fullRequestBody = await buildRequestBody();
|
||||
|
||||
let requestBody: any;
|
||||
if (isEdit.value) {
|
||||
// 编辑模式:通过 _originalData 让拦截器自动处理最小化传参
|
||||
const originalData = assetFormDiff.getOriginal();
|
||||
requestBody = {
|
||||
...fullRequestBody,
|
||||
_originalData: originalData,
|
||||
};
|
||||
} else {
|
||||
// 新增模式:传递所有字段
|
||||
requestBody = fullRequestBody;
|
||||
}
|
||||
|
||||
const request = isEdit.value ? updateAsset(requestBody) : createAsset(requestBody);
|
||||
|
||||
await request;
|
||||
|
||||
Reference in New Issue
Block a user