This commit is contained in:
zhutao
2025-12-12 18:00:15 +08:00
commit 05f2882e93
28 changed files with 5662 additions and 0 deletions

View File

@@ -0,0 +1,253 @@
import {motion} from 'motion/react';
import {useEffect, useState} from 'react';
import {Brain, Cpu, TrendingUp, Zap} from 'lucide-react';
const analysisSteps = [
{ dept: '组织架构', message: '发现重复劳动节点...', icon: '🎨' },
{ dept: 'AI替代方案', message: 'AI替代率 85%...', icon: '✍️' },
{ dept: 'AI优化方案', message: '智能接入可节省 70%...', icon: '💬' },
{ dept: 'AI优化空间', message: '数据分析优化空间 60%...', icon: '📊' },
{ dept: 'AI部署方案', message: '自动化流程提升 75%...', icon: '⚙️' },
];
export function Screen3Analysis() {
const [currentStep, setCurrentStep] = useState(0);
const [nodes, setNodes] = useState<Array<{ x: number; y: number; id: number }>>([]);
useEffect(() => {
// Generate random nodes
const newNodes = Array.from({ length: 15 }, (_, i) => ({
x: Math.random() * 100,
y: Math.random() * 100,
id: i,
}));
setNodes(newNodes);
}, []);
useEffect(() => {
// Progress through analysis steps
const timer = setInterval(() => {
setCurrentStep((prev) => {
if (prev < analysisSteps.length - 1) {
return prev + 1;
} else {
clearInterval(timer);
return prev;
}
});
}, 800);
return () => clearInterval(timer);
}, []);
return (
<div className="min-h-screen flex flex-col items-center justify-center px-6 py-12 relative overflow-hidden">
{/* Radar scanning effect */}
<div className="absolute inset-0 flex items-center justify-center">
<motion.div
className="absolute w-96 h-96 border-2 border-[#00F0FF]/30 rounded-full"
animate={{
scale: [1, 1.5, 1],
opacity: [0.5, 0, 0.5],
}}
transition={{
duration: 2,
repeat: Infinity,
ease: 'easeOut',
}}
/>
<motion.div
className="absolute w-96 h-96 border-2 border-[#7B61FF]/30 rounded-full"
animate={{
scale: [1, 1.5, 1],
opacity: [0.5, 0, 0.5],
}}
transition={{
duration: 2,
repeat: Infinity,
ease: 'easeOut',
delay: 0.5,
}}
/>
{/* Rotating radar beam */}
<motion.div
className="absolute w-96 h-1 bg-gradient-to-r from-[#00F0FF]/0 via-[#00F0FF]/80 to-[#00F0FF]/0 origin-left"
style={{ left: '50%', top: '50%' }}
animate={{
rotate: [0, 360],
}}
transition={{
duration: 3,
repeat: Infinity,
ease: 'linear',
}}
/>
</div>
{/* Node visualization */}
<div className="absolute inset-0 pointer-events-none">
{nodes.map((node) => (
<motion.div
key={node.id}
className="absolute w-3 h-3 bg-[#00F0FF] rounded-full"
style={{
left: `${node.x}%`,
top: `${node.y}%`,
}}
initial={{ scale: 0, opacity: 0 }}
animate={{
scale: [0, 1, 0.8],
opacity: [0, 1, 0.6],
}}
transition={{
duration: 1,
delay: node.id * 0.1,
}}
>
{/* Pulse effect */}
<motion.div
className="absolute inset-0 bg-[#00F0FF] rounded-full"
animate={{
scale: [1, 2, 1],
opacity: [0.8, 0, 0.8],
}}
transition={{
duration: 2,
repeat: Infinity,
delay: node.id * 0.1,
}}
/>
</motion.div>
))}
</div>
{/* Central AI brain */}
<motion.div
className="relative z-10 mb-12"
initial={{ scale: 0, rotate: -180 }}
animate={{ scale: 1, rotate: 0 }}
transition={{ duration: 1, type: 'spring' }}
>
<div className="relative">
<motion.div
className="w-24 h-24 bg-gradient-to-br from-[#7B61FF] to-[#00F0FF] rounded-full flex items-center justify-center"
animate={{
boxShadow: [
'0 0 20px rgba(123, 97, 255, 0.5)',
'0 0 40px rgba(0, 240, 255, 0.8)',
'0 0 20px rgba(123, 97, 255, 0.5)',
],
}}
transition={{
duration: 2,
repeat: Infinity,
}}
>
<Brain className="w-12 h-12 text-white" />
</motion.div>
{/* Orbiting icons */}
{[Cpu, Zap, TrendingUp].map((Icon, index) => (
<motion.div
key={index}
className="absolute top-1/2 left-1/2 w-8 h-8 -ml-4 -mt-4"
animate={{
rotate: [0, 360],
}}
transition={{
duration: 5,
repeat: Infinity,
ease: 'linear',
delay: index * 0.6,
}}
>
<motion.div
className="absolute"
style={{
transform: `translateX(60px) rotate(-${index * 120}deg)`,
}}
animate={{
rotate: [0, -360],
}}
transition={{
duration: 5,
repeat: Infinity,
ease: 'linear',
delay: index * 0.6,
}}
>
<div className="w-8 h-8 bg-[#0A0F24] border-2 border-[#00F0FF] rounded-full flex items-center justify-center">
<Icon className="w-4 h-4 text-[#00F0FF]" />
</div>
</motion.div>
</motion.div>
))}
</div>
</motion.div>
{/* Analysis progress */}
<div className="relative z-10 w-full max-w-md space-y-4">
{analysisSteps.map((step, index) => (
<motion.div
key={index}
className={`flex items-center gap-4 p-4 rounded-xl backdrop-blur-sm transition-all ${
index === currentStep
? 'bg-[#00F0FF]/20 border-2 border-[#00F0FF]'
: index < currentStep
? 'bg-white/5 border border-gray-600'
: 'bg-white/5 border border-gray-800 opacity-30'
}`}
initial={{ opacity: 0, x: -50 }}
animate={{
opacity: index <= currentStep ? 1 : 0.3,
x: 0,
}}
transition={{ delay: index * 0.1 }}
>
<span className="text-2xl">{step.icon}</span>
<div className="flex-1">
<div className="text-sm text-gray-300">{step.dept}</div>
<div className="text-xs text-[#00F0FF] mt-1">{step.message}</div>
</div>
{index === currentStep && (
<motion.div
className="w-6 h-6 border-2 border-[#00F0FF] border-t-transparent rounded-full"
animate={{ rotate: 360 }}
transition={{ duration: 1, repeat: Infinity, ease: 'linear' }}
/>
)}
{index < currentStep && (
<div className="w-6 h-6 bg-[#00F0FF] rounded-full flex items-center justify-center">
<svg className="w-4 h-4 text-[#0A0F24]" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={3} d="M5 13l4 4L19 7" />
</svg>
</div>
)}
</motion.div>
))}
</div>
{/* Status text */}
<motion.div
className="mt-12 text-center"
initial={{ opacity: 0 }}
animate={{ opacity: [0, 1, 0] }}
transition={{ duration: 2, repeat: Infinity }}
>
<p className="text-[#00F0FF] text-sm">AI深度分析中...</p>
</motion.div>
{/* Progress bar */}
<motion.div className="mt-6 w-64 h-1 bg-gray-800 rounded-full overflow-hidden">
<motion.div
className="h-full bg-gradient-to-r from-[#7B61FF] to-[#00F0FF]"
initial={{ width: '0%' }}
animate={{ width: `${((currentStep + 1) / analysisSteps.length) * 100}%` }}
transition={{ duration: 0.5 }}
/>
</motion.div>
</div>
);
}