123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { Inject, Provide } from '@midwayjs/decorator';
- import { BaseService } from '@cool-midway/core';
- import { InjectEntityModel } from '@midwayjs/typeorm';
- import { Repository } from 'typeorm';
- import { BaseSysDepartmentEntity } from '../../entity/sys/department';
- import * as _ from 'lodash';
- import { BaseSysRoleDepartmentEntity } from '../../entity/sys/role_department';
- import { BaseSysPermsService } from './perms';
- /**
- * 描述
- */
- @Provide()
- export class BaseSysDepartmentService extends BaseService {
- @InjectEntityModel(BaseSysDepartmentEntity)
- baseSysDepartmentEntity: Repository<BaseSysDepartmentEntity>;
- @InjectEntityModel(BaseSysRoleDepartmentEntity)
- baseSysRoleDepartmentEntity: Repository<BaseSysRoleDepartmentEntity>;
- @Inject()
- baseSysPermsService: BaseSysPermsService;
- @Inject()
- ctx;
- /**
- * 获得部门菜单
- */
- async list() {
- // 部门权限
- const permsDepartmentArr = await this.baseSysPermsService.departmentIds(
- this.ctx.admin.userId
- );
- // 过滤部门权限
- const find = this.baseSysDepartmentEntity.createQueryBuilder();
- if (this.ctx.admin.username !== 'admin')
- find.andWhere('id = ANY (:ids)', {
- ids: !_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null],
- });
- find.addOrderBy('"orderNum"', 'ASC');
- const departments: BaseSysDepartmentEntity[] = await find.getMany();
- if (!_.isEmpty(departments)) {
- departments.forEach(e => {
- const parentMenu = departments.filter(m => {
- e.parentId = parseInt(e.parentId + '');
- if (e.parentId == m.id) {
- return m.name;
- }
- });
- if (!_.isEmpty(parentMenu)) {
- e.parentName = parentMenu[0].name;
- }
- });
- }
- return departments;
- }
- /**
- * 根据多个ID获得部门权限信息
- * @param {[]} roleIds 数组
- * @param isAdmin 是否超管
- */
- async getByRoleIds(roleIds: number[], isAdmin) {
- if (!_.isEmpty(roleIds)) {
- if (isAdmin) {
- const result = await this.baseSysDepartmentEntity.find();
- return result.map(e => {
- return e.id;
- });
- }
- const result = await this.baseSysRoleDepartmentEntity
- .createQueryBuilder()
- .where('"roleId" = ANY (:roleIds)', { roleIds })
- .getMany();
- if (!_.isEmpty(result)) {
- return _.uniq(
- result.map(e => {
- return e.departmentId;
- })
- );
- }
- }
- return [];
- }
- /**
- * 部门排序
- * @param params
- */
- async order(params) {
- for (const e of params) {
- await this.baseSysDepartmentEntity.update(e.id, e);
- }
- }
- /**
- * 删除
- */
- async delete(ids: number[]) {
- const { deleteUser } = this.ctx.request.body;
- await super.delete(ids);
- if (deleteUser) {
- await this.nativeQuery(
- 'delete from base_sys_user where "departmentId" = ANY ($1)',
- [ids]
- );
- } else {
- const topDepartment = await this.baseSysDepartmentEntity
- .createQueryBuilder()
- .where('"parentId" is null')
- .getOne();
- if (topDepartment) {
- await this.nativeQuery(
- 'update base_sys_user a set a."departmentId" = $1 where a."departmentId" = ANY ($2)',
- [topDepartment.id, ids]
- );
- }
- }
- }
- }
|