diff --git a/admin/src/views/config/center/index.vue b/admin/src/views/config/center/index.vue
index 505cb60..40fc53c 100644
--- a/admin/src/views/config/center/index.vue
+++ b/admin/src/views/config/center/index.vue
@@ -99,7 +99,7 @@
-
+
@@ -652,14 +652,25 @@
const activeGroup = ref
('brand')
+ /** ElMenu 强制重挂 key:menu item 点击在 select 事件前已内置 activeIndex——
+ * 「留下」取消后 activeGroup 未变、default-active 无变化,ElMenu 不会
+ * 重同步(高亮停在被点项而内容还在旧组);bump key 重建即恢复 */
+ const menuKey = ref(0)
+
/** 六 pane 的 dirty 上报值(pane 卸载不触发 emit——切组/切租户放行时
* 手动清残留;brand 内联表单不入此列,直接并入 paneDirty) */
const childPaneDirty = ref(false)
async function onGroupSelect(index: string): Promise {
if (index === activeGroup.value) return
- if (!(await confirmDiscard())) return
+ if (!(await confirmDiscard())) {
+ menuKey.value++ // 取消——高亮重同步回 activeGroup(内容未动)
+ return
+ }
childPaneDirty.value = false
+ // 确认丢弃:brand 表单是本组件内存态(切组不卸载)——回写基线值,
+ // 让丢弃语义与 pane 卸载重建一致(否则 brandDirty 残留反复误弹)
+ Object.assign(form, JSON.parse(brandBaseline.value))
activeGroup.value = index as GroupKey
}
@@ -893,6 +904,8 @@
form.avatar = res.avatar
version.value = res.version
avatarImgFailed.value = false
+ // 上传即落库(版本 +1 热生效)——刷新基线,防后续导航误报假脏
+ brandBaseline.value = JSON.stringify(form)
ElMessage.success(`头像已上传(版本 v${res.version},热生效)`)
} catch {
// 后端兜底提示:400 魔数不符 / 413 超限(全局拦截器弹出)