From a9dd94506ae30c83f1122d8dd32ecafdb18d7bb0 Mon Sep 17 00:00:00 2001 From: harrywan <445436867@qq.com> Date: Wed, 22 Jun 2022 14:25:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=20=E9=87=8D=E6=9E=84plugin-layout?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E4=B8=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: 更新文档 * break: plugin-layout优化api * break: 去掉switch配置,改为使用navigation * feat: 重构layout * docs: 升级文档 * feat: 无logo和title时隐藏dom * fix: 修复一些问题 * fix: 配置提示 * fix: build watch copy 路径识别问题 * docs: 文档 Co-authored-by: winixt --- docs/.vuepress/public/left-right.png | Bin 0 -> 117270 bytes docs/guide/route.md | 68 ++--- docs/reference/plugin/plugins/layout.md | 274 ++++++++---------- packages/fes-plugin-layout/src/index.js | 25 +- packages/fes-plugin-layout/src/node/helper.js | 8 +- .../src/runtime/helpers/getConfig.tpl | 15 + .../src/runtime/helpers/getRuntimeConfig.js | 20 -- .../src/runtime/helpers/pluginAccess.js | 37 +-- .../src/runtime/helpers/pluginLocale.js | 22 +- .../src/runtime/helpers/utils.js | 17 +- .../fes-plugin-layout/src/runtime/index.js | 1 + .../fes-plugin-layout/src/runtime/index.tpl | 79 ----- .../fes-plugin-layout/src/runtime/runtime.js | 76 ++--- .../src/runtime/views/403.vue | 104 ++----- .../src/runtime/views/404.vue | 87 +----- .../src/runtime/views/BaseLayout.vue | 201 +++++++------ .../src/runtime/views/MultiTabProvider.vue | 30 +- .../src/runtime/views/index.tpl | 39 +++ .../src/runtime/views/page.vue | 64 ++++ packages/fes-plugin-layout/types.d.ts | 38 ++- .../src/runtime/views/SelectLang.vue | 23 +- packages/fes-template-vite/src/app.jsx | 2 +- packages/fes-template/.fes.js | 2 +- packages/fes-template/src/app.js | 25 +- .../src/components/UserCenter.vue | 2 +- packages/fes-template/src/pages/pinia.vue | 19 +- scripts/build.mjs | 23 +- 27 files changed, 608 insertions(+), 693 deletions(-) create mode 100644 docs/.vuepress/public/left-right.png create mode 100644 packages/fes-plugin-layout/src/runtime/helpers/getConfig.tpl delete mode 100644 packages/fes-plugin-layout/src/runtime/helpers/getRuntimeConfig.js create mode 100644 packages/fes-plugin-layout/src/runtime/index.js delete mode 100644 packages/fes-plugin-layout/src/runtime/index.tpl create mode 100644 packages/fes-plugin-layout/src/runtime/views/index.tpl create mode 100644 packages/fes-plugin-layout/src/runtime/views/page.vue diff --git a/docs/.vuepress/public/left-right.png b/docs/.vuepress/public/left-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c102083cd3fad58d6dd906fa59fdecd9b640c2 GIT binary patch literal 117270 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 dfw*>dUe`}9U4C1?_8j - +我们使用`defineRouteMeta` 配置 `meta`: + +```js +import { defineRouteMete } from '@fesjs/fes'; +defineRouteMeta({ + name: "store", + title: "vuex测试" +}) +``` + +当然在单文件组件中,还可以通过``配置 `meta`: ```vue @@ -199,33 +219,13 @@ const router = new VueRouter({ ``` - - - -```jsx -import { defineRouteMeta, useRoute } from '@fesjs/fes'; -defineRouteMeta({ - name: "store", - title: "vuex测试" -}) -``` - - - - -```tsx -import { defineRouteMeta, useRoute } from '@fesjs/fes'; -defineRouteMeta({ - name: "store", - title: "vuex测试" -}) -``` - - - +::: tip +推荐使用`defineRouteMete`,有更好的提示。 +::: -则编译后的路由配置为: + +路由元信息在编译后会附加到路由配置中: ```js{5-8} [ { @@ -239,16 +239,6 @@ defineRouteMeta({ ] ``` -### 智能路由 -可以看到,编译后路由都会有 `count` 属性,这是我们根据精准匹配优先算法原则设计出路由排名算法,对匹配到的路由打分: -- 路由的路径每个子项得到4分 -- 子项为静态细分(`/list`)再加3分 -- 子项为动态细分(`/:orderId`)再加2分 -- 根段(`/`)再1分 -- 通配符(`*`)匹配到的减去1分 - -当我们跳转路由时,如果 URL 匹配到多个路由,则选择分数最高的路由。 - ## 路由跳转 想学习更多,可以查看 [Vue Router 官方文档](https://next.router.vuejs.org/zh/guide/essentials/navigation.html#%E6%9B%BF%E6%8D%A2%E5%BD%93%E5%89%8D%E4%BD%8D%E7%BD%AE)。 diff --git a/docs/reference/plugin/plugins/layout.md b/docs/reference/plugin/plugins/layout.md index 67609352..f13e3db8 100644 --- a/docs/reference/plugin/plugins/layout.md +++ b/docs/reference/plugin/plugins/layout.md @@ -1,16 +1,16 @@ # @fesjs/plugin-layout ## 介绍 -为了进一步降低研发成本,我们尝试将布局通过 fes 插件的方式内置,只需通过简单的配置即可拥有布局,包括导航以及侧边栏。从而做到用户无需关心布局。 +为了进一步降低研发成本,我们将布局利用 `fes.js` 插件的方式内置,只需通过简单的配置即可拥有布局,包括导航以及侧边栏。从而做到用户无需关心布局。 - 侧边栏菜单数据根据路由中的配置自动生成。 -- 布局,提供 `side`、 `top`、`mixin` 三种布局。 +- 布局,提供 `side`、 `top`、`mixin`、`left-right` 四种布局。 - 主题,提供 `light`、`dark` 两种主题。 - 默认实现对路由的 404、403 处理。 - 搭配 [@fesjs/plugin-access](./access.html) 插件使用,可以完成对路由的权限控制。 - 搭配 [@fesjs/plugin-locale](./locale.html) 插件使用,提供切换语言的能力。 -- 支持自定义头部区域。 -- 菜单支持配置icon -- 菜单标题支持国际化 +- 支持自定义头部或者侧边栏区域。 +- 菜单支持配置icon。 +- 菜单标题支持国际化。 - 可配置页面是否需要 layout。 @@ -19,21 +19,14 @@ ```json { "dependencies": { - "@fesjs/fes": "^2.0.0", - "@fesjs/plugin-layout": "^4.0.0" + "@fesjs/fes": "^3.0.0", + "@fesjs/plugin-layout": "^5.0.0" }, } ``` ## 布局类型 -配置参数是 `navigation`, 布局有三种类型 `side`、`mixin` 和 `top`, 默认是 `side`: -```js -export default { - layout: { - navigation: 'side' - } -} -``` +配置参数是 `navigation`, 布局有三种类型 `side`、`mixin` 、`top` 和 `left-right`, 默认是 `side`。 ### side @@ -47,45 +40,57 @@ export default { mixin -### 页面禁用布局 -布局是默认开启的,但是可能某些页面不需要展示布局样式,比如登录页面。我们只需要在页面的`.vue`中添加如下配置: -```vue - -{ - "layout": false -} - -``` -如果只是不想展示`sidebar`,则: +### left-right + +left-right + +### 页面个性化 + +可以为页面单独设置布局类型: ``` { "layout": { - "sidebar": false + "navigation": 'top' } } ``` -`layout`的可选配置有: - -- **sidebar**: 左侧区域,从v4.0.0开始,之前名称叫`side` - -- **header**: 头部区域,从v4.0.0开始,之前名称叫`top` - -- **logo**:logo和标题区域。 +当设置为 `null` 时,页面不使用布局。 -## keep-alive -从 4.0.7 开始支持配置路由页面缓存: -``` - -{ +## 页面缓存 + +支持配置页面缓存,通过[定义路由元信息](../../../guide/route.html#扩展路由元信息)开启缓存: +```js +import { defineRouteMete } from '@fesjs/fes'; + +defineRouteMeta({ "keep-alive": true -} - +}) ``` -## 编译时配置 +### 处理嵌套路由 +Fes.js 里约定目录下有 `layout.vue` 时会生成嵌套路由,以 `layout.vue` 为该目录的公共父组件,layout.vue 中必须实现 ``。如果嵌套路由下的页面设置了 `keep-alive`,则需要用 `` 替换 ``,``实现了页面缓存。 + +```vue + + +``` + +## 配置 + +#### 编译时配置方式 + 在 `.fes.js` 中配置: ```js export default { @@ -95,17 +100,7 @@ export default { // 底部文字 footer: 'Created by MumbleFE', // 主题light - theme: 'dark' - // 是否开启 tabs - multiTabs: false, - // 布局类型 - navigation: 'side', - // 是否固定头部 - fixedHeader: false, - // 是否固定sidebar - fixedSideBar: true, - // sidebar的宽度 - sideWidth: 200, + theme: 'dark', menus: [{ name: 'index' }, { @@ -115,14 +110,51 @@ export default { }, { name: 'simpleList' }], - menuConfig: { - defaultExpandAll: false, - expandedKeys: [], - accordion: false - } + }, ``` +#### 运行时配置方式 + +在 `app.js` 中配置: +```js +import UserCenter from '@/components/UserCenter'; +export const layout = { + renderHeader: ()=> , + menus: [{ + name: 'index' + }] +}; + +``` +在`fes.js`中,运行时配置有定义对象和函数两种方式,当使用函数配置`layout`时,`layoutConfig`是编译时配置结果,`initialState`是 `beforeRender.action`执行后创建的应用初始状态数据。 +。 +```js +export const layout = (layoutConfig, { initialState }) => ({ + renderHeader: () => , + menus: () => { + const menusRef = ref(layoutConfig.menus); + watch( + () => initialState.userName, + () => { + menusRef.value = [ + { + name: 'store', + }, + ]; + }, + ); + return menusRef; + }, +}); +``` + +最终配置结果是运行时配置跟编译时配置合并的结果,运行时配置优先于编译时配置。 + +实际上运行配置能做的事情更多,推荐用运行时配置方式。 + + + ### footer - **类型**:`String` @@ -144,14 +176,14 @@ export default { - **详情**:页面布局类型,可选有 `side`、 `top`、 `mixin` -### fixedHeader +### isFixedHeader - **类型**:`Boolean` - **默认值**:`false` - **详情**:是否固定头部,不跟随页面滚动。 -### fixedSideBar +### isFixedSidebar - **类型**:`Boolean` - **默认值**:`true` @@ -161,14 +193,14 @@ export default { ### title - **类型**:`String` -- **默认值**:`name` in package.json +- **默认值**:默认为 [编译时配置title](../../../reference/config/#title) -- **详情**:产品名,会显示在 Logo 旁边。 +- **详情**:产品名。 ### logo - **类型**:`String` -- **默认值**:默认提供 fes.js 的 Logo +- **默认值**:默认提供 `fes.js` 的 Logo - **详情**:Logo的链接 @@ -181,7 +213,7 @@ export default { - **详情**:是否开启多页。 ### menus -- **类型**:`Array` +- **类型**:`[] | ()=> Ref<[]>` - **默认值**:`[]` @@ -203,13 +235,11 @@ export default { - **title**:菜单的标题,如果同时使用[国际化插件](./locale.md),而且`title`的值以`$`开头,则使用`$`后面的内容去匹配语言设置。 - **icon**: 菜单的图标,只有一级标题展示图标。 - - 图标使用[fes-design icon](https://fes-design-4gvn317r3b6bfe17-1254145788.ap-shanghai.app.tcloudbase.com/zh/components/icon.html),在这里使用组件名称。 -```js -{ - icon: "AppstoreOutlined" -} -``` + + - 图标使用[fes-design icon](https://fes-design-4gvn317r3b6bfe17-1254145788.ap-shanghai.app.tcloudbase.com/zh/components/icon.html),编译时配置使用组件名称,我们会自动引入组件。 + - 图标使用本地或者远程svg图片。 + ```js { icon: "/wine-outline.svg" @@ -218,7 +248,13 @@ export default { - **children**:子菜单配置。 -### menusConfig +:::tip +函数类型仅在运行时可用,可以实现动态变更菜单。 +::: + + + +### menuProps - **类型**:`Object` - **默认值**:`{}` @@ -231,84 +267,29 @@ export default { - **accordion**:是否只保持一个子菜单的展开。 -## 运行时配置 -在 `app.js` 中配置: -```js -import UserCenter from '@/components/UserCenter'; -export const layout = { - customHeader: -}; -``` - -### menus -- **类型**:`(defaultMenus: [] )=> Ref | []` +### sideWidth +- **类型**:`Number` -- **详情**:运行时修改菜单,入参是默认菜单配置(.fes.js中的menu配置),需要返回一个`Ref`或者数组。 +- **默认值**:`200` -```js -import { ClusterOutlined } from '@fesjs/fes-design/icon' -export const layout = layoutConfig => ({ - ...layoutConfig, - customHeader: , - menus: (defaultMenuData) => { - const menusRef = ref(defaultMenuData); - watch(() => layoutConfig.initialState.userName, () => { - menusRef.value = [{ - name: 'store', - icon: - }]; - }); - return menusRef; - } -}); - -``` -`layoutConfig.initialState` 是 `beforeRender.action`执行后创建的应用初始状态数据。 - -如果菜单需要根据某些状态动态改变,则返回`Ref`,否则只需要返回数组。 - -:::tip -在运行时配置菜单中的icon,需要传组件本身,而不是组件的名称。 -::: - - -### header -- **类型**:`String` +- **详情**:sidebar的宽度 -- **默认值**:`true` -- **详情**:是否显示 header 区域。 - -### sidebar -- **类型**:`String` - -- **默认值**:`true` - -- **详情**:是否显示 sidebar 区域。 - -### logo -- **类型**:`String` - -- **默认值**:`true` - -- **详情**:是否显示 logo 区域。 - -### customHeader -- **类型**:Vue Component +### renderCustom +- **类型**: `()=> VNodes` - **默认值**:`null` -- **详情**:top的区域部分位置提供组件自定义功能。 +- **详情**: 自定义区域内容,仅运行时。 + ### unAccessHandler -- **类型**:`Function` +- **类型**:`({ to, from, next})=> void` - **默认值**:`null` -- **详情**: - - 当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。 +- **详情**:仅运行时,当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `unAccessHandler` 函数。 - **参数** - router:createRouter 创建的路由实例 - to: 准备进入的路由 @@ -334,13 +315,11 @@ export const access = { ``` ### noFoundHandler -- **类型**:函数 +- **类型**:`({ to, from, next})=> void` -- **默认值**:null +- **默认值**:`null` -- **详情**: - - 当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。 +- **详情**:仅运行时,当进入某个路由时,如果路由对应的页面不存在,则会调用 `noFoundHandler` 函数。 - **参数** - router:createRouter 创建的路由实例 - to: 准备进入的路由 @@ -361,13 +340,12 @@ export const access = { ``` -### logoUrl -- **类型**:`String` - -- **默认值**:默认提供 fes.js 的 Logo -- **详情**:Logo的链接。 +### 4.x 升级到 5.x - -### 其他运行时配置 (> 4.1.0) -编译时配置的内容同样支持在运行时配置,但是`logo`除外,用`logoUrl`替代。 \ No newline at end of file +1. 个性化 layout 配置改为使用传入 navigation +2. renderHeader 改为 renderCustom +3. fixedHeader 改为 isFixedHeader +4. menusConfig 改为 menuProps +5. fixedSideBar 改为 isFixedSidebar +6. 去掉运行时 logo、header、sidebar 三个区域显示配置,请改为使用 navigation: left-right \ No newline at end of file diff --git a/packages/fes-plugin-layout/src/index.js b/packages/fes-plugin-layout/src/index.js index eff1a9f5..09b5935c 100644 --- a/packages/fes-plugin-layout/src/index.js +++ b/packages/fes-plugin-layout/src/index.js @@ -24,16 +24,16 @@ export default (api) => { api.addRuntimePluginKey(() => 'layout'); - const absFilePath = join(namespace, 'index.jsx'); + const absFilePath = join(namespace, 'views/index.jsx'); + + const absConfigFilePath = join(namespace, 'helpers/getConfig.js'); const absRuntimeFilePath = join(namespace, 'runtime.js'); api.onGenerateFiles(async () => { - const HAS_LOCALE = api.hasPlugins(['@fesjs/plugin-locale']); - // .fes配置 const userConfig = { - title: api.pkg.name, + title: api.title, footer: 'Created by Fes.js', ...(api.config.layout || {}), }; @@ -52,9 +52,15 @@ export default (api) => { api.writeTmpFile({ path: absFilePath, - content: Mustache.render(readFileSync(join(__dirname, 'runtime/index.tpl'), 'utf-8'), { + content: Mustache.render(readFileSync(join(__dirname, 'runtime/views/index.tpl'), 'utf-8'), { + REPLACE_USER_CONFIG: JSON.stringify(userConfig), + }), + }); + + api.writeTmpFile({ + path: absConfigFilePath, + content: Mustache.render(readFileSync(join(__dirname, 'runtime/helpers/getConfig.tpl'), 'utf-8'), { REPLACE_USER_CONFIG: JSON.stringify(userConfig), - HAS_LOCALE, }), }); @@ -67,6 +73,13 @@ export default (api) => { api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`); + api.addPluginExports(() => [ + { + specifiers: ['Page'], + source: join(namespace, 'index.js'), + }, + ]); + // 把BaseLayout插入到路由配置中,作为根路由 api.modifyRoutes((routes) => [ { diff --git a/packages/fes-plugin-layout/src/node/helper.js b/packages/fes-plugin-layout/src/node/helper.js index effedb72..67a318b0 100644 --- a/packages/fes-plugin-layout/src/node/helper.js +++ b/packages/fes-plugin-layout/src/node/helper.js @@ -1,19 +1,15 @@ - export function getIconNamesFromMenu(data) { if (!Array.isArray(data)) { return []; } let icons = []; - data.forEach((item = { path: '/' }) => { + data.forEach((item) => { if (item.icon) { const { icon } = item; // 处理icon if (icon) { const urlReg = /^((https?|ftp|file):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/; - if ( - typeof icon === 'string' - && !(urlReg.test(icon) || icon.includes('.svg')) - ) { + if (typeof icon === 'string' && !(urlReg.test(icon) || icon.includes('.svg'))) { icons.push(icon); } } diff --git a/packages/fes-plugin-layout/src/runtime/helpers/getConfig.tpl b/packages/fes-plugin-layout/src/runtime/helpers/getConfig.tpl new file mode 100644 index 00000000..94934d50 --- /dev/null +++ b/packages/fes-plugin-layout/src/runtime/helpers/getConfig.tpl @@ -0,0 +1,15 @@ +import { plugin, ApplyPluginsType } from '@@/core/coreExports'; +import { initialState } from '@@/initialState'; + +export default () => { + const initConfig = {{{REPLACE_USER_CONFIG}}} + const runtimeConfig = plugin.applyPlugins({ + key: 'layout', + type: ApplyPluginsType.modify, + initialValue: initConfig, + args: { + initialState + } + }); + return runtimeConfig; +}; diff --git a/packages/fes-plugin-layout/src/runtime/helpers/getRuntimeConfig.js b/packages/fes-plugin-layout/src/runtime/helpers/getRuntimeConfig.js deleted file mode 100644 index 1ca1ef5c..00000000 --- a/packages/fes-plugin-layout/src/runtime/helpers/getRuntimeConfig.js +++ /dev/null @@ -1,20 +0,0 @@ -import { plugin, ApplyPluginsType } from '@@/core/coreExports'; -import { initialState } from '@@/initialState'; - -let runtimeConfig; - -export default () => { - if (!runtimeConfig) { - runtimeConfig = plugin.applyPlugins({ - key: 'layout', - type: ApplyPluginsType.modify, - initialValue: { - initialState, - sidebar: true, - header: true, - logo: true, - }, - }); - } - return runtimeConfig; -}; diff --git a/packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js b/packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js index 7b14a599..a18b90bd 100644 --- a/packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js +++ b/packages/fes-plugin-layout/src/runtime/helpers/pluginAccess.js @@ -3,9 +3,7 @@ import { computed, ref } from 'vue'; import { useAccess } from '../../plugin-access/core'; if (!useAccess) { - throw new Error( - '[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!' - ); + throw new Error('[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!'); } export const hasAccessByMenuItem = (item) => { @@ -14,21 +12,26 @@ export const hasAccessByMenuItem = (item) => { return useAccess(item.path); } if (hasChild) { - return computed(() => item.children.some((child) => { - const rst = hasAccessByMenuItem(child); - return rst && rst.value; - })); + return computed(() => + item.children.some((child) => { + const rst = hasAccessByMenuItem(child); + return rst && rst.value; + }), + ); } return ref(true); }; -export const transform = menus => menus.map((menu) => { - const hasAccess = hasAccessByMenuItem(menu); - if (!hasAccess.value) { - return false; - } - if (menu.children) { - menu.children = transform(menu.children); - } - return menu; -}).filter(Boolean); +export const transform = (menus) => + menus + .map((menu) => { + const hasAccess = hasAccessByMenuItem(menu); + if (!hasAccess.value) { + return false; + } + if (menu.children) { + menu.children = transform(menu.children); + } + return menu; + }) + .filter(Boolean); diff --git a/packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js b/packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js index 4682d7d2..fc2a6693 100644 --- a/packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js +++ b/packages/fes-plugin-layout/src/runtime/helpers/pluginLocale.js @@ -12,14 +12,14 @@ export const transTitle = (name) => { return name; }; - -export const transform = menus => menus.map((menu) => { - const copy = { - ...menu, - label: transTitle(menu.label) - }; - if (menu.children) { - copy.children = transform(menu.children); - } - return copy; -}); +export const transform = (menus) => + menus.map((menu) => { + const copy = { + ...menu, + label: transTitle(menu.label), + }; + if (menu.children) { + copy.children = transform(menu.children); + } + return copy; + }); diff --git a/packages/fes-plugin-layout/src/runtime/helpers/utils.js b/packages/fes-plugin-layout/src/runtime/helpers/utils.js index e8b16aa7..29750c4d 100644 --- a/packages/fes-plugin-layout/src/runtime/helpers/utils.js +++ b/packages/fes-plugin-layout/src/runtime/helpers/utils.js @@ -1,9 +1,8 @@ -export const flatNodes = (nodes = []) => nodes.reduce((res, node) => { - res.push(node); - if (node.children) { - res = res.concat( - flatNodes(node.children) - ); - } - return res; -}, []); +export const flatNodes = (nodes = []) => + nodes.reduce((res, node) => { + res.push(node); + if (node.children) { + res = res.concat(flatNodes(node.children)); + } + return res; + }, []); diff --git a/packages/fes-plugin-layout/src/runtime/index.js b/packages/fes-plugin-layout/src/runtime/index.js new file mode 100644 index 00000000..72f0ee5a --- /dev/null +++ b/packages/fes-plugin-layout/src/runtime/index.js @@ -0,0 +1 @@ +export { default as Page } from './views/page.vue'; diff --git a/packages/fes-plugin-layout/src/runtime/index.tpl b/packages/fes-plugin-layout/src/runtime/index.tpl deleted file mode 100644 index 2ac3c057..00000000 --- a/packages/fes-plugin-layout/src/runtime/index.tpl +++ /dev/null @@ -1,79 +0,0 @@ -import { ref, defineComponent, computed } from 'vue'; -import { plugin, ApplyPluginsType, } from '@@/core/coreExports'; -import { getRoutes } from '@@/core/routes/routes' -import BaseLayout from './views/BaseLayout.vue'; -import getRuntimeConfig from './helpers/getRuntimeConfig'; -import fillMenu from './helpers/fillMenu'; - -const Layout = defineComponent({ - name: 'Layout', - setup() { - const userConfig = {{{REPLACE_USER_CONFIG}}}; - const runtimeConfig = getRuntimeConfig(); - const { - menus, - customHeader, - menuConfig, - // 非 BaseLayout需要的 - initialState, - sidebar, - header, - logo, - // 跟logo冲突,换个名字 - logoUrl, - ...otherConfig - } = runtimeConfig; - if (logoUrl) { - userConfig.logo = logoUrl; - } - if (menuConfig && typeof menuConfig === 'object') { - Object.assign(userConfig.menuConfig, menuConfig); - } - Object.keys(otherConfig).forEach((p) => { - if (otherConfig[p] !== undefined) { - userConfig[p] = otherConfig[p]; - } - }); - let menusRef = ref(userConfig.menus); - // 如果运行时配置了menus,则需要处理 - if (menus && typeof menus === 'function') { - menusRef = ref(menus(userConfig.menus)); - } - // 把路由的meta合并到menu配置中 - const filledMenuRef = computed(() => { - return fillMenu(menusRef.value, getRoutes()); - }); - - const localeShared = plugin.getShared('locale'); - return () => { - const slots = { - customHeader: () => { - if (runtimeConfig.customHeader) { - return ( - - ); - } - return null; - }, - locale: () => { - if (localeShared) { - return ( - - ); - } - return null; - } - }; - return ( - - ); - }; - } -}); - -export default Layout; diff --git a/packages/fes-plugin-layout/src/runtime/runtime.js b/packages/fes-plugin-layout/src/runtime/runtime.js index f0430aa3..2e087953 100644 --- a/packages/fes-plugin-layout/src/runtime/runtime.js +++ b/packages/fes-plugin-layout/src/runtime/runtime.js @@ -2,7 +2,8 @@ import { access as accessApi } from '../plugin-access/core'; import Exception404 from './views/404.vue'; import Exception403 from './views/403.vue'; -import getRuntimeConfig from './helpers/getRuntimeConfig'; +// eslint-disable-next-line import/extensions +import getConfig from './helpers/getConfig'; if (!accessApi) { throw new Error('[plugin-layout]: pLugin-layout depends on plugin-access,please install plugin-access first!'); @@ -24,40 +25,41 @@ const handle = (type, router) => { } }; -export const access = (memo) => ({ - unAccessHandler({ router, to, from, next }) { - const runtimeConfig = getRuntimeConfig(); - if (runtimeConfig.unAccessHandler && typeof runtimeConfig.unAccessHandler === 'function') { - return runtimeConfig.unAccessHandler({ - router, - to, - from, - next, - }); - } - if (to.path === '/404') { - handle(404, router); - return next('/404'); - } - handle(403, router); - next('/403'); - }, - noFoundHandler({ router, to, from, next }) { - const runtimeConfig = getRuntimeConfig(); - if (runtimeConfig.noFoundHandler && typeof runtimeConfig.noFoundHandler === 'function') { - return runtimeConfig.noFoundHandler({ - router, - to, - from, - next, - }); - } - if (to.path === '/403') { +export const access = (memo) => { + const runtimeConfig = getConfig(); + return { + unAccessHandler({ router, to, from, next }) { + if (runtimeConfig.unAccessHandler && typeof runtimeConfig.unAccessHandler === 'function') { + return runtimeConfig.unAccessHandler({ + router, + to, + from, + next, + }); + } + if (to.path === '/404') { + handle(404, router); + return next('/404'); + } handle(403, router); - return next('/403'); - } - handle(404, router); - next('/404'); - }, - ...memo, -}); + next('/403'); + }, + noFoundHandler({ router, to, from, next }) { + if (runtimeConfig.noFoundHandler && typeof runtimeConfig.noFoundHandler === 'function') { + return runtimeConfig.noFoundHandler({ + router, + to, + from, + next, + }); + } + if (to.path === '/403') { + handle(403, router); + return next('/403'); + } + handle(404, router); + next('/404'); + }, + ...memo, + }; +}; diff --git a/packages/fes-plugin-layout/src/runtime/views/403.vue b/packages/fes-plugin-layout/src/runtime/views/403.vue index b094bc16..04501ab3 100644 --- a/packages/fes-plugin-layout/src/runtime/views/403.vue +++ b/packages/fes-plugin-layout/src/runtime/views/403.vue @@ -6,15 +6,8 @@ d="M0 129.023v-2.084C0 58.364 55.591 2.774 124.165 2.774h2.085c68.574 0 124.165 55.59 124.165 124.165v2.084c0 68.575-55.59 124.166-124.165 124.166h-2.085C55.591 253.189 0 197.598 0 129.023" fill="#E4EBF7" > - - + + - + - + - - + + - - - + + + - - - + + + - + - + diff --git a/packages/fes-template/src/pages/pinia.vue b/packages/fes-template/src/pages/pinia.vue index f55fc856..8b22688c 100644 --- a/packages/fes-template/src/pages/pinia.vue +++ b/packages/fes-template/src/pages/pinia.vue @@ -1,31 +1,32 @@ { "name": "pinia", - "title": "pinia" + "title": "pinia", + "layout": { + "navigation": null + } } - + diff --git a/scripts/build.mjs b/scripts/build.mjs index 58c7e3ee..27e2ceec 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -69,7 +69,9 @@ async function getPkgConfig(config, pkgName) { const pkgConfigPath = path.join(getPkgPath(pkgName), CONFIG_FILE_NAME); if (fs.existsSync(pkgConfigPath)) { const content = await import(process.platform === 'win32' ? `file://${pkgConfigPath}` : pkgConfigPath); - return merge(config, content.default); + const result = merge(config, content.default); + result.resolveCopy = result.copy.map((item) => path.join(getPkgPath(pkgName), 'src', item)); + return result; } return config; @@ -104,13 +106,17 @@ function cleanBeforeCompilerResult(pkgName, log) { function transformFile(filePath, outputPath, config, log) { if (/\.[jt]sx?$/.test(path.extname(filePath))) { - const code = fs.readFileSync(filePath, 'utf-8'); - const shortFilePath = genShortPath(filePath); - const transformedCode = compiler(code, config); + try { + const code = fs.readFileSync(filePath, 'utf-8'); + const shortFilePath = genShortPath(filePath); + const transformedCode = compiler(code, config); - const type = config.target === 'browser' ? ESM_OUTPUT_DIR : NODE_CJS_OUTPUT_DIR; - log(`Transform to ${type} for ${config.target === 'browser' ? chalk.yellow(shortFilePath) : chalk.blue(shortFilePath)}`); - fse.outputFileSync(outputPath, transformedCode); + const type = config.target === 'browser' ? ESM_OUTPUT_DIR : NODE_CJS_OUTPUT_DIR; + log(`Transform to ${type} for ${config.target === 'browser' ? chalk.yellow(shortFilePath) : chalk.blue(shortFilePath)}`); + fse.outputFileSync(outputPath, transformedCode); + } catch (error) { + console.error(error); + } } else { fse.copySync(filePath, outputPath); } @@ -140,12 +146,11 @@ function watchFile(dir, outputDir, config, log) { }) .on('all', (event, changeFile) => { // 修改的可能是一个目录,一个文件,一个需要 copy 的文件 or 目录 - const baseName = path.basename(changeFile); const shortChangeFile = genShortPath(changeFile); const outputPath = changeFile.replace(dir, outputDir); const stat = fs.lstatSync(changeFile); log(`[${event}] ${shortChangeFile}`); - if (config.copy.includes(baseName)) { + if (config.resolveCopy.some((item) => changeFile.startsWith(item))) { fse.copySync(changeFile, outputPath); } else if (stat.isFile()) { transformFile(changeFile, outputPath, config, log);