From 8a343edbbb995af6d37c202e19f431c131f69b3a Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sun, 26 Jul 2026 07:48:22 -0600 Subject: [PATCH] =?UTF-8?q?feat(header):=20=E7=94=A8=E6=88=B7=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E8=8F=9C=E5=8D=95=E5=8A=A0=E5=85=A5=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E8=A7=86=E8=A7=92=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 仅超管可见。进入演示模式时若停在后台页面则跳回首页。 options 改为 computed,否则菜单文案与显示条件不会随状态更新。 Co-Authored-By: Claude Opus 5 --- src/shared/components/Header.vue | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/shared/components/Header.vue b/src/shared/components/Header.vue index d615d4b..1700a9d 100644 --- a/src/shared/components/Header.vue +++ b/src/shared/components/Header.vue @@ -112,6 +112,15 @@ async function handleLogout() { router.replace("/") } +function handleToggleDemoMode() { + const entering = !userStore.demoMode + userStore.toggleDemoMode() + // 进入演示模式时若正停在后台页面,当前界面已经失去权限,必须主动退出去 + if (entering && route.path.startsWith("/admin")) { + router.push("/") + } +} + function renderIcon(icon: string) { return () => h(Icon, { icon, width: 20 }) } @@ -175,7 +184,7 @@ const menus = computed(() => [ }, ]) -const options: Array = [ +const options = computed>(() => [ { label: "我的主页", key: "home", @@ -217,6 +226,13 @@ const options: Array = [ onClick: () => router.push("/ai-analysis"), }, }, + { + label: userStore.demoMode ? "退出学生视角" : "学生视角", + key: "demo-mode", + show: userStore.canToggleDemoMode, + icon: renderIcon("fluent-emoji:graduation-cap"), + props: { onClick: handleToggleDemoMode }, + }, { type: "divider" }, { label: "退出", @@ -224,7 +240,7 @@ const options: Array = [ icon: renderIcon("streamline-ultimate-color:coffee-cold"), props: { onClick: handleLogout }, }, -] +]) function goHome() { router.push("/")