codernew-api-frontend/src/types/user.ts
gaoziman f312be1aa8 feat(类型系统): 新增项目类型定义和常量
- 新增 API 响应类型定义(src/types/api.ts)
- 新增用户认证相关类型(src/types/auth.ts)
- 新增用户信息类型(src/types/user.ts)
- 新增全局常量定义(src/constants/)
- 更新项目设置配置
2025-11-18 20:44:43 +08:00

215 lines
4.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 用户管理相关类型定义
* @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;
}