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 : '账号入口'}