refactor: code cleanup
This commit is contained in:
parent
812cd0766d
commit
bf2e315c9e
@ -4,6 +4,7 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "concurrently \"nodemon\" \"umi dev\"",
|
"start": "concurrently \"nodemon\" \"umi dev\"",
|
||||||
|
"start-api": "nodemon",
|
||||||
"build": "father-build && umi build",
|
"build": "father-build && umi build",
|
||||||
"postinstall": "umi generate tmp",
|
"postinstall": "umi generate tmp",
|
||||||
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
|
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
|
||||||
|
@ -34,6 +34,112 @@ const api = Api.create({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
title: '后台应用',
|
||||||
|
path: '/',
|
||||||
|
type: 'layout',
|
||||||
|
template: 'TopMenuLayout',
|
||||||
|
order: 1,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
title: '仪表盘',
|
||||||
|
type: 'page',
|
||||||
|
path: '/dashboard',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'page1',
|
||||||
|
order: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '数据',
|
||||||
|
type: 'layout',
|
||||||
|
path: '/collections',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'SideMenuLayout',
|
||||||
|
order: 3,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
title: '页面3',
|
||||||
|
type: 'page',
|
||||||
|
path: '/collections/page3',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'page3',
|
||||||
|
order: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '页面4',
|
||||||
|
type: 'page',
|
||||||
|
path: '/collections/page4',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'page4',
|
||||||
|
order: 6,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '页面5',
|
||||||
|
type: 'collection',
|
||||||
|
path: '/collections/collection1',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'collection',
|
||||||
|
collection: 'collection1',
|
||||||
|
order: 7,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '用户',
|
||||||
|
type: 'layout',
|
||||||
|
path: '/users',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'SideMenuLayout',
|
||||||
|
order: 3,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
title: '用户管理',
|
||||||
|
type: 'collection',
|
||||||
|
path: '/users/users',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'collection',
|
||||||
|
collection: 'users',
|
||||||
|
order: 1,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '配置',
|
||||||
|
type: 'layout',
|
||||||
|
path: '/settings',
|
||||||
|
icon: 'dashboard',
|
||||||
|
template: 'SideMenuLayout',
|
||||||
|
order: 4,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
title: '页面与菜单',
|
||||||
|
type: 'collection',
|
||||||
|
collection: 'pages',
|
||||||
|
path: '/settings/pages',
|
||||||
|
icon: 'dashboard',
|
||||||
|
order: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '数据表配置',
|
||||||
|
type: 'collection',
|
||||||
|
collection: 'collections',
|
||||||
|
path: '/settings/collections',
|
||||||
|
icon: 'dashboard',
|
||||||
|
order: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '权限配置',
|
||||||
|
type: 'collection',
|
||||||
|
collection: 'roles',
|
||||||
|
path: '/settings/roles',
|
||||||
|
icon: 'dashboard',
|
||||||
|
order: 3,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
await api
|
await api
|
||||||
.plugins([
|
.plugins([
|
||||||
@ -48,6 +154,12 @@ const api = Api.create({
|
|||||||
|
|
||||||
const database: Database = api.database;
|
const database: Database = api.database;
|
||||||
|
|
||||||
|
await database.sync();
|
||||||
|
|
||||||
|
const Page = database.getModel('pages');
|
||||||
|
const page = await Page.create(data);
|
||||||
|
await page.updateAssociations(data);
|
||||||
|
|
||||||
const [Collection, View, Action, Tab] = database.getModels(['collections', 'views', 'actions', 'tabs']);
|
const [Collection, View, Action, Tab] = database.getModels(['collections', 'views', 'actions', 'tabs']);
|
||||||
const tables = database.getTables([]);
|
const tables = database.getTables([]);
|
||||||
|
|
||||||
|
@ -1,27 +1,15 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import Database, { ModelCtor } from '@nocobase/database';
|
import Database, { ModelCtor } from '@nocobase/database';
|
||||||
import Resourcer from '@nocobase/resourcer';
|
import Resourcer from '@nocobase/resourcer';
|
||||||
import CollectionModel from './models/collection';
|
|
||||||
import getCollection from './actions/getCollection';
|
|
||||||
import getView from './actions/getView';
|
|
||||||
|
|
||||||
export default async function (this: any, options = {}) {
|
export default async function (this: any, options = {}) {
|
||||||
const database: Database = this.database;
|
const database: Database = this.database;
|
||||||
const resourcer: Resourcer = this.resourcer;
|
const resourcer: Resourcer = this.resourcer;
|
||||||
|
|
||||||
const tables = database.import({
|
database.import({
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
directory: path.resolve(__dirname, 'collections'),
|
||||||
});
|
});
|
||||||
|
|
||||||
await database.sync({
|
|
||||||
tables,
|
|
||||||
});
|
|
||||||
|
|
||||||
resourcer.registerHandler('getCollection', getCollection);
|
|
||||||
resourcer.registerHandler('getView', getView);
|
|
||||||
|
|
||||||
// console.log(resourcer.getRegisteredHandlers());
|
|
||||||
|
|
||||||
resourcer.import({
|
resourcer.import({
|
||||||
directory: path.resolve(__dirname, 'resources'),
|
directory: path.resolve(__dirname, 'resources'),
|
||||||
});
|
});
|
||||||
|
@ -6,15 +6,11 @@ export default async function (options = {}) {
|
|||||||
const database: Database = this.database;
|
const database: Database = this.database;
|
||||||
const resourcer: Resourcer = this.resourcer;
|
const resourcer: Resourcer = this.resourcer;
|
||||||
|
|
||||||
const tables = database.import({
|
database.import({
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
directory: path.resolve(__dirname, 'collections'),
|
||||||
});
|
});
|
||||||
|
|
||||||
resourcer.import({
|
resourcer.import({
|
||||||
directory: path.resolve(__dirname, 'resources'),
|
directory: path.resolve(__dirname, 'resources'),
|
||||||
});
|
});
|
||||||
|
|
||||||
await database.sync({
|
|
||||||
tables,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
33
packages/plugin-pages/src/actions/getCollection.ts
Normal file
33
packages/plugin-pages/src/actions/getCollection.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { Model, ModelCtor } from '@nocobase/database';
|
||||||
|
import { ResourceOptions } from '@nocobase/resourcer';
|
||||||
|
import { get } from 'lodash';
|
||||||
|
|
||||||
|
export default async (ctx, next) => {
|
||||||
|
const { resourceName, resourceKey } = ctx.action.params;
|
||||||
|
const [Collection, Tab, View] = ctx.db.getModels(['collections', 'tabs', 'views']) as ModelCtor<Model>[];
|
||||||
|
const collection = await Collection.findOne(Collection.parseApiJson({
|
||||||
|
filter: {
|
||||||
|
name: resourceName,
|
||||||
|
},
|
||||||
|
// fields: {
|
||||||
|
// // appends: ['tabs'],
|
||||||
|
// },
|
||||||
|
}));
|
||||||
|
const views = await collection.getViews({
|
||||||
|
where: {
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
collection.setDataValue('defaultViewId', get(views, [0, 'id']));
|
||||||
|
collection.setDataValue('defaultViewName', get(views, [0, 'name']));
|
||||||
|
const tabs = await collection.getTabs();
|
||||||
|
ctx.body = {
|
||||||
|
...collection.toJSON(),
|
||||||
|
tabs: tabs.map(tab => ({
|
||||||
|
...tab.toJSON(),
|
||||||
|
...tab.options,
|
||||||
|
viewCollectionName: tab.type == 'association' ? tab.options.association : tab.collection_name,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
await next();
|
||||||
|
}
|
45
packages/plugin-pages/src/actions/getView.ts
Normal file
45
packages/plugin-pages/src/actions/getView.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { ResourceOptions } from '@nocobase/resourcer';
|
||||||
|
import { Model, ModelCtor } from '@nocobase/database';
|
||||||
|
import { get } from 'lodash';
|
||||||
|
|
||||||
|
export default async (ctx, next) => {
|
||||||
|
const { resourceName, resourceKey } = ctx.action.params;
|
||||||
|
const [View, Field, Action] = ctx.db.getModels(['views', 'fields', 'actions']) as ModelCtor<Model>[];
|
||||||
|
const view = await View.findOne(View.parseApiJson({
|
||||||
|
filter: {
|
||||||
|
collection_name: resourceName,
|
||||||
|
name: resourceKey,
|
||||||
|
},
|
||||||
|
fields: {
|
||||||
|
appends: ['actions', 'fields'],
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
const collection = await view.getCollection();
|
||||||
|
const fields = await collection.getFields();
|
||||||
|
const actions = await collection.getActions();
|
||||||
|
const actionNames = view.options.actionNames||[];
|
||||||
|
console.log(view.options);
|
||||||
|
if (view.type === 'table') {
|
||||||
|
const defaultTabs = await collection.getTabs({
|
||||||
|
where: {
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
view.setDataValue('defaultTabName', get(defaultTabs, [0, 'name']));
|
||||||
|
}
|
||||||
|
if (view.options.updateViewId) {
|
||||||
|
view.setDataValue('rowViewName', view.options.updateViewName);
|
||||||
|
}
|
||||||
|
view.setDataValue('viewCollectionName', view.collection_name);
|
||||||
|
ctx.body = {
|
||||||
|
...view.toJSON(),
|
||||||
|
...(view.options||{}),
|
||||||
|
fields,
|
||||||
|
actions: actions.filter(action => actionNames.includes(action.name)).map(action => ({
|
||||||
|
...action.toJSON(),
|
||||||
|
...action.options,
|
||||||
|
viewCollectionName: action.collection_name,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
await next();
|
||||||
|
};
|
@ -1,129 +1,19 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import Database from '@nocobase/database';
|
import Database from '@nocobase/database';
|
||||||
import Resourcer from '@nocobase/resourcer';
|
import Resourcer from '@nocobase/resourcer';
|
||||||
|
import getCollection from './actions/getCollection';
|
||||||
const data = {
|
import getView from './actions/getView';
|
||||||
title: '后台应用',
|
|
||||||
path: '/',
|
|
||||||
type: 'layout',
|
|
||||||
template: 'TopMenuLayout',
|
|
||||||
order: 1,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: '仪表盘',
|
|
||||||
type: 'page',
|
|
||||||
path: '/dashboard',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'page1',
|
|
||||||
order: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '数据',
|
|
||||||
type: 'layout',
|
|
||||||
path: '/collections',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'SideMenuLayout',
|
|
||||||
order: 3,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: '页面3',
|
|
||||||
type: 'page',
|
|
||||||
path: '/collections/page3',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'page3',
|
|
||||||
order: 5,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '页面4',
|
|
||||||
type: 'page',
|
|
||||||
path: '/collections/page4',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'page4',
|
|
||||||
order: 6,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '页面5',
|
|
||||||
type: 'collection',
|
|
||||||
path: '/collections/collection1',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'collection',
|
|
||||||
collection: 'collection1',
|
|
||||||
order: 7,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '用户',
|
|
||||||
type: 'layout',
|
|
||||||
path: '/users',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'SideMenuLayout',
|
|
||||||
order: 3,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: '用户管理',
|
|
||||||
type: 'collection',
|
|
||||||
path: '/users/users',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'collection',
|
|
||||||
collection: 'users',
|
|
||||||
order: 1,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '配置',
|
|
||||||
type: 'layout',
|
|
||||||
path: '/settings',
|
|
||||||
icon: 'dashboard',
|
|
||||||
template: 'SideMenuLayout',
|
|
||||||
order: 4,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: '页面与菜单',
|
|
||||||
type: 'collection',
|
|
||||||
collection: 'pages',
|
|
||||||
path: '/settings/pages',
|
|
||||||
icon: 'dashboard',
|
|
||||||
order: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '数据表配置',
|
|
||||||
type: 'collection',
|
|
||||||
collection: 'collections',
|
|
||||||
path: '/settings/collections',
|
|
||||||
icon: 'dashboard',
|
|
||||||
order: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '权限配置',
|
|
||||||
type: 'collection',
|
|
||||||
collection: 'roles',
|
|
||||||
path: '/settings/roles',
|
|
||||||
icon: 'dashboard',
|
|
||||||
order: 3,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function (options = {}) {
|
export default async function (options = {}) {
|
||||||
const database: Database = this.database;
|
const database: Database = this.database;
|
||||||
const resourcer: Resourcer = this.resourcer;
|
const resourcer: Resourcer = this.resourcer;
|
||||||
|
|
||||||
const tables = database.import({
|
database.import({
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
directory: path.resolve(__dirname, 'collections'),
|
||||||
});
|
});
|
||||||
|
|
||||||
await database.sync({
|
resourcer.registerHandler('getCollection', getCollection);
|
||||||
tables,
|
resourcer.registerHandler('getView', getView);
|
||||||
});
|
|
||||||
|
|
||||||
const Page = database.getModel('pages');
|
|
||||||
|
|
||||||
const page = await Page.create(data);
|
|
||||||
await page.updateAssociations(data);
|
|
||||||
|
|
||||||
resourcer.import({
|
resourcer.import({
|
||||||
directory: path.resolve(__dirname, 'resources'),
|
directory: path.resolve(__dirname, 'resources'),
|
||||||
|
@ -6,15 +6,11 @@ export default async function (options = {}) {
|
|||||||
const database: Database = this.database;
|
const database: Database = this.database;
|
||||||
const resourcer: Resourcer = this.resourcer;
|
const resourcer: Resourcer = this.resourcer;
|
||||||
|
|
||||||
const tables = database.import({
|
database.import({
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
directory: path.resolve(__dirname, 'collections'),
|
||||||
});
|
});
|
||||||
|
|
||||||
resourcer.import({
|
resourcer.import({
|
||||||
directory: path.resolve(__dirname, 'resources'),
|
directory: path.resolve(__dirname, 'resources'),
|
||||||
});
|
});
|
||||||
|
|
||||||
await database.sync({
|
|
||||||
tables,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,11 @@ export default async function (options = {}) {
|
|||||||
const database: Database = this.database;
|
const database: Database = this.database;
|
||||||
const resourcer: Resourcer = this.resourcer;
|
const resourcer: Resourcer = this.resourcer;
|
||||||
|
|
||||||
const tables = database.import({
|
database.import({
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
directory: path.resolve(__dirname, 'collections'),
|
||||||
});
|
});
|
||||||
|
|
||||||
resourcer.import({
|
resourcer.import({
|
||||||
directory: path.resolve(__dirname, 'resources'),
|
directory: path.resolve(__dirname, 'resources'),
|
||||||
});
|
});
|
||||||
|
|
||||||
await database.sync({
|
|
||||||
tables,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user