feat(类型系统): 新增项目类型定义和常量
- 新增 API 响应类型定义(src/types/api.ts) - 新增用户认证相关类型(src/types/auth.ts) - 新增用户信息类型(src/types/user.ts) - 新增全局常量定义(src/constants/) - 更新项目设置配置
This commit is contained in:
parent
3ea18a417d
commit
f312be1aa8
71
src/constants/index.ts
Normal file
71
src/constants/index.ts
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/**
|
||||||
|
* 通用常量定义
|
||||||
|
* @description 定义项目中使用的所有常量
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ==================== API 响应码常量 ====================
|
||||||
|
|
||||||
|
/** 成功响应码 */
|
||||||
|
export const SUCCESS_CODE = 0;
|
||||||
|
|
||||||
|
/** 失败响应码 */
|
||||||
|
export const ERROR_CODE = 1;
|
||||||
|
|
||||||
|
/** 未认证(需要登录) */
|
||||||
|
export const UNAUTHORIZED_CODE = 401;
|
||||||
|
|
||||||
|
/** 无权限 */
|
||||||
|
export const FORBIDDEN_CODE = 403;
|
||||||
|
|
||||||
|
/** 资源不存在 */
|
||||||
|
export const NOT_FOUND_CODE = 404;
|
||||||
|
|
||||||
|
/** 服务器错误 */
|
||||||
|
export const SERVER_ERROR_CODE = 500;
|
||||||
|
|
||||||
|
// ==================== 本地存储 Key 常量 ====================
|
||||||
|
|
||||||
|
/** Token 存储 Key */
|
||||||
|
export const TOKEN_KEY = 'token';
|
||||||
|
|
||||||
|
/** 用户信息存储 Key */
|
||||||
|
export const USERINFO_KEY = 'userInfo';
|
||||||
|
|
||||||
|
/** 用户登录状态 Key */
|
||||||
|
export const USER_STATUS_KEY = 'userStatus';
|
||||||
|
|
||||||
|
/** 用户角色 Key */
|
||||||
|
export const USER_ROLE_KEY = 'userRole';
|
||||||
|
|
||||||
|
/** 语言设置 Key(与现有项目保持一致) */
|
||||||
|
export const LANG_KEY = 'arco-lang';
|
||||||
|
|
||||||
|
/** 主题设置 Key(与现有项目保持一致) */
|
||||||
|
export const THEME_KEY = 'arco-theme';
|
||||||
|
|
||||||
|
// ==================== 用户角色常量 ====================
|
||||||
|
|
||||||
|
/** 管理员角色 */
|
||||||
|
export const ROLE_ADMIN = 'ADMIN';
|
||||||
|
|
||||||
|
/** 普通用户角色 */
|
||||||
|
export const ROLE_USER = 'USER';
|
||||||
|
|
||||||
|
// ==================== 用户状态常量 ====================
|
||||||
|
|
||||||
|
/** 用户状态 - 禁用 */
|
||||||
|
export const USER_STATUS_DISABLED = 0;
|
||||||
|
|
||||||
|
/** 用户状态 - 启用 */
|
||||||
|
export const USER_STATUS_ENABLED = 1;
|
||||||
|
|
||||||
|
// ==================== 默认分页配置 ====================
|
||||||
|
|
||||||
|
/** 默认页码 */
|
||||||
|
export const DEFAULT_PAGE = 1;
|
||||||
|
|
||||||
|
/** 默认每页条数 */
|
||||||
|
export const DEFAULT_PAGE_SIZE = 10;
|
||||||
|
|
||||||
|
/** 每页条数选项 */
|
||||||
|
export const PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
||||||
@ -3,6 +3,6 @@
|
|||||||
"navbar": true,
|
"navbar": true,
|
||||||
"menu": true,
|
"menu": true,
|
||||||
"footer": false,
|
"footer": false,
|
||||||
"themeColor": "#4834D4",
|
"themeColor": "#005cb8",
|
||||||
"menuWidth": 220
|
"menuWidth": 220
|
||||||
}
|
}
|
||||||
|
|||||||
111
src/types/api.ts
Normal file
111
src/types/api.ts
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/**
|
||||||
|
* API 通用类型定义
|
||||||
|
* @description 定义后端 API 的通用数据结构类型
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ==================== 通用响应类型 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一响应格式
|
||||||
|
* @template T - 响应数据类型
|
||||||
|
*/
|
||||||
|
export interface R<T = any> {
|
||||||
|
/** 响应码:'0'-成功,'1'-失败,其他-业务错误码(兼容后端返回字符串或数字) */
|
||||||
|
code: string | number;
|
||||||
|
/** 响应消息 */
|
||||||
|
msg: string;
|
||||||
|
/** 响应数据 */
|
||||||
|
data: T;
|
||||||
|
/** 时间戳 */
|
||||||
|
timestamp?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页响应格式
|
||||||
|
* @template T - 列表数据项类型
|
||||||
|
*/
|
||||||
|
export interface PageResp<T = any> {
|
||||||
|
/** 数据列表 */
|
||||||
|
list: T[];
|
||||||
|
/** 总记录数 */
|
||||||
|
total: number;
|
||||||
|
/** 每页条数 */
|
||||||
|
size?: number;
|
||||||
|
/** 当前页码 */
|
||||||
|
current?: number;
|
||||||
|
/** 总页数 */
|
||||||
|
pages?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 分页查询参数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询参数
|
||||||
|
*/
|
||||||
|
export interface PageQuery {
|
||||||
|
/** 当前页码(从 1 开始)*/
|
||||||
|
current?: number;
|
||||||
|
/** 每页条数 */
|
||||||
|
size?: number;
|
||||||
|
/** 排序字段,格式:字段名,排序方向(如:createTime,desc) */
|
||||||
|
sort?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== HTTP 错误响应 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTTP 错误响应
|
||||||
|
*/
|
||||||
|
export interface HttpError {
|
||||||
|
/** HTTP 状态码 */
|
||||||
|
status: number;
|
||||||
|
/** 错误消息 */
|
||||||
|
message: string;
|
||||||
|
/** 错误详情 */
|
||||||
|
error?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 请求配置扩展 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义请求配置
|
||||||
|
*/
|
||||||
|
export interface RequestConfig {
|
||||||
|
/** 是否显示加载提示 */
|
||||||
|
showLoading?: boolean;
|
||||||
|
/** 是否显示成功提示 */
|
||||||
|
showSuccessMsg?: boolean;
|
||||||
|
/** 是否显示错误提示 */
|
||||||
|
showErrorMsg?: boolean;
|
||||||
|
/** 自定义成功提示消息 */
|
||||||
|
successMsg?: string;
|
||||||
|
/** 自定义错误提示消息 */
|
||||||
|
errorMsg?: string;
|
||||||
|
/** 是否需要认证(默认 true) */
|
||||||
|
requireAuth?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 类型守卫函数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断响应是否成功
|
||||||
|
* @param response - 响应对象
|
||||||
|
* @returns 是否成功
|
||||||
|
*/
|
||||||
|
export function isSuccessResponse<T>(response: R<T>): boolean {
|
||||||
|
return response.code == 0; // 使用宽松相等,兼容字符串和数字
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否为分页响应
|
||||||
|
* @param data - 响应数据
|
||||||
|
* @returns 是否为分页响应
|
||||||
|
*/
|
||||||
|
export function isPageResponse<T>(data: any): data is PageResp<T> {
|
||||||
|
return (
|
||||||
|
data !== null &&
|
||||||
|
typeof data === 'object' &&
|
||||||
|
Array.isArray(data.list) &&
|
||||||
|
typeof data.total === 'number'
|
||||||
|
);
|
||||||
|
}
|
||||||
140
src/types/auth.ts
Normal file
140
src/types/auth.ts
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
/**
|
||||||
|
* 认证相关类型定义
|
||||||
|
* @description 定义登录、注册、用户信息等认证相关的数据类型
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ==================== 登录相关 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录请求参数
|
||||||
|
*/
|
||||||
|
export interface LoginReq {
|
||||||
|
/** 账号(用户名/邮箱/手机号) */
|
||||||
|
account: string;
|
||||||
|
/** 密码 */
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录响应数据
|
||||||
|
*/
|
||||||
|
export interface LoginResp {
|
||||||
|
/** 访问令牌(需存储并在后续请求中携带) */
|
||||||
|
token: string;
|
||||||
|
/** 用户ID */
|
||||||
|
userId: number;
|
||||||
|
/** 用户名 */
|
||||||
|
username: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 角色(ADMIN-管理员, USER-普通用户) */
|
||||||
|
role: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 注册相关 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册请求参数
|
||||||
|
*/
|
||||||
|
export interface RegisterReq {
|
||||||
|
/** 用户名(4-20位字母、数字或下划线) */
|
||||||
|
username: string;
|
||||||
|
/** 密码(8-20位,包含大小写字母和数字) */
|
||||||
|
password: string;
|
||||||
|
/** 确认密码 */
|
||||||
|
confirmPassword: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email: string;
|
||||||
|
/** 手机号(11位) */
|
||||||
|
phone: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 用户信息相关 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户信息响应
|
||||||
|
*/
|
||||||
|
export interface UserInfoResp {
|
||||||
|
/** 用户ID */
|
||||||
|
id: number;
|
||||||
|
/** 用户名 */
|
||||||
|
username: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 角色(ADMIN-管理员, USER-普通用户) */
|
||||||
|
role: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号 */
|
||||||
|
phone?: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
/** 状态(0-禁用, 1-启用) */
|
||||||
|
status: number;
|
||||||
|
/** 创建时间 */
|
||||||
|
createTime?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 本地存储的用户信息 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地存储的用户信息(简化版,用于 localStorage)
|
||||||
|
*/
|
||||||
|
export interface LocalUserInfo {
|
||||||
|
/** 用户ID */
|
||||||
|
userId: number;
|
||||||
|
/** 用户名 */
|
||||||
|
username: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 角色 */
|
||||||
|
role: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 用户角色枚举 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户角色枚举
|
||||||
|
*/
|
||||||
|
export enum UserRole {
|
||||||
|
/** 管理员 */
|
||||||
|
ADMIN = 'ADMIN',
|
||||||
|
/** 普通用户 */
|
||||||
|
USER = 'USER',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户状态枚举
|
||||||
|
*/
|
||||||
|
export enum UserStatus {
|
||||||
|
/** 禁用 */
|
||||||
|
DISABLED = 0,
|
||||||
|
/** 启用 */
|
||||||
|
ENABLED = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 类型守卫函数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断用户是否为管理员
|
||||||
|
* @param role - 用户角色
|
||||||
|
* @returns 是否为管理员
|
||||||
|
*/
|
||||||
|
export function isAdmin(role: string): boolean {
|
||||||
|
return role === UserRole.ADMIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断用户是否启用
|
||||||
|
* @param status - 用户状态
|
||||||
|
* @returns 是否启用
|
||||||
|
*/
|
||||||
|
export function isUserEnabled(status: number): boolean {
|
||||||
|
return status === UserStatus.ENABLED;
|
||||||
|
}
|
||||||
214
src/types/user.ts
Normal file
214
src/types/user.ts
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
/**
|
||||||
|
* 用户管理相关类型定义
|
||||||
|
* @description 定义用户管理(CRUD)相关的数据类型
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { PageQuery } from './api';
|
||||||
|
|
||||||
|
// ==================== 用户查询参数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户查询条件
|
||||||
|
*/
|
||||||
|
export interface UserQuery extends PageQuery {
|
||||||
|
/** 用户名(模糊搜索) */
|
||||||
|
username?: string;
|
||||||
|
/** 角色 */
|
||||||
|
role?: string;
|
||||||
|
/** 昵称(模糊搜索) */
|
||||||
|
nickname?: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号 */
|
||||||
|
phone?: string;
|
||||||
|
/** 状态(0-禁用, 1-启用) */
|
||||||
|
status?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 用户响应数据 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户响应数据
|
||||||
|
*/
|
||||||
|
export interface UserResp {
|
||||||
|
/** 用户ID */
|
||||||
|
id: number;
|
||||||
|
/** 用户名 */
|
||||||
|
username: string;
|
||||||
|
/** 角色(ADMIN-管理员, USER-普通用户) */
|
||||||
|
role: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号 */
|
||||||
|
phone?: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
/** 状态(0-禁用, 1-启用) */
|
||||||
|
status: number;
|
||||||
|
/** 创建人ID */
|
||||||
|
createUser?: number;
|
||||||
|
/** 创建人名称 */
|
||||||
|
createUserString?: string;
|
||||||
|
/** 创建时间 */
|
||||||
|
createTime?: string;
|
||||||
|
/** 更新时间 */
|
||||||
|
updateTime?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 用户请求参数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户请求参数(创建/更新用户)
|
||||||
|
*/
|
||||||
|
export interface UserReq {
|
||||||
|
/** 用户名(4-20位字母、数字或下划线) */
|
||||||
|
username: string;
|
||||||
|
/** 角色(ADMIN 或 USER) */
|
||||||
|
role: string;
|
||||||
|
/** 密码(8-20位,包含大小写字母和数字)- 可选,更新时不传则不修改密码 */
|
||||||
|
password?: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号(11位) */
|
||||||
|
phone?: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
/** 状态(0-禁用, 1-启用) */
|
||||||
|
status?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 批量操作参数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除请求参数
|
||||||
|
*/
|
||||||
|
export interface BatchDeleteReq {
|
||||||
|
/** 用户ID列表 */
|
||||||
|
ids: number[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置密码请求参数
|
||||||
|
*/
|
||||||
|
export interface ResetPasswordReq {
|
||||||
|
/** 用户ID */
|
||||||
|
userId: number;
|
||||||
|
/** 新密码 */
|
||||||
|
newPassword: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改个人信息请求参数
|
||||||
|
*/
|
||||||
|
export interface UpdateProfileReq {
|
||||||
|
/** 昵称 */
|
||||||
|
nickname?: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号 */
|
||||||
|
phone?: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 表单数据类型 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户表单数据(用于前端表单组件)
|
||||||
|
*/
|
||||||
|
export interface UserFormData {
|
||||||
|
/** 用户ID(编辑时使用) */
|
||||||
|
id?: number;
|
||||||
|
/** 用户名 */
|
||||||
|
username: string;
|
||||||
|
/** 角色 */
|
||||||
|
role: string;
|
||||||
|
/** 密码(创建时必填,更新时可选) */
|
||||||
|
password?: string;
|
||||||
|
/** 确认密码(创建时必填,更新时可选) */
|
||||||
|
confirmPassword?: string;
|
||||||
|
/** 邮箱 */
|
||||||
|
email?: string;
|
||||||
|
/** 手机号 */
|
||||||
|
phone?: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname: string;
|
||||||
|
/** 头像地址 */
|
||||||
|
avatar?: string;
|
||||||
|
/** 状态 */
|
||||||
|
status?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 用户列表筛选条件 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户列表筛选条件(用于前端筛选表单)
|
||||||
|
*/
|
||||||
|
export interface UserFilterForm {
|
||||||
|
/** 用户名 */
|
||||||
|
username?: string;
|
||||||
|
/** 角色 */
|
||||||
|
role?: string;
|
||||||
|
/** 昵称 */
|
||||||
|
nickname?: string;
|
||||||
|
/** 状态 */
|
||||||
|
status?: number;
|
||||||
|
/** 创建时间范围 */
|
||||||
|
createTimeRange?: [string, string];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== 工具函数 ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将用户响应数据转换为表单数据
|
||||||
|
* @param user - 用户响应数据
|
||||||
|
* @returns 表单数据
|
||||||
|
*/
|
||||||
|
export function userRespToFormData(user: UserResp): UserFormData {
|
||||||
|
return {
|
||||||
|
id: user.id,
|
||||||
|
username: user.username,
|
||||||
|
role: user.role,
|
||||||
|
email: user.email,
|
||||||
|
phone: user.phone,
|
||||||
|
nickname: user.nickname,
|
||||||
|
avatar: user.avatar,
|
||||||
|
status: user.status,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将表单数据转换为用户请求参数
|
||||||
|
* @param formData - 表单数据
|
||||||
|
* @returns 用户请求参数
|
||||||
|
*/
|
||||||
|
export function formDataToUserReq(formData: UserFormData): UserReq {
|
||||||
|
const req: UserReq = {
|
||||||
|
username: formData.username,
|
||||||
|
role: formData.role,
|
||||||
|
nickname: formData.nickname,
|
||||||
|
};
|
||||||
|
|
||||||
|
// 可选字段
|
||||||
|
if (formData.password) {
|
||||||
|
req.password = formData.password;
|
||||||
|
}
|
||||||
|
if (formData.email) {
|
||||||
|
req.email = formData.email;
|
||||||
|
}
|
||||||
|
if (formData.phone) {
|
||||||
|
req.phone = formData.phone;
|
||||||
|
}
|
||||||
|
if (formData.avatar) {
|
||||||
|
req.avatar = formData.avatar;
|
||||||
|
}
|
||||||
|
if (formData.status !== undefined) {
|
||||||
|
req.status = formData.status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return req;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user