个人中心全部,模糊乱序搜索,类型筛选

Change-Id: Id635654fccccaea80bfbf4d1480abd55f7d12046
diff --git a/src/components/Personal/Setting.jsx b/src/components/Personal/Setting.jsx
index 967be6c..9ba07e8 100644
--- a/src/components/Personal/Setting.jsx
+++ b/src/components/Personal/Setting.jsx
@@ -1,97 +1,161 @@
-import React, { useState } from 'react';

-import { useNavigate,useLocation } from 'react-router-dom';

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

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

+import { getUserInfo, updatePassword } from '../../api/personal';

 import './personalSubpage.css';

 

 const Setting = ({ onLogout }) => {

   const navigate = useNavigate();

   const location = useLocation();

-  // 模拟数据

-  const [formData, setFormData] = useState({

-    username: 'user123',

-    email: 'user@example.com',

-    notification: true

+  const [userInfo, setUserInfo] = useState(null);

+  const [loading, setLoading] = useState(false);

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

+  const [success, setSuccess] = useState(null);

+  const [passwordForm, setPasswordForm] = useState({

+    oldPassword: '',

+    newPassword: '',

+    confirmPassword: ''

   });

 

-  const handleChange = (e) => {

-    const { name, value, type, checked } = e.target;

-    setFormData(prev => ({

+  // 获取用户信息

+  useEffect(() => {

+    const fetchUserInfo = async () => {

+      try {

+        const info = await getUserInfo();

+        setUserInfo(info);

+      } catch (err) {

+        console.error('获取用户信息失败:', err);

+      }

+    };

+    fetchUserInfo();

+  }, []);

+

+  const handleBack = () => {

+    navigate('/personal', { 

+      state: { 

+        fromSubpage: true,

+        dashboardTab: location.state?.dashboardTab

+      },

+      replace: true

+    });

+  };

+

+  const handlePasswordChange = (e) => {

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

+    setPasswordForm(prev => ({

       ...prev,

-      [name]: type === 'checkbox' ? checked : value

+      [name]: value

     }));

   };

 

-  const handleSubmit = (e) => {

+  const handlePasswordSubmit = async (e) => {

     e.preventDefault();

-    alert('设置已保存');

-  };

+    setError(null);

+    setSuccess(null);

 

-  const handleBack = () => {

-    // 返回个人中心,并携带来源标记

-    navigate('/personal', { 

-      state: { 

-        fromSubpage: true,  // 标记来自子页面

-        dashboardTab: location.state?.dashboardTab // 保留Dashboard的标签页状态

-      },

-      replace: true  // 替换当前历史记录

-    });

+    // 验证表单

+    if (!passwordForm.oldPassword || !passwordForm.newPassword || !passwordForm.confirmPassword) {

+      setError('请填写所有密码字段');

+      return;

+    }

+

+    if (passwordForm.newPassword !== passwordForm.confirmPassword) {

+      setError('新密码与确认密码不一致');

+      return;

+    }

+

+    if (passwordForm.newPassword.length < 6) {

+      setError('新密码长度至少为6位');

+      return;

+    }

+

+    try {

+      setLoading(true);

+      await updatePassword(passwordForm.oldPassword, passwordForm.newPassword);

+      setSuccess('密码修改成功');

+      setPasswordForm({

+        oldPassword: '',

+        newPassword: '',

+        confirmPassword: ''

+      });

+    } catch (err) {

+      setError(err.message || '修改密码失败');

+    } finally {

+      setLoading(false);

+    }

   };

 

   return (

     <div className="subpage-container">

-      <button className="back-button" onClick={(handleBack)}>

+      <button className="back-button" onClick={handleBack}>

         ← 返回个人中心

       </button>

 

-      <h2 className="page-title">账号设置</h2>

-      

-      <form onSubmit={handleSubmit}>

-        <div className="form-group">

-          <label className="form-label">用户名</label>

-          <input

-            type="text"

-            name="username"

-            value={formData.username}

-            onChange={handleChange}

-            className="form-input"

-          />

+      <h2 className="page-title">个人设置</h2>

+

+      <div className="setting-section">

+        <div className="user-info-card">

+          <h3>账户信息</h3>

+          <div className="info-item">

+            <label>用户名:</label>

+            <span>{userInfo?.username || '加载中...'}</span>

+          </div>

+          <p className="info-note">用户名不可更改</p>

         </div>

 

-        <div className="form-group">

-          <label className="form-label">电子邮箱</label>

-          <input

-            type="email"

-            name="email"

-            value={formData.email}

-            onChange={handleChange}

-            className="form-input"

-          />

-        </div>

+        <div className="password-form-card">

+          <h3>修改密码</h3>

+          <form onSubmit={handlePasswordSubmit}>

+            <div className="form-group">

+              <label htmlFor="oldPassword">原密码:</label>

+              <input

+                type="password"

+                id="oldPassword"

+                name="oldPassword"

+                value={passwordForm.oldPassword}

+                onChange={handlePasswordChange}

+                required

+              />

+            </div>

 

-        <div className="form-group">

-          <label className="form-label">

-            <input

-              type="checkbox"

-              name="notification"

-              checked={formData.notification}

-              onChange={handleChange}

-            />

-            接收邮件通知

-          </label>

-        </div>

+            <div className="form-group">

+              <label htmlFor="newPassword">新密码:</label>

+              <input

+                type="password"

+                id="newPassword"

+                name="newPassword"

+                value={passwordForm.newPassword}

+                onChange={handlePasswordChange}

+                required

+                minLength="6"

+              />

+            </div>

 

-        <div className="form-actions">

-          <button type="submit" className="action-btn">

-            保存设置

-          </button>

-          <button 

-            type="button" 

-            className="action-btn danger-btn"

-            onClick={onLogout}

-          >

-            退出登录

-          </button>

+            <div className="form-group">

+              <label htmlFor="confirmPassword">确认新密码:</label>

+              <input

+                type="password"

+                id="confirmPassword"

+                name="confirmPassword"

+                value={passwordForm.confirmPassword}

+                onChange={handlePasswordChange}

+                required

+                minLength="6"

+              />

+            </div>

+

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

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

+

+            <button 

+              type="submit" 

+              className="submit-button"

+              disabled={loading}

+            >

+              {loading ? '处理中...' : '修改密码'}

+            </button>

+          </form>

         </div>

-      </form>

+      </div>

     </div>

   );

 };