feat(game): 更新游戏数据结构并优化历史记录显示

- 将动物图片资源配置重构为统一的花朵资源管理模块
- 添加奖励图片资源支持,实现动物和奖励图片的双重映射
- 在游戏历史记录中显示实际数字对应的奖励图标
- 修复历史记录中数字显示的空值处理逻辑
- 更新GitNexus项目索引统计信息
- 优化桌面游戏中花朵选择组件的渲染性能
This commit is contained in:
JiaJun
2026-05-29 16:47:41 +08:00
parent 15c519a42c
commit f388aabfda
43 changed files with 97 additions and 26 deletions

View File

@@ -2,7 +2,39 @@ import { useCallback, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import historyBg from '@/assets/system/history-bg.png'
import { SmartBackground } from '@/components/smart-background.tsx'
import { SmartImage } from '@/components/smart-image'
import { useGameHistoryVm } from '@/features/game/hooks/use-game-history-vm.ts'
import { FLOWER_IMAGE_BY_ID } from '@/features/game/shared'
function HistoryRewardNumber({
className,
number,
}: {
className?: string
number: number
}) {
const image = FLOWER_IMAGE_BY_ID[number]
const label = String(number).padStart(2, '0')
if (!image?.rewardUrl) {
return <span className={className}>{label}</span>
}
return (
<span
className={`inline-flex h-design-36 w-design-36 shrink-0 items-center justify-center align-middle ${className ?? ''}`}
title={label}
>
<SmartImage
src={image.rewardUrl}
alt={label}
showSkeleton={false}
className="h-full w-full overflow-visible"
imgClassName="object-contain"
/>
</span>
)
}
export function DesktopGameHistory() {
const { t } = useTranslation()
@@ -126,7 +158,18 @@ export function DesktopGameHistory() {
<span className={'text-[#84A2A2]'}>
{t('gameDesktop.history.numbers')}:{' '}
</span>
<span>{item.numbersLabel}</span>
{item.numbers.length === 0 ? (
<span>{item.numbersLabel}</span>
) : (
<span className="inline-flex flex-wrap items-center gap-design-4 align-middle">
{item.numbers.map((number) => (
<HistoryRewardNumber
key={`${item.id}-${number}`}
number={number}
/>
))}
</span>
)}
</div>
<div>
<span className={'text-[#84A2A2]'}>
@@ -140,9 +183,16 @@ export function DesktopGameHistory() {
<span className={'text-[#84A2A2]'}>
{t('gameDesktop.history.winningResult')}:{' '}
</span>
<span className={'text-[#FF7575]'}>
{item.resultNumberLabel}
</span>
{item.resultNumber === null ? (
<span className={'text-[#FF7575]'}>
{item.resultNumberLabel}
</span>
) : (
<HistoryRewardNumber
className="text-[#FF7575]"
number={item.resultNumber}
/>
)}
</div>
</div>
</div>