diff --git a/frontend-web/src/components/workspace/appearance-controls.tsx b/frontend-web/src/components/workspace/appearance-controls.tsx
index 8decbe91..02efa7c8 100644
--- a/frontend-web/src/components/workspace/appearance-controls.tsx
+++ b/frontend-web/src/components/workspace/appearance-controls.tsx
@@ -126,13 +126,21 @@ const LAYOUT_OPTIONS = [
];
/**
- * 界面模式(全量 / 简洁)下拉切换。简洁模式下全局顶栏被隐藏,故把外观设置里的
- * 「界面模式」切换也搬到页面级顶栏右上角,图标 + 下拉,与换肤并排。
+ * 界面模式(全量 / 简洁)下拉切换。换肤旁并排,图标 + 下拉:
+ * - 简洁模式 ChatPage 顶栏(全局顶栏被隐藏)。
+ * - 全量模式 Header 右上角。
+ * 用户未显式设置过界面模式时(mode === undefined),当前态按调用方所在的实际界面
+ * 兜底——`fallback` 指明这一回退值(Header 传 "full",ChatPage 传 "compact")。
*/
-export function LayoutModeSwitcher({ tone }: { tone: AppearanceControlTone }) {
+export function LayoutModeSwitcher({
+ tone,
+ fallback = "compact",
+}: {
+ tone: AppearanceControlTone;
+ fallback?: "full" | "compact";
+}) {
const [mode, setLayoutMode] = useLayoutMode();
- // 未显式设置过时简洁模式才会渲染本控件(全量模式有全局顶栏),故当前态按 compact 兜底。
- const current = mode === "full" ? "full" : "compact";
+ const current = mode ?? fallback;
const TriggerIcon = current === "full" ? PanelLeftIcon : LayoutIcon;
return (
diff --git a/frontend-web/src/strategy-components/Header.tsx b/frontend-web/src/strategy-components/Header.tsx
index 57d7480e..0bcb8334 100644
--- a/frontend-web/src/strategy-components/Header.tsx
+++ b/frontend-web/src/strategy-components/Header.tsx
@@ -4,7 +4,7 @@ import { useLocation, useNavigate } from "react-router-dom";
import { Button } from "@/components/ui/button";
import "@/components/page-sdebar.css";
-import { ThemeSwitcher } from "@/components/workspace/appearance-controls";
+import { LayoutModeSwitcher, ThemeSwitcher } from "@/components/workspace/appearance-controls";
import { NotificationDialog } from "@/components/workspace/notification-dialog";
import { getStoredAuth, getAccountDisplayName } from "@/core/auth";
import { isWujieEnv } from "@/core/embed/wujie";
@@ -126,6 +126,11 @@ const Header = ({ collapsed }: HeaderProps) => {
<>
+
+