From 60f2cbb1f903295550b3293231d209bd995c904d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=87=E7=BA=AF?= Date: Mon, 14 Dec 2020 20:38:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20route=E6=8F=92=E4=BB=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/fes-plugin-access/src/index.js | 13 +++++++- .../fes-plugin-access/src/template/core.tpl | 2 +- .../src/template/runtime.tpl | 4 +-- packages/fes-plugin-built-in/src/index.js | 3 +- .../generateFiles/core/plugin/index.js | 2 ++ .../generateFiles/core/routes/index.js | 31 ----------------- .../src/plugins/generateFiles/fes/fes.tpl | 10 ++++-- .../misc/{routes.js => route/index.js} | 33 ++++++++++++++++++- .../routes => misc/route/template}/routes.tpl | 4 +-- .../plugins/misc/route/template/runtime.tpl | 6 ++++ packages/fes-template/.fes.js | 5 +++ packages/fes-template/src/app.js | 4 ++- packages/fes-template/src/pages/index.vue | 16 ++++----- 13 files changed, 78 insertions(+), 55 deletions(-) delete mode 100644 packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js rename packages/fes-plugin-built-in/src/plugins/misc/{routes.js => route/index.js} (88%) rename packages/fes-plugin-built-in/src/plugins/{generateFiles/core/routes => misc/route/template}/routes.tpl (92%) create mode 100644 packages/fes-plugin-built-in/src/plugins/misc/route/template/runtime.tpl diff --git a/packages/fes-plugin-access/src/index.js b/packages/fes-plugin-access/src/index.js index 0868f041..f7471110 100644 --- a/packages/fes-plugin-access/src/index.js +++ b/packages/fes-plugin-access/src/index.js @@ -86,7 +86,18 @@ export default (api) => { utils: { Mustache } } = api; - api.addRuntimePluginKey(() => 'access'); + api.describe({ + config: { + schema(joi) { + return joi.object({ + roles: joi + .object() + }); + }, + default: { + } + } + }); const absoluteFilePath = join(namespace, 'core.js'); diff --git a/packages/fes-plugin-access/src/template/core.tpl b/packages/fes-plugin-access/src/template/core.tpl index 0a95b79e..8152799e 100644 --- a/packages/fes-plugin-access/src/template/core.tpl +++ b/packages/fes-plugin-access/src/template/core.tpl @@ -11,7 +11,7 @@ function isPromise(obj) { const state = reactive({ roles: {{{REPLACE_ROLES}}}, currentRoleId: "", - currentAccessIds: ["/"], + currentAccessIds: [], }); const rolePromiseList = []; diff --git a/packages/fes-plugin-access/src/template/runtime.tpl b/packages/fes-plugin-access/src/template/runtime.tpl index c40500a3..72c950d7 100644 --- a/packages/fes-plugin-access/src/template/runtime.tpl +++ b/packages/fes-plugin-access/src/template/runtime.tpl @@ -1,4 +1,4 @@ -import { access } from './core'; +import { access } from "./core"; export function onRouterCreated({ router }) { router.beforeEach(async (to, from, next) => { @@ -15,4 +15,4 @@ export function onRouterCreated({ router }) { next(false); } }); -} \ No newline at end of file +} diff --git a/packages/fes-plugin-built-in/src/index.js b/packages/fes-plugin-built-in/src/index.js index 8b41572c..8cdb2618 100644 --- a/packages/fes-plugin-built-in/src/index.js +++ b/packages/fes-plugin-built-in/src/index.js @@ -5,11 +5,10 @@ export default [ require.resolve('./plugins/registerMethods'), // misc - require.resolve('./plugins/misc/routes'), + require.resolve('./plugins/misc/route'), // generate files require.resolve('./plugins/generateFiles/core/plugin'), - require.resolve('./plugins/generateFiles/core/routes'), require.resolve('./plugins/generateFiles/core/exports/coreExports'), require.resolve('./plugins/generateFiles/core/exports/pluginExports'), require.resolve('./plugins/generateFiles/fes'), diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js index 387a0911..1eccdbed 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js +++ b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js @@ -18,6 +18,8 @@ export default function (api) { initialValue: [ 'modifyClientRenderOpts', 'rootContainer', + // app生成时触发 + 'onAppCreated', // 渲染 'render', // 修改路由 diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js deleted file mode 100644 index 2fffb97d..00000000 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import { readFileSync } from 'fs'; -import { join } from 'path'; -import { runtimePath } from '../../../../utils/constants'; - -export default function (api) { - const { - utils: { Mustache } - } = api; - - const absoluteFilePath = 'core/routes.js'; - - api.onGenerateFiles(async () => { - const routesTpl = readFileSync(join(__dirname, 'routes.tpl'), 'utf-8'); - const routes = await api.getRoutesJSON(); - api.writeTmpFile({ - path: absoluteFilePath, - content: Mustache.render(routesTpl, { - runtimePath, - routes, - config: api.config - }) - }); - }); - - api.addCoreExports(() => [ - { - specifiers: ['router'], - source: absoluteFilePath - } - ]); -} diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/fes/fes.tpl b/packages/fes-plugin-built-in/src/plugins/generateFiles/fes/fes.tpl index 1d207106..db5f2974 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/fes/fes.tpl +++ b/packages/fes-plugin-built-in/src/plugins/generateFiles/fes/fes.tpl @@ -7,7 +7,7 @@ import { import { plugin } from './core/plugin'; import './core/pluginRegister'; import { ApplyPluginsType } from '{{{ runtimePath }}}'; -import { createRouter, getRoutes } from './core/routes'; +import { getRoutes } from './core/routes/routes'; {{{ imports }}} {{{ entryCodeAhead }}} @@ -24,9 +24,13 @@ const renderClient = (opts = {}) => { } }); - const router = createRouter(); const app = createApp(rootContainer); - app.use(router); + + plugin.applyPlugins({ + key: 'onAppCreated', + type: ApplyPluginsType.event, + args: { app }, + }); // TODO other plugins install if (rootElement) { diff --git a/packages/fes-plugin-built-in/src/plugins/misc/routes.js b/packages/fes-plugin-built-in/src/plugins/misc/route/index.js similarity index 88% rename from packages/fes-plugin-built-in/src/plugins/misc/routes.js rename to packages/fes-plugin-built-in/src/plugins/misc/route/index.js index 00268450..cdf86b59 100644 --- a/packages/fes-plugin-built-in/src/plugins/misc/routes.js +++ b/packages/fes-plugin-built-in/src/plugins/misc/route/index.js @@ -1,8 +1,9 @@ -import { readdirSync, statSync } from 'fs'; +import { readdirSync, statSync, readFileSync } from 'fs'; import { join, extname, posix, basename } from 'path'; import { lodash } from '@umijs/utils'; +import { runtimePath } from '../../../utils/constants'; // pages // ├── index.vue # 根路由页面 路径 / @@ -230,4 +231,34 @@ export default function (api) { return getRoutesJSON({ routes, config: api.config }); } }); + + const { + utils: { Mustache } + } = api; + + const namespace = 'core/routes'; + + const absCoreFilePath = join(namespace, 'routes.js'); + + const absRuntimeFilePath = join(namespace, 'runtime.js'); + + api.onGenerateFiles(async () => { + const routesTpl = readFileSync(join(__dirname, 'template/routes.tpl'), 'utf-8'); + const routes = await api.getRoutesJSON(); + api.writeTmpFile({ + path: absCoreFilePath, + content: Mustache.render(routesTpl, { + runtimePath, + routes, + config: api.config + }) + }); + + api.writeTmpFile({ + path: absRuntimeFilePath, + content: readFileSync(join(__dirname, 'template/runtime.tpl'), 'utf-8') + }); + }); + + api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`); } diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/routes.tpl b/packages/fes-plugin-built-in/src/plugins/misc/route/template/routes.tpl similarity index 92% rename from packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/routes.tpl rename to packages/fes-plugin-built-in/src/plugins/misc/route/template/routes.tpl index 631f2c2c..60d95fc5 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/routes.tpl +++ b/packages/fes-plugin-built-in/src/plugins/misc/route/template/routes.tpl @@ -1,5 +1,5 @@ import { createRouter as createVueRouter, createWebHashHistory, ApplyPluginsType } from '{{{ runtimePath }}}'; -import { plugin } from './plugin'; +import { plugin } from '@@/core/coreExports'; export function getRoutes() { const routes = {{{ routes }}}; @@ -31,5 +31,3 @@ export const createRouter = () => { return router; }; - -export { router } \ No newline at end of file diff --git a/packages/fes-plugin-built-in/src/plugins/misc/route/template/runtime.tpl b/packages/fes-plugin-built-in/src/plugins/misc/route/template/runtime.tpl new file mode 100644 index 00000000..3c40ee5d --- /dev/null +++ b/packages/fes-plugin-built-in/src/plugins/misc/route/template/runtime.tpl @@ -0,0 +1,6 @@ +import { createRouter } from "./routes"; + +export function onAppCreated({ app }) { + const router = createRouter(); + app.use(router); +} diff --git a/packages/fes-template/.fes.js b/packages/fes-template/.fes.js index aeb4a184..f386ba0c 100644 --- a/packages/fes-template/.fes.js +++ b/packages/fes-template/.fes.js @@ -2,4 +2,9 @@ export default { + access: { + roles: { + admin: ["/", "/onepiece"] + } + } }; diff --git a/packages/fes-template/src/app.js b/packages/fes-template/src/app.js index 16d09ce1..e24e2c1b 100644 --- a/packages/fes-template/src/app.js +++ b/packages/fes-template/src/app.js @@ -1,6 +1,6 @@ +import { access } from '@webank/fes'; import PageLoading from '@/components/PageLoading.vue'; - /** * 获取用户信息比较慢的时候会展示一个 loading */ @@ -12,8 +12,10 @@ export const initialStateConfig = { * 设置页面初始化状态 */ export async function getInitialState() { + const { setRole } = access; const syncFunc = () => new Promise((resolve) => { setTimeout(() => { + setRole('admin'); resolve({ a: 1, b: 2 diff --git a/packages/fes-template/src/pages/index.vue b/packages/fes-template/src/pages/index.vue index 8918b819..6c02798a 100644 --- a/packages/fes-template/src/pages/index.vue +++ b/packages/fes-template/src/pages/index.vue @@ -8,28 +8,24 @@