import { Provide } from '@midwayjs/decorator'; import { InjectEntityModel } from '@midwayjs/typegoose'; import { ReturnModelType } from '@typegoose/typegoose'; import { BaseService } from 'free-midway-component'; import { Menus } from '../entity/menus.entity'; import orderBy = require('lodash/orderBy'); import { Types } from 'mongoose'; const ObjectId = Types.ObjectId; type modelType = ReturnModelType; @Provide() export class MenusService extends BaseService { @InjectEntityModel(Menus) model: modelType; async queryMenu(): Promise> { const data = await this.model.find({ is_use: '0' }, { meta: 0, __v: 0 }).sort({ order_num: 1 }).lean(); let treeMenu = data.filter(f => !f.parent_id); treeMenu = this.treeMenu(data, treeMenu); return treeMenu; } treeMenu(allMenus, nowMenu) { for (const nm of nowMenu) { const { _id, parent_id } = nm; // 查下下级其是否有目录 let children = allMenus.filter(f => new ObjectId(f.parent_id).equals(_id)); children = this.treeMenu(allMenus, children); if (children.length > 0) nm.children = children; // 换父级组件的名称 if (parent_id) { const r = allMenus.find(f => new ObjectId(f._id).equals(parent_id)); if (r) nm.parent_name = r.name; } } nowMenu = orderBy(nowMenu, ['order_num'], ['asc']); return nowMenu; } }