前段

Change-Id: I718d4d07ea03c6d2b6bcbd4d426c5d1af2201bf4
diff --git a/src/components/AuthForm.jsx b/src/components/AuthForm.jsx
new file mode 100644
index 0000000..ca28101
--- /dev/null
+++ b/src/components/AuthForm.jsx
@@ -0,0 +1,159 @@
+// src/components/AuthForm.jsx

+import React, { useState } from 'react';

+import { useNavigate } from 'react-router-dom';

+import { login, register } from '../api/auth';

+import './AuthForm.css';

+

+const AuthForm = ({ onLoginSuccess }) => {

+  const [isLogin, setIsLogin] = useState(true);

+  const [formData, setFormData] = useState({

+    username: '',

+    password: '',

+    code: ''

+  });

+  const [error, setError] = useState('');

+  const [isLoading, setIsLoading] = useState(false);

+  const navigate = useNavigate();

+

+  const handleChange = (e) => {

+    const { name, value } = e.target;

+    setFormData(prev => ({ ...prev, [name]: value }));

+  };

+

+  const handleSubmit = async (e) => {

+    e.preventDefault();

+    

+    try {

+      if (isLogin) {

+            const response = await login(formData.username, formData.password);

+            if (response.data.code === 200) {

+              localStorage.setItem('token', response.data.data.token);

+              localStorage.setItem('username', formData.username);

+              onLoginSuccess?.();

+              navigate('/dashboard');

+            } else {

+              setError(response.data.message || '登录失败');

+            }

+          } else {

+            const response = await register(

+              formData.username,

+              formData.password,

+              formData.code

+            );

+            if (response.data.code === 200) {

+              setError('');

+              setIsLogin(true);

+              setFormData({ username: '', password: '', code: '' });

+            } else {

+              setError(response.data.message || '注册失败');

+            }

+          }

+        } catch (err) {

+          setError(err.message || (isLogin ? '登录失败' : '注册失败'));

+        } finally {

+          setIsLoading(false);

+        }

+      

+

+      

+  };

+

+  return (

+    <div className="auth-container">

+      <h1 className="auth-title">PT影视资源站</h1>

+      

+      <div className="auth-form-wrapper">

+        {isLogin ? (

+          <form className="auth-form" onSubmit={handleSubmit}>

+            <h2>用户登录</h2>

+            {error && <div className="error-message">{error}</div>}

+            

+            <div className="form-group">

+              <input

+                type="text"

+                name="username"

+                placeholder="账号"

+                value={formData.username}

+                onChange={handleChange}

+                required

+              />

+            </div>

+            

+            <div className="form-group">

+              <input

+                type="password"

+                name="password"

+                placeholder="密码"

+                value={formData.password}

+                onChange={handleChange}

+                required

+              />

+            </div>

+            

+            <button type="submit" className="auth-button" disabled={isLoading}>

+              {isLoading ? '登录中...' : '登录'}

+            </button>

+            

+            <div className="auth-switch">

+              <span>未有账户?</span>

+              <button type="button" onClick={() => setIsLogin(false)} className="switch-button">

+                去注册

+              </button>

+            </div>

+          </form>

+        ) : (

+          <form className="auth-form" onSubmit={handleSubmit}>

+            <h2>用户注册</h2>

+            {error && <div className="error-message">{error}</div>}

+            

+            <div className="form-group">

+              <input

+                type="text"

+                name="username"

+                placeholder="账号"

+                value={formData.username}

+                onChange={handleChange}

+                required

+              />

+            </div>

+            

+            <div className="form-group">

+              <input

+                type="password"

+                name="password"

+                placeholder="密码"

+                value={formData.password}

+                onChange={handleChange}

+                required

+              />

+            </div>

+            

+            <div className="form-group">

+              <input

+                type="text"

+                name="code"

+                placeholder="邀请码"

+                value={formData.code}

+                onChange={handleChange}

+                required

+              />

+            </div>

+            

+            <button type="submit" className="auth-button" disabled={isLoading}>

+              {isLoading ? '注册中...' : '注册'}

+            </button>

+            

+            <div className="auth-switch">

+              <span>已有账户?</span>

+              <button type="button" onClick={() => setIsLogin(true)} className="switch-button">

+                去登录

+              </button>

+            </div>

+          </form>

+        )}

+      </div>

+    </div>

+  );

+};

+

+export default AuthForm;
\ No newline at end of file