From 7c283627d3586d07aa93eaa389cd8546645b957d Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 12 Jun 2026 20:48:10 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20AI=20=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=AD=A6=E4=B9=A0=E5=81=8F=E5=A5=BD=E4=B8=8E=E4=BF=A1?= =?UTF-8?q?=E7=94=A8=E7=9B=98=E6=9C=AF=E8=AF=AD=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 优化登录与入口页面加载体验 - 为登录页面添加 Suspense 边界,统一 fallback 样式 - 重构入口守卫逻辑,在布局阶段处理未登录重定向,避免闪烁 - 登录页面支持会话过期提示,并自动清理 URL 参数 feat: 信用盘与钱包盘文案差异化展示 - 底部导航「钱包」标签在信用盘模式下显示为「信用」 - 大厅余额条在信用盘模式下使用「可 --- AGENTS.md | 8 +++ src/app/(player)/login/page.tsx | 15 ++++- src/app/(player)/page.tsx | 6 +- src/components/layout/player-bottom-nav.tsx | 13 ++++- src/features/hall/hall-wallet-strip.tsx | 15 +++-- src/features/orders/ticket-item-status.tsx | 15 ++++- .../orders/ticket-order-detail-screen.tsx | 9 ++- .../orders/ticket-order-group-screen.tsx | 5 ++ .../orders/ticket-orders-list-screen.tsx | 4 ++ src/features/player/entry-gate.tsx | 27 ++++++++- src/features/player/player-login-screen.tsx | 53 ++++++++++++------ .../results/draw-result-detail-screen.tsx | 7 ++- src/features/wallet/wallet-logs-block.tsx | 55 +++++++++++-------- src/features/wallet/wallet-logs-screen.tsx | 13 ++++- src/features/wallet/wallet-screen.tsx | 11 ++-- src/i18n/locales/en/entry.json | 10 ++++ src/i18n/locales/en/player.json | 30 +++++++--- src/i18n/locales/ne/entry.json | 10 ++++ src/i18n/locales/ne/player.json | 34 +++++++++++- src/i18n/locales/zh/entry.json | 2 +- src/i18n/locales/zh/player.json | 30 +++++++--- src/lib/lottery-http.ts | 53 +++++++++++++++--- src/lib/player-funding-mode.ts | 10 ++++ src/types/api/wallet-logs.ts | 4 +- 24 files changed, 347 insertions(+), 92 deletions(-) create mode 100644 src/lib/player-funding-mode.ts diff --git a/AGENTS.md b/AGENTS.md index 8bd0e39..7e2b30f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,3 +3,11 @@ This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + +## Learned User Preferences + +- 玩家端信用盘文案与钱包盘区分:不用「派彩」口径,中奖走账期结算语义;提示语避免生硬重复「信用盘」字样。 + +## Learned Workspace Facts + +- 信用盘流水对外类型:`win_credit`(中奖释额)、`bill_settlement`(账期收付),与钱包 `prize`/派彩文案分离。 diff --git a/src/app/(player)/login/page.tsx b/src/app/(player)/login/page.tsx index 0235512..1282559 100644 --- a/src/app/(player)/login/page.tsx +++ b/src/app/(player)/login/page.tsx @@ -1,5 +1,16 @@ +import type { ReactNode } from "react"; +import { Suspense } from "react"; + import { PlayerLoginScreen } from "@/features/player/player-login-screen"; -export default function PlayerLoginPage() { - return ; +function LoginFallback(): ReactNode { + return
; +} + +export default function PlayerLoginPage() { + return ( + }> + + + ); } diff --git a/src/app/(player)/page.tsx b/src/app/(player)/page.tsx index eded347..b3bb5f8 100644 --- a/src/app/(player)/page.tsx +++ b/src/app/(player)/page.tsx @@ -4,11 +4,7 @@ import { Suspense } from "react"; import { EntryGate } from "@/features/player/entry-gate"; function EntryFallback(): ReactNode { - return ( -
-

Loading...

-
- ); + return
; } export default function EntryPage() { diff --git a/src/components/layout/player-bottom-nav.tsx b/src/components/layout/player-bottom-nav.tsx index 3fd7fa5..259eabc 100644 --- a/src/components/layout/player-bottom-nav.tsx +++ b/src/components/layout/player-bottom-nav.tsx @@ -7,7 +7,9 @@ import { BarChart3, ClipboardList, Home, Wallet } from "lucide-react"; import { useTranslation } from "react-i18next"; import { playerViewportFixedBarClass } from "@/lib/player-viewport"; +import { isCreditFundingPlayer } from "@/lib/player-funding-mode"; import { cn } from "@/lib/utils"; +import { usePlayerSessionStore } from "@/stores/player-session-store"; const tabs = [ { @@ -34,7 +36,9 @@ const tabs = [ { href: "/wallet", labelKey: "nav.wallet", + creditLabelKey: "nav.credit", labelDefault: "钱包", + creditLabelDefault: "信用", icon: Wallet, match: (p: string) => p === "/wallet" || p.startsWith("/wallet/"), }, @@ -46,6 +50,7 @@ const tabs = [ export function PlayerBottomNav() { const pathname = usePathname() ?? ""; const { t } = useTranslation("player"); + const creditMode = isCreditFundingPlayer(usePlayerSessionStore((state) => state.profile)); return (