staff_data/apps/server/src/models/department/utils.ts

78 lines
2.4 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.

import {
UserProfile,
db,
DeptSimpleTreeNode,
TreeDataNode,
} from '@nice/common';
/**
* 将部门数据映射为DeptSimpleTreeNode结构
* @param department 部门数据对象
* @returns 返回格式化后的DeptSimpleTreeNode对象
* 数据结构说明:
* - id: 部门唯一标识
* - key: 部门唯一标识通常用于React中的key属性
* - value: 部门唯一标识,通常用于表单值
* - title: 部门名称
* - order: 部门排序值
* - pId: 父部门ID用于构建树形结构
* - isLeaf: 是否为叶子节点,即该部门是否没有子部门
* - hasStaff: 该部门是否包含员工
*/
export function mapToDeptSimpleTree(department: any): DeptSimpleTreeNode {
return {
id: department.id,
key: department.id,
value: department.id,
title: department.name,
order: department.order,
pId: department.parentId,
isLeaf: !Boolean(department.children?.length),
hasStaff: department?.deptStaffs?.length > 0,
};
}
/**
* 根据部门ID列表获取相关员工信息
* @param ids 部门ID列表
* @returns 返回与指定部门相关的员工ID列表
* 算法说明:
* - 使用数据库查询方法findMany根据部门ID列表查询相关部门的员工信息
* - 使用flatMap将查询结果扁平化提取所有员工ID
*/
export async function getStaffsByDeptIds(ids: string[]) {
const depts = await db.department.findMany({
where: { id: { in: ids } },
select: {
deptStaffs: {
select: { id: true },
},
},
});
return depts.flatMap((dept) => dept.deptStaffs);
}
/**
* 提取唯一的员工ID列表
* @param params 参数对象包含部门ID列表、员工ID列表和员工信息
* @returns 返回唯一的员工ID列表
* 算法说明:
* - 根据部门ID列表获取相关员工ID
* - 将部门员工ID与传入的员工ID列表合并并使用Set去重
* - 如果传入了员工信息则从结果中移除该员工的ID
* - 最终返回去重后的员工ID列表
*/
export async function extractUniqueStaffIds(params: {
deptIds?: string[];
staffIds?: string[];
staff?: UserProfile;
}): Promise<string[]> {
const { deptIds, staff, staffIds } = params;
const deptStaffs = await getStaffsByDeptIds(deptIds);
const result = new Set(deptStaffs.map((item) => item.id).concat(staffIds));
if (staff) {
result.delete(staff.id);
}
return Array.from(result);
}