refactor: 重构大厅组件以优化状态管理与数据加载

- 在 HallDrawPanel 组件中引入 useHallDrawLive 自定义 Hook,简化状态管理与数据获取逻辑
- 移除不必要的状态与副作用,提升组件性能
- 在 HallScreen 组件中替换 Card 组件为 HallBettingGrid,优化下注表格展示
- 在 HallWalletStrip 组件中添加事件监听以支持钱包刷新功能
This commit is contained in:
2026-05-11 11:52:58 +08:00
parent ea75120269
commit 09ef46e171
13 changed files with 1145 additions and 128 deletions

76
src/types/api/ticket.ts Normal file
View File

@@ -0,0 +1,76 @@
/** `POST /api/v1/ticket/preview` / `place` 请求行 */
export type TicketLineInput = {
number: string;
play_code: string;
amount: number;
digit_slot?: number;
dimension?: "D2" | "D3" | "D4";
};
export type TicketConfigVersions = {
play_config_version_no: number;
odds_version_no: number;
risk_cap_version_no: number;
};
export type TicketPreviewPayload = {
draw_id: string;
currency_code: string;
client_trace_id?: string | null;
lines: TicketLineInput[];
};
export type TicketPlacePayload = TicketPreviewPayload & {
expected_config_versions?: TicketConfigVersions;
};
export type TicketPreviewLine = {
client_line_no: number;
number: string;
play_code: string;
normalized_number: string;
combination_count: number;
total_bet_amount: number;
rebate_rate: string;
rebate_amount: number;
actual_deduct_amount: number;
estimated_max_payout: number;
risk_status: string;
warnings: unknown[];
rule_snapshot_json: unknown;
};
export type TicketPreviewWarning = {
number_4d: string;
message: string;
};
export type TicketPreviewData = {
draw: { draw_id: string; status: string };
config_versions: TicketConfigVersions;
summary: {
total_bet_amount: number;
total_rebate_amount: number;
total_actual_deduct: number;
total_estimated_payout: number;
};
lines: TicketPreviewLine[];
warnings: TicketPreviewWarning[];
};
export type TicketPlaceItem = {
ticket_no: string;
play_code: string;
number: string;
total_bet_amount: number;
actual_deduct_amount: number;
estimated_max_payout: number;
combination_count: number;
};
export type TicketPlaceData = {
order_no: string;
draw: { draw_id: string; status: string };
summary: TicketPreviewData["summary"];
items: TicketPlaceItem[];
};