feat(auth): 添加用户注册功能及相关接口

实现用户注册功能,包括:
1. 在auth模块中添加register接口及相关类型定义
2. 在UserRegisterView中实现注册表单提交逻辑
3. 修改FileListItem的id类型为string以保持一致性
This commit is contained in:
2026-01-12 00:33:55 +08:00
parent c77d6855a9
commit f18c9cdc8d
4 changed files with 48 additions and 27 deletions

View File

@@ -5,8 +5,6 @@ import type { ApiResponse } from "../response";
* 认证服务 API 类型定义 * 认证服务 API 类型定义
*/ */
// 登录请求参数 // 登录请求参数
export interface LoginRequest { export interface LoginRequest {
userAccount: string; userAccount: string;
@@ -23,7 +21,18 @@ export interface LoginResponse {
accessTokenExpireTime: number | null; accessTokenExpireTime: number | null;
refreshTokenExpireTime: number | null; refreshTokenExpireTime: number | null;
} }
/**
* 注册请求参数
*/
export interface RegisterRequest {
userAccount: string;
userPassword: string;
checkPassword: string;
}
/**
* 注册响应数据
*/
export type RegisterResponse = string;
// 刷新令牌响应数据 // 刷新令牌响应数据
export interface RefreshTokenResponse { export interface RefreshTokenResponse {
id: number | null; id: number | null;
@@ -44,16 +53,30 @@ export interface RefreshTokenResponse {
* @param data 登录请求参数 * @param data 登录请求参数
* @returns 登录响应数据 * @returns 登录响应数据
*/ */
export const login = (data: LoginRequest): Promise<ApiResponse<LoginResponse>> => { export const login = (
data: LoginRequest
): Promise<ApiResponse<LoginResponse>> => {
return request.post("/v1/auth/login", data); return request.post("/v1/auth/login", data);
}; };
/**
* 用户注册
* @param data 注册请求参数
* @returns 注册响应数据
*/
export const register = (
data: RegisterRequest
): Promise<ApiResponse<RegisterResponse>> => {
return request.post("/v1/user/register", data);
};
/** /**
* 令牌刷新 * 令牌刷新
* @param refreshToken 刷新令牌 * @param refreshToken 刷新令牌
* @returns 新的令牌信息 * @returns 新的令牌信息
*/ */
export const refreshToken = (refreshToken: string): Promise<ApiResponse<RefreshTokenResponse>> => { export const refreshToken = (
refreshToken: string
): Promise<ApiResponse<RefreshTokenResponse>> => {
return request.post("/v1/auth/refresh", null, { return request.post("/v1/auth/refresh", null, {
params: { params: {
refreshToken, refreshToken,
@@ -66,7 +89,9 @@ export const refreshToken = (refreshToken: string): Promise<ApiResponse<RefreshT
* @param data 登录请求参数 * @param data 登录请求参数
* @returns 访问令牌字符串 * @returns 访问令牌字符串
*/ */
export const getAccessToken = (data: LoginRequest): Promise<ApiResponse<string>> => { export const getAccessToken = (
data: LoginRequest
): Promise<ApiResponse<string>> => {
return request.post("/v1/auth/auth", data); return request.post("/v1/auth/auth", data);
}; };

View File

@@ -3,10 +3,13 @@ export { chatAPI, type ChatMessage, type ChatRequest } from '../aiChat'
// 认证 API // 认证 API
export { export {
login, login,
register,
refreshToken, refreshToken,
getAccessToken, getAccessToken,
validateToken, validateToken,
type LoginRequest, type LoginRequest,
type LoginResponse, type LoginResponse,
type RegisterRequest,
type RegisterResponse,
type RefreshTokenResponse, type RefreshTokenResponse,
} from './auth' } from './auth'

View File

@@ -72,7 +72,7 @@ export const deleteFile = async (id: number) => {
export interface FileListItem { export interface FileListItem {
/* 文件记录的唯一标识 ID */ /* 文件记录的唯一标识 ID */
id: number; id: string;
/* 文件的原始名称(不包含扩展名) */ /* 文件的原始名称(不包含扩展名) */
fileName: string; fileName: string;

View File

@@ -94,6 +94,8 @@ import { reactive, ref } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { Message } from "@arco-design/web-vue"; import { Message } from "@arco-design/web-vue";
import { IconUser, IconLock } from "@arco-design/web-vue/es/icon"; import { IconUser, IconLock } from "@arco-design/web-vue/es/icon";
import { register } from "@/api/auth/auth";
import { isApiSuccess } from "@/api/response";
const router = useRouter(); const router = useRouter();
@@ -151,27 +153,18 @@ const handleSubmit = async (data: any) => {
loading.value = true; loading.value = true;
try { try {
// TODO: 调用注册 API const res = await register({
// 目前后端文档中没有注册接口,这里模拟注册成功 userAccount: form.userAccount,
await new Promise((resolve) => setTimeout(resolve, 1000)); userPassword: form.userPassword,
checkPassword: form.confirmPassword,
});
Message.success("注册成功!请登录"); if (isApiSuccess(res)) {
Message.success("注册成功!请登录");
// 跳转到登录页 router.push("/user/login");
router.push("/user/login"); } else {
Message.error(res.message || "注册失败");
// 实际实现时应该调用后端注册接口: }
// const response = await register({
// userAccount: form.userAccount,
// userPassword: form.userPassword,
// });
//
// if (response.success) {
// Message.success("注册成功!请登录");
// router.push("/user/login");
// } else {
// Message.error(response.message || "注册失败");
// }
} catch (error: any) { } catch (error: any) {
console.error("注册失败:", error); console.error("注册失败:", error);
Message.error(error.response?.data?.message || "注册失败,请稍后重试"); Message.error(error.response?.data?.message || "注册失败,请稍后重试");