blob: 9ba07e80056486acf57371a69f8f3b56d9e1b20b [file] [log] [blame]
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 [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: ''
});
// 获取用户信息
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]: value
}));
};
const handlePasswordSubmit = async (e) => {
e.preventDefault();
setError(null);
setSuccess(null);
// 验证表单
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>
<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="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 htmlFor="newPassword">新密码:</label>
<input
type="password"
id="newPassword"
name="newPassword"
value={passwordForm.newPassword}
onChange={handlePasswordChange}
required
minLength="6"
/>
</div>
<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>
</div>
</div>
);
};
export default Setting;