feat(header): 用户下拉菜单加入学生视角开关
仅超管可见。进入演示模式时若停在后台页面则跳回首页。 options 改为 computed,否则菜单文案与显示条件不会随状态更新。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,15 @@ async function handleLogout() {
|
|||||||
router.replace("/")
|
router.replace("/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleToggleDemoMode() {
|
||||||
|
const entering = !userStore.demoMode
|
||||||
|
userStore.toggleDemoMode()
|
||||||
|
// 进入演示模式时若正停在后台页面,当前界面已经失去权限,必须主动退出去
|
||||||
|
if (entering && route.path.startsWith("/admin")) {
|
||||||
|
router.push("/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function renderIcon(icon: string) {
|
function renderIcon(icon: string) {
|
||||||
return () => h(Icon, { icon, width: 20 })
|
return () => h(Icon, { icon, width: 20 })
|
||||||
}
|
}
|
||||||
@@ -175,7 +184,7 @@ const menus = computed<MenuOption[]>(() => [
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
const options: Array<DropdownOption | DropdownDividerOption> = [
|
const options = computed<Array<DropdownOption | DropdownDividerOption>>(() => [
|
||||||
{
|
{
|
||||||
label: "我的主页",
|
label: "我的主页",
|
||||||
key: "home",
|
key: "home",
|
||||||
@@ -217,6 +226,13 @@ const options: Array<DropdownOption | DropdownDividerOption> = [
|
|||||||
onClick: () => router.push("/ai-analysis"),
|
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" },
|
{ type: "divider" },
|
||||||
{
|
{
|
||||||
label: "退出",
|
label: "退出",
|
||||||
@@ -224,7 +240,7 @@ const options: Array<DropdownOption | DropdownDividerOption> = [
|
|||||||
icon: renderIcon("streamline-ultimate-color:coffee-cold"),
|
icon: renderIcon("streamline-ultimate-color:coffee-cold"),
|
||||||
props: { onClick: handleLogout },
|
props: { onClick: handleLogout },
|
||||||
},
|
},
|
||||||
]
|
])
|
||||||
|
|
||||||
function goHome() {
|
function goHome() {
|
||||||
router.push("/")
|
router.push("/")
|
||||||
|
|||||||
Reference in New Issue
Block a user