From e113f64857a16d661c973f0c35f9604f5b4ec24a Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期二, 08 四月 2025 14:12:31 +0800
Subject: [PATCH] 新建注册页面

---
 src/app/register/page.tsx                     |  350 +++++++++++++++++++++++++++++++++++++++++++
 src/app/login/page.tsx                        |   33 ++-
 src/app/globals.css                           |   38 ++++
 src/components/layout/ClientLayoutContent.tsx |   10 
 4 files changed, 412 insertions(+), 19 deletions(-)

diff --git a/src/app/globals.css b/src/app/globals.css
index 8ce8f4c..99b4d1c 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -806,3 +806,41 @@
 .animate-shine {
   animation: shine 1.5s ease-in-out;
 }
+
+/* 椤甸潰娓愬叆鏁堟灉浼樺寲 */
+@keyframes fadeIn {
+  from { opacity: 0; transform: translateY(10px); }
+  to { opacity: 1; transform: translateY(0); }
+}
+
+@keyframes pageTransition {
+  0% { opacity: 0; transform: translateY(10px); }
+  100% { opacity: 1; transform: translateY(0); }
+}
+
+/* 娣诲姞鍏ㄥ眬杩囨浮鏁堟灉 */
+.page-transition-enter {
+  opacity: 0;
+  transform: translateY(10px);
+}
+
+.page-transition-enter-active {
+  opacity: 1;
+  transform: translateY(0);
+  transition: opacity 300ms, transform 300ms;
+}
+
+/* 浼樺寲鍏ㄥ眬鍔ㄧ敾鎬ц兘 */
+.animate-fadeIn {
+  animation: fadeIn 300ms cubic-bezier(0.25, 0.1, 0.25, 1) forwards;
+  will-change: opacity, transform;
+  backface-visibility: hidden;
+}
+
+/* 浣跨敤GPU鍔犻�熸敼鍠勬�ц兘 */
+.gpu-accelerated {
+  transform: translateZ(0);
+  backface-visibility: hidden;
+  perspective: 1000;
+  will-change: transform, opacity;
+}
diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx
index 824f5f4..1d13b83 100644
--- a/src/app/login/page.tsx
+++ b/src/app/login/page.tsx
@@ -16,7 +16,12 @@
 
   // 纭繚缁勪欢鎸傝浇鍚庡啀鏄剧ず鍔ㄧ敾鏁堟灉
   useEffect(() => {
-    setMounted(true);
+    // 浣跨敤 requestAnimationFrame 纭繚鍦ㄤ笅涓�甯ф墽琛岋紝鎻愰珮鍔ㄧ敾娴佺晠搴�
+    const animationFrame = requestAnimationFrame(() => {
+      setMounted(true);
+    });
+    
+    return () => cancelAnimationFrame(animationFrame);
   }, []);
   
   const handleSubmit = (e: React.FormEvent) => {
@@ -65,8 +70,12 @@
       <motion.div 
         initial={{ opacity: 0, y: 20 }}
         animate={{ opacity: mounted ? 1 : 0, y: mounted ? 0 : 20 }}
-        transition={{ duration: 0.8, ease: "easeOut" }}
-        className="relative z-10 w-full max-w-3xl flex rounded-2xl backdrop-blur-lg bg-[#1E2B63]/40 border border-[#6ADBFF]/20 shadow-xl overflow-hidden"
+        transition={{ 
+          duration: 0.5, 
+          ease: [0.25, 0.1, 0.25, 1],
+          staggerChildren: 0.1
+        }}
+        className="relative z-10 w-full max-w-3xl flex rounded-2xl backdrop-blur-lg bg-[#1E2B63]/40 border border-[#6ADBFF]/20 shadow-xl overflow-hidden gpu-accelerated"
       >
         {/* 鍗$墖鍐呴儴瑁呴グ */}
         <div className="absolute top-0 left-0 w-full h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/50 to-transparent"></div>
@@ -433,19 +442,13 @@
             </button>
           </div>
           
-          {/* 娉ㄥ唽閾炬帴 */}
-          <div className="mt-4 text-center">
-            <p className="text-xs text-white/70">
-              杩樻病鏈夊笎鍙�? 
-              <motion.a 
-                href="#" 
-                className="ml-1 text-[#6ADBFF] hover:text-[#6ADBFF] transition-colors duration-200 relative group"
-                whileHover={{ scale: 1.03 }}
-                whileTap={{ scale: 0.97 }}
-              >
+          {/* 鍙充晶鐧诲綍琛ㄥ崟搴曢儴 - 娣诲姞娉ㄥ唽閾炬帴 */}
+          <div className="mt-6 text-center">
+            <p className="text-white/70 text-sm">
+              杩樻病鏈夎处鍙凤紵 
+              <Link href="/register" className="text-[#6ADBFF] hover:text-[#FF6A88] ml-1 transition-colors duration-300">
                 绔嬪嵆娉ㄥ唽
-                <span className="absolute -bottom-0.5 left-0 w-0 h-[1px] bg-[#6ADBFF] group-hover:w-full transition-all duration-300 ease-out"></span>
-              </motion.a>
+              </Link>
             </p>
           </div>
         </div>
diff --git a/src/app/register/page.tsx b/src/app/register/page.tsx
new file mode 100644
index 0000000..9ea91e1
--- /dev/null
+++ b/src/app/register/page.tsx
@@ -0,0 +1,350 @@
+"use client";
+
+import { useState, useEffect } from 'react';
+import Image from 'next/image';
+import { motion } from 'framer-motion';
+import Link from 'next/link';
+
+export default function RegisterPage() {
+  const [username, setUsername] = useState('');
+  const [password, setPassword] = useState('');
+  const [confirmPassword, setConfirmPassword] = useState('');
+  const [phone, setPhone] = useState('');
+  const [verifyCode, setVerifyCode] = useState('');
+  const [isLoading, setIsLoading] = useState(false);
+  const [mounted, setMounted] = useState(false);
+  const [countdown, setCountdown] = useState(0);
+  
+  // 鍊掕鏃堕�昏緫
+  useEffect(() => {
+    if (countdown > 0) {
+      const timer = setTimeout(() => setCountdown(countdown - 1), 1000);
+      return () => clearTimeout(timer);
+    }
+  }, [countdown]);
+
+  // 纭繚缁勪欢鎸傝浇鍚庡啀鏄剧ず鍔ㄧ敾鏁堟灉
+  useEffect(() => {
+    // 浣跨敤 requestAnimationFrame 纭繚鍦ㄤ笅涓�甯ф墽琛岋紝鎻愰珮鍔ㄧ敾娴佺晠搴�
+    const animationFrame = requestAnimationFrame(() => {
+      setMounted(true);
+    });
+    
+    return () => cancelAnimationFrame(animationFrame);
+  }, []);
+  
+  const sendVerifyCode = () => {
+    if (countdown > 0 || !phone || phone.length !== 11) return;
+    
+    // 妯℃嫙鍙戦�侀獙璇佺爜
+    setCountdown(60);
+    // 杩欓噷搴旇娣诲姞瀹為檯鍙戦�侀獙璇佺爜鐨勯�昏緫
+  };
+  
+  const handleSubmit = (e: React.FormEvent) => {
+    e.preventDefault();
+    
+    // 琛ㄥ崟楠岃瘉
+    if (!username || !password || !confirmPassword || !phone || !verifyCode) {
+      alert("璇峰~鍐欐墍鏈夊繀濉瓧娈�");
+      return;
+    }
+    
+    if (password !== confirmPassword) {
+      alert("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�");
+      return;
+    }
+    
+    setIsLoading(true);
+    
+    // 妯℃嫙娉ㄥ唽璇锋眰
+    setTimeout(() => {
+      setIsLoading(false);
+      // 杩欓噷搴旇娣诲姞瀹為檯娉ㄥ唽閫昏緫
+      alert("娉ㄥ唽鎴愬姛锛屽嵆灏嗚烦杞埌鐧诲綍椤�");
+      // 娉ㄥ唽鎴愬姛鍚庤烦杞埌鐧诲綍椤�
+      window.location.href = "/login";
+    }, 2000);
+  };
+
+  return (
+    <div className="h-screen w-full flex items-center justify-center relative overflow-hidden">
+      {/* 鑳屾櫙鏁堟灉 */}
+      <div className="fixed inset-0 bg-gradient-to-br from-[#0A1033] via-[#1E2B63] to-[#131C41] z-0"></div>
+      
+      {/* 绁炵粡缃戠粶绾挎潯鑳屾櫙 */}
+      <div className="fixed inset-0 z-0 opacity-30">
+        <div className="absolute top-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/70 to-transparent"></div>
+        <div className="absolute bottom-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/70 to-transparent"></div>
+        <div className="absolute top-0 bottom-0 left-0 w-[1px] bg-gradient-to-b from-transparent via-[#6ADBFF]/70 to-transparent"></div>
+        <div className="absolute top-0 bottom-0 right-0 w-[1px] bg-gradient-to-b from-transparent via-[#6ADBFF]/70 to-transparent"></div>
+        
+        {/* 绁炵粡缃戠粶杩炴帴鐐� */}
+        <div className="absolute top-[20%] left-[15%] w-1.5 h-1.5 rounded-full bg-[#6ADBFF]/80 animate-pulse"></div>
+        <div className="absolute top-[60%] left-[75%] w-1.5 h-1.5 rounded-full bg-[#6ADBFF]/80 animate-pulse" style={{ animationDelay: '1.5s' }}></div>
+        
+        {/* 杩炴帴绾� */}
+        <div className="absolute top-[20%] left-[15%] w-[70%] h-[1px] bg-gradient-to-r from-[#6ADBFF]/80 to-transparent animate-pulse"></div>
+        
+        {/* 鏁版嵁鐐硅儗鏅� */}
+        <div className="absolute inset-0" style={{ 
+          backgroundImage: 'radial-gradient(circle, rgba(106, 219, 255, 0.15) 1px, transparent 1px)', 
+          backgroundSize: '20px 20px' 
+        }}></div>
+        
+        {/* 鎵弿绾� */}
+        <div className="absolute inset-0">
+          <div className="absolute top-0 left-0 w-full h-full bg-gradient-to-b from-transparent via-[#6ADBFF]/5 to-transparent animate-scanline" style={{ animationDuration: '12s' }}></div>
+        </div>
+      </div>
+
+      {/* 娉ㄥ唽鍗$墖 */}
+      <motion.div 
+        initial={{ opacity: 0, y: 20 }}
+        animate={{ opacity: mounted ? 1 : 0, y: mounted ? 0 : 20 }}
+        transition={{ 
+          duration: 0.5, 
+          ease: [0.25, 0.1, 0.25, 1],
+          staggerChildren: 0.1
+        }}
+        className="relative z-10 w-full max-w-3xl flex rounded-2xl backdrop-blur-lg bg-[#1E2B63]/40 border border-[#6ADBFF]/20 shadow-xl overflow-hidden gpu-accelerated"
+      >
+        {/* 鍗$墖鍐呴儴瑁呴グ */}
+        <div className="absolute top-0 left-0 w-full h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/50 to-transparent"></div>
+        <div className="absolute top-0 bottom-0 right-0 w-[1px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent"></div>
+        <div className="absolute bottom-0 left-0 w-full h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/50 to-transparent"></div>
+        <div className="absolute top-0 bottom-0 left-0 w-[1px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent"></div>
+        
+        {/* 宸︿晶Logo鍜屽叕鍙稿悕 */}
+        <div className="w-2/5 bg-[#131C41]/60 p-8 flex flex-col items-center justify-between">
+          {/* Logo鍜屽叕鍙稿悕閮ㄥ垎 */}
+          <div className="w-full flex flex-col items-center justify-start">
+            <div className="mb-4 relative overflow-visible">
+              <Link href="/" className="group flex items-center relative">
+                <div className="relative w-16 h-16 transition-all duration-500 overflow-visible" style={{ isolation: 'isolate' }}>
+                  {/* 鍩虹鑳屾櫙鍦� */}
+                  <div className="absolute inset-0 rounded-full bg-[#131C41] z-10"></div>
+                  
+                  {/* Logo鑳屾櫙鍏夌幆 */}
+                  <div className="absolute inset-0 rounded-full border-2 border-[#6ADBFF]/70 animate-logo-pulse z-10"></div>
+                  
+                  {/* 搴曞眰鍏夋檿鏁堟灉 */}
+                  <div className="absolute -inset-2 rounded-full bg-[#6ADBFF]/10 blur-lg animate-pulse z-0"></div>
+                  
+                  {/* Logo */}
+                  <Image
+                    src="/images/logo.jpg"
+                    alt="甯峰箘鍚涙垚Logo"
+                    width={64}
+                    height={64}
+                    className="rounded-full object-cover relative z-30"
+                    style={{ display: 'block', objectFit: 'cover', width: '100%', height: '100%' }}
+                    priority
+                  />
+                  
+                  {/* 鎮仠鐗规晥瀹瑰櫒 */}
+                  <div className="absolute inset-0 rounded-full z-20 overflow-hidden pointer-events-none">
+                    {/* 鎮仠鏃剁殑鎵弿绾� */}
+                    <div className="absolute inset-0 rounded-full overflow-hidden opacity-0 group-hover:opacity-100 transition-opacity duration-500">
+                      <div className="absolute top-0 -left-[100%] right-0 h-[2px] group-hover:left-full w-full bg-gradient-to-r from-transparent via-[#6ADBFF] to-transparent transition-all duration-1500 ease-in-out"></div>
+                      <div className="absolute bottom-0 left-full right-0 h-[2px] group-hover:left-[-100%] w-full bg-gradient-to-r from-transparent via-[#6ADBFF] to-transparent transition-all duration-1500 ease-in-out delay-200"></div>
+                    </div>
+                    
+                    {/* 鎮仠鏃剁殑閲忓瓙鏁版嵁娴佹晥鏋� */}
+                    <div className="absolute inset-0 rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-500">
+                      <div className="w-[1px] h-0 group-hover:h-full bg-gradient-to-b from-transparent via-[#6ADBFF]/70 to-transparent transition-all duration-700 delay-300"></div>
+                      <div className="h-[1px] w-0 group-hover:w-full bg-gradient-to-r from-transparent via-[#6ADBFF]/70 to-transparent transition-all duration-700 delay-400"></div>
+                    </div>
+                  </div>
+                </div>
+                
+                <div className="ml-4 relative z-0 transition-transform duration-500">
+                  <h1 className="text-2xl font-bold text-white mb-1 relative inline-block group-hover:text-[#6ADBFF] transition-colors duration-500">
+                    甯峰箘鍚涙垚
+                    <span className="absolute -bottom-1 left-0 w-full h-[2px] bg-gradient-to-r from-[#FF6A88] to-[#6ADBFF] group-hover:animate-pulse"></span>
+                  </h1>
+                  
+                  <p className="text-[#6ADBFF]/80 text-xs group-hover:text-[#6ADBFF] transition-colors duration-500">AI鍦烘櫙妯℃嫙骞冲彴 路 鏅烘収璧嬭兘鏈潵</p>
+                </div>
+              </Link>
+            </div>
+            
+            {/* 鍒嗛殧绾� */}
+            <div className="w-full border-t border-[#6ADBFF]/20 my-3"></div>
+          </div>
+          
+          {/* 宸︿晶淇℃伅鍐呭 */}
+          <div className="w-full flex-1 flex flex-col justify-center space-y-6">
+            <div className="text-center">
+              <h2 className="text-lg font-semibold text-[#6ADBFF] mb-2">宸叉湁璐﹀彿?</h2>
+              <Link href="/login" className="text-white hover:text-[#6ADBFF] transition-colors duration-300 px-6 py-2 border border-[#6ADBFF]/30 rounded-full inline-block relative group">
+                <span className="relative z-10">绔嬪嵆鐧诲綍</span>
+                <div className="absolute inset-0 rounded-full opacity-0 group-hover:opacity-100 bg-gradient-to-r from-[#6ADBFF]/10 to-[#5E72EB]/10 transition-opacity duration-300"></div>
+                <div className="absolute top-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/30 to-transparent"></div>
+                <div className="absolute bottom-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/30 to-transparent"></div>
+              </Link>
+            </div>
+            
+            <div className="text-white/70 text-sm space-y-3">
+              <div className="flex items-center">
+                <div className="w-2 h-2 rounded-full bg-[#6ADBFF]/50 mr-2"></div>
+                <p>閫氳繃娉ㄥ唽鑾峰彇瀹屾暣骞冲彴鍔熻兘</p>
+              </div>
+              <div className="flex items-center">
+                <div className="w-2 h-2 rounded-full bg-[#6ADBFF]/50 mr-2"></div>
+                <p>浜彈AI鏅鸿兘鍒嗘瀽涓庡満鏅ā鎷�</p>
+              </div>
+              <div className="flex items-center">
+                <div className="w-2 h-2 rounded-full bg-[#6ADBFF]/50 mr-2"></div>
+                <p>瀹夊叏鍙潬鐨勬暟鎹繚闅滄満鍒�</p>
+              </div>
+            </div>
+          </div>
+          
+          {/* 宸︿晶瑁呴グ鐐� */}
+          <div className="absolute bottom-4 left-4">
+            <div className="relative w-2 h-2">
+              <div className="absolute inset-0 rounded-full bg-[#6ADBFF]/30 animate-pulse"></div>
+              <div className="absolute inset-[2px] rounded-full bg-[#6ADBFF]/50"></div>
+            </div>
+          </div>
+        </div>
+        
+        {/* 鍙充晶娉ㄥ唽琛ㄥ崟 */}
+        <div className="w-3/5 p-8">
+          <div className="mb-6">
+            <h2 className="text-xl font-semibold text-white mb-2">鏂扮敤鎴锋敞鍐�</h2>
+            <p className="text-[#6ADBFF]/80 text-sm">娆㈣繋鍔犲叆甯峰箘鍚涙垚锛岃濉啓浠ヤ笅淇℃伅瀹屾垚娉ㄥ唽</p>
+          </div>
+          
+          {/* 娉ㄥ唽琛ㄥ崟 */}
+          <form onSubmit={handleSubmit} className="space-y-4">
+            {/* 鐢ㄦ埛鍚� */}
+            <div className="space-y-1">
+              <label className="block text-xs text-[#6ADBFF]/80 mb-1">鐢ㄦ埛鍚�</label>
+              <div className="relative group">
+                <input
+                  type="text"
+                  value={username}
+                  onChange={(e) => setUsername(e.target.value)}
+                  className="w-full px-4 py-2 bg-[#131C41]/70 border border-[#6ADBFF]/30 rounded-lg text-white focus:outline-none focus:border-[#6ADBFF]/70 transition-all"
+                  required
+                />
+                <div className="absolute top-0 bottom-0 left-0 w-[2px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
+              </div>
+            </div>
+            
+            {/* 瀵嗙爜 */}
+            <div className="space-y-1">
+              <label className="block text-xs text-[#6ADBFF]/80 mb-1">瀵嗙爜</label>
+              <div className="relative group">
+                <input
+                  type="password"
+                  value={password}
+                  onChange={(e) => setPassword(e.target.value)}
+                  className="w-full px-4 py-2 bg-[#131C41]/70 border border-[#6ADBFF]/30 rounded-lg text-white focus:outline-none focus:border-[#6ADBFF]/70 transition-all"
+                  required
+                />
+                <div className="absolute top-0 bottom-0 left-0 w-[2px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
+              </div>
+            </div>
+            
+            {/* 纭瀵嗙爜 */}
+            <div className="space-y-1">
+              <label className="block text-xs text-[#6ADBFF]/80 mb-1">纭瀵嗙爜</label>
+              <div className="relative group">
+                <input
+                  type="password"
+                  value={confirmPassword}
+                  onChange={(e) => setConfirmPassword(e.target.value)}
+                  className="w-full px-4 py-2 bg-[#131C41]/70 border border-[#6ADBFF]/30 rounded-lg text-white focus:outline-none focus:border-[#6ADBFF]/70 transition-all"
+                  required
+                />
+                <div className="absolute top-0 bottom-0 left-0 w-[2px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
+              </div>
+            </div>
+            
+            {/* 鎵嬫満鍙风爜 */}
+            <div className="space-y-1">
+              <label className="block text-xs text-[#6ADBFF]/80 mb-1">鎵嬫満鍙风爜</label>
+              <div className="relative group">
+                <input
+                  type="tel"
+                  value={phone}
+                  onChange={(e) => setPhone(e.target.value)}
+                  className="w-full px-4 py-2 bg-[#131C41]/70 border border-[#6ADBFF]/30 rounded-lg text-white focus:outline-none focus:border-[#6ADBFF]/70 transition-all"
+                  pattern="[0-9]{11}"
+                  required
+                />
+                <div className="absolute top-0 bottom-0 left-0 w-[2px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
+              </div>
+            </div>
+            
+            {/* 楠岃瘉鐮� */}
+            <div className="space-y-1">
+              <label className="block text-xs text-[#6ADBFF]/80 mb-1">楠岃瘉鐮�</label>
+              <div className="flex space-x-2">
+                <div className="relative group flex-1">
+                  <input
+                    type="text"
+                    value={verifyCode}
+                    onChange={(e) => setVerifyCode(e.target.value)}
+                    className="w-full px-4 py-2 bg-[#131C41]/70 border border-[#6ADBFF]/30 rounded-lg text-white focus:outline-none focus:border-[#6ADBFF]/70 transition-all"
+                    required
+                  />
+                  <div className="absolute top-0 bottom-0 left-0 w-[2px] bg-gradient-to-b from-transparent via-[#6ADBFF]/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
+                </div>
+                <button
+                  type="button"
+                  onClick={sendVerifyCode}
+                  disabled={countdown > 0 || !phone || phone.length !== 11}
+                  className={`px-4 py-2 rounded-lg border text-sm transition-all duration-300 whitespace-nowrap ${
+                    countdown > 0 || !phone || phone.length !== 11
+                      ? 'border-[#6ADBFF]/20 text-[#6ADBFF]/40 bg-[#131C41]/20 cursor-not-allowed'
+                      : 'border-[#6ADBFF]/40 text-[#6ADBFF] bg-[#131C41]/40 hover:bg-[#131C41]/70 hover:border-[#6ADBFF]/60'
+                  }`}
+                >
+                  {countdown > 0 ? `${countdown}绉掑悗閲嶈瘯` : '鑾峰彇楠岃瘉鐮�'}
+                </button>
+              </div>
+            </div>
+            
+            {/* 闅愮澹版槑 */}
+            <div className="text-xs text-white/60 mt-4">
+              娉ㄥ唽鍗宠〃绀烘偍鍚屾剰甯峰箘鍚涙垚鐨�
+              <span className="text-[#6ADBFF] cursor-pointer hover:underline mx-1">鏈嶅姟鏉℃</span>
+              鍜�
+              <span className="text-[#6ADBFF] cursor-pointer hover:underline ml-1">闅愮鏀跨瓥</span>
+            </div>
+            
+            {/* 娉ㄥ唽鎸夐挳 */}
+            <div className="mt-6">
+              <button
+                type="submit"
+                disabled={isLoading}
+                className="w-full relative overflow-hidden px-6 py-3 rounded-lg bg-gradient-to-r from-[#5E72EB] to-[#6ADBFF] text-white font-medium shadow-lg group"
+              >
+                <span className="relative z-10">
+                  {isLoading ? (
+                    <span className="flex items-center justify-center">
+                      <svg className="animate-spin -ml-1 mr-2 h-4 w-4 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
+                        <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle>
+                        <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
+                      </svg>
+                      娉ㄥ唽涓�...
+                    </span>
+                  ) : (
+                    '绔嬪嵆娉ㄥ唽'
+                  )}
+                </span>
+                <div className="absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300">
+                  <div className="h-full w-[1px] bg-white/20 transform rotate-[20deg] translate-x-[-30px] group-hover:translate-x-[350px] transition-all duration-1000"></div>
+                </div>
+              </button>
+            </div>
+          </form>
+        </div>
+      </motion.div>
+    </div>
+  );
+} 
\ No newline at end of file
diff --git a/src/components/layout/ClientLayoutContent.tsx b/src/components/layout/ClientLayoutContent.tsx
index 03d308b..ff207d0 100644
--- a/src/components/layout/ClientLayoutContent.tsx
+++ b/src/components/layout/ClientLayoutContent.tsx
@@ -13,6 +13,7 @@
   const [hasError, setHasError] = useState(false);
   const pathname = usePathname();
   const isLoginPage = pathname === '/login';
+  const isRegisterPage = pathname === '/register';
   const isHomePage = pathname === '/';
   const isAIScenePage = pathname.startsWith('/ai-scene');
 
@@ -58,13 +59,14 @@
     // 瀹㈡埛绔覆鏌撳悗鏄剧ず瀹屾暣鍐呭
     try {
       return (
-        <div className="animate-fadeIn">
+        <div className="animate-fadeIn" style={{ animationDuration: '300ms' }}>
           <div className="flex flex-col min-h-screen">
-            {!isLoginPage && <Navbar />}
-            <main className={`flex-1 ${isHomePage || isAIScenePage ? '' : 'bg-gradient-to-b from-[var(--ai-surface)] to-white'} pt-0 mt-0`}>
+            {!isLoginPage && !isRegisterPage && <Navbar />}
+            <main className={`flex-1 ${isHomePage || isAIScenePage ? '' : 'bg-gradient-to-b from-[var(--ai-surface)] to-white'} pt-0 mt-0`}
+                  style={{ willChange: 'transform, opacity' }}>
               {children}
             </main>
-            {!isLoginPage && (
+            {!isLoginPage && !isRegisterPage && (
               <footer className="relative z-20 bg-gradient-to-br from-[#0A1033] via-[#1E2B63] to-[#131C41] text-white py-10 overflow-hidden">
                 {/* 绉戞妧鎰熷姩鎬佽儗鏅厓绱� */}
                 <div className="absolute inset-0 overflow-hidden pointer-events-none">

--
Gitblit v1.9.3