From f18c9cdc8db176c7d8df1273a20d5db8538a6dee Mon Sep 17 00:00:00 2001 From: meowrain Date: Mon, 12 Jan 2026 00:33:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现用户注册功能,包括: 1. 在auth模块中添加register接口及相关类型定义 2. 在UserRegisterView中实现注册表单提交逻辑 3. 修改FileListItem的id类型为string以保持一致性 --- src/api/auth/auth.ts | 37 ++++++++++++++++++++++++----- src/api/auth/index.ts | 3 +++ src/api/file/file.ts | 2 +- src/views/user/UserRegisterView.vue | 33 ++++++++++--------------- 4 files changed, 48 insertions(+), 27 deletions(-) diff --git a/src/api/auth/auth.ts b/src/api/auth/auth.ts index c5784e0..3b9d06c 100644 --- a/src/api/auth/auth.ts +++ b/src/api/auth/auth.ts @@ -5,8 +5,6 @@ import type { ApiResponse } from "../response"; * 认证服务 API 类型定义 */ - - // 登录请求参数 export interface LoginRequest { userAccount: string; @@ -23,7 +21,18 @@ export interface LoginResponse { accessTokenExpireTime: number | null; refreshTokenExpireTime: number | null; } - +/** + * 注册请求参数 + */ +export interface RegisterRequest { + userAccount: string; + userPassword: string; + checkPassword: string; +} +/** + * 注册响应数据 + */ +export type RegisterResponse = string; // 刷新令牌响应数据 export interface RefreshTokenResponse { id: number | null; @@ -44,16 +53,30 @@ export interface RefreshTokenResponse { * @param data 登录请求参数 * @returns 登录响应数据 */ -export const login = (data: LoginRequest): Promise> => { +export const login = ( + data: LoginRequest +): Promise> => { return request.post("/v1/auth/login", data); }; +/** + * 用户注册 + * @param data 注册请求参数 + * @returns 注册响应数据 + */ +export const register = ( + data: RegisterRequest +): Promise> => { + return request.post("/v1/user/register", data); +}; /** * 令牌刷新 * @param refreshToken 刷新令牌 * @returns 新的令牌信息 */ -export const refreshToken = (refreshToken: string): Promise> => { +export const refreshToken = ( + refreshToken: string +): Promise> => { return request.post("/v1/auth/refresh", null, { params: { refreshToken, @@ -66,7 +89,9 @@ export const refreshToken = (refreshToken: string): Promise> => { +export const getAccessToken = ( + data: LoginRequest +): Promise> => { return request.post("/v1/auth/auth", data); }; diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts index bc4ce9f..414d287 100644 --- a/src/api/auth/index.ts +++ b/src/api/auth/index.ts @@ -3,10 +3,13 @@ export { chatAPI, type ChatMessage, type ChatRequest } from '../aiChat' // 认证 API export { login, + register, refreshToken, getAccessToken, validateToken, type LoginRequest, type LoginResponse, + type RegisterRequest, + type RegisterResponse, type RefreshTokenResponse, } from './auth' \ No newline at end of file diff --git a/src/api/file/file.ts b/src/api/file/file.ts index 4140a0a..64149d5 100644 --- a/src/api/file/file.ts +++ b/src/api/file/file.ts @@ -72,7 +72,7 @@ export const deleteFile = async (id: number) => { export interface FileListItem { /* 文件记录的唯一标识 ID */ - id: number; + id: string; /* 文件的原始名称(不包含扩展名) */ fileName: string; diff --git a/src/views/user/UserRegisterView.vue b/src/views/user/UserRegisterView.vue index 630c993..c7b5a4c 100644 --- a/src/views/user/UserRegisterView.vue +++ b/src/views/user/UserRegisterView.vue @@ -94,6 +94,8 @@ import { reactive, ref } from "vue"; import { useRouter } from "vue-router"; import { Message } from "@arco-design/web-vue"; import { IconUser, IconLock } from "@arco-design/web-vue/es/icon"; +import { register } from "@/api/auth/auth"; +import { isApiSuccess } from "@/api/response"; const router = useRouter(); @@ -151,27 +153,18 @@ const handleSubmit = async (data: any) => { loading.value = true; try { - // TODO: 调用注册 API - // 目前后端文档中没有注册接口,这里模拟注册成功 - await new Promise((resolve) => setTimeout(resolve, 1000)); + const res = await register({ + userAccount: form.userAccount, + userPassword: form.userPassword, + checkPassword: form.confirmPassword, + }); - Message.success("注册成功!请登录"); - - // 跳转到登录页 - router.push("/user/login"); - - // 实际实现时应该调用后端注册接口: - // const response = await register({ - // userAccount: form.userAccount, - // userPassword: form.userPassword, - // }); - // - // if (response.success) { - // Message.success("注册成功!请登录"); - // router.push("/user/login"); - // } else { - // Message.error(response.message || "注册失败"); - // } + if (isApiSuccess(res)) { + Message.success("注册成功!请登录"); + router.push("/user/login"); + } else { + Message.error(res.message || "注册失败"); + } } catch (error: any) { console.error("注册失败:", error); Message.error(error.response?.data?.message || "注册失败,请稍后重试");