feat(CharacterDetail): 添加神器使用占比展示
- 在角色详情页面增加神器使用占比模块 - 新增 ArtifactPercent 和 HeroDetailResp 接口用于处理神器数据 - 实现神器信息的渲染,包括图片、名称和使用率
This commit is contained in:
@@ -44,12 +44,6 @@ interface CharacterDetailProps {
|
||||
};
|
||||
}
|
||||
|
||||
// mock数据类型定义
|
||||
interface GearSetRate {
|
||||
setNames: string[]; // 每个set下可有1-3个套装
|
||||
percent: number;
|
||||
}
|
||||
|
||||
interface BuildStats {
|
||||
attack: 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数据
|
||||
const mockAverageStats: BuildStats = {
|
||||
attack: 1887,
|
||||
@@ -445,6 +511,29 @@ const CharacterDetail: React.FC = () => {
|
||||
</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,两列布局 */}
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
{heroSetShows.map((build, idx) => (
|
||||
|
||||
Reference in New Issue
Block a user