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 {
|
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) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user