import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Link, useNavigate } from 'react-router-dom'; import { checkAuthThunk, signupThunk } from '../../store/auth/auth.thunk'; // 部门和组别映射关系 const departmentGroups = { '技术部': ['开发组', '测试组', '运维组'], '产品部': ['产品规划组', '用户研究组', '交互设计组', '项目管理组'], '市场部': ['品牌推广组', '市场调研组', '客户关系组', '社交媒体组'], '行政部': ['人事组', '财务组', '行政管理组', '后勤组'] }; export default function Signup() { const dispatch = useDispatch(); const navigate = useNavigate(); const [formData, setFormData] = useState({ username: '', email: '', password: '', name: '', role: 'member', department: '', group: '', }); const [errors, setErrors] = useState({}); const [submitted, setSubmitted] = useState(false); const [availableGroups, setAvailableGroups] = useState([]); const { user, loading } = useSelector((state) => state.auth); useEffect(() => { handleCheckAuth(); }, [dispatch]); // 当部门变化时,更新可选的组别 useEffect(() => { if (formData.department && departmentGroups[formData.department]) { setAvailableGroups(departmentGroups[formData.department]); // 如果已选择的组别不在新部门的选项中,则重置组别 if (!departmentGroups[formData.department].includes(formData.group)) { setFormData(prev => ({ ...prev, group: '' })); } } else { setAvailableGroups([]); setFormData(prev => ({ ...prev, group: '' })); } }, [formData.department]); const handleCheckAuth = async () => { console.log('signup page handleCheckAuth'); try { await dispatch(checkAuthThunk()).unwrap(); if (user) navigate('/'); } catch (error) {} }; const handleInputChange = (e) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value, }); // 清除对应的错误信息 if (errors[name]) { setErrors({ ...errors, [name]: '', }); } }; const validateForm = () => { const newErrors = {}; if (!formData.username) { newErrors.username = 'Username is required'; } if (!formData.email) { newErrors.email = 'Email is required'; } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(formData.email)) { newErrors.email = 'Invalid email address'; } if (!formData.password) { newErrors.password = 'Password is required'; } else if (formData.password.length < 6) { newErrors.password = 'Password must be at least 6 characters'; } if (!formData.name) { newErrors.name = 'Name is required'; } if (!formData.department) { newErrors.department = '请选择部门'; } if (!formData.group) { newErrors.group = '请选择组别'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e) => { e.preventDefault(); setSubmitted(true); if (validateForm()) { console.log('Form submitted successfully!'); console.log('Registration data:', formData); try { await dispatch(signupThunk(formData)).unwrap(); navigate('/login'); } catch (error) { console.error('Signup failed:', error); } } }; return (