/** * ChangePasswordModal 组件 * * 修改密码模态框组件 * 支持首次登录强制修改密码和普通修改密码 * 使用统一的 Modal 和 Input 组件,遵循三层架构 * * @created 2025-01-XX * @component */ 'use client' import { useState } from 'react' import { useDialog } from '@/components/ui/DialogProvider' import Modal from '@/components/ui/Modal' import Input from '@/components/ui/Input' import Button from '@/components/ui/Button' import { useThemeStyles, cn } from '@/lib/ui-styles' interface ChangePasswordModalProps { isOpen: boolean onClose: () => void isRequired?: boolean // 是否强制修改(首次登录) onSuccess?: () => void } export default function ChangePasswordModal({ isOpen, onClose, isRequired = false, onSuccess }: ChangePasswordModalProps) { const { alert } = useDialog() const styles = useThemeStyles() const [oldPassword, setOldPassword] = useState('') const [newPassword, setNewPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') if (!newPassword || !confirmPassword) { setError('请填写所有字段') return } if (newPassword.length < 6) { setError('新密码长度至少为6位') return } if (newPassword !== confirmPassword) { setError('两次输入的密码不一致') return } setLoading(true) try { const response = await fetch('/api/user/change-password', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ oldPassword: isRequired ? '88888888' : oldPassword, newPassword }), }) const data = await response.json() if (response.ok) { // 清空表单 setOldPassword('') setNewPassword('') setConfirmPassword('') setError('') if (onSuccess) { onSuccess() } else { onClose() } // 显示成功消息 alert({ title: '成功', message: '密码修改成功!', variant: 'success', }) } else { setError(data.error || '修改密码失败') } } catch (error) { console.error('修改密码错误:', error) setError('修改密码失败,请稍后重试') } finally { setLoading(false) } } return ( {} : onClose} title={isRequired ? '首次登录,请修改密码' : '修改密码'} showCloseButton={!isRequired} closeOnOverlayClick={!isRequired} closeOnEscape={!isRequired} > {isRequired && (

⚠️ 您正在使用默认密码,为了账户安全,请立即修改密码。

)}
{!isRequired && (
setOldPassword(e.target.value)} placeholder="请输入旧密码" required={!isRequired} fullWidth />
)}
setNewPassword(e.target.value)} placeholder="请输入新密码(至少6位)" required minLength={6} fullWidth />
setConfirmPassword(e.target.value)} placeholder="请再次输入新密码" required minLength={6} fullWidth />
{error && (

{error}

)}
{!isRequired && ( )}
) }