From 6590930e7aeb1345539dc571ca8202d4825ec12d Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期二, 08 四月 2025 09:32:56 +0800
Subject: [PATCH] 主页优化

---
 src/components/SupplyChainAIMindMap.tsx |  647 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/app/page.tsx                        |   69 ++++-
 2 files changed, 700 insertions(+), 16 deletions(-)

diff --git a/src/app/page.tsx b/src/app/page.tsx
index a5f9c3e..712166e 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -3,6 +3,7 @@
 import Link from 'next/link';
 import { motion } from 'framer-motion';
 import { useEffect, useState } from 'react';
+import SupplyChainAIMindMap from '@/components/SupplyChainAIMindMap';
 
 export default function Home() {
   const [mounted, setMounted] = useState(false);
@@ -20,13 +21,13 @@
   };
   
   const fadeInLeft = {
-    hidden: { opacity: 0, x: -50 },
-    visible: { opacity: 1, x: 0, transition: { duration: 0.7, ease: "easeOut" } }
+    hidden: { opacity: 0, x: -100 },
+    visible: { opacity: 1, x: 0, transition: { duration: 0.7, ease: [0.25, 0.1, 0.25, 1] } }
   };
   
   const fadeInRight = {
-    hidden: { opacity: 0, x: 50 },
-    visible: { opacity: 1, x: 0, transition: { duration: 0.7, ease: "easeOut" } }
+    hidden: { opacity: 0, x: 100 },
+    visible: { opacity: 1, x: 0, transition: { duration: 0.7, ease: [0.25, 0.1, 0.25, 1] } }
   };
   
   const fadeInScale = {
@@ -40,12 +41,48 @@
       <div className="absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-[#1E2B63] to-[#0A1033] z-0"></div>
       
       <div className="max-w-7xl mx-auto py-0">
-        {/* 椤甸潰鍐呭 */}
-        
         {/* 涓昏鍐呭閮ㄥ垎 */}
         <div className="relative z-10 min-h-screen pt-32 pb-24">
-          {/* 鎶�鏈紭鍔块儴鍒� */}
-          <section className="w-full py-6 relative">
+          {/* 浜や簰鎸夐挳缁� - 椤堕儴 */}
+          <div className="flex justify-center gap-8 mb-20">
+            <motion.button
+              initial="hidden"
+              whileInView="visible"
+              viewport={{ once: false, margin: "-150px" }}
+              variants={fadeInLeft}
+              whileHover={{ scale: 1.03 }}
+              whileTap={{ scale: 0.97 }}
+              className="relative px-12 py-3 rounded-lg overflow-hidden group backdrop-blur-sm bg-white/5 border border-[#6ADBFF]/30 hover:border-[#6ADBFF]/50 transition-all duration-300"
+            >
+              <div className="absolute inset-0 bg-gradient-to-r from-[#6ADBFF]/5 to-[#5E72EB]/5 group-hover:from-[#6ADBFF]/10 group-hover:to-[#5E72EB]/10 transition-all duration-300"></div>
+              <div className="relative">
+                <span className="text-white font-semibold">AI鍦烘櫙妯℃嫙</span>
+              </div>
+            </motion.button>
+
+            <motion.button
+              initial="hidden"
+              whileInView="visible"
+              viewport={{ once: false, margin: "-150px" }}
+              variants={fadeInRight}
+              whileHover={{ scale: 1.03 }}
+              whileTap={{ scale: 0.97 }}
+              className="relative px-12 py-3 rounded-lg overflow-hidden group backdrop-blur-sm bg-white/5 border border-[#FF6A88]/30 hover:border-[#FF6A88]/50 transition-all duration-300"
+            >
+              <div className="absolute inset-0 bg-gradient-to-r from-[#FF6A88]/5 to-[#5E72EB]/5 group-hover:from-[#FF6A88]/10 group-hover:to-[#5E72EB]/10 transition-all duration-300"></div>
+              <div className="relative">
+                <span className="text-white font-semibold">寮�濮嬭亰澶�</span>
+              </div>
+            </motion.button>
+          </div>
+
+          {/* AI璧嬭兘APS浼樺娍鍏ㄦ櫙 - 鐙珛鍖哄潡 */}
+          <section className="w-full py-12 relative mb-24">
+            <SupplyChainAIMindMap />
+          </section>
+          
+          {/* AI璧嬭兘APS鏍稿績鎶�鏈紭鍔块儴鍒� */}
+          <section className="w-full py-16 relative mb-20">
             {/* 鏍囬 */}
             <motion.div
               initial="hidden"
@@ -61,14 +98,14 @@
               </h2>
               <div className="h-1 w-24 mx-auto bg-gradient-to-r from-[#6ADBFF] to-[#FF6A88]"></div>
             </motion.div>
-            
+
             {/* 鎶�鏈崱鐗� */}
-            <div className="grid grid-cols-1 md:grid-cols-2 gap-12">
+            <div className="grid grid-cols-1 md:grid-cols-2 gap-12 mt-16">
               {/* 宸︿晶锛氶噺瀛愬惎鍙戠畻娉� */}
               <motion.div
                 initial="hidden"
                 whileInView="visible"
-                viewport={{ once: false, margin: "-100px" }}
+                viewport={{ once: false, margin: "-150px" }}
                 variants={fadeInLeft}
                 className="relative"
               >
@@ -85,7 +122,7 @@
               <motion.div
                 initial="hidden"
                 whileInView="visible"
-                viewport={{ once: false, margin: "-100px" }}
+                viewport={{ once: false, margin: "-150px" }}
                 variants={fadeInRight}
                 className="relative"
               >
@@ -101,11 +138,11 @@
             
             {/* 鏁板瓧鎸囨爣鍖哄煙 */}
             <motion.div
-              initial={{ opacity: 0, y: 20 }}
+              initial={{ opacity: 0, y: 40 }}
               whileInView={{ opacity: 1, y: 0 }}
-              viewport={{ once: false, margin: "-100px" }}
-              transition={{ duration: 0.8, ease: "easeOut" }}
-              className="mt-20 w-full grid grid-cols-2 md:grid-cols-4 gap-8 mb-20"
+              viewport={{ once: false, margin: "-150px" }}
+              transition={{ duration: 0.7, ease: [0.25, 0.1, 0.25, 1], delay: 0.2 }}
+              className="mt-20 w-full grid grid-cols-2 md:grid-cols-4 gap-8"
             >
               <div className="text-center">
                 <div className="text-4xl font-bold text-[#6ADBFF] mb-2">98%</div>
diff --git a/src/components/SupplyChainAIMindMap.tsx b/src/components/SupplyChainAIMindMap.tsx
new file mode 100644
index 0000000..7646d4c
--- /dev/null
+++ b/src/components/SupplyChainAIMindMap.tsx
@@ -0,0 +1,647 @@
+"use client";
+
+import { useEffect, useRef } from 'react';
+import { motion } from 'framer-motion';
+
+interface Node {
+  x: number;
+  y: number;
+  label: string;
+  color: string;
+  icon?: string;
+  isAI?: boolean;
+}
+
+export default function SupplyChainAIMindMap() {
+  const canvasRef = useRef<HTMLCanvasElement>(null);
+  
+  useEffect(() => {
+    const canvas = canvasRef.current;
+    if (!canvas) return;
+    
+    const ctx = canvas.getContext('2d');
+    if (!ctx) return;
+    
+    const setCanvasSize = () => {
+      canvas.width = canvas.offsetWidth;
+      canvas.height = canvas.offsetHeight;
+    };
+    
+    setCanvasSize();
+    window.addEventListener('resize', setCanvasSize);
+    
+    // 閲忓瓙鏁版嵁绮掑瓙绯荤粺
+    interface QuantumParticle {
+      x: number;
+      y: number;
+      targetX: number;
+      targetY: number;
+      size: number;
+      color: string;
+      speed: number;
+      energy: number;
+      phase: number;
+      orbitRadius: number;
+      orbitSpeed: number;
+      pathIndex: number;
+      lifespan: number;
+      maxLifespan: number;
+    }
+    
+    interface Point {
+      x: number;
+      y: number;
+    }
+    
+    interface Path {
+      start: Point;
+      end: Point;
+      color: string;
+      particles: QuantumParticle[];
+    }
+    
+    const particles: QuantumParticle[] = [];
+    
+    // 瀹氫箟鏁版嵁娴佽矾寰�
+    const paths: Path[] = [
+      { start: { x: 0.15, y: 0.3 }, end: { x: 0.35, y: 0.3 }, color: '#6ADBFF', particles: [] }, // 閲囪喘鍒扮敓浜�
+      { start: { x: 0.35, y: 0.3 }, end: { x: 0.65, y: 0.3 }, color: '#5E72EB', particles: [] }, // 鐢熶骇鍒伴厤閫�
+      { start: { x: 0.65, y: 0.3 }, end: { x: 0.85, y: 0.3 }, color: '#FF6A88', particles: [] }, // 閰嶉�佸埌瀹㈡埛
+      { start: { x: 0.85, y: 0.3 }, end: { x: 0.85, y: 0.6 }, color: '#FF9D6A', particles: [] }, // 瀹㈡埛鍒伴渶姹傞娴�
+      { start: { x: 0.85, y: 0.6 }, end: { x: 0.5, y: 0.5 }, color: '#FF6A88', particles: [] },  // 闇�姹傞娴嬪埌AI
+      { start: { x: 0.5, y: 0.5 }, end: { x: 0.15, y: 0.3 }, color: '#6ADBFF', particles: [] }   // AI鍒伴噰璐�
+    ];
+    
+    // 鍒涘缓閲忓瓙绮掑瓙
+    const createQuantumParticle = () => {
+      const pathIndex = Math.floor(Math.random() * paths.length);
+      const path = paths[pathIndex];
+      const startX = path.start.x * canvas.width;
+      const startY = path.start.y * canvas.height;
+      const endX = path.end.x * canvas.width;
+      const endY = path.end.y * canvas.height;
+      
+      const particle: QuantumParticle = {
+        x: startX,
+        y: startY,
+        targetX: endX,
+        targetY: endY,
+        size: Math.random() * 2 + 1,
+        color: path.color,
+        speed: 0.5 + Math.random() * 1,
+        energy: 1,
+        phase: Math.random() * Math.PI * 2,
+        orbitRadius: Math.random() * 20 + 10,
+        orbitSpeed: (Math.random() * 0.1 + 0.05) * (Math.random() < 0.5 ? 1 : -1),
+        pathIndex,
+        lifespan: 0,
+        maxLifespan: 150 + Math.random() * 100
+      };
+      
+      particles.push(particle);
+    };
+    
+    // 鏇存柊閲忓瓙绮掑瓙
+    const updateParticles = () => {
+      const time = Date.now() * 0.001;
+      
+      for (let i = particles.length - 1; i >= 0; i--) {
+        const p = particles[i];
+        p.lifespan++;
+        
+        if (p.lifespan >= p.maxLifespan) {
+          particles.splice(i, 1);
+          continue;
+        }
+        
+        // 璁$畻鍒扮洰鏍囩殑鏂瑰悜鍜岃窛绂�
+        const dx = p.targetX - p.x;
+        const dy = p.targetY - p.y;
+        const dist = Math.sqrt(dx * dx + dy * dy);
+        
+        if (dist < 5) {
+          // 鍒拌揪鐩爣鐐癸紝璁剧疆鏂扮洰鏍�
+          const nextPathIndex = (p.pathIndex + 1) % paths.length;
+          const nextPath = paths[nextPathIndex];
+          p.pathIndex = nextPathIndex;
+          p.targetX = nextPath.end.x * canvas.width;
+          p.targetY = nextPath.end.y * canvas.height;
+          p.phase = Math.random() * Math.PI * 2; // 閲嶇疆鐩镐綅
+        }
+        
+        // 閲忓瓙杞ㄩ亾杩愬姩
+        const progress = p.lifespan / p.maxLifespan;
+        const orbitAmplitude = Math.sin(progress * Math.PI) * p.orbitRadius;
+        const orbitPhase = p.phase + time * p.orbitSpeed;
+        
+        // 璁$畻涓昏绉诲姩鏂瑰悜
+        const moveX = dx / dist * p.speed;
+        const moveY = dy / dist * p.speed;
+        
+        // 娣诲姞閲忓瓙杞ㄩ亾鍋忕Щ
+        const perpX = -dy / dist;
+        const perpY = dx / dist;
+        
+        p.x += moveX + perpX * Math.sin(orbitPhase) * orbitAmplitude * 0.1;
+        p.y += moveY + perpY * Math.sin(orbitPhase) * orbitAmplitude * 0.1;
+        
+        // 鏇存柊鑳介噺鍊�
+        p.energy = Math.sin(progress * Math.PI);
+      }
+    };
+    
+    // 缁樺埗鍦烘櫙
+    const drawScene = () => {
+      ctx.clearRect(0, 0, canvas.width, canvas.height);
+      
+      // 缁樺埗绉戞妧鎰熻儗鏅�
+      drawTechBackground();
+      
+      // 缁樺埗鑳介噺鍦鸿矾寰�
+      drawEnergyFields();
+      
+      // 缁樺埗鑺傜偣
+      drawNodes();
+      
+      // 缁樺埗閲忓瓙绮掑瓙
+      drawQuantumParticles();
+    };
+    
+    // 缁樺埗绉戞妧鎰熻儗鏅�
+    const drawTechBackground = () => {
+      const gridSize = 40;
+      const time = Date.now() * 0.001;
+      
+      // 缁樺埗鍔ㄦ�佺綉鏍�
+      ctx.strokeStyle = 'rgba(70, 130, 180, 0.05)';
+      ctx.lineWidth = 0.5;
+      
+      for (let y = 0; y < canvas.height; y += gridSize) {
+        ctx.beginPath();
+        ctx.moveTo(0, y);
+        ctx.lineTo(canvas.width, y);
+        ctx.stroke();
+        
+        // 娣诲姞娉㈠姩鏁堟灉
+        ctx.beginPath();
+        for (let x = 0; x < canvas.width; x += 5) {
+          const wave = Math.sin(x * 0.02 + time + y * 0.01) * 2;
+          ctx.lineTo(x, y + wave);
+        }
+        ctx.strokeStyle = 'rgba(70, 130, 180, 0.02)';
+        ctx.stroke();
+      }
+      
+      for (let x = 0; x < canvas.width; x += gridSize) {
+        ctx.beginPath();
+        ctx.moveTo(x, 0);
+        ctx.lineTo(x, canvas.height);
+        ctx.strokeStyle = 'rgba(70, 130, 180, 0.05)';
+        ctx.stroke();
+      }
+      
+      // 娣诲姞闅忔満鍏夌偣
+      for (let i = 0; i < 15; i++) {
+        const x = Math.random() * canvas.width;
+        const y = Math.random() * canvas.height;
+        const size = 2 + Math.sin(time * 2 + i) * 1;
+        
+        const gradient = ctx.createRadialGradient(x, y, 0, x, y, size * 2);
+        gradient.addColorStop(0, 'rgba(106, 219, 255, 0.2)');
+        gradient.addColorStop(1, 'rgba(106, 219, 255, 0)');
+        
+        ctx.beginPath();
+        ctx.fillStyle = gradient;
+        ctx.arc(x, y, size * 2, 0, Math.PI * 2);
+        ctx.fill();
+      }
+    };
+    
+    // 缁樺埗鑳介噺鍦�
+    const drawEnergyFields = () => {
+      const time = Date.now() * 0.001;
+      
+      paths.forEach((path: Path) => {
+        const startX = path.start.x * canvas.width;
+        const startY = path.start.y * canvas.height;
+        const endX = path.end.x * canvas.width;
+        const endY = path.end.y * canvas.height;
+        
+        // 鍒涘缓鑳介噺鍦烘晥鏋�
+        const numPoints = 30;
+        const fieldWidth = 40;
+        
+        // 璁$畻璺緞鏂瑰悜
+        const dx = endX - startX;
+        const dy = endY - startY;
+        const length = Math.sqrt(dx * dx + dy * dy);
+        const dirX = dx / length;
+        const dirY = dy / length;
+        
+        // 鍨傜洿鏂瑰悜
+        const perpX = -dirY;
+        const perpY = dirX;
+        
+        // 缁樺埗鑳介噺娴佸姩鏁堟灉
+        for (let i = 0; i < numPoints; i++) {
+          const progress = i / (numPoints - 1);
+          const x = startX + dx * progress;
+          const y = startY + dy * progress;
+          
+          // 鍒涘缓娉㈡氮鏁堟灉
+          const waveAmplitude = Math.sin(progress * Math.PI * 4 + time * 3) * fieldWidth;
+          const waveFrequency = Math.cos(progress * Math.PI * 2 - time * 2) * fieldWidth * 0.3;
+          
+          const x1 = x + perpX * waveAmplitude + dirX * waveFrequency;
+          const y1 = y + perpY * waveAmplitude + dirY * waveFrequency;
+          const x2 = x - perpX * waveAmplitude - dirX * waveFrequency;
+          const y2 = y - perpY * waveAmplitude - dirY * waveFrequency;
+          
+          const gradient = ctx.createLinearGradient(x1, y1, x2, y2);
+          const alpha = (Math.sin(progress * Math.PI + time) + 1) * 0.3;
+          const alphaHex = Math.floor(alpha * 255).toString(16).padStart(2, '0');
+          
+          gradient.addColorStop(0, `${path.color}00`);
+          gradient.addColorStop(0.5, `${path.color}${alphaHex}`);
+          gradient.addColorStop(1, `${path.color}00`);
+          
+          ctx.beginPath();
+          ctx.strokeStyle = gradient;
+          ctx.lineWidth = 2;
+          ctx.moveTo(x1, y1);
+          ctx.lineTo(x2, y2);
+          ctx.stroke();
+        }
+      });
+    };
+    
+    // 缁樺埗鑺傜偣
+    const drawNodes = () => {
+      // 鑺傜偣閰嶇疆
+      const nodes: Node[] = [
+        { x: 0.15, y: 0.3, label: '閲囪喘', color: '#6ADBFF', icon: '馃摝' },
+        { x: 0.35, y: 0.3, label: '鐢熶骇', color: '#5E72EB', icon: '馃彮' },
+        { x: 0.65, y: 0.3, label: '閰嶉��', color: '#FF6A88', icon: '馃殮' },
+        { x: 0.85, y: 0.3, label: '瀹㈡埛', color: '#FF9D6A', icon: '馃懃' },
+        { x: 0.85, y: 0.6, label: '闇�姹傞娴�', color: '#FF6A88', icon: '馃搳' },
+        { x: 0.5, y: 0.5, label: '鏅鸿兘鍒嗘瀽寮曟搸', color: '#5E72EB', isAI: true },
+      ];
+      
+      const time = Date.now() * 0.001;
+      
+      nodes.forEach(node => {
+        const x = node.x * canvas.width;
+        const y = node.y * canvas.height;
+        
+        if (node.isAI) {
+          drawAINode(x, y);
+        } else {
+          // 鑺傜偣鍏夌幆鏁堟灉
+          const pulseSize = 24 + Math.sin(time * 1.5 + x * 0.05) * 3;
+          
+          // 澶栧彂鍏�
+          const gradient = ctx.createRadialGradient(x, y, 15, x, y, pulseSize);
+          gradient.addColorStop(0, `${node.color}30`);
+          gradient.addColorStop(1, `${node.color}00`);
+          
+          ctx.beginPath();
+          ctx.arc(x, y, pulseSize, 0, Math.PI * 2);
+          ctx.fillStyle = gradient;
+          ctx.fill();
+          
+          // 鑺傜偣涓讳綋
+          ctx.beginPath();
+          ctx.arc(x, y, 20, 0, Math.PI * 2);
+          ctx.fillStyle = `${node.color}20`;
+          ctx.fill();
+          
+          ctx.beginPath();
+          ctx.arc(x, y, 20, 0, Math.PI * 2);
+          ctx.strokeStyle = node.color;
+          ctx.lineWidth = 2;
+          ctx.stroke();
+          
+          // 鍥炬爣
+          if (node.icon) {
+            ctx.fillStyle = node.color;
+            ctx.font = '16px monospace';
+            ctx.textAlign = 'center';
+            ctx.textBaseline = 'middle';
+            ctx.fillText(node.icon, x, y - 3);
+          }
+          
+          // 鏍囩
+          ctx.fillStyle = '#fff';
+          ctx.font = '12px sans-serif';
+          ctx.fillText(node.label, x, y + 25);
+        }
+      });
+    };
+    
+    // 缁樺埗AI鑺傜偣
+    const drawAINode = (x: number, y: number) => {
+      const time = Date.now() * 0.001;
+      
+      // 绁炵粡缃戠粶鑳屾櫙鏁堟灉
+      const neuronPoints = [
+        { x: -20, y: -15 }, { x: 20, y: -15 },
+        { x: -25, y: 0 }, { x: 25, y: 0 },
+        { x: -20, y: 15 }, { x: 20, y: 15 },
+        { x: 0, y: -20 }, { x: 0, y: 20 },
+        { x: -15, y: -25 }, { x: 15, y: -25 },
+        { x: -15, y: 25 }, { x: 15, y: 25 }
+      ];
+      
+      // 缁樺埗绁炵粡杩炴帴
+      ctx.strokeStyle = 'rgba(106, 219, 255, 0.3)';
+      ctx.lineWidth = 1;
+      
+      neuronPoints.forEach((point, i) => {
+        for (let j = i + 1; j < neuronPoints.length; j++) {
+          const p1 = { x: x + point.x, y: y + point.y };
+          const p2 = { x: x + neuronPoints[j].x, y: y + neuronPoints[j].y };
+          
+          const pulsePhase = (time * 2 + i * 0.5 + j * 0.3) % (Math.PI * 2);
+          const pulseIntensity = (Math.sin(pulsePhase) + 1) * 0.5;
+          
+          const gradient = ctx.createLinearGradient(p1.x, p1.y, p2.x, p2.y);
+          gradient.addColorStop(0, `rgba(106, 219, 255, ${0.1 + pulseIntensity * 0.2})`);
+          gradient.addColorStop(0.5, `rgba(94, 114, 235, ${0.2 + pulseIntensity * 0.3})`);
+          gradient.addColorStop(1, `rgba(106, 219, 255, ${0.1 + pulseIntensity * 0.2})`);
+          
+          ctx.beginPath();
+          ctx.strokeStyle = gradient;
+          ctx.moveTo(p1.x, p1.y);
+          
+          // 鍒涘缓鍔ㄦ�佸姬褰㈣繛鎺�
+          const controlPoint = {
+            x: (p1.x + p2.x) / 2 + Math.sin(time + i) * 10,
+            y: (p1.y + p2.y) / 2 + Math.cos(time + j) * 10
+          };
+          
+          ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, p2.x, p2.y);
+          ctx.stroke();
+          
+          // 鍦ㄨ繛鎺ョ嚎涓婃坊鍔犳祦鍔ㄧ矑瀛�
+          const particlePos = Math.sin(time * 2 + i * 0.7 + j * 0.5) * 0.5 + 0.5;
+          const px = p1.x + (p2.x - p1.x) * particlePos;
+          const py = p1.y + (p2.y - p1.y) * particlePos;
+          
+          const particleGlow = ctx.createRadialGradient(px, py, 0, px, py, 3);
+          particleGlow.addColorStop(0, 'rgba(255, 255, 255, 0.8)');
+          particleGlow.addColorStop(1, 'rgba(106, 219, 255, 0)');
+          
+          ctx.fillStyle = particleGlow;
+          ctx.beginPath();
+          ctx.arc(px, py, 3, 0, Math.PI * 2);
+          ctx.fill();
+        }
+      });
+      
+      // 缁樺埗澶ц剳杞粨
+      ctx.beginPath();
+      ctx.moveTo(x - 25, y + 20);
+      
+      // 宸﹀崐杈瑰ぇ鑴�
+      const leftOffset = Math.sin(time * 2) * 2;
+      ctx.bezierCurveTo(
+        x - 40 + leftOffset, y + 10,  // 鎺у埗鐐�1
+        x - 40 + leftOffset, y - 20,  // 鎺у埗鐐�2
+        x - 25, y - 25   // 缁堢偣
+      );
+      
+      // 涓婇儴瑜剁毐
+      const topOffset = Math.sin(time * 2.5) * 2;
+      ctx.bezierCurveTo(
+        x - 20, y - 30 + topOffset,
+        x - 10, y - 35 + topOffset,
+        x, y - 25
+      );
+      
+      // 鍙冲崐杈瑰ぇ鑴�
+      const rightOffset = Math.sin(time * 2 + Math.PI) * 2;
+      ctx.bezierCurveTo(
+        x + 10, y - 35 + topOffset,
+        x + 20, y - 30 + topOffset,
+        x + 25, y - 25
+      );
+      
+      ctx.bezierCurveTo(
+        x + 40 + rightOffset, y - 20,
+        x + 40 + rightOffset, y + 10,
+        x + 25, y + 20
+      );
+      
+      // 搴曢儴鏇茬嚎
+      const bottomOffset = Math.sin(time * 1.5) * 2;
+      ctx.bezierCurveTo(
+        x + 15, y + 25 + bottomOffset,
+        x - 15, y + 25 + bottomOffset,
+        x - 25, y + 20
+      );
+      
+      // 鍒涘缓澶ц剳娓愬彉
+      const brainGradient = ctx.createRadialGradient(x, y, 0, x, y, 40);
+      brainGradient.addColorStop(0, 'rgba(94, 114, 235, 0.8)');
+      brainGradient.addColorStop(0.5, 'rgba(106, 219, 255, 0.6)');
+      brainGradient.addColorStop(1, 'rgba(94, 114, 235, 0.4)');
+      
+      ctx.fillStyle = brainGradient;
+      ctx.fill();
+      
+      // 娣诲姞鑴戞尝鍔ㄧ敾鏁堟灉
+      for (let i = 0; i < 3; i++) {
+        const waveRadius = 35 + Math.sin(time * 2 + i * Math.PI / 3) * 5;
+        const waveGradient = ctx.createRadialGradient(x, y, waveRadius - 5, x, y, waveRadius + 5);
+        waveGradient.addColorStop(0, 'rgba(106, 219, 255, 0)');
+        waveGradient.addColorStop(0.5, `rgba(94, 114, 235, ${0.1 - i * 0.03})`);
+        waveGradient.addColorStop(1, 'rgba(106, 219, 255, 0)');
+        
+        ctx.beginPath();
+        ctx.arc(x, y, waveRadius, 0, Math.PI * 2);
+        ctx.fillStyle = waveGradient;
+        ctx.fill();
+      }
+      
+      // 娣诲姞绁炵粡鍏冮棯鐑佹晥鏋�
+      neuronPoints.forEach((point, i) => {
+        const neuronX = x + point.x;
+        const neuronY = y + point.y;
+        const pulseScale = Math.sin(time * 3 + i) * 0.5 + 1.5;
+        
+        const neuronGlow = ctx.createRadialGradient(
+          neuronX, neuronY, 0,
+          neuronX, neuronY, 4 * pulseScale
+        );
+        neuronGlow.addColorStop(0, 'rgba(255, 255, 255, 0.8)');
+        neuronGlow.addColorStop(0.5, 'rgba(106, 219, 255, 0.4)');
+        neuronGlow.addColorStop(1, 'rgba(94, 114, 235, 0)');
+        
+        ctx.beginPath();
+        ctx.arc(neuronX, neuronY, 4 * pulseScale, 0, Math.PI * 2);
+        ctx.fillStyle = neuronGlow;
+        ctx.fill();
+      });
+      
+      // 娣诲姞鑴戞矡绾圭悊
+      const numFolds = 8;
+      for (let i = 0; i < numFolds; i++) {
+        const angle = (Math.PI * 2 / numFolds) * i;
+        const radius = 25;
+        const x1 = x + Math.cos(angle) * radius;
+        const y1 = y + Math.sin(angle) * radius;
+        const x2 = x + Math.cos(angle + Math.PI / numFolds) * (radius * 0.7);
+        const y2 = y + Math.sin(angle + Math.PI / numFolds) * (radius * 0.7);
+        
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.lineTo(x2, y2);
+        ctx.strokeStyle = 'rgba(94, 114, 235, 0.3)';
+        ctx.lineWidth = 1;
+        ctx.stroke();
+      }
+      
+      // 鏍囩
+      ctx.fillStyle = '#FFFFFF';
+      ctx.font = '13px sans-serif';
+      ctx.textAlign = 'center';
+      ctx.textBaseline = 'middle';
+      ctx.fillText('鏅鸿兘鍒嗘瀽寮曟搸', x, y + 45);
+    };
+    
+    // 缁樺埗閲忓瓙绮掑瓙
+    const drawQuantumParticles = () => {
+      particles.forEach(p => {
+        const time = Date.now() * 0.001;
+        
+        // 閲忓瓙鍏夋檿鏁堟灉
+        const glowSize = p.size * (2 + Math.sin(time * 3 + p.phase) * 0.5);
+        const gradient = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, glowSize * 2);
+        gradient.addColorStop(0, p.color + 'FF');
+        gradient.addColorStop(0.5, p.color + '40');
+        gradient.addColorStop(1, p.color + '00');
+        
+        ctx.beginPath();
+        ctx.arc(p.x, p.y, glowSize, 0, Math.PI * 2);
+        ctx.fillStyle = gradient;
+        ctx.fill();
+        
+        // 閲忓瓙鏍稿績
+        ctx.beginPath();
+        ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
+        ctx.fillStyle = '#FFFFFF';
+        ctx.fill();
+        
+        // 閲忓瓙娉㈢汗
+        if (Math.random() < 0.1) {
+          const waveGradient = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.size * 4);
+          waveGradient.addColorStop(0, p.color + '40');
+          waveGradient.addColorStop(1, p.color + '00');
+          
+          ctx.beginPath();
+          ctx.arc(p.x, p.y, p.size * 4, 0, Math.PI * 2);
+          ctx.fillStyle = waveGradient;
+          ctx.fill();
+        }
+      });
+    };
+    
+    // 鍒濆鍖栫矑瀛愮郴缁�
+    const initParticles = () => {
+      for (let i = 0; i < 40; i++) {
+        setTimeout(() => createQuantumParticle(), i * 100);
+      }
+    };
+    
+    // 瀹氭湡娣诲姞鏂扮矑瀛�
+    const particleInterval = setInterval(() => {
+      if (particles.length < 50) {
+        createQuantumParticle();
+      }
+    }, 500);
+    
+    // 鍔ㄧ敾寰幆
+    const animate = () => {
+      updateParticles();
+      drawScene();
+      requestAnimationFrame(animate);
+    };
+    
+    initParticles();
+    animate();
+    
+    return () => {
+      window.removeEventListener('resize', setCanvasSize);
+      clearInterval(particleInterval);
+    };
+  }, []);
+  
+  return (
+    <div className="w-full py-4">
+      <motion.div
+        initial={{ opacity: 0, y: 20 }}
+        whileInView={{ opacity: 1, y: 0 }}
+        viewport={{ once: false, margin: "-100px" }}
+        transition={{ duration: 0.7, ease: "easeOut" }}
+        className="text-center mb-8"
+      >
+        <h2 className="text-3xl md:text-4xl font-bold text-white mb-5">
+          <span className="text-transparent bg-clip-text bg-gradient-to-r from-[#6ADBFF] to-[#5E72EB]">
+            AI璧嬭兘APS
+          </span> 浼樺娍鍏ㄦ櫙
+        </h2>
+        <p className="text-gray-300 max-w-3xl mx-auto">
+          鍏ㄥ眬鏅鸿兘鍗忓悓锛屼粠渚涘簲閾惧悇鐜妭鏀堕泦鏁版嵁锛屽熀浜庢繁搴﹀涔犱笌閲忓瓙鍚彂绠楁硶瀹炵幇绔埌绔殑鏅鸿兘鍐崇瓥涓庝紭鍖�
+        </p>
+      </motion.div>
+      
+      <motion.div
+        initial={{ opacity: 0 }}
+        whileInView={{ opacity: 1 }}
+        viewport={{ once: false, margin: "-100px" }}
+        transition={{ duration: 1, ease: "easeOut" }}
+        className="relative h-[450px] w-full backdrop-blur-sm bg-white/5 rounded-xl border border-[#6ADBFF]/20 overflow-hidden"
+      >
+        <canvas 
+          ref={canvasRef} 
+          className="absolute inset-0 w-full h-full"
+        />
+        
+        <div className="absolute bottom-0 left-0 right-0 flex justify-center gap-6 p-6 bg-gradient-to-t from-[#0A1033]/90 to-transparent">
+          <motion.div
+            initial={{ opacity: 0, y: 20 }}
+            whileInView={{ opacity: 1, y: 0 }}
+            viewport={{ once: false }}
+            transition={{ duration: 0.7, delay: 0.2 }}
+            className="backdrop-blur-sm bg-white/5 rounded-lg p-4 border border-[#6ADBFF]/20 w-[30%]"
+          >
+            <h3 className="text-lg font-semibold text-[#6ADBFF] mb-2">鍔ㄦ�佸搷搴�</h3>
+            <p className="text-gray-300 text-sm">瀹炴椂鎰熺煡渚涘簲閾惧彉鍖栵紝鏅鸿兘璋冩暣鐢熶骇璁″垝锛屾彁鍗�40%鍝嶅簲閫熷害</p>
+          </motion.div>
+          
+          <motion.div
+            initial={{ opacity: 0, y: 20 }}
+            whileInView={{ opacity: 1, y: 0 }}
+            viewport={{ once: false }}
+            transition={{ duration: 0.7, delay: 0.3 }}
+            className="backdrop-blur-sm bg-white/5 rounded-lg p-4 border border-[#5E72EB]/20 w-[30%]"
+          >
+            <h3 className="text-lg font-semibold text-[#5E72EB] mb-2">棰勬祴浼樺寲</h3>
+            <p className="text-gray-300 text-sm">鍩轰簬娣卞害瀛︿範棰勬祴甯傚満闇�姹傦紝闄嶄綆25%搴撳瓨鎴愭湰锛屾彁楂樼墿鏂欏埄鐢ㄧ巼</p>
+          </motion.div>
+          
+          <motion.div
+            initial={{ opacity: 0, y: 20 }}
+            whileInView={{ opacity: 1, y: 0 }}
+            viewport={{ once: false }}
+            transition={{ duration: 0.7, delay: 0.4 }}
+            className="backdrop-blur-sm bg-white/5 rounded-lg p-4 border border-[#FF6A88]/20 w-[30%]"
+          >
+            <h3 className="text-lg font-semibold text-[#FF6A88] mb-2">澶氱淮鍐崇瓥</h3>
+            <p className="text-gray-300 text-sm">骞宠 鎴愭湰銆佷氦鏈熴�佽川閲忓缁寸洰鏍囷紝瀹炵幇鐪熸鍏ㄥ眬鏈�浼樿В</p>
+          </motion.div>
+        </div>
+      </motion.div>
+    </div>
+  );
+} 
\ No newline at end of file

--
Gitblit v1.9.3