import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router'; import { ArrowRightIcon, EnvelopeIcon, LockClosedIcon, UserIcon } from '@heroicons/react/24/outline'; import { AuthAPI, SysAPI } from './api.ts'; import { handleApiError } from './utils.ts'; import { Select, TreeSelect } from 'antd'; const RegisterPage: React.FC = () => { const navigate = useNavigate(); const [username, setUsername] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [organizationId, setOrganizationId] = useState(); const [organizationTree, setOrganizationTree] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // 加载机构数据 useEffect(() => { const loadOrganizations = async () => { try { const res = await SysAPI.getOrganizations(); setOrganizationTree(res.data); } catch (err) { console.error('加载机构数据失败:', err); } }; loadOrganizations(); }, []); const handleRegister = async (e: React.FormEvent) => { e.preventDefault(); // 表单验证 if (!username.trim()) { setError('用户名不能为空'); return; } if (!email.trim()) { setError('邮箱不能为空'); return; } if (!password.trim()) { setError('密码不能为空'); return; } if (password !== confirmPassword) { setError('两次输入的密码不一致'); return; } setLoading(true); setError(null); try { await AuthAPI.register({ username, email, password, organizationId }); // 注册成功后跳转到登录页 navigate('/mobile/login'); } catch (err) { setError(handleApiError(err)); } finally { setLoading(false); } }; return (
{/* 顶部Logo和标题 */}

{window.CONFIG?.APP_NAME || '移动应用'}

创建您的账户

{/* 注册表单 */}
{error && (
{error}
)}
setUsername(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请输入用户名" />
setEmail(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请输入邮箱" />
setPassword(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请输入密码" />
setOrganizationId(value)} className="w-full" dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} />
setConfirmPassword(e.target.value)} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="请再次输入密码" />
{/* 底部文本 */}
© {new Date().getFullYear()} {window.CONFIG?.APP_NAME || '移动应用'}

保留所有权利

); }; export default RegisterPage;