import request from '@/utils/request'; // 用户相关类型定义 export interface User { id?: number; username: string; realName?: string; phone?: string; email?: string; deptId?: number; deptName?: string; status?: number; isAdmin?: number; // 是否管理员:0-否 1-是 avatar?: string; createTime?: string; updateTime?: string; } export interface PageResult { records: T[]; total: number; size: number; current: number; pages: number; } /** * 分页查询用户列表 */ export const getUserList = async ( pageNum: number = 1, pageSize: number = 10, keyword?: string, deptId?: number, status?: number, includeChildren?: boolean ): Promise> => { const params: any = { pageNum, pageSize }; if (keyword) params.keyword = keyword; if (deptId) params.deptId = deptId; if (status !== undefined) params.status = status; if (includeChildren !== undefined) params.includeChildren = includeChildren; const response = await request.get('/users', { params }); return response.data; }; /** * 获取全部用户列表 */ export const getAllUsers = async (): Promise => { const response = await request.get('/users/all'); return response.data || []; }; /** * 获取所有需求部门的成员列表(用于跨部门分配) */ export const getAllDemandDeptMembers = async (): Promise => { const response = await request.get('/users/demand-dept-members'); return response.data || []; }; /** * 根据ID获取用户 */ export const getUserById = async (id: number): Promise => { const response = await request.get(`/users/${id}`); return response.data; }; /** * 创建用户 */ export const createUser = async (user: User): Promise => { const response = await request.post('/users', user); return response.data; }; /** * 更新用户 */ export const updateUser = async (id: number, user: Partial): Promise => { const response = await request.put(`/users/${id}`, user); return response.data; }; /** * 删除用户 */ export const deleteUser = async (id: number): Promise => { const response = await request.delete(`/users/${id}`); return response.data; }; /** * 重置密码 */ export const resetPassword = async (id: number, newPassword: string = '123456'): Promise => { const response = await request.post(`/users/${id}/reset-password`, { newPassword }); return response.data; }; /** * 修改密码 */ export const changePassword = async ( id: number, oldPassword: string, newPassword: string ): Promise => { const response = await request.post(`/users/${id}/change-password`, { oldPassword, newPassword }); return response.data; }; /** * 为用户分配角色 */ export const assignUserRoles = async (userId: number, roleIds: number[]): Promise => { const response = await request.post(`/users/${userId}/roles`, roleIds); return response.data; }; /** * 获取用户的角色ID列表 */ export const getUserRoleIds = async (userId: number): Promise => { const response = await request.get(`/users/${userId}/roles`); return response.data; }; /** * 启用/禁用用户 */ export const toggleUserStatus = async (id: number, status: number): Promise => { const response = await request.put(`/users/${id}/status`, null, { params: { status } }); return response.data; }; /** * 调整用户所属部门 */ export const updateUserDepartment = async (id: number, deptId: number | null): Promise => { const response = await request.put(`/users/${id}/department`, { deptId }); return response.data; }; /** * 设计师及工作量信息 */ export interface DesignerWithWorkload { id: number; username: string; realName: string; deptId?: number; deptName?: string; inProgressCount: number; // 进行中的任务数量 earliestDeadline?: string; // 最早预计完成时间 } /** * 获取设计师列表及工作量 * @param deptId 部门ID(可选) * @param taskTypeId 任务类型ID(可选,优先根据任务类型配置的接单部门获取设计师) */ export const getDesignersWithWorkload = async (deptId?: number, taskTypeId?: number): Promise => { const params: any = {}; if (taskTypeId) params.taskTypeId = taskTypeId; // 优先使用 taskTypeId else if (deptId) params.deptId = deptId; const response = await request.get('/users/designers-with-workload', { params }); return response.data || []; }; /** * 设置/取消管理员 */ export const setAdmin = async (id: number, isAdmin: number): Promise => { const response = await request.put(`/users/${id}/admin`, { isAdmin }); return response.data; }; export type UserOffboardingScope = 'demand' | 'receiver' | 'all'; export interface UserOffboardingRequest { fromUserId?: number; toUserId?: number; scope: UserOffboardingScope; disableFromUser: boolean; reason: string; } export interface OffboardingTaskSample { taskId: number; taskNo: string; title: string; status: string; roles: string; } export interface UserOffboardingPreview { fromUserId: number; fromUserName: string; toUserId: number; toUserName: string; scope: UserOffboardingScope; affectedTaskCount: number; publisherTaskCount: number; primaryPublisherTaskCount: number; detailCompleterTaskCount: number; receiverTaskCount: number; receiverTaskItemCount: number; samples: OffboardingTaskSample[]; } export interface UserOffboardingExecuteResult { preview: UserOffboardingPreview; updatedPublisherTasks: number; updatedPrimaryPublisherTasks: number; updatedDetailCompleterTasks: number; updatedReceiverTasks: number; updatedReceiverTaskItems: number; transferLogCount: number; sourceUserDisabled: boolean; executedAt: string; } export const previewUserOffboarding = async ( payload: UserOffboardingRequest ): Promise => { const response = await request.post('/users/offboarding/preview', payload); return response.data; }; export const executeUserOffboarding = async ( payload: UserOffboardingRequest ): Promise => { const response = await request.post('/users/offboarding/execute', payload); return response.data; };