department.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import { Inject, Provide } from '@midwayjs/decorator';
  2. import { BaseService } from '@cool-midway/core';
  3. import { InjectEntityModel } from '@midwayjs/typeorm';
  4. import { Repository } from 'typeorm';
  5. import { BaseSysDepartmentEntity } from '../../entity/sys/department';
  6. import * as _ from 'lodash';
  7. import { BaseSysRoleDepartmentEntity } from '../../entity/sys/role_department';
  8. import { BaseSysPermsService } from './perms';
  9. /**
  10. * 描述
  11. */
  12. @Provide()
  13. export class BaseSysDepartmentService extends BaseService {
  14. @InjectEntityModel(BaseSysDepartmentEntity)
  15. baseSysDepartmentEntity: Repository<BaseSysDepartmentEntity>;
  16. @InjectEntityModel(BaseSysRoleDepartmentEntity)
  17. baseSysRoleDepartmentEntity: Repository<BaseSysRoleDepartmentEntity>;
  18. @Inject()
  19. baseSysPermsService: BaseSysPermsService;
  20. @Inject()
  21. ctx;
  22. /**
  23. * 获得部门菜单
  24. */
  25. async list() {
  26. // 部门权限
  27. const permsDepartmentArr = await this.baseSysPermsService.departmentIds(
  28. this.ctx.admin.userId
  29. );
  30. // 过滤部门权限
  31. const find = this.baseSysDepartmentEntity.createQueryBuilder();
  32. if (this.ctx.admin.username !== 'admin')
  33. find.andWhere('id = ANY (:ids)', {
  34. ids: !_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null],
  35. });
  36. find.addOrderBy('"orderNum"', 'ASC');
  37. const departments: BaseSysDepartmentEntity[] = await find.getMany();
  38. if (!_.isEmpty(departments)) {
  39. departments.forEach(e => {
  40. const parentMenu = departments.filter(m => {
  41. e.parentId = parseInt(e.parentId + '');
  42. if (e.parentId == m.id) {
  43. return m.name;
  44. }
  45. });
  46. if (!_.isEmpty(parentMenu)) {
  47. e.parentName = parentMenu[0].name;
  48. }
  49. });
  50. }
  51. return departments;
  52. }
  53. /**
  54. * 根据多个ID获得部门权限信息
  55. * @param {[]} roleIds 数组
  56. * @param isAdmin 是否超管
  57. */
  58. async getByRoleIds(roleIds: number[], isAdmin) {
  59. if (!_.isEmpty(roleIds)) {
  60. if (isAdmin) {
  61. const result = await this.baseSysDepartmentEntity.find();
  62. return result.map(e => {
  63. return e.id;
  64. });
  65. }
  66. const result = await this.baseSysRoleDepartmentEntity
  67. .createQueryBuilder()
  68. .where('"roleId" = ANY (:roleIds)', { roleIds })
  69. .getMany();
  70. if (!_.isEmpty(result)) {
  71. return _.uniq(
  72. result.map(e => {
  73. return e.departmentId;
  74. })
  75. );
  76. }
  77. }
  78. return [];
  79. }
  80. /**
  81. * 部门排序
  82. * @param params
  83. */
  84. async order(params) {
  85. for (const e of params) {
  86. await this.baseSysDepartmentEntity.update(e.id, e);
  87. }
  88. }
  89. /**
  90. * 删除
  91. */
  92. async delete(ids: number[]) {
  93. const { deleteUser } = this.ctx.request.body;
  94. await super.delete(ids);
  95. if (deleteUser) {
  96. await this.nativeQuery(
  97. 'delete from base_sys_user where "departmentId" = ANY ($1)',
  98. [ids]
  99. );
  100. } else {
  101. const topDepartment = await this.baseSysDepartmentEntity
  102. .createQueryBuilder()
  103. .where('"parentId" is null')
  104. .getOne();
  105. if (topDepartment) {
  106. await this.nativeQuery(
  107. 'update base_sys_user a set a."departmentId" = $1 where a."departmentId" = ANY ($2)',
  108. [topDepartment.id, ids]
  109. );
  110. }
  111. }
  112. }
  113. }