| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import BaseService from '../../base';
- import * as _ from 'lodash';
- import { In } from 'typeorm';
- import { UpdateDeptDto } from '../../../dto/admin/sys/dept';
- /**
- * 系统部门Service
- */
- export default class SysDeptService extends BaseService {
- /**
- * 获取所有部门
- */
- async list() {
- return await this.getRepo().admin.sys.Department.find();
- }
- /**
- * 根据ID查找部门信息
- */
- async info(id: number) {
- const department = await this.getRepo().admin.sys.Department.findOne({ id });
- let parentDepartment: any = null;
- if (department!.parentId) {
- parentDepartment = await this.getRepo().admin.sys.Department.findOne({ id: department!.parentId });
- }
- return { department, parentDepartment };
- }
- /**
- * 更新部门信息
- */
- async update(param: UpdateDeptDto) {
- await this.getRepo().admin.sys.Department.update(param.id, { parentId: param.parentId === -1 ? undefined : param.parentId });
- }
- /**
- * 转移部门
- */
- async transfer(userIds: number[], deptId: number) {
- await this.getRepo().admin.sys.User.update({ id: In(userIds) }, { departmentId: deptId });
- }
- /**
- * 新增部门
- */
- async add(deptName: string, parentDeptId: number) {
- await this.getRepo().admin.sys.Department.insert({ name: deptName, parentId: parentDeptId === -1 ? undefined : parentDeptId });
- }
- /**
- * 根据ID删除部门
- */
- async delete(departmentId: number) {
- await this.getRepo().admin.sys.Department.delete(departmentId);
- }
- /**
- * 根据部门查询关联的用户ID
- */
- async countUserByDeptId(id: number) {
- return await this.getRepo().admin.sys.User.count({ departmentId: id });
- }
- /**
- * 根据部门查询关联的角色
- */
- async countRoleByDeptId(id: number) {
- return await this.getRepo().admin.sys.RoleDepartment.count({ departmentId: id });
- }
- /**
- * 根据当前角色id获取部门列表
- */
- async getDepts(uid: number) {
- const roleIds = await this.service.admin.sys.role.getRoleIdByUser(uid);
- let depts: any = [];
- if (_.includes(roleIds, this.config.rootRoleId)) {
- // root find all
- depts = await this.getRepo().admin.sys.Department.find();
- } else {
- // [ 1, 2, 3 ] role find
- depts = await this.getRepo().admin.sys.Department.createQueryBuilder('dept')
- .innerJoinAndSelect('sys_role_department', 'role_dept', 'dept.id = role_dept.department_id')
- .andWhere('role_dept.role_id IN (:...roldIds)', { roldIds: roleIds })
- .orderBy('dept.order_num', 'ASC')
- .getMany();
- }
- return depts;
- }
- }
|