From 99d49f457f0ddfe64bd589051ab4a6437b6cd0d7 Mon Sep 17 00:00:00 2001 From: kang Date: Fri, 10 Jul 2026 17:04:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(hall):=20=E6=94=AF=E6=8C=81=E6=8C=89?= =?UTF-8?q?=E8=A1=8C=E9=80=89=E6=8B=A9=E5=BC=80=E6=B3=A8=E5=95=86=E4=B8=8E?= =?UTF-8?q?=E9=80=89=E5=8F=B7=E7=A7=8D=E7=B1=BB=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=8B=E6=B3=A8=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecosystem.config.cjs | 13 +- src/app/favicon.ico | Bin 25931 -> 156202 bytes src/features/hall/hall-bet-rules.ts | 4 +- src/features/hall/hall-betting-grid.tsx | 486 ++++++++++++++---------- src/hooks/use-mobile.ts | 13 +- src/i18n/locales/en/player.json | 5 + src/i18n/locales/zh/player.json | 5 + src/lib/money.ts | 15 +- src/lib/play-labels.ts | 11 + src/types/api/bet-provider.ts | 1 + src/types/api/ticket.ts | 2 + 11 files changed, 336 insertions(+), 219 deletions(-) diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 78365d2..3b2bda3 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -16,14 +16,17 @@ const path = require("path"); /** 改成服务器上的绝对路径,例如 /www/wwwroot/lottery.yourdomain.com */ -const APP_CWD = path.resolve(__dirname); +const DEPLOY_ROOT = path.resolve(__dirname); +// deploy.sh uploads the standalone bundle to app/. Keep runtime and static assets +// on the same build so Next.js chunk references cannot become mismatched. +const APP_CWD = path.join(DEPLOY_ROOT, "app"); module.exports = { apps: [ { name: "lotteryfront", cwd: APP_CWD, - script: ".next/standalone/server.js", + script: "server.js", interpreter: "node", exec_mode: "fork", instances: 1, @@ -32,8 +35,8 @@ module.exports = { max_memory_restart: "1G", time: true, merge_logs: true, - out_file: path.join(APP_CWD, "logs/pm2-out.log"), - error_file: path.join(APP_CWD, "logs/pm2-error.log"), + out_file: path.join(DEPLOY_ROOT, "logs/pm2-out.log"), + error_file: path.join(DEPLOY_ROOT, "logs/pm2-error.log"), env: { NODE_ENV: "production", @@ -42,7 +45,7 @@ module.exports = { }, // LOTTERY_API_UPSTREAM、NEXT_PUBLIC_* 写在 .env;勿在此硬编码 LOTTERY_API_UPSTREAM - env_file: path.join(APP_CWD, ".env"), + env_file: path.join(DEPLOY_ROOT, ".env"), }, ], }; diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..d03a18b9ee76fce0df13d146f3f440750bf64ceb 100644 GIT binary patch literal 156202 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 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/src/features/hall/hall-bet-rules.ts b/src/features/hall/hall-bet-rules.ts index 08aba12..a5e991f 100644 --- a/src/features/hall/hall-bet-rules.ts +++ b/src/features/hall/hall-bet-rules.ts @@ -7,8 +7,8 @@ export type TicketNumberSpec = { mode: "digits" | "roll"; }; -const PLAY_3D = new Set(["pos_3a", "pos_3b", "pos_3c", "pos_3abc"]); -const PLAY_2D = new Set(["pos_2a", "pos_2b", "pos_2c", "pos_2abc"]); +const PLAY_3D = new Set(["pos_3a", "pos_3b", "pos_3c", "pos_3d", "pos_3e", "pos_3lower"]); +const PLAY_2D = new Set(["pos_2a", "pos_2b", "pos_2c", "pos_2d", "pos_2e", "pos_2any"]); export function ticketNumberSpec(playCode: string): TicketNumberSpec { if (playCode === "roll") { diff --git a/src/features/hall/hall-betting-grid.tsx b/src/features/hall/hall-betting-grid.tsx index 8f7bd9e..d75469c 100644 --- a/src/features/hall/hall-betting-grid.tsx +++ b/src/features/hall/hall-betting-grid.tsx @@ -10,6 +10,7 @@ import { getPlayEffective } from "@/api/play"; import { getWalletBalance } from "@/api/wallet"; import { postTicketPlace, postTicketPreview } from "@/api/ticket"; import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; import { Skeleton } from "@/components/ui/skeleton"; import { isHallSealedCountdownUi } from "@/features/draw/draw-status-meta"; @@ -29,7 +30,11 @@ import { useActivePlayerCurrency } from "@/hooks/use-active-player-currency"; import { triggerWalletPollingAfterBet } from "@/hooks/use-wallet-polling"; import { usePlayerSessionStore } from "@/stores/player-session-store"; import { getLotteryEcho } from "@/lib/lottery-echo"; -import { formatMinorAsCurrency, parseDecimalInputToMinor } from "@/lib/money"; +import { + formatMinorAmount, + formatMinorAsCurrency, + parseDecimalInputToMinor, +} from "@/lib/money"; import { playLabel } from "@/lib/play-labels"; import { playerViewportFixedBarClass } from "@/lib/player-viewport"; import { @@ -48,10 +53,18 @@ import type { BetProviderRow } from "@/types/api/bet-provider"; type HallCategory = "D2" | "D3" | "D4" | "JACKPOT"; type PlayHallCategory = Exclude; +const TRADITIONAL_PLAY_CODES: Record = { + D4: ["big", "small", "pos_4a", "pos_4b", "pos_4c", "pos_4d", "pos_4e", "four_any", "four_top", "four_lower", "five_d", "six_d"], + D3: ["pos_3a", "pos_3lower", "pos_3b", "pos_3c", "pos_3d", "pos_3e"], + D2: ["pos_2a", "pos_2b", "pos_2c", "pos_2d", "pos_2e", "pos_2any"], +}; + type DraftRow = { id: string; number: string; amounts: Record; + providerCodes: string[]; + selectionType: "straight" | "reverse" | "full_cover" | "full_play" | "half_play"; }; type DraftEntry = { @@ -116,10 +129,22 @@ type CellRiskState = "open" | "warning" | "sold_out"; type QuickFillState = Record; const FALLBACK_BET_PROVIDERS: BetProviderRow[] = [ - { code: "SG", name: "Singapore", sort_order: 10, is_default: true }, - { code: "MY", name: "Malaysia", sort_order: 20, is_default: false }, - { code: "TH", name: "Thailand", sort_order: 30, is_default: false }, + { code: "SG", name: "Singapore", short_code: "S", sort_order: 10, is_default: true }, + { code: "MY", name: "Malaysia", short_code: "M", sort_order: 20, is_default: false }, + { code: "TH", name: "Thailand", short_code: "T", sort_order: 30, is_default: false }, ]; +const DEFAULT_PROVIDER_CODE = "SG"; +const PROVIDER_COLUMN_TONES = [ + "bg-[#fff875] text-slate-950", + "bg-[#b7d9ff] text-slate-950", + "bg-[#ffc7ca] text-slate-950", + "bg-[#d9d8ff] text-slate-950", + "bg-[#a8f8a4] text-slate-950", +] as const; + +function providerColumnTone(index: number): string { + return PROVIDER_COLUMN_TONES[index % PROVIDER_COLUMN_TONES.length] ?? "bg-slate-100 text-slate-950"; +} const categoryTabs: { value: PlayHallCategory; label: string }[] = [ { value: "D4", label: "4D" }, @@ -161,7 +186,7 @@ function newDraftRow(): DraftRow { typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : `row-${Date.now()}-${Math.random().toString(36).slice(2)}`; - return { id, number: "", amounts: {} }; + return { id, number: "", amounts: {}, providerCodes: [DEFAULT_PROVIDER_CODE], selectionType: "straight" }; } function isPlayOpenForPlayer(row: PlayEffectivePlayRow): boolean { @@ -265,6 +290,7 @@ function lineForPlay( displayNumber: string, amountMinor: number, digitSlot?: number, + selectionType: DraftRow["selectionType"] = "straight", ): TicketLineInput | null { const number = normalizeNumberForPlay(displayNumber, play.play_code); if (draftLineIssueReason(play.play_code, displayNumber, digitSlot) !== null) { @@ -279,6 +305,7 @@ function lineForPlay( number, play_code: play.play_code, amount: amountMinor, + selection_type: selectionType, }; if (playNeedsDimension(play.play_code)) { @@ -470,10 +497,9 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } const [resultData, setResultData] = useState(null); const [activeCategory, setActiveCategory] = useState("D4"); const [betProviders, setBetProviders] = useState(FALLBACK_BET_PROVIDERS); - const [selectedProviderCodes, setSelectedProviderCodes] = useState([]); + const [syncAmountColumns, setSyncAmountColumns] = useState>({}); const [quickFillState, setQuickFillState] = useState(() => loadQuickFillState()); const [quickFillExpanded, setQuickFillExpanded] = useState(false); - const [providersExpanded, setProvidersExpanded] = useState(false); const [riskStateDrawNo, setRiskStateDrawNo] = useState(display?.draw_no ?? null); const [liveSoldOutNumbers, setLiveSoldOutNumbers] = useState>(() => new Set()); const [liveWarningNumbers, setLiveWarningNumbers] = useState>(() => new Set()); @@ -497,7 +523,6 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } const catalogSeqRef = useRef(0); const walletSeqRef = useRef(0); const selectedCatalogProviderCode = - selectedProviderCodes[0] ?? betProviders.find((provider) => provider.is_default)?.code ?? betProviders[0]?.code; @@ -543,9 +568,16 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } if (cancelled) return; const items = data.items.length > 0 ? data.items : FALLBACK_BET_PROVIDERS; setBetProviders(items); - setSelectedProviderCodes((current) => { + setRows((current) => { const available = new Set(items.map((item) => item.code)); - return current.filter((code) => available.has(code)); + const fallback = items.find((item) => item.is_default)?.code ?? items[0]?.code; + return current.map((row) => { + const selected = row.providerCodes.filter((code) => available.has(code)); + const wasInitialDefault = row.providerCodes.length === 1 && row.providerCodes[0] === DEFAULT_PROVIDER_CODE; + return selected.length === 0 && wasInitialDefault && fallback + ? { ...row, providerCodes: [fallback] } + : { ...row, providerCodes: selected }; + }); }); }) .catch(() => { @@ -586,7 +618,7 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } }, [catalogState]); const activeCategoryPlays = useMemo( - () => openPlays.filter((play) => playCategory(play.play_code) === activeCategory), + () => openPlays.filter((play) => TRADITIONAL_PLAY_CODES[activeCategory].includes(play.play_code)), [activeCategory, openPlays], ); @@ -613,22 +645,34 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } const mobileIndexColClass = "w-[1.75rem] min-w-[1.75rem]"; const mobileNumberColClass = "w-[4.25rem] min-w-[4.25rem]"; + const mobileSelectionTypeColClass = "w-[4rem] min-w-[4rem]"; const desktopIndexColClass = "w-[2.15rem] min-w-[2.15rem]"; const desktopNumberColClass = "w-[5.5rem] min-w-[5.5rem]"; + const desktopSelectionTypeColClass = "w-[4.75rem] min-w-[4.75rem]"; const indexColClass = isMobile ? mobileIndexColClass : desktopIndexColClass; const numberColClass = isMobile ? mobileNumberColClass : desktopNumberColClass; + const selectionTypeColClass = isMobile ? mobileSelectionTypeColClass : desktopSelectionTypeColClass; + const showSelectionTypeColumn = activeCategory !== "D2"; const stickyNumberLeftClass = isMobile ? "left-[1.75rem]" : "left-[2.15rem]"; const amountColClass = !isMobile ? "w-[3.9rem] min-w-[3.9rem]" : "w-[4rem] min-w-[4rem]"; + const providerColClass = !isMobile + ? "w-[2.85rem] min-w-[2.85rem]" + : "w-[2.7rem] min-w-[2.7rem]"; + const rowTotalColClass = !isMobile + ? "w-[5.5rem] min-w-[5.5rem]" + : "w-[5rem] min-w-[5rem]"; - const tableMinWidthPx = useMemo(() => { + const tableWidthPx = useMemo(() => { const indexCol = !isMobile ? 34 : 28; const numberCol = !isMobile ? 88 : 68; + const selectionTypeCol = !isMobile ? 76 : 64; + const providerCol = !isMobile ? 46 : 43; + const rowTotalCol = !isMobile ? 88 : 80; const amountCol = !isMobile ? 62 : 64; - const deleteCol = 32; - return indexCol + numberCol + playColumns.length * amountCol + deleteCol; - }, [playColumns.length, isMobile]); + return indexCol + numberCol + (showSelectionTypeColumn ? selectionTypeCol : 0) + betProviders.length * providerCol + rowTotalCol + playColumns.length * amountCol; + }, [betProviders.length, isMobile, playColumns.length, showSelectionTypeColumn]); const showWideTableHint = isMobile && playColumns.length > 8; @@ -668,28 +712,45 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } setActiveRowId(id); }, [activeCategory]); - const updateAmount = useCallback((rowId: string, playCode: string, value: string) => { - setRows((current) => - current.map((row) => - row.id === rowId - ? { ...row, amounts: { ...row.amounts, [playCode]: sanitizeAmount(value) } } - : row, - ), - ); - setActiveRowId(rowId); + const updateRowSelectionType = useCallback((id: string, selectionType: DraftRow["selectionType"]) => { + setRows((current) => current.map((row) => row.id === id ? { ...row, selectionType } : row)); }, []); - const removeRow = useCallback((id: string) => { - setRows((current) => { - if (current.length <= 1) return current; - return current.filter((row) => row.id !== id); - }); - setActiveRowId((prev) => { - if (prev === id) return null; - return prev; - }); + const updateAllSelectionTypes = useCallback((selectionType: DraftRow["selectionType"]) => { + setRows((current) => current.map((row) => ({ ...row, selectionType }))); }, []); + const updateAmount = useCallback((rowId: string, playCode: string, value: string) => { + const amount = sanitizeAmount(value); + const column = allPlayColumns.find((item) => item.key === playCode); + const syncColumn = syncAmountColumns[playCode] === true && column !== undefined; + + setRows((current) => current.map((row) => { + if (!syncColumn) { + return row.id === rowId + ? { ...row, amounts: { ...row.amounts, [playCode]: amount } } + : row; + } + + const validNumber = draftLineIssueReason(column.play.play_code, row.number, column.digitSlot) === null; + const status = cellRiskState( + column.play, + row.number, + playCategory(column.play.play_code), + alertRows, + liveSoldOutNumbers, + liveWarningNumbers, + column.digitSlot, + ); + if (!validNumber || status === "sold_out" || (column.play.config !== null && !column.play.config.is_enabled)) { + return row; + } + + return { ...row, amounts: { ...row.amounts, [playCode]: amount } }; + })); + setActiveRowId(rowId); + }, [alertRows, allPlayColumns, liveSoldOutNumbers, liveWarningNumbers, syncAmountColumns]); + const clearAllRows = () => { if (tableDisabled) return; const next = [newDraftRow()]; @@ -786,6 +847,7 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } ...row, number: previousRow.number, amounts: nextAmounts, + providerCodes: previousRow.providerCodes, }; }), ); @@ -826,14 +888,23 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } }); }; - const toggleProvider = (code: string) => { - setSelectedProviderCodes((current) => { - if (current.includes(code)) { - return current.filter((item) => item !== code); - } - return [...current, code]; - }); - }; + const toggleRowProvider = useCallback((rowId: string, code: string) => { + setRows((current) => current.map((row) => { + if (row.id !== rowId) return row; + return row.providerCodes.includes(code) + ? { ...row, providerCodes: row.providerCodes.filter((item) => item !== code) } + : { ...row, providerCodes: [...row.providerCodes, code] }; + })); + }, []); + + const toggleProviderColumn = useCallback((code: string, checked: boolean) => { + setRows((current) => current.map((row) => { + const hasCode = row.providerCodes.includes(code); + if (checked && !hasCode) return { ...row, providerCodes: [...row.providerCodes, code] }; + if (!checked && hasCode) return { ...row, providerCodes: row.providerCodes.filter((item) => item !== code) }; + return row; + })); + }, []); const hasAmountsForPlay = useCallback( (playCode: string): boolean => @@ -958,6 +1029,17 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } return issues; }, [allPlayColumns, currencyCode, rows]); + const providerMissingRow = useCallback((): number | null => { + for (const [index, row] of rows.entries()) { + const hasAmount = Object.values(row.amounts).some((value) => { + const amount = parseDecimalInputToMinor(value, currencyCode); + return amount !== null && amount > 0; + }); + if (hasAmount && row.providerCodes.length === 0) return index + 1; + } + return null; + }, [currencyCode, rows]); + const formatDraftLineIssue = useCallback( (issue: DraftLineIssue): string => { const label = playLabel(issue.playCode, t); @@ -972,8 +1054,9 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } allPlayColumns.forEach((column) => { const amount = parseDecimalInputToMinor(row.amounts[column.key] ?? "", currencyCode); if (amount === null || amount <= 0) return; - const line = lineForPlay(column.play, row.number, amount, column.digitSlot); + const line = lineForPlay(column.play, row.number, amount, column.digitSlot, row.selectionType); if (!line) return; + line.provider_codes = row.providerCodes; entries.push({ rowId: row.id, rowNo: rowIndex + 1, @@ -990,25 +1073,20 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } }, [allPlayColumns, currencyCode, rows]); const draftEntries = collectEntries(); - const effectiveProviderCount = selectedProviderCodes.length > 0 ? selectedProviderCodes.length : 1; const draftSummary = useMemo(() => { - const base = draftEntries.reduce( + return draftEntries.reduce( (acc, entry) => { const rebateRate = parseRebateRate(entry.play.odds?.rebate_rate); const rebate = Math.round(entry.amountMinor * rebateRate); - acc.bet += entry.amountMinor; - acc.rebate += rebate; - acc.actual += Math.max(0, entry.amountMinor - rebate); + const providerCount = entry.line.provider_codes?.length ?? 0; + acc.bet += entry.amountMinor * providerCount; + acc.rebate += rebate * providerCount; + acc.actual += Math.max(0, entry.amountMinor - rebate) * providerCount; return acc; }, { bet: 0, rebate: 0, actual: 0 }, ); - return { - bet: base.bet * effectiveProviderCount, - rebate: base.rebate * effectiveProviderCount, - actual: base.actual * effectiveProviderCount, - }; - }, [draftEntries, effectiveProviderCount]); + }, [draftEntries]); useEffect(() => { const id = window.setTimeout(() => { @@ -1068,6 +1146,11 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } } const lineIssues = collectDraftLineIssues(); + const missingProviderAt = providerMissingRow(); + if (missingProviderAt !== null) { + toast.error(t("hall.providers.rowRequired", { row: missingProviderAt, defaultValue: `第 ${missingProviderAt} 行请选择至少一个开注商` })); + return; + } if (lineIssues.length > 0) { toast.error(formatDraftLineIssue(lineIssues[0])); return; @@ -1090,7 +1173,6 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } draw_id: display.draw_no, currency_code: currencyCode, client_trace_id: placeTraceIdRef.current, - provider_codes: selectedProviderCodes.length > 0 ? selectedProviderCodes : undefined, lines, }); setPreviewData(data); @@ -1131,6 +1213,11 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } } const lineIssues = collectDraftLineIssues(); + const missingProviderAt = providerMissingRow(); + if (missingProviderAt !== null) { + toast.error(t("hall.providers.rowRequired", { row: missingProviderAt, defaultValue: `第 ${missingProviderAt} 行请选择至少一个开注商` })); + return; + } if (lineIssues.length > 0) { toast.error(formatDraftLineIssue(lineIssues[0])); return; @@ -1158,7 +1245,6 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } draw_id: drawIdForBet, currency_code: currencyCode, client_trace_id: traceId, - provider_codes: selectedProviderCodes.length > 0 ? selectedProviderCodes : undefined, lines, expected_config_versions: previewData.config_versions, }); @@ -1258,27 +1344,11 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } const submitActualMinor = previewData?.summary.total_actual_deduct ?? debouncedSummary.actual; + const selectedProviderCount = new Set(rows.flatMap((row) => row.providerCodes)).size; const canSubmit = - !tableDisabled && draftEntries.length > 0 && availableMinor >= submitActualMinor; + !tableDisabled && draftEntries.length > 0 && providerMissingRow() === null && availableMinor >= submitActualMinor; const favoriteChips = favorites.slice(0, 10); const historyChips = historyNumbers.slice(0, 20); - const selectedProviderNames = betProviders - .filter((provider) => selectedProviderCodes.includes(provider.code)) - .map((provider) => provider.name); - const implicitDefaultProvider = - betProviders.find((provider) => provider.is_default) ?? betProviders[0] ?? null; - const providerSummaryCount = selectedProviderCodes.length > 0 ? selectedProviderCodes.length : 1; - const providerSummaryText = - selectedProviderCodes.length > 0 - ? t("hall.providers.summary", { - count: providerSummaryCount, - }) - : implicitDefaultProvider - ? t("hall.providers.platformDefaultSummary", { - provider: implicitDefaultProvider.name, - }) - : t("hall.providers.platformDefaultSummaryNoProvider"); - return ( <>
@@ -1515,107 +1585,6 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } -
-
-
- - {t("hall.providers.title")} - - {!isMobile ? betProviders.map((provider) => { - const checked = selectedProviderCodes.includes(provider.code); - - return ( - - ); - }) : ( - - {selectedProviderNames.length > 0 - ? selectedProviderNames.join(" / ") - : implicitDefaultProvider - ? t("hall.providers.platformDefault", { provider: implicitDefaultProvider.name }) - : t("hall.providers.platformDefaultNoProvider")} - - )} -
-
-

