From 1ec0bbe9930b4a5119c951ddbd6bf00d1943ccae Mon Sep 17 00:00:00 2001 From: lichunn <269031597@qq.com> Date: Fri, 13 Feb 2026 19:21:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plugins/model-manager/src/components/ModelSetting.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugins/model-manager/src/components/ModelSetting.vue b/packages/plugins/model-manager/src/components/ModelSetting.vue index 73cad708a3..2968904854 100644 --- a/packages/plugins/model-manager/src/components/ModelSetting.vue +++ b/packages/plugins/model-manager/src/components/ModelSetting.vue @@ -189,7 +189,7 @@ export default { } const deleteModel = () => { - $emit('deleteCallback', selectedModel) + emit('deleteCallback', selectedModel.value) closeModelSettingPanel() } // 监听 props 变化,同步到本地(当选择不同模型时) From 28e28efeab78ad62617248081ff4c19b8ca324eb Mon Sep 17 00:00:00 2001 From: lichunn <269031597@qq.com> Date: Fri, 13 Feb 2026 20:06:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=E9=87=8D=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=EF=BC=8C=E5=BD=93=E5=AD=97=E6=AE=B5=E4=B8=BA?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E5=80=BC=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ModelSetting.vue | 137 ++++++++++++------ 1 file changed, 90 insertions(+), 47 deletions(-) diff --git a/packages/plugins/model-manager/src/components/ModelSetting.vue b/packages/plugins/model-manager/src/components/ModelSetting.vue index 2968904854..a4f78a423b 100644 --- a/packages/plugins/model-manager/src/components/ModelSetting.vue +++ b/packages/plugins/model-manager/src/components/ModelSetting.vue @@ -134,71 +134,114 @@ export default { field.options.splice(index, 1) } + const isSaving = ref(false) + // 保存模型时一并保存version字段 const saveModel = async () => { // 从子组件获取最新的数据 const latestModelData = modelBasicFormRef.value?.getLocalValue() - modelBasicFormRef.value.validate().then(async (valid) => { - if (valid) { - const newModel = { - description: latestModelData.description, - modelUrl: latestModelData.modelUrl, - nameCn: latestModelData.nameCn, - nameEn: latestModelData.nameEn, - version: latestModelData.version, - id: latestModelData.id, - parameters: latestModelData.parameters.filter((item) => !!item.prop) - } - let isModelRefRelative = true - let propertyName = '' - if (newModel.parameters?.length > 0) { - newModel.parameters.forEach((item) => { - if (item.type === 'Enum') { - item.options = JSON.stringify(item.options) - } - if (item.type === 'ModelRef') { - item.isModel = true - delete item.options - item.defaultValue = item.defaultValue || null - isModelRefRelative = !!item.defaultValue - propertyName = item.prop - } - }) - } - if (!isModelRefRelative) { + modelBasicFormRef.value + .validate() + .then(async (valid) => { + if (valid) { + isSaving.value = true // 设置保存标志 + + // 深拷贝一份数据用于保存 + const newModel = { + description: latestModelData.description, + modelUrl: latestModelData.modelUrl, + nameCn: latestModelData.nameCn, + nameEn: latestModelData.nameEn, + version: latestModelData.version, + id: latestModelData.id, + parameters: JSON.parse(JSON.stringify(latestModelData.parameters.filter((item) => !!item.prop))) + } + + let isModelRefRelative = true + let propertyName = '' + + if (newModel.parameters?.length > 0) { + newModel.parameters.forEach((item) => { + if (item.type === 'Enum') { + // 保存时序列化为字符串 + item.options = JSON.stringify(item.options || []) + } + if (item.type === 'ModelRef') { + item.isModel = true + delete item.options + item.defaultValue = item.defaultValue || null + isModelRefRelative = !!item.defaultValue + propertyName = item.prop + } + }) + } + + if (!isModelRefRelative) { + Notify({ + type: 'error', + message: `字段${propertyName}未关联模型引用` + }) + isSaving.value = false + return + } + + if (latestModelData.id === null) { + delete newModel.id + await createModel(newModel) + } else { + await updateModel(newModel.id, newModel) + } + + emit('editCallback') Notify({ - type: 'error', - message: `字段${propertyName}未关联模型引用` + type: 'success', + message: '保存成功' }) - return - } - if (latestModelData.id === null) { - delete newModel.id - await createModel(newModel) - } else { - await updateModel(newModel.id, newModel) + + // 关闭面板 + closeModelSettingPanel() + selectedModel.value = null + isSaving.value = false } - emit('editCallback') - Notify({ - type: 'success', - message: '保存成功' - }) - selectedModel.value = null - } - }) + }) + .catch(() => { + isSaving.value = false + }) } const deleteModel = () => { emit('deleteCallback', selectedModel.value) closeModelSettingPanel() } + // 监听 props 变化,同步到本地(当选择不同模型时) watch( () => props.model, (newModel) => { - selectedModel.value = newModel + if (!isSaving.value && newModel) { + // 只在非保存过程中处理 + // 深拷贝避免修改props + const modelCopy = JSON.parse(JSON.stringify(newModel)) + + // 加载时反序列化枚举字段 + if (modelCopy.parameters) { + modelCopy.parameters.forEach((param) => { + if (param.type === 'Enum' && typeof param.options === 'string') { + try { + param.options = JSON.parse(param.options) + } catch (e) { + param.options = [{ value: '', label: '' }] + } + } + }) + } + + selectedModel.value = modelCopy + } else { + selectedModel.value = newModel + } }, - { deep: true } + { deep: true, immediate: true } ) return { isShow,