import { Provide } from '@midwayjs/core'; import { InjectEntityModel } from '@midwayjs/typeorm'; import { Equal, In, Repository } from 'typeorm'; import { Dept } from '../../entity/system/dept.entity'; import { get, isNumber, orderBy } from 'lodash'; import { BaseServiceV2 } from '../../frame/BaseServiceV2'; @Provide() export class DeptService extends BaseServiceV2 { getQueryColumnsOpera(): object { return {}; } @InjectEntityModel(Dept) model: Repository; async queryAll() { // const data = await this.model.find({ order: { order_num: 'DESC' } }); const { data } = await this.query(null, { order: { order_num: 'DESC' } }); let treeData = data.filter(f => !f.parent_id); treeData = this.treeData(data, treeData); return treeData; } async getNextLevel(id: number, query = { skip: 0, limit: 10 }) { const builder = this.model.createQueryBuilder(); builder.where(`parent_id = :value`, { value: id }); if (isNumber(get(query, 'skip'))) builder.skip(get(query, 'skip')); if (isNumber(get(query, 'limit'))) builder.take(get(query, 'limit')); const result = await builder.getMany(); const total = await builder.getCount(); const ids = result.map(i => i.parent_id); // const parents = await this.model.find({ where: { id: In(ids) }, select: ['id', 'name'] }); const { data: parents } = await this.query({ id: ids }, { selects: ['id', 'name'] }, { id: this.Opera.In }); result.map(i => { if (!i.parent_id) return i; const parent = parents.find(f => f.id === i.parent_id); if (!parent) return; Object.assign(i, { parent_name: parent.name }); return i; }); return { data: result, total }; } treeData(allList, nowList) { for (const nm of nowList) { const { id, parent_id } = nm; // 查下下级其是否有目录 let children = allList.filter(f => f.parent_id === id); children = this.treeData(allList, children); if (children.length > 0) nm.children = children; // 换父级组件的名称 if (parent_id) { const r = allList.find(f => f.id === parent_id); if (r) nm.parent_name = r.name; } } nowList = orderBy(nowList, ['order_num'], ['asc']); return nowList; } }