feat(game): 更新马来西亚手机号验证和游戏界面优化

- 修改认证模块手机号验证规则适配马来西亚号码格式
- 添加新的投注限制提示文本支持多语言
- 重命名结算阶段标签为Drawing统一显示
- 新增桌面版动物游戏遮罩组件分离功能
- 添加回合开始投注提醒弹窗组件
- 优化开奖动画流程和视觉效果
- 添加奖励动画显示和投注汇总展示
- 新增多种投注限制和状态提示信息
This commit is contained in:
JiaJun
2026-05-30 17:22:57 +08:00
parent 54410aaac5
commit 87e8aca97d
21 changed files with 1008 additions and 492 deletions

View File

@@ -1,3 +1,4 @@
import { motion, useReducedMotion } from 'motion/react'
import { useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
import streakBg from '@/assets/game/pc-streak.webp'
@@ -17,6 +18,7 @@ import { cn } from '@/lib/utils.ts'
export function DesktopStatusLine() {
const { t } = useTranslation()
const prefersReducedMotion = useReducedMotion()
const {
countdownMs,
limitLabel,
@@ -165,22 +167,63 @@ export function DesktopStatusLine() {
className={countdownClassName}
/>
</div>
<div
className={'flex-1 flex items-center justify-center gap-design-100'}
>
<div className={'flex items-center gap-2'}>
<div className={'flex items-center gap-2'}>
<div
className={'w-design-20 h-design-20 bg-[#78FF7F] rounded-[50%]'}
></div>
<div className={cn(phaseToneClassName, 'font-bold')}>
{phaseLabel}
</div>
<div className="flex flex-1 items-center justify-center gap-design-88">
<div className="flex items-center gap-design-9">
<span className="relative flex h-design-24 w-design-24 items-center justify-center">
<motion.span
aria-hidden="true"
className="absolute h-design-24 w-design-24 rounded-full bg-[rgba(120,255,127,0.22)] blur-[calc(var(--design-unit)*3)]"
animate={
prefersReducedMotion
? undefined
: { opacity: [0.36, 0.88, 0.42], scale: [0.9, 1.28, 0.98] }
}
transition={
prefersReducedMotion
? undefined
: {
duration: 1.25,
ease: 'easeInOut',
repeat: Number.POSITIVE_INFINITY,
}
}
/>
<motion.span
aria-hidden="true"
className="relative h-design-14 w-design-14 rounded-full bg-[#78FF7F] shadow-[0_0_calc(var(--design-unit)*8)_rgba(120,255,127,0.78),0_0_calc(var(--design-unit)*16)_rgba(120,255,127,0.34)]"
animate={
prefersReducedMotion
? undefined
: { opacity: [0.78, 1, 0.86], scale: [0.96, 1.12, 1] }
}
transition={
prefersReducedMotion
? undefined
: {
duration: 1.25,
ease: 'easeInOut',
repeat: Number.POSITIVE_INFINITY,
}
}
/>
</span>
<div
className={cn(
phaseToneClassName,
'font-black tracking-[0.08em] [text-shadow:0_0_calc(var(--design-unit)*10)_rgba(120,255,127,0.44)]',
)}
>
{phaseLabel}
</div>
</div>
<div className={'text-[#CBD3D5] font-bold'}>
{t('gameDesktop.status.roundId')}:{roundId}
<div className="flex items-baseline gap-design-7 font-bold leading-none">
<span className="text-design-20 tracking-[0.06em] text-[#9FBAC0]">
{t('gameDesktop.status.roundId')}:
</span>
<span className="text-design-24 font-black tracking-[0.06em] text-[#E7FFFF] [text-shadow:0_0_calc(var(--design-unit)*9)_rgba(75,255,254,0.38)]">
{roundId}
</span>
</div>
</div>
</SmartBackground>