import React, { useRef } from 'react'; import { snapdom } from '@zumer/snapdom'; interface MagicalGirlCardProps { magicalGirl: { codename: string; appearance: { outfit: string; accessories: string; colorScheme: string; overallLook: string; }; magicConstruct: { name: string; form: string; basicAbilities: string[]; description: string; }; wonderlandRule: { name: string; description: string; tendency: string; activation: string; }; blooming: { name: string; evolvedAbilities: string[]; evolvedForm: string; evolvedOutfit: string; powerLevel: string; }; analysis: { personalityAnalysis: string; abilityReasoning: string; coreTraits: string[]; predictionBasis: string; }; }; gradientStyle: string; onSaveImage?: (imageUrl: string) => void; } const MagicalGirlCard: React.FC = ({ magicalGirl, gradientStyle, onSaveImage }) => { const resultRef = useRef(null); const handleSaveImage = async () => { if (!resultRef.current) return; try { const saveButton = resultRef.current.querySelector('.save-button') as HTMLElement; const logoPlaceholder = resultRef.current.querySelector('.logo-placeholder') as HTMLElement; if (saveButton) saveButton.style.display = 'none'; if (logoPlaceholder) logoPlaceholder.style.display = 'flex'; const result = await snapdom(resultRef.current, { scale: 1, }); if (saveButton) saveButton.style.display = 'block'; if (logoPlaceholder) logoPlaceholder.style.display = 'none'; const imgElement = await result.toPng(); const imageUrl = imgElement.src; if (onSaveImage) { onSaveImage(imageUrl); } } catch { alert('生成图片失败,请重试'); const saveButton = resultRef.current?.querySelector('.save-button') as HTMLElement; const logoPlaceholder = resultRef.current?.querySelector('.logo-placeholder') as HTMLElement; if (saveButton) saveButton.style.display = 'block'; if (logoPlaceholder) logoPlaceholder.style.display = 'none'; } }; return (
Logo
{/* 基本信息 */}
💝 魔法少女代号
{magicalGirl.codename}
{/* 外观描述 */}
👗 魔法少女外观
服装:{magicalGirl.appearance.outfit}
饰品:{magicalGirl.appearance.accessories}
配色:{magicalGirl.appearance.colorScheme}
整体风格:{magicalGirl.appearance.overallLook}
{/* 魔力构装 */}
⚔️ 魔力构装
名称:{magicalGirl.magicConstruct.name}
形态:{magicalGirl.magicConstruct.form}
基本能力:
    {magicalGirl.magicConstruct.basicAbilities.map((ability: string, index: number) => (
  • • {ability}
  • ))}
详细描述:{magicalGirl.magicConstruct.description}
{/* 奇境规则 */}
🌟 奇境规则
规则名称:{magicalGirl.wonderlandRule.name}
规则描述:{magicalGirl.wonderlandRule.description}
规则倾向:{magicalGirl.wonderlandRule.tendency}
激活条件:{magicalGirl.wonderlandRule.activation}
{/* 繁开状态 */}
🌸 繁开状态
繁开魔装名:{magicalGirl.blooming.name}
进化能力:
    {magicalGirl.blooming.evolvedAbilities.map((ability: string, index: number) => (
  • • {ability}
  • ))}
进化形态:{magicalGirl.blooming.evolvedForm}
进化衣装:{magicalGirl.blooming.evolvedOutfit}
力量等级:{magicalGirl.blooming.powerLevel}
{/* 性格分析 */}
🔮 性格分析
性格分析:{magicalGirl.analysis.personalityAnalysis}
能力推理:{magicalGirl.analysis.abilityReasoning}
核心特征:{magicalGirl.analysis.coreTraits.join('、')}
预测依据:{magicalGirl.analysis.predictionBasis}
Logo
); }; export default MagicalGirlCard;