import React, { useRef } from 'react'; import { snapdom } from '@zumer/snapdom'; interface MagicalGirlCardACGProps { magicalGirl: { codename: string; appearance: { outfit: string; accessories: string; colorScheme: string; overallLook: string; }; magicWeapon: { name: string; form: string; basicAbilities: string[]; description: string; }; specialMove: { name: string; chant: string; description: string; }; awakening: { name: string; evolvedAbilities: string[]; evolvedForm: string; evolvedOutfit: string; }; analysis: { personalityAnalysis: string; abilityReasoning: string; coreTraits: string[]; predictionBasis: string; }; }; gradientStyle: string; onSaveImage?: (imageUrl: string) => void; } const MagicalGirlCardACG: 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.magicWeapon.name}
形态:{magicalGirl.magicWeapon.form}
核心能力:
    {magicalGirl.magicWeapon.basicAbilities.map((ability: string, index: number) => (
  • ✨ {ability}
  • ))}
背景:{magicalGirl.magicWeapon.description}
{/* 必杀技 */}
🌠 必杀技
名称:{magicalGirl.specialMove.name}
咏唱:「{magicalGirl.specialMove.chant}」
效果:{magicalGirl.specialMove.description}
{/* 觉醒形态 */}
🌌 觉醒形态
形态名称:{magicalGirl.awakening.name}
进化能力:
    {magicalGirl.awakening.evolvedAbilities.map((ability: string, index: number) => (
  • 🌠 {ability}
  • ))}
武器进化:{magicalGirl.awakening.evolvedForm}
服装进化:{magicalGirl.awakening.evolvedOutfit}
{/* 综合分析 */}
🧠 综合分析
性格分析:{magicalGirl.analysis.personalityAnalysis}
能力设定思路:{magicalGirl.analysis.abilityReasoning}
核心萌属性:{magicalGirl.analysis.coreTraits.join('、')}
创作依据:{magicalGirl.analysis.predictionBasis}
Logo
); }; export default MagicalGirlCardACG;