|
@@ -2,14 +2,75 @@
|
|
|
const { CrudService } = require('naf-framework-mongoose-free/lib/service');
|
|
|
const template = require('../public/table-template');
|
|
|
const TSTemplate = require('../public/ts-template');
|
|
|
+const _ = require('lodash');
|
|
|
+const { ObjectId } = require('mongoose').Types;
|
|
|
class TableService extends CrudService {
|
|
|
constructor(ctx) {
|
|
|
super(ctx, 'table');
|
|
|
this.model = this.ctx.model.Table;
|
|
|
+ this.dirModel = this.ctx.model.Dir;
|
|
|
}
|
|
|
- async test(data) {
|
|
|
- console.log(data);
|
|
|
+ async query(query) {
|
|
|
+ console.log('line 11 in function:');
|
|
|
+ const project = _.get(query, 'project');
|
|
|
+ let dirs = [];
|
|
|
+ if (project) {
|
|
|
+ dirs = await this.dirModel.find({ project }, { name: 1, super: 1, project: 1, remark: 1, type: 'dir' }).lean();
|
|
|
+ }
|
|
|
+ const datas = await this.model.find(query, { name: 1, name_zh: 1, project: 1, dir: 1, type: 'table' }).lean();
|
|
|
+ const newData = this.compareList(dirs, datas);
|
|
|
+ return newData;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 组合显示列表
|
|
|
+ * @param {Array} dirs 文件夹
|
|
|
+ * @param {Array} tables 表数据
|
|
|
+ */
|
|
|
+ compareList(dirs, tables) {
|
|
|
+ const result = [];
|
|
|
+ const noDirTables = tables.filter((f) => !f.dir);
|
|
|
+ const inDirTables = tables.filter((f) => f.dir);
|
|
|
+ const firstLevelDir = dirs.filter((f) => !f.super);
|
|
|
+ const inDirDirs = dirs.filter((f) => f.super);
|
|
|
+ let newDir = this.makeDir(firstLevelDir, inDirDirs);
|
|
|
+ this.compareTablesForDir(newDir, tables);
|
|
|
+ result.push(...newDir, ...noDirTables);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 整理文件夹数据
|
|
|
+ * @param {Array} thisLevel 当前层级文件夹
|
|
|
+ * @param {Array} others 其他所属文件夹
|
|
|
+ */
|
|
|
+ makeDir(thisLevel, others) {
|
|
|
+ for (const tl of thisLevel) {
|
|
|
+ const _id = tl._id;
|
|
|
+ let children = others.filter((f) => ObjectId(_id).equals(f.super));
|
|
|
+ if (children.length <= 0) continue;
|
|
|
+ const newOthers = others.filter((f) => children.find((cf) => !ObjectId(cf._id).equals(f._id)));
|
|
|
+ children = this.makeDir(children, newOthers);
|
|
|
+ tl.children = children;
|
|
|
+ }
|
|
|
+ return thisLevel;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 组合文件夹和表
|
|
|
+ * @param {Array} dirs 文件夹
|
|
|
+ * @param {Array} tables 表数据
|
|
|
+ */
|
|
|
+ compareTablesForDir(dirs, tables) {
|
|
|
+ for (const dir of dirs) {
|
|
|
+ const { _id, children = [] } = dir;
|
|
|
+ const dts = tables.filter((f) => ObjectId(f.dir).equals(_id));
|
|
|
+ dir.tables = dts;
|
|
|
+ if (children.length <= 0) continue;
|
|
|
+ const othersTables = tables.filter((f) => !ObjectId(f.dir).equals(_id));
|
|
|
+ dir.children = this.compareTablesForDir(children, othersTables);
|
|
|
+ }
|
|
|
+ return dirs;
|
|
|
+ }
|
|
|
+
|
|
|
async toExport({ ids }) {
|
|
|
const res = await this.model.find({ _id: { $in: ids } });
|
|
|
const data = {};
|