{providerSummaryText}

- {isMobile ? ( - - ) : null} -
-
- {isMobile && providersExpanded ? ( -
- {betProviders.map((provider) => { - const checked = selectedProviderCodes.includes(provider.code); - - return ( - - ); - })} -
- ) : null} -
-
{categoryTabs.map((tab) => { const hasPlays = openPlays.some( @@ -1689,7 +1658,7 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } - {formatMinorAsCurrency(submitActualMinor, currencyCode)} + {formatMinorAmount(submitActualMinor)} {allPlayColumns.map((column) => { const colTotalMinor = rows.reduce((sum, row) => { @@ -1707,7 +1676,7 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } return ( - {formatMinorAsCurrency(colTotalMinor, currencyCode)} + {formatMinorAmount(colTotalMinor)} ); })} @@ -1716,10 +1685,10 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot }
-
+
@@ -1751,12 +1720,65 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } t, )} - - {t("hall.table.amountPlaceholder")} - + setSyncAmountColumns((current) => ({ + ...current, + [column.key]: checked === true, + }))} + aria-label={`${playColumnHeaderLabel(column.play, playCategory(column.play.play_code), column.digitSlot, t)} 同步本列金额`} + title="同步本列金额" + className="mx-auto mt-1 size-3.5" + /> ))} - + ) : null} + {betProviders.map((provider, providerIndex) => { + const checked = rows.length > 0 && rows.every((row) => row.providerCodes.includes(provider.code)); + return ( + + ); + })} + @@ -1770,24 +1792,51 @@ export function HallBettingGrid({ drawLive }: { drawLive: HallDrawLiveSnapshot } numberPlaceholder={numberPlaceholder} activeCategory={activeCategory} numberMaxChars={numberMaxChars} + betProviders={betProviders} playColumns={playColumns} alertRows={alertRows} liveSoldOutNumbers={liveSoldOutNumbers} liveWarningNumbers={liveWarningNumbers} updateRowNumber={updateRowNumber} + updateRowSelectionType={updateRowSelectionType} updateAmount={updateAmount} + toggleRowProvider={toggleRowProvider} setActiveRowId={setActiveRowId} - removeRow={removeRow} t={t} isMobile={isMobile} - removable={rows.length > 1} indexColClass={indexColClass} numberColClass={numberColClass} stickyNumberLeftClass={stickyNumberLeftClass} + selectionTypeColClass={selectionTypeColClass} + showSelectionTypeColumn={showSelectionTypeColumn} + providerColClass={providerColClass} + rowTotalColClass={rowTotalColClass} + currencyCode={currencyCode} /> ))}
+ {showSelectionTypeColumn ? ( + + {t("hall.table.selectionType", { defaultValue: "Type" })} + + + {provider.short_code} + toggleProviderColumn(provider.code, next === true)} + aria-label={`全选 ${provider.name}`} + className="mx-auto mt-1 border-slate-500 bg-white data-checked:border-slate-800 data-checked:bg-slate-800" + /> + + {t("hall.table.rowTotal", { defaultValue: "Total" })} +
+ {!isMobile ? ( + + ) : null}
@@ -1925,20 +1974,26 @@ const DraftRowItem = memo(function DraftRowItem({ numberPlaceholder, activeCategory, numberMaxChars, + betProviders, playColumns, alertRows, liveSoldOutNumbers, liveWarningNumbers, updateRowNumber, + updateRowSelectionType, updateAmount, + toggleRowProvider, setActiveRowId, - removeRow, t, isMobile, - removable, indexColClass, numberColClass, stickyNumberLeftClass, + selectionTypeColClass, + showSelectionTypeColumn, + providerColClass, + rowTotalColClass, + currencyCode, }: { row: DraftRow; index: number; @@ -1947,22 +2002,32 @@ const DraftRowItem = memo(function DraftRowItem({ numberPlaceholder: string; activeCategory: PlayHallCategory; numberMaxChars: number; + betProviders: BetProviderRow[]; playColumns: PlayColumn[]; alertRows: DrawCurrentRiskPoolAlert[]; liveSoldOutNumbers: Set; liveWarningNumbers: Set; updateRowNumber: (id: string, value: string) => void; + updateRowSelectionType: (id: string, value: DraftRow["selectionType"]) => void; updateAmount: (rowId: string, playCode: string, value: string) => void; + toggleRowProvider: (rowId: string, code: string) => void; setActiveRowId: (id: string) => void; - removeRow: (id: string) => void; t: HallTranslate; isMobile: boolean; - removable: boolean; indexColClass: string; numberColClass: string; stickyNumberLeftClass: string; + selectionTypeColClass: string; + showSelectionTypeColumn: boolean; + providerColClass: string; + rowTotalColClass: string; + currencyCode: string; }) { const displayNumber = sanitizeNumber(row.number, activeCategory); + const rowTotalMinor = playColumns.reduce((total, column) => { + if (draftLineIssueReason(column.play.play_code, row.number, column.digitSlot) !== null) return total; + return total + (parseDecimalInputToMinor(row.amounts[column.key] ?? "", currencyCode) ?? 0); + }, 0) * row.providerCodes.length; return ( - ); })} - - + toggleRowProvider(row.id, provider.code)} + aria-label={`${provider.name} ${index + 1}`} + className="mx-auto border-slate-500 bg-white data-checked:border-slate-800 data-checked:bg-slate-800" + /> + + ))} + + {formatMinorAmount(rowTotalMinor)} ); diff --git a/src/hooks/use-mobile.ts b/src/hooks/use-mobile.ts index 851cff1..4c2c74d 100644 --- a/src/hooks/use-mobile.ts +++ b/src/hooks/use-mobile.ts @@ -9,23 +9,18 @@ import { PLAYER_DESKTOP_BREAKPOINT_PX } from "@/lib/player-viewport"; * 桌面端启用侧栏 + 顶栏布局(见 UI 设计稿)。 */ export function useIsMobile(): boolean { - const [isMobile, setIsMobile] = useState(() => { - if (typeof window === "undefined") return true; - return window.matchMedia( - `(max-width: ${PLAYER_DESKTOP_BREAKPOINT_PX - 1}px)`, - ).matches; - }); + // The server cannot know the viewport. Keep the first browser render aligned + // with SSR, then read matchMedia after hydration to avoid className mismatches. + const [isMobile, setIsMobile] = useState(true); useEffect(() => { const query = `(max-width: ${PLAYER_DESKTOP_BREAKPOINT_PX - 1}px)`; const mq = window.matchMedia(query); const sync = () => setIsMobile(mq.matches); - // sync() is still needed for the rare case where the lazy initializer - // was correct but the viewport changed between SSR and hydration. sync(); mq.addEventListener("change", sync); return () => mq.removeEventListener("change", sync); }, []); return isMobile; -} \ No newline at end of file +} diff --git a/src/i18n/locales/en/player.json b/src/i18n/locales/en/player.json index 7705dc4..e9b4666 100644 --- a/src/i18n/locales/en/player.json +++ b/src/i18n/locales/en/player.json @@ -233,6 +233,8 @@ "table": { "no": "No.", "number": "Number", + "selectionType": "Type", + "rowTotal": "Row Total", "stake": "Stake Amount", "rebate": "Commission / Rebate", "actual": "Actual Deduction", @@ -242,6 +244,9 @@ "totalBet": "Total", "totalRebate": "Rebate", "actualTotal": "Estimated Deduction", + "orderSummary": "Order Summary", + "lineCount": "Lines", + "providerCount": "Providers", "sealedHint": "Closed: this table is locked. Please wait for the next issue.", "previewing": "Previewing...", "submitBet": "Submit Bet", diff --git a/src/i18n/locales/zh/player.json b/src/i18n/locales/zh/player.json index 199cdd0..ed4247c 100644 --- a/src/i18n/locales/zh/player.json +++ b/src/i18n/locales/zh/player.json @@ -232,6 +232,8 @@ "table": { "no": "序号", "number": "号码", + "selectionType": "种类", + "rowTotal": "本行合计", "stake": "下注金额", "rebate": "佣金 / 回水", "actual": "实扣金额", @@ -241,6 +243,9 @@ "totalBet": "合计", "totalRebate": "回水", "actualTotal": "预计扣款", + "orderSummary": "本单概览", + "lineCount": "注项", + "providerCount": "开注商", "sealedHint": "已封盘:当前表格不可编辑,请等待下一期。", "previewing": "预览中...", "submitBet": "提交下注", diff --git a/src/lib/money.ts b/src/lib/money.ts index b6e2a4f..4898104 100644 --- a/src/lib/money.ts +++ b/src/lib/money.ts @@ -52,13 +52,12 @@ function formatMinorWithDisplaySettings( return `${negative ? "-" : ""}${integerPartFormatted}${decimalSeparator}${fractionPadded}`; } -export function formatMinorAsCurrency( +export function formatMinorAmount( minor: number | string, - currencyCode: string, decimalPlaces?: number, ): string { const n = typeof minor === "string" ? Number(minor) : minor; - if (!Number.isFinite(n)) return `${currencyCode} —`; + if (!Number.isFinite(n)) return "—"; const format = getCurrencyDisplayFormat(); const resolvedDisplayDecimals = @@ -68,10 +67,18 @@ export function formatMinorAsCurrency( ? Math.min(12, Math.trunc(decimalPlaces)) : format.displayDecimals; - const amount = formatMinorWithDisplaySettings(n, { + return formatMinorWithDisplaySettings(n, { ...format, displayDecimals: resolvedDisplayDecimals, }); +} + +export function formatMinorAsCurrency( + minor: number | string, + currencyCode: string, + decimalPlaces?: number, +): string { + const amount = formatMinorAmount(minor, decimalPlaces); return `${currencyCode} ${amount}`; } diff --git a/src/lib/play-labels.ts b/src/lib/play-labels.ts index 059418d..9d45394 100644 --- a/src/lib/play-labels.ts +++ b/src/lib/play-labels.ts @@ -15,6 +15,17 @@ const LABELS: Record = { pos_2b: "2B", pos_2c: "2C", pos_2abc: "2ABC", + four_any: "4N", + four_top: "A", + four_lower: "C", + pos_3d: "3D", + pos_3e: "3E", + pos_3lower: "C", + pos_2d: "2D", + pos_2e: "2E", + pos_2any: "2N", + five_d: "5D", + six_d: "6D", straight: "Straight", box: "Box", ibox: "iBox", diff --git a/src/types/api/bet-provider.ts b/src/types/api/bet-provider.ts index d2ff8db..2303e31 100644 --- a/src/types/api/bet-provider.ts +++ b/src/types/api/bet-provider.ts @@ -1,6 +1,7 @@ export type BetProviderRow = { code: string; name: string; + short_code: string; sort_order: number; is_default: boolean; }; diff --git a/src/types/api/ticket.ts b/src/types/api/ticket.ts index f9a81d5..f68f08e 100644 --- a/src/types/api/ticket.ts +++ b/src/types/api/ticket.ts @@ -3,8 +3,10 @@ export type TicketLineInput = { number: string; play_code: string; amount: number; + provider_codes?: string[]; digit_slot?: number; dimension?: "D2" | "D3" | "D4"; + selection_type?: "straight" | "reverse" | "full_cover" | "full_play" | "half_play"; }; export type TicketConfigVersions = {