From 404f0b719d59cd01de58a5543b1d41e0906dc88b Mon Sep 17 00:00:00 2001 From: WUSIJIAN <13825895+wsj0228@user.noreply.gitee.com> Date: Thu, 15 Jan 2026 16:43:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A1=A8=E5=8D=95=E5=8E=9F?= =?UTF-8?q?=E5=A7=8B=E6=95=B0=E6=8D=AE=E4=BF=9D=E5=AD=98=E6=97=B6=E6=9C=BA?= =?UTF-8?q?=E5=92=8C=E7=BB=93=E6=9E=84,=E5=9C=A8=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=B8=AD=E5=B0=86=E5=8E=9F=E5=A7=8B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BF=9D=E5=AD=98=E7=A7=BB=E8=87=B3=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=8A=A0=E8=BD=BD=E5=AE=8C=E6=88=90=E5=90=8E?= =?UTF-8?q?,=E5=9C=A8=E5=88=86=E7=B1=BB=E7=BC=96=E8=BE=91=E4=B8=AD?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8buildSubmitData=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=8E=9F=E5=A7=8B=E6=95=B0=E6=8D=AE=E4=BB=A5=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E4=B8=8E=E6=8F=90=E4=BA=A4=E6=95=B0=E6=8D=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=B8=80=E8=87=B4,=E9=81=BF=E5=85=8D=E5=9B=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E5=B7=AE=E5=BC=82=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E6=9C=80=E5=B0=8F=E5=8C=96=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/asset/component/editAsset.vue | 14 +++- .../category/component/editCategory.vue | 74 ++++++++++--------- 2 files changed, 52 insertions(+), 36 deletions(-) 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('添加成功');