feat: 新增首页和图片资源

This commit is contained in:
JiaJun
2026-04-24 18:02:42 +08:00
parent bd92f10b83
commit 9127a06d4a
179 changed files with 3424 additions and 101 deletions

View File

@@ -1,10 +1,11 @@
export default {
nav: {
home: 'Home',
game: 'Game',
},
shell: {
eyebrow: 'React SPA scaffold',
subtitle: 'TanStack Router + Query + Auth + i18n',
eyebrow: '36 Character Flower',
subtitle: 'Real-time draw game frontend for mobile and desktop',
},
notFound: {
eyebrow: '404',
@@ -13,30 +14,118 @@ export default {
home: 'Back home',
},
home: {
eyebrow: 'Blank scaffold ready',
title: 'Start building your frontend project from here.',
eyebrow: 'Game shell in progress',
title:
'The 36-character-flower dual-device game framework is now being built.',
description:
'The template already includes routing, data fetching, session state, head metadata, and i18n. After removing the examples, this page becomes your clean starting point.',
'The project has moved past the generic scaffold stage. It is now being structured around a shared game route, shared state, and split mobile and desktop views for the real-time betting experience.',
cards: {
routingMode: 'Routing mode',
dataLayer: 'Data layer',
transport: 'Transport',
auth: 'Auth layer',
metadata: 'Page metadata',
routingMode: 'Routing',
dataLayer: 'State model',
transport: 'Realtime',
auth: 'Product',
metadata: 'Current focus',
},
values: {
routingMode: 'SPA + file routes',
dataLayer: 'TanStack Query',
transport: 'ky',
auth: 'Zustand session scaffold',
metadata: 'Dynamic title / meta',
routingMode: 'Shared URL + split device views',
dataLayer: 'Round / Bet / User / UI / Connection',
transport: 'HTTP + WebSocket',
auth: '36-grid live draw gameplay',
metadata: 'Scaffold the structure before state machine polish',
},
footnote:
'A practical place to start is replacing src/routes/$lang/index.tsx, src/lib/api/api-client.ts, and src/store/auth-store.ts with your project-specific structure.',
'Next up: the main game route, shared business model, and dedicated mobile and desktop page shells.',
primaryAction: 'Enter game lobby',
secondaryAction: 'View project structure',
},
language: {
label: 'Language',
zhCN: '中文',
enUS: 'English',
},
game: {
metaTitle: 'Game Lobby',
metaDescription: '36-character-flower live game lobby.',
lobbyTitle: '36 Character Flower Lobby',
lobbySubtitle:
'Under one shared business route, mobile and desktop mount different views on top of the same game data and state.',
status: {
roundState: 'Round state',
currentRound: 'Current round {{id}}',
tablePool: 'Table pool',
onlineCount: '{{count}} online',
activeChip: 'Active chip',
announcementsRead: '{{read}}/{{total}} announcements read',
connection: 'Connection',
connectionHealthy: 'Live sync stable',
connectionRecovering: 'Waiting to recover',
synced: 'Synced',
degraded: 'Degraded',
},
board: {
historyTitle: 'Round history',
historySubtitle: 'Recent draw and payout trace',
trendTitle: 'Trend radar',
trendSubtitle: 'Momentum and miss streak snapshot',
stageTitle: 'Draw stage',
stageSubtitle:
'This stage holds the main board and control structure before the full state machine and animation pass.',
currentPhase: 'Current phase',
selectedBet: 'Bet {{amount}}',
hitCount: '{{count}} hits',
hitBadge: '{{count}}x',
badgeWin: 'Win',
badgeBet: 'Bet',
cellLabel: 'Cell {{id}}',
winningCell: 'Winning cell {{id}}',
missedRounds: 'Missed {{count}} rounds',
rising: 'Rising',
falling: 'Falling',
steady: 'Steady',
hitTotal: '{{count}} hits',
},
phases: {
betting: 'Betting',
locked: 'Locked',
revealing: 'Revealing',
settled: 'Settled',
},
actions: {
unifiedBetHint: 'Unified bet',
totalBet: 'Total bet',
canBet: 'Can bet',
yes: 'Yes',
no: 'No',
quickBet: 'Quick bet 08',
clearPending: 'Clear pending',
autoModeDemo: 'Auto mode demo',
stopAuto: 'Stop auto',
},
modal: {
eyebrow: 'Announcement',
acknowledge: 'Acknowledge',
later: 'Later',
line1:
'This will later connect to the real announcement body, confirmation checkbox, and persistence flow.',
line2: 'For now it validates the shared modal structure.',
},
autoSpin: {
eyebrow: 'Auto spin',
title: 'Auto spin running',
description:
'Auto mode will cover the board while preserving target cell focus and progress.',
trailingLabel: 'Manual input locked',
},
footer: {
implementationTitle: 'Current implementation',
implementationSubtitle:
'This iteration prioritizes the dual-device shell, shared model, and business wiring.',
implementationBody:
'Next steps are the real API, WebSocket, full UI store, and round lifecycle state machine.',
limitsTitle: 'Table limits',
limitsSubtitle: 'Derived from dashboard mock data',
minBet: 'Min bet',
maxBet: 'Max bet',
},
},
} as const

View File

@@ -1,10 +1,11 @@
export default {
nav: {
home: '首页',
game: '游戏大厅',
},
shell: {
eyebrow: 'React SPA 脚手架',
subtitle: 'TanStack Router + Query + Auth + i18n',
eyebrow: '36字花',
subtitle: '实时开奖 · 双端适配 · 多语言游戏前端',
},
notFound: {
eyebrow: '404',
@@ -13,30 +14,114 @@ export default {
home: '返回首页',
},
home: {
eyebrow: '空白脚手架已就绪',
title: '从这里开始搭建你的前端项目。',
eyebrow: '游戏前台骨架已启动',
title: '36 字花双端游戏框架正在落地。',
description:
'模板已经接好路由、请求层、会话状态、head metadata 和多语言。删除示例后,这一页就是你的干净起点。',
'当前版本已经切入真实业务方向:统一路由、共享状态、移动端与桌面端分视图,后续会在这个基础上继续接入实时状态机、下注流程和开奖动画。',
cards: {
routingMode: '路由模式',
dataLayer: '数据层',
transport: '请求层',
auth: '认证层',
metadata: '页面元信息',
routingMode: '路由策略',
dataLayer: '状态规划',
transport: '联机能力',
auth: '业务目标',
metadata: '当前重点',
},
values: {
routingMode: 'SPA + 文件路由',
dataLayer: 'TanStack Query',
transport: 'ky',
auth: 'Zustand 会话基座',
metadata: '动态 title / meta',
routingMode: '统一 URL + 双端分视图',
dataLayer: 'Round / Bet / User / UI / Connection',
transport: 'HTTP + WebSocket',
auth: '36 宫格实时开奖玩法',
metadata: '先落结构,再接状态机与动效',
},
footnote:
'建议先从 src/routes/$lang/index.tsx、src/lib/api/api-client.ts 和 src/store/auth-store.ts 开始替换成你的项目结构。',
'下一步会优先完成游戏主路由、共享业务模型和移动端 / 桌面端页面骨架。',
primaryAction: '进入游戏大厅',
secondaryAction: '查看项目结构',
},
language: {
label: '语言',
zhCN: '中文',
enUS: 'English',
},
game: {
metaTitle: '游戏大厅',
metaDescription: '36字花实时开奖游戏大厅。',
lobbyTitle: '36字花游戏大厅',
lobbySubtitle:
'统一业务路由下,移动端与桌面端分别挂载不同视图,但共用一套游戏数据和状态。',
status: {
roundState: '回合状态',
currentRound: '当前期号 {{id}}',
tablePool: '桌面资金池',
onlineCount: '{{count}} 在线',
activeChip: '当前筹码',
announcementsRead: '已读公告 {{read}}/{{total}}',
connection: '连接质量',
connectionHealthy: '连接稳定',
connectionRecovering: '等待重连',
synced: '已同步',
degraded: '异常',
},
board: {
historyTitle: '开奖历史',
historySubtitle: '最近开奖与派奖记录',
trendTitle: '冷热走势',
trendSubtitle: '热度与遗漏参考',
stageTitle: '开奖舞台',
stageSubtitle: '这一层先挂载主盘面与中控结构,后续再接真实状态机和动画。',
currentPhase: '当前阶段',
selectedBet: '下注 {{amount}}',
hitCount: '命中 {{count}} 次',
hitBadge: '{{count}}x',
badgeWin: '中奖',
badgeBet: '下注',
cellLabel: '字花 {{id}}',
winningCell: '中奖格 {{id}}',
missedRounds: '遗漏 {{count}} 局',
rising: '热度上升',
falling: '热度回落',
steady: '稳定',
hitTotal: '{{count}} 命中',
},
phases: {
betting: '下注中',
locked: '已封盘',
revealing: '开奖中',
settled: '已结算',
},
actions: {
unifiedBetHint: '统一下注额',
totalBet: '总下注',
canBet: '可下注',
yes: '是',
no: '否',
quickBet: '快速选中 08',
clearPending: '清空未确认',
autoModeDemo: '自动托管演示',
stopAuto: '停止托管',
},
modal: {
eyebrow: '强制公告',
acknowledge: '已读并进入',
later: '稍后查看',
line1: '这里后续会接真实公告图文、勾选确认和已读状态。',
line2: '当前先用共享弹窗骨架验证结构。',
},
autoSpin: {
eyebrow: '自动托管',
title: '自动托管运行中',
description: '托管态会覆盖主盘面,但目标格子和进度信息仍然保留可见。',
trailingLabel: '手动输入已锁定',
},
footer: {
implementationTitle: '当前实现说明',
implementationSubtitle:
'这一版优先把双端壳层、共享模型和业务接线落到代码里。',
implementationBody:
'下一步会继续接入真实 API、WebSocket、完整 UI Store 和回合状态机。',
limitsTitle: '桌限信息',
limitsSubtitle: '来自 dashboard mock 数据',
minBet: '最低下注',
maxBet: '最高下注',
},
},
} as const