From 9dbaf958395c2a1bc1fa3e6d74cf3f8d9e06c53c Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Thu, 9 Apr 2026 16:56:45 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BF=BB=E8=AF=91=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E2=80=94=20=E5=8E=BB=E6=8E=89version?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=20+=20=E4=BF=9D=E5=AD=98=E5=90=8E=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=8A=A0=E8=BD=BD=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: PUT /api/recipes/{id} 传了 version 字段导致 409 冲突 (version 不匹配时后端拒绝),但修改 en_name 不需要 version 检查 修复: - 保存 recipe en_name 时不传 version(后端只在 version 存在时才检查) - 保存后 loadRecipes + loadOils 刷新数据 - 下次打开配方卡片读到最新的 en_name - 精油价目页也同步更新(loadOils 刷新 oilsMeta.enName) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/components/RecipeDetailOverlay.vue | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/RecipeDetailOverlay.vue b/frontend/src/components/RecipeDetailOverlay.vue index f61cbff..0d9a40a 100644 --- a/frontend/src/components/RecipeDetailOverlay.vue +++ b/frontend/src/components/RecipeDetailOverlay.vue @@ -611,16 +611,17 @@ async function applyTranslation() { showTranslationEditor.value = false let saved = 0 - // 1. Save recipe English name + // 1. Save recipe English name (no version check — only updating en_name) if (recipe.value._id && customRecipeNameEn.value) { try { await api.put(`/api/recipes/${recipe.value._id}`, { en_name: customRecipeNameEn.value, - version: recipe.value._version, }) recipe.value.en_name = customRecipeNameEn.value saved++ - } catch {} + } catch (e) { + console.error('Save recipe en_name failed:', e) + } } // 2. Save each oil's English name to oils table (syncs with oil reference page) @@ -639,9 +640,16 @@ async function applyTranslation() { } } - if (saved > 0) ui.showToast(`翻译已保存(${saved}项)` + (failed > 0 ? `,${failed}项失败` : '')) - else if (failed > 0) ui.showToast(`保存失败 ${failed} 项`) - else ui.showToast('没有修改') + if (saved > 0) { + ui.showToast(`翻译已保存(${saved}项)` + (failed > 0 ? `,${failed}项失败` : '')) + // Reload data so next open shows updated names + recipesStore.loadRecipes() + oilsStore.loadOils() + } else if (failed > 0) { + ui.showToast(`保存失败 ${failed} 项`) + } else { + ui.showToast('没有修改') + } cardImageUrl.value = null nextTick(() => generateCardImage())