# 本次代码变更说明 本文档总结当前这一次工作中,对仓库代码所做的主要改动,重点说明: - 新增了哪些文件 - 修改了哪些已有文件 - 每个模块新增了什么能力 - 当前已经验证过什么 说明: - 下文基于当前 Git 工作区中的变更整理 - 其中一部分文件为“新增文件”,一部分为“在已有文件基础上的修改” - `src/routeTree.gen.ts` 属于路由生成产物,不是手写业务文件 ## 1. 本次改动目标 本次工作的核心目标,是把项目从通用脚手架推进到“36 字花”游戏前端的业务骨架阶段,采用的落地方案是: - 统一业务路由,不按设备拆成不同 URL - 同一路由下按设备加载移动端 / 桌面端不同视图 - 共用一套游戏状态、数据模型、mock 数据和接口层 - 将页面内写死的中英文文案逐步收敛到 `react-i18next` 的语言包里 ## 2. 新增模块总览 本次新增的核心模块有 5 个: 1. `src/features/game/shared` 说明: - 定义 36 字花游戏的共享常量、类型、mock 数据、派生计算函数 - 作为游戏业务层的基础模型 2. `src/store` 说明: - 基于 Zustand 实现游戏的状态容器 - 按模块拆分目录 - 当前分为 `src/store/auth` 和 `src/store/game` 3. `src/features/game/api` 说明: - 建立游戏相关接口层和 DTO 映射 - 提供 mock bootstrap 获取函数,便于在未接真实后端前先跑 UI 4. `src/features/game/components` 说明: - 新增共享展示组件 - 同时新增移动端页面壳和桌面端页面壳 5. `src/features/game/entry` 说明: - 增加游戏路由适配页 - 负责把共享状态、共享组件和双端壳层接起来 ## 3. 新增文件清单与说明 ### 3.1 通用组件 #### [src/components/language-link.tsx](/Users/jiaunun/Desktop/36-character-flower/src/components/language-link.tsx) 新增内容: - 抽出语言切换按钮组件 - 从 `/$lang` 布局文件中拆出,避免路由文件内混入过多内部组件 #### [src/components/nav-link.tsx](/Users/jiaunun/Desktop/36-character-flower/src/components/nav-link.tsx) 新增内容: - 抽出顶部导航按钮组件 - 供语言布局页复用 #### [src/components/stat-card.tsx](/Users/jiaunun/Desktop/36-character-flower/src/components/stat-card.tsx) 新增内容: - 抽出首页信息卡片组件 - 用于首页业务入口页展示 ### 3.2 设备识别 #### [src/lib/device/use-device-type.ts](/Users/jiaunun/Desktop/36-character-flower/src/lib/device/use-device-type.ts) 新增内容: - 基于窗口宽度判断当前设备是 `mobile` 还是 `desktop` - 为同一路由下渲染不同视图提供支持 ### 3.3 游戏共享模型 #### [src/features/game/shared/constants.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/shared/constants.ts) 新增内容: - 36 宫格基础尺寸常量 - 回合阶段枚举 - 格子状态枚举 - 连接状态枚举 - 筹码默认配置等 #### [src/features/game/shared/types.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/shared/types.ts) 新增内容: - 游戏核心类型定义 - 包括格子、筹码、下注、历史、公告、连接、dashboard、bootstrap 快照等 #### [src/features/game/shared/mock-data.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/shared/mock-data.ts) 新增内容: - 游戏 mock 启动数据 - 包括 36 个格子、筹码、历史记录、当前回合、公告、连接状态、桌面信息 #### [src/features/game/shared/selectors.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/shared/selectors.ts) 新增内容: - 各种纯函数派生逻辑 - 包括格子 view model、倒计时、公告筛选、趋势计算、下注汇总等 #### [src/features/game/shared/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/shared/index.ts) 新增内容: - 对 `shared` 子模块统一导出 ### 3.4 游戏状态层 说明: - 游戏相关 store 已统一放入 `src/store` - 并进一步按模块拆为子目录: - `src/store/auth` - `src/store/game` - `src/features/game/model/untils.ts` 现在仅作为过渡导出层,用于维持 `features/game` 对外接口不变 #### [src/store/game/game-round-store.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/game/game-round-store.ts) 新增内容: - 回合相关状态 - 包括格子、筹码、回合阶段、历史、趋势、下注选择 - 提供切换筹码、下注、清空、同步回合等动作 #### [src/store/game/game-session-store.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/game/game-session-store.ts) 新增内容: - 会话类状态 - 包括公告、连接状态、dashboard 信息 - 提供已读公告、关闭公告、同步连接、同步 dashboard 等动作 #### [src/store/game/game-ui-store.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/game/game-ui-store.ts) 新增内容: - UI 控制类状态 - 当前只放了自动托管浮层、dashboard、规则面板开关 #### [src/store/auth/auth-store.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/auth/auth-store.ts) 说明: - 认证相关 store - 原有 `auth-store` 已归入 `auth` 子目录 #### [src/store/auth/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/auth/index.ts) 说明: - 统一导出认证模块 store #### [src/store/game/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/game/index.ts) 说明: - 统一导出游戏模块 store #### [src/store/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/store/index.ts) 新增内容: - 统一导出 `src/store` 下各模块 - 当前包括 `auth` 和 `game` #### [src/features/game/model/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/model/index.ts) 新增内容: - 作为过渡导出层,继续对 `features/game` 暴露游戏 store ### 3.5 游戏接口层 #### [src/features/game/api/types.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/api/types.ts) 新增内容: - 游戏接口 DTO 类型定义 #### [src/features/game/api/game-api.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/api/game-api.ts) 新增内容: - 游戏 API 包装 - 包括 bootstrap、round feed、announcement 的响应映射 - 提供 `getMockGameBootstrap()` 用于当前阶段 UI 接线 #### [src/features/game/api/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/api/index.ts) 新增内容: - 对 `api` 子模块统一导出 ### 3.6 游戏共享 UI 组件 #### [src/features/game/components/shared/game-action-bar.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-action-bar.tsx) 新增内容: - 筹码区、主按钮、次按钮、附加 slot 区域 #### [src/features/game/components/shared/game-announcement-modal.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-announcement-modal.tsx) 新增内容: - 强制公告弹层骨架 #### [src/features/game/components/shared/game-auto-spin-overlay.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-auto-spin-overlay.tsx) 新增内容: - 自动托管运行遮罩骨架 #### [src/features/game/components/shared/game-board-cell.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-board-cell.tsx) 新增内容: - 单个格子组件 - 支持状态、徽标、倍率、点击等展示 #### [src/features/game/components/shared/game-board.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-board.tsx) 新增内容: - 36 宫格容器组件 #### [src/features/game/components/shared/game-history-list.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-history-list.tsx) 新增内容: - 开奖历史列表组件 #### [src/features/game/components/shared/game-panel-card.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-panel-card.tsx) 新增内容: - 通用游戏面板容器 #### [src/features/game/components/shared/game-status-card.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-status-card.tsx) 新增内容: - 顶部状态卡片组件 #### [src/features/game/components/shared/game-trend-list.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/game-trend-list.tsx) 新增内容: - 走势列表组件 #### [src/features/game/components/shared/types.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/types.ts) 新增内容: - 共享展示组件的 props 类型 #### [src/features/game/components/shared/utils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/shared/utils.ts) 新增内容: - 简单的 `cn` 工具 ### 3.7 双端页面壳 #### [src/features/game/components/mobile/mobile-game-page.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/mobile/mobile-game-page.tsx) 新增内容: - 移动端游戏页壳层 - 负责纵向编排 #### [src/features/game/components/desktop/desktop-game-page.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/desktop/desktop-game-page.tsx) 新增内容: - 桌面端游戏页壳层 - 负责多栏编排 #### [src/features/game/components/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/components/index.ts) 新增内容: - 对组件模块统一导出 ### 3.8 游戏入口与总导出 #### [src/features/game/entry/entry-page.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/entry/game-route-page.tsx) 新增内容: - 游戏路由页适配层 - 负责: - 读取 Zustand 状态 - 拉 mock bootstrap - 组装状态卡片、历史、走势、面板内容 - 根据设备类型切换移动端 / 桌面端壳层 - 接公告弹窗、自动托管遮罩 - 使用 i18n 文案 #### [src/features/game/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/features/game/index.ts) 新增内容: - 对 `game` 功能模块统一导出 ### 3.9 新游戏路由 #### [src/routes/$lang/game.tsx](/Users/jiaunun/Desktop/36-character-flower/src/routes/%24lang/game.tsx) 新增内容: - 新增 `/$lang/game` 路由 - 作为游戏大厅的统一业务入口 ## 4. 修改文件清单与说明 ### 4.1 基础常量与全局信息 #### [src/constants/untils.ts](/Users/jiaunun/Desktop/36-character-flower/src/constants/index.ts) 修改内容: - 将应用名称从通用模板名改为 `36字花` - 更新默认描述文案 - 新增桌面断点常量 `DESKTOP_LAYOUT_MIN_WIDTH_PX` #### [index.html](/Users/jiaunun/Desktop/36-character-flower/index.html) 修改内容: - 更新站点标题 - 更新默认 description / OG / Twitter meta 信息 ### 4.2 样式层 #### [src/styles.css](/Users/jiaunun/Desktop/36-character-flower/src/styles.css) 修改内容: - 保持 `html/body/#root` 占满视口 - 增加全局游戏主题变量 - 增加游戏外壳、面板、光效等 utility 样式 - 增加深色游戏背景基础视觉 ### 4.3 路由与页面 #### [src/routes/$lang/route.tsx](/Users/jiaunun/Desktop/36-character-flower/src/routes/%24lang/route.tsx) 修改内容: - 把原来的简单 `Outlet` 布局升级成业务壳层 - 增加顶部导航 - 增加语言切换按钮 - 使用共享导航组件 #### [src/routes/$lang/index.tsx](/Users/jiaunun/Desktop/36-character-flower/src/routes/%24lang/index.tsx) 修改内容: - 把原来的占位首页改成业务入口首页 - 增加进入游戏大厅 CTA - 展示当前项目架构说明 #### [src/routeTree.gen.ts](/Users/jiaunun/Desktop/36-character-flower/src/routeTree.gen.ts) 修改内容: - 因新增路由自动重新生成 - 非手写文件 ### 4.4 国际化 #### [src/locales/zh-CN/common.ts](/Users/jiaunun/Desktop/36-character-flower/src/locales/zh-CN/common.ts) 修改内容: - 更新首页和壳层文案 - 新增整套 `game.*` 文案 - 包括: - 游戏大厅标题、副标题 - 状态卡片文案 - 盘面、历史、走势文案 - 公告弹窗、自动托管文案 - 页脚说明文案 - phase 展示文案 #### [src/locales/en-US/common.ts](/Users/jiaunun/Desktop/36-character-flower/src/locales/en-US/common.ts) 修改内容: - 与中文语言包同步补齐英文版本 `game.*` 文案 ## 5. 本次特别修复 ### 5.1 修复 `/$lang/game` 的循环更新错误 涉及文件: - [src/features/game/entry/entry-page.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/entry/game-route-page.tsx) 修复内容: - 之前直接把会返回新引用的派生 selector 传给 Zustand hook,导致 React 触发无限更新 - 现已改成: - 只从 store 读取原始 state - 在组件内通过 `useMemo` 派生数据 ### 5.2 清理页面里的硬编码双语判断 涉及文件: - [src/features/game/entry/entry-page.tsx](/Users/jiaunun/Desktop/36-character-flower/src/features/game/entry/game-route-page.tsx) - [src/routes/$lang/route.tsx](/Users/jiaunun/Desktop/36-character-flower/src/routes/%24lang/route.tsx) - [src/locales/zh-CN/common.ts](/Users/jiaunun/Desktop/36-character-flower/src/locales/zh-CN/common.ts) - [src/locales/en-US/common.ts](/Users/jiaunun/Desktop/36-character-flower/src/locales/en-US/common.ts) 修复内容: - 将大量 `i18n.language === 'zh-CN' ? ... : ...` 改为统一走 `t('...')` - 避免将用户可见文案写死在业务代码里 ## 6. 当前完成度 本次完成的是“业务骨架阶段”,不是最终成品。当前已经具备: - 统一游戏路由 - 双端页面壳 - 共享游戏状态模型 - 共享 mock 数据和接口映射 - 公告、自动托管、历史、走势等模块骨架 - 国际化接线 当前尚未完成的内容包括: - 真实后端接口联调 - WebSocket 实时同步 - 完整的回合状态机 - 完整下注规则约束 - 最终视觉打磨和高级动效 ## 7. 已验证结果 本次代码在当前状态下已完成以下验证: - `pnpm lint` 通过 - `pnpm build` 通过 - `http://localhost:5174/zh-CN/game` 可正常打开