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 类型定义
*/
// 登录请求参数
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<ApiResponse<LoginResponse>> => {
export const login = (
data: LoginRequest
): Promise<ApiResponse<LoginResponse>> => {
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 刷新令牌
* @returns 新的令牌信息
*/
export const refreshToken = (refreshToken: string): Promise<ApiResponse<RefreshTokenResponse>> => {
export const refreshToken = (
refreshToken: string
): Promise<ApiResponse<RefreshTokenResponse>> => {
return request.post("/v1/auth/refresh", null, {
params: {
refreshToken,
@@ -66,7 +89,9 @@ export const refreshToken = (refreshToken: string): Promise<ApiResponse<RefreshT
* @param data 登录请求参数
* @returns 访问令牌字符串
*/
export const getAccessToken = (data: LoginRequest): Promise<ApiResponse<string>> => {
export const getAccessToken = (
data: LoginRequest
): Promise<ApiResponse<string>> => {
return request.post("/v1/auth/auth", data);
};

View File

@@ -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'

View File

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

View File

@@ -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,
});
if (isApiSuccess(res)) {
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 || "注册失败");
// }
} else {
Message.error(res.message || "注册失败");
}
} catch (error: any) {
console.error("注册失败:", error);
Message.error(error.response?.data?.message || "注册失败,请稍后重试");