dept.service.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { Provide } from '@midwayjs/core';
  2. import { InjectEntityModel } from '@midwayjs/typeorm';
  3. import { Equal, In, Repository } from 'typeorm';
  4. import { Dept } from '../../entity/system/dept.entity';
  5. import { get, isNumber, orderBy } from 'lodash';
  6. import { BaseServiceV2 } from '../../frame/BaseServiceV2';
  7. @Provide()
  8. export class DeptService extends BaseServiceV2 {
  9. getQueryColumnsOpera(): object {
  10. return {};
  11. }
  12. @InjectEntityModel(Dept)
  13. model: Repository<Dept>;
  14. async queryAll() {
  15. // const data = await this.model.find({ order: { order_num: 'DESC' } });
  16. const { data } = await this.query(null, { order: { order_num: 'DESC' } });
  17. let treeData = data.filter(f => !f.parent_id);
  18. treeData = this.treeData(data, treeData);
  19. return treeData;
  20. }
  21. async getNextLevel(id: number, query = { skip: 0, limit: 10 }) {
  22. const builder = this.model.createQueryBuilder();
  23. builder.where(`parent_id = :value`, { value: id });
  24. if (isNumber(get(query, 'skip'))) builder.skip(get(query, 'skip'));
  25. if (isNumber(get(query, 'limit'))) builder.take(get(query, 'limit'));
  26. const result = await builder.getMany();
  27. const total = await builder.getCount();
  28. const ids = result.map(i => i.parent_id);
  29. // const parents = await this.model.find({ where: { id: In(ids) }, select: ['id', 'name'] });
  30. const { data: parents } = await this.query({ id: ids }, { selects: ['id', 'name'] }, { id: this.Opera.In });
  31. result.map(i => {
  32. if (!i.parent_id) return i;
  33. const parent = parents.find(f => f.id === i.parent_id);
  34. if (!parent) return;
  35. Object.assign(i, { parent_name: parent.name });
  36. return i;
  37. });
  38. return { data: result, total };
  39. }
  40. treeData(allList, nowList) {
  41. for (const nm of nowList) {
  42. const { id, parent_id } = nm;
  43. // 查下下级其是否有目录
  44. let children = allList.filter(f => f.parent_id === id);
  45. children = this.treeData(allList, children);
  46. if (children.length > 0) nm.children = children;
  47. // 换父级组件的名称
  48. if (parent_id) {
  49. const r = allList.find(f => f.id === parent_id);
  50. if (r) nm.parent_name = r.name;
  51. }
  52. }
  53. nowList = orderBy(nowList, ['order_num'], ['asc']);
  54. return nowList;
  55. }
  56. }