import React, { useState, useEffect, useRef } from 'react'; import lottie from 'lottie-web'; import './index.css'; // 状态动画映射 const statusAnimationMap = { 'HR初筛未通过': () => import('@/assets/animations/interviewStatus/1-off_初筛未通过.json'), 'HR评估中': () => import('@/assets/animations/interviewStatus/1-on_hr评估中.json'), '面试未通过': () => import('@/assets/animations/interviewStatus/2-off_面试未通过.json'), '到场面试': () => import('@/assets/animations/interviewStatus/2-on_到场面试.json'), '收到通知': () => import('@/assets/animations/interviewStatus/2-on_收到通知.json'), '等待面试': () => import('@/assets/animations/interviewStatus/2-wati_等待面试.json'), '未参与面试': () => import('@/assets/animations/interviewStatus/3-off_未参与面试.json'), '等待HR通知': () => import('@/assets/animations/interviewStatus/3-wati_等待HR通知.json'), '拒绝Offer': () => import('@/assets/animations/interviewStatus/4-off_拒绝Offer.json'), '收到Offer': () => import('@/assets/animations/interviewStatus/4-on_收到Offer.json'), '等待回复': () => import('@/assets/animations/interviewStatus/4-wati_等待回复.json'), }; export default ({ statusText, isOpen }) => { const animationContainer = useRef(null); const lottieInstance = useRef(null); const [animationData, setAnimationData] = useState(null); useEffect(() => { if (isOpen && statusText) { // 加载对应的动画数据 const loadAnimation = statusAnimationMap[statusText]; if (loadAnimation) { loadAnimation().then(module => { setAnimationData(module.default); }); } } }, [isOpen, statusText]); useEffect(() => { if (animationData && animationContainer.current && isOpen) { // 清除之前的动画实例 if (lottieInstance.current) { lottieInstance.current.destroy(); } // 创建新的动画实例 lottieInstance.current = lottie.loadAnimation({ container: animationContainer.current, renderer: 'svg', loop: true, autoplay: true, animationData: animationData }); return () => { if (lottieInstance.current) { lottieInstance.current.destroy(); } }; } }, [animationData, isOpen]); if (!isOpen) return null; return (