- 新增 API 响应类型定义(src/types/api.ts) - 新增用户认证相关类型(src/types/auth.ts) - 新增用户信息类型(src/types/user.ts) - 新增全局常量定义(src/constants/) - 更新项目设置配置
215 lines
4.5 KiB
TypeScript
215 lines
4.5 KiB
TypeScript
/**
|
||
* 用户管理相关类型定义
|
||
* @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;
|
||
}
|