1234567891011121314151617181920212223242526272829303132333435363738 |
- 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<typeof Menus>;
- @Provide()
- export class MenusService extends BaseService<modelType> {
- @InjectEntityModel(Menus)
- model: modelType;
- async queryMenu(): Promise<Array<object>> {
- 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;
- }
- }
|