feat(CharacterDetail): 添加神器使用占比展示

- 在角色详情页面增加神器使用占比模块
- 新增 ArtifactPercent 和 HeroDetailResp 接口用于处理神器数据
- 实现神器信息的渲染,包括图片、名称和使用率
This commit is contained in:
hu xiaotong
2025-05-29 17:28:53 +08:00
parent 21a3348e0e
commit 8dfa2f5e48

View File

@@ -44,12 +44,6 @@ interface CharacterDetailProps {
}; };
} }
// mock数据类型定义
interface GearSetRate {
setNames: string[]; // 每个set下可有1-3个套装
percent: number;
}
interface BuildStats { interface BuildStats {
attack: number; attack: number;
defense: number; defense: number;
@@ -70,6 +64,78 @@ interface BuildInfo {
}; };
} }
interface ArtifactPercent {
artifactCode: string;
artifactName: string;
rarity: string;
role: string;
imageUrl: string;
percent: number;
}
interface HeroDetailResp {
heroRespSimpleVO: {
id: string;
heroCode: string;
heroName: string;
nickName: string | null;
headImgUrl: string;
stars: number;
role: string;
attribute: string;
};
hero60AttributeVO: {
cp: number;
atk: number;
hp: number;
spd: number;
def: number;
chc: number;
chd: number;
dac: number;
eff: number;
efr: number;
};
heroSetAvgVO: {
atk: number;
hp: number;
spd: number;
def: number;
chc: number;
chd: number;
dac: number;
eff: number;
efr: number;
};
heroSetPercentVOS: {
setName: string;
percent: number;
}[];
heroArtifactPercentVOS: ArtifactPercent[];
heroSetShows: {
cp: number;
atk: number;
hp: number;
spd: number;
def: number;
chc: number;
chd: number;
dac: number;
eff: number;
efr: number;
hds: string;
ctr: string;
arfName: string;
arfPic: string;
}[];
}
// mock数据类型定义
interface GearSetRate {
setNames: string[]; // 每个set下可有1-3个套装
percent: number;
}
// mock数据 // mock数据
const mockAverageStats: BuildStats = { const mockAverageStats: BuildStats = {
attack: 1887, attack: 1887,
@@ -445,6 +511,29 @@ const CharacterDetail: React.FC = () => {
</div> </div>
</div> </div>
</div> </div>
{/* 神器使用占比 */}
<div className="bg-gradient-to-br from-[#2A211E] to-[#1A1412] rounded-lg p-8 border border-[#C17F59]/30 mb-6">
<h3 className="text-lg font-semibold text-[#C17F59] mb-6">使</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{heroDetail.heroArtifactPercentVOS?.map((artifact: ArtifactPercent, idx: number) => (
<div key={idx} className="flex flex-col items-center">
<div className="w-80 h-80 rounded-lg mb-2 overflow-hidden flex items-center justify-center">
<img
src={artifact.imageUrl}
alt={artifact.artifactName}
className="w-full h-full object-contain"
/>
</div>
<span className="text-[#E6B17E] font-bold text-base text-center mb-1">
{artifact.artifactName}
</span>
<span className="text-white/70 text-base text-center">
使 {formatPercent(artifact.percent)}%
</span>
</div>
))}
</div>
</div>
{/* 下方builds两列布局 */} {/* 下方builds两列布局 */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-6"> <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{heroSetShows.map((build, idx) => ( {heroSetShows.map((build, idx) => (