blob: 25f2bd012254c66a8c7980d779c37736040531d8 [file] [log] [blame]
LaoeGaoci85307e62025-05-30 23:28:42 +08001'use client';
lfmylbhf839e5a12025-06-09 18:22:25 +08002import React, { useRef, useState } from 'react';
3import { Button } from "primereact/button";
4// 输入框
5import { InputText } from "primereact/inputtext";
6// 消息提醒
7import { Toast } from 'primereact/toast';
8// 接口传输
9import axios from "axios";
10// 页面跳转
11import { useRouter } from "next/navigation";
12// 密码
13import { Password } from 'primereact/password';
14// 样式
15import './register.scss';
LaoeGaoci85307e62025-05-30 23:28:42 +080016
lfmylbhf839e5a12025-06-09 18:22:25 +080017export default function RegisterPage() {
18 // 路由
19 const router = useRouter();
20 // 消息提醒
21 const toast = useRef<Toast>(null);
22
23 const [registerFormData, setRegisterFormData] = useState({
24 username: '',
25 password: '',
26 confirmPassword: '',
27 invitationCode: '',
28 })
29
30
31 // 处理用户注册
32 const handleRegister = async () => {
33 try {
34 // 判断用户两次输入的密码是否一致
35 if (registerFormData.password != registerFormData.confirmPassword) {
36 console.error("两次输入的密码不一致,请重新输入");
37 toast.current?.show({severity: 'error', summary: 'Error', detail: '两次输入的密码不一致,请重新输入'});
38 return;
39 }
40
41 const postData = {
42 username: registerFormData.username,
43 password: registerFormData.password,
44 invitationCode: registerFormData.invitationCode,
45 }
46 const response = await axios.post(process.env.PUBLIC_URL + `/user/register`, postData, {
47 // eslint-disable-next-line @typescript-eslint/no-unused-vars
48 validateStatus: (status) => true // 接受所有状态码
49 });
50
51 if (response.status === 200) {
52 console.log('用户注册成功');
53 toast.current?.show({severity: 'success', summary: 'Success', detail: '注册成功'});
54 router.push('/user/login');
55 } else if (response.status === 412) {
56 console.log('用户名重复');
57 toast.current?.show({severity: 'error', summary: 'Error', detail: '用户名重复'});
58 } else if (response.status === 409) {
59 console.error('邀请码不存在');
60 toast.current?.show({severity: 'error', summary: 'Error', detail: '邀请码不存在'});
61 } else if (response.status === 410) {
62 console.error('邀请码已被使用');
63 toast.current?.show({severity: 'error', summary: 'Error', detail: '邀请码已被使用'});
64 }
65
66 } catch (error) {
67 console.error('注册失败:', error);
68 toast.current?.show({severity: 'error', summary: 'Error', detail: '注册失败'});
69 }
70 }
71
LaoeGaoci85307e62025-05-30 23:28:42 +080072 return (
lfmylbhf839e5a12025-06-09 18:22:25 +080073 <div className='register-container'>
74 <Toast ref={toast}></Toast>
75 <h1 className="form-header">注册</h1>
76 <div className="form-field">
77 <div className="form-field-header">
78 <label htmlFor="username">用户名</label>
79 </div>
80 <InputText
81 id="username"
82 value={registerFormData.username}
83 onChange={(e) => setRegisterFormData(prev => ({
84 ...prev, // 复制顶层所有属性
85 username: e.target.value
86 }))}
87 className="w-full"
88 />
89 </div>
90 <div className="form-field">
91 <div className="form-field-header">
92 <label htmlFor="password">设置密码</label>
93 </div>
94 <Password
95 id="password"
96 value={registerFormData.password}
97 onChange={(e) => setRegisterFormData(prev => ({
98 ...prev,
99 password: e.target.value
100 }))}
101 className="w-full"
102 toggleMask
103 />
104 </div>
105 <div className="form-field">
106 <div className="form-field-header">
107 <label htmlFor="confirmPassword">确认密码</label>
108 </div>
109 <Password
110 id="confirmPassword"
111 value={registerFormData.confirmPassword}
112 onChange={(e) => setRegisterFormData(prev => ({
113 ...prev,
114 confirmPassword: e.target.value
115 }))}
116 className="w-full"
117 toggleMask
118 />
119 </div>
120 <div className="form-field">
121 <div className="form-field-header">
122 <label htmlFor="invitationCode">邀请码</label>
123 </div>
124 <InputText
125 id="invitationCode"
126 value={registerFormData.invitationCode}
127 onChange={(e) => setRegisterFormData(prev => ({
128 ...prev, // 复制顶层所有属性
129 invitationCode: e.target.value
130 }))}
131 className="w-full"
132 />
133 </div>
134 <div className="form-operation">
135 <Button label="确定" onClick={handleRegister} className='form-operation-button'/>
136 <Button label="返回" onClick={() => router.push("/user/login")} className='form-operation-button'/>
137 </div>
138 </div>
139 )
LaoeGaoci85307e62025-05-30 23:28:42 +0800140};