1
0

dept.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import BaseService from '../../base';
  2. import * as _ from 'lodash';
  3. import { In } from 'typeorm';
  4. import { UpdateDeptDto } from '../../../dto/admin/sys/dept';
  5. /**
  6. * 系统部门Service
  7. */
  8. export default class SysDeptService extends BaseService {
  9. /**
  10. * 获取所有部门
  11. */
  12. async list() {
  13. return await this.getRepo().admin.sys.Department.find();
  14. }
  15. /**
  16. * 根据ID查找部门信息
  17. */
  18. async info(id: number) {
  19. const department = await this.getRepo().admin.sys.Department.findOne({ id });
  20. let parentDepartment: any = null;
  21. if (department!.parentId) {
  22. parentDepartment = await this.getRepo().admin.sys.Department.findOne({ id: department!.parentId });
  23. }
  24. return { department, parentDepartment };
  25. }
  26. /**
  27. * 更新部门信息
  28. */
  29. async update(param: UpdateDeptDto) {
  30. await this.getRepo().admin.sys.Department.update(param.id, { parentId: param.parentId === -1 ? undefined : param.parentId });
  31. }
  32. /**
  33. * 转移部门
  34. */
  35. async transfer(userIds: number[], deptId: number) {
  36. await this.getRepo().admin.sys.User.update({ id: In(userIds) }, { departmentId: deptId });
  37. }
  38. /**
  39. * 新增部门
  40. */
  41. async add(deptName: string, parentDeptId: number) {
  42. await this.getRepo().admin.sys.Department.insert({ name: deptName, parentId: parentDeptId === -1 ? undefined : parentDeptId });
  43. }
  44. /**
  45. * 根据ID删除部门
  46. */
  47. async delete(departmentId: number) {
  48. await this.getRepo().admin.sys.Department.delete(departmentId);
  49. }
  50. /**
  51. * 根据部门查询关联的用户ID
  52. */
  53. async countUserByDeptId(id: number) {
  54. return await this.getRepo().admin.sys.User.count({ departmentId: id });
  55. }
  56. /**
  57. * 根据部门查询关联的角色
  58. */
  59. async countRoleByDeptId(id: number) {
  60. return await this.getRepo().admin.sys.RoleDepartment.count({ departmentId: id });
  61. }
  62. /**
  63. * 根据当前角色id获取部门列表
  64. */
  65. async getDepts(uid: number) {
  66. const roleIds = await this.service.admin.sys.role.getRoleIdByUser(uid);
  67. let depts: any = [];
  68. if (_.includes(roleIds, this.config.rootRoleId)) {
  69. // root find all
  70. depts = await this.getRepo().admin.sys.Department.find();
  71. } else {
  72. // [ 1, 2, 3 ] role find
  73. depts = await this.getRepo().admin.sys.Department.createQueryBuilder('dept')
  74. .innerJoinAndSelect('sys_role_department', 'role_dept', 'dept.id = role_dept.department_id')
  75. .andWhere('role_dept.role_id IN (:...roldIds)', { roldIds: roleIds })
  76. .orderBy('dept.order_num', 'ASC')
  77. .getMany();
  78. }
  79. return depts;
  80. }
  81. }