diff --git a/docs/design/PLATFORM_HOME_PUBLIC_BROWSE_AND_LOGIN_MODAL_GATING_DESIGN_2026-04-19.md b/docs/design/PLATFORM_HOME_PUBLIC_BROWSE_AND_LOGIN_MODAL_GATING_DESIGN_2026-04-19.md index 2f6412bb..ce2bf5af 100644 --- a/docs/design/PLATFORM_HOME_PUBLIC_BROWSE_AND_LOGIN_MODAL_GATING_DESIGN_2026-04-19.md +++ b/docs/design/PLATFORM_HOME_PUBLIC_BROWSE_AND_LOGIN_MODAL_GATING_DESIGN_2026-04-19.md @@ -150,6 +150,8 @@ - 不再提供 `AuthGate` 层右上角固定悬浮的全局登录 / 账号信息入口 - 登录触发统一来自页面内受保护动作、个人页、存档页等明确入口 - 账号信息面板只通过页面内按钮打开,不在平台右上角常驻悬浮 +- 未登录移动端底部导航不展示“我的”时,平台页头必须保留一个直接可点的 `登录` 入口,避免用户只能通过受保护动作被动触发弹窗 +- 桌面端平台页头的账号胶囊在未登录时主文案必须直接显示 `登录`,不能只显示“进入账户”这类弱入口 ## 4.2 平台首页数据加载 @@ -222,3 +224,4 @@ 3. 未登录选择 RPG 创作类型时,直接弹出登录弹窗,登录后自动进入创作工作台。 4. 登录弹窗内没有介绍性大段文字,只剩必要输入与按钮。 5. 未登录态首页不会因个人接口失败而出现“读取个人看板失败”“读取作品库失败”之类报错。 +6. 未登录移动端首页页头存在明确 `登录` 入口,点击后打开同一个登录弹窗。 diff --git a/src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx b/src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx index c92bcda3..8613fecf 100644 --- a/src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx +++ b/src/components/rpg-entry/RpgEntryHomeView.recharge.test.tsx @@ -157,6 +157,55 @@ function renderProfileView(onRechargeSuccess = vi.fn()) { ); } +function renderLoggedOutHomeView(openLoginModal = vi.fn()) { + return render( + undefined), + musicVolume: 0.42, + setMusicVolume: vi.fn(), + platformTheme: 'light', + setPlatformTheme: vi.fn(), + isHydratingSettings: false, + isPersistingSettings: false, + settingsError: null, + }} + > + + , + ); +} + afterEach(() => { vi.clearAllMocks(); }); @@ -175,3 +224,13 @@ test('opens recharge modal and submits points product', async () => { await waitFor(() => expect(onRechargeSuccess).toHaveBeenCalledTimes(1)); }); + +test('shows a reachable login entry in logged out mobile shell', async () => { + const user = userEvent.setup(); + const openLoginModal = vi.fn(); + + renderLoggedOutHomeView(openLoginModal); + await user.click(screen.getByRole('button', { name: '登录' })); + + expect(openLoginModal).toHaveBeenCalledTimes(1); +}); diff --git a/src/components/rpg-entry/RpgEntryHomeView.tsx b/src/components/rpg-entry/RpgEntryHomeView.tsx index 0cdd2478..46104f65 100644 --- a/src/components/rpg-entry/RpgEntryHomeView.tsx +++ b/src/components/rpg-entry/RpgEntryHomeView.tsx @@ -10,6 +10,7 @@ import { Copy, Crown, House, + LogIn, MessageCircle, Pencil, Search, @@ -1896,8 +1897,18 @@ export function RpgEntryHomeView({ if (!isDesktopLayout) { return (
-
+
+ {!isAuthenticated ? ( + + ) : null}
@@ -1912,7 +1923,7 @@ export function RpgEntryHomeView({ }} >
{visibleTabs.map((tab) => ( - {authUi?.user?.displayName || '进入账户'} + {authUi?.user?.displayName || '登录'} - {authUi?.user ? publicUserCode : '登录后同步作品与进度'} + {authUi?.user ? publicUserCode : '账号入口'}