From d87baedac0da0d2b719761ed5ab425f2db0851c0 Mon Sep 17 00:00:00 2001 From: ocean_gao <gaopandyx@163.com> Date: Fri, 24 May 2024 11:09:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20plugin-layout=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=A1=B6=E9=83=A8=E5=AF=BC=E8=88=AA=E6=A0=8F=E7=88=B6=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=B2=A1=E6=9C=89=E9=85=8D=E7=BD=AE=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=9A=84=E6=83=85=E5=86=B5=20(#244)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: plugin-layout 兼容顶部导航栏父菜单没有配置跳转链接的情况 * feat(plugin-layout): 代码逻辑优化 --- docs/public/top-left-right.png | Bin 0 -> 59206 bytes docs/reference/plugin/plugins/layout.md | 13 +++++-- .../src/runtime/views/BaseLayout.vue | 32 ++++++++++++++---- .../src/runtime/views/Menu.vue | 8 ++++- packages/fes-template-vite/.fes.js | 1 + packages/fes-template-vite/src/app.jsx | 5 +-- 6 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 docs/public/top-left-right.png diff --git a/docs/public/top-left-right.png b/docs/public/top-left-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ad2bc11ffe2a95ebc7266a706e8fe9f2b0cece GIT binary patch literal 59206 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 literal 0 HcmV?d00001 diff --git a/docs/reference/plugin/plugins/layout.md b/docs/reference/plugin/plugins/layout.md index fc474b1c..57d72927 100644 --- a/docs/reference/plugin/plugins/layout.md +++ b/docs/reference/plugin/plugins/layout.md @@ -9,7 +9,7 @@ import { withBase } from 'vitepress' 为了进一步降低研发成本,我们将布局利用 `fes.js` 插件的方式内置,只需通过简单的配置即可拥有布局,包括导航以及侧边栏。从而做到用户无需关心布局。 - 侧边栏菜单数据根据路由中的配置自动生成。 -- 布局,提供 `side`、 `top`、`mixin`、`left-right` 四种布局。 +- 布局,提供 `side`、 `top`、`mixin`、`left-right`、`top-left-right` 五种布局。 - 主题,提供 `light`、`dark` 两种主题。 - 默认实现对路由的 404、403 处理。 - 搭配 [@fesjs/plugin-access](./access.html) 插件使用,可以完成对路由的权限控制。 @@ -34,7 +34,7 @@ import { withBase } from 'vitepress' ## 布局类型 -配置参数是 `navigation`, 布局有三种类型 `side`、`mixin` 、`top` 和 `left-right`, 默认是 `side`。 +配置参数是 `navigation`, 布局有五种类型 `side`、`mixin` 、`top` 、`left-right`、`top-left-right`, 默认是 `side`。 ### side @@ -53,9 +53,12 @@ import { withBase } from 'vitepress' ### left-right -<!--  --> +<!--  --> <img :src="withBase('left-right.png')" alt="left-right"> +<!--  --> +<img :src="withBase('top-left-right.png')" alt="top-left-right"> + ### 页面个性化 可以为页面单独设置布局类型: @@ -258,6 +261,10 @@ export const layout = { - **path**:菜单的路径,可配置第三方地址。 + - **query**:同 vue-router 的 query 参数。 + + - **params**:同 vue-router 的 params 参数。 + - **match (v4.0.0+)**:额外匹配的路径,当前路由命中匹配规则时,此菜单高亮。 ``` diff --git a/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue b/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue index f064f68d..5020986b 100644 --- a/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue +++ b/packages/fes-plugin-layout/src/runtime/views/BaseLayout.vue @@ -127,7 +127,7 @@ </FFooter> </FLayout> </template> - <template v-else-if="currentNavigation === 'top-left'"> + <template v-else-if="currentNavigation === 'top-left-right'"> <FHeader ref="headerRef" class="layout-header" :inverted="theme === 'dark'" :fixed="currentFixedHeaderRef"> <div class="layout-logo"> <img v-if="logo" :src="logo" class="logo-img"> @@ -149,7 +149,7 @@ </template> </FHeader> <FLayout v-if="activeSubMenus.length" :embedded="!multiTabs" :fixed="currentFixedHeaderRef" :style="headerStyleRef"> - <FAside v-model:collapsed="collapsedRef" :fixed="isFixedSidebar" :width="`${sideWidth}px`" collapsible class="layout-aside"> + <FAside v-model:collapsed="collapsedRef" :inverted="theme === 'dark'" :fixed="isFixedSidebar" :width="`${sideWidth}px`" collapsible class="layout-aside"> <LayoutMenu class="layout-menu" :menus="activeSubMenus" @@ -158,6 +158,7 @@ :expanded-keys="menuProps?.expandedKeys" :default-expand-all="menuProps?.defaultExpandAll" :accordion="menuProps?.accordion" + :inverted="theme === 'dark'" /> </FAside> @@ -229,6 +230,7 @@ import { useRoute, useRouter } from '@@/core/coreExports'; import { FAside, FFooter, FHeader, FLayout, FMain } from '@fesjs/fes-design'; import { computed, nextTick, ref, watch } from 'vue'; import defaultLogo from '../assets/logo.png'; +import { flatNodes } from '../helpers/utils'; import LayoutMenu from './Menu.vue'; import MultiTabProvider from './MultiTabProvider.vue'; @@ -267,7 +269,7 @@ export default { }, navigation: { type: String, - default: 'side', // side 左右(上/下)、 top 上/下、 mixin 上/下(左/右) + default: 'side', // side 左右(上/下)、 top 上/下、 mixin 上/下(左/右)、top-left-right 上/下(左/右) }, navigationOnError: { type: [String, Function], // 403, 404 时的 navigation @@ -335,12 +337,28 @@ export default { ); const rootMenus = computed(() => { - return props.menus.filter((menu) => { - return menu.path; - }).map((menu) => { - const { children, ...others } = menu; + return props.menus.map((menu) => { + const { children, match, ...others } = menu; + let { path, query, params } = menu; + const flatChildren = flatNodes(children || []); + if (!menu.path) { + const firstChild = flatChildren.find(item => item.path); + if (firstChild) { + path = firstChild.path; + query = firstChild.query; + params = firstChild.params; + } + } return { ...others, + path, + query, + params, + match: (match || []) + .concat(...flatChildren.map(item => [] + .concat(item.match || []) + .concat(item.path)), + ), _children: children, }; }); diff --git a/packages/fes-plugin-layout/src/runtime/views/Menu.vue b/packages/fes-plugin-layout/src/runtime/views/Menu.vue index 3a74738a..f6ec8184 100644 --- a/packages/fes-plugin-layout/src/runtime/views/Menu.vue +++ b/packages/fes-plugin-layout/src/runtime/views/Menu.vue @@ -125,11 +125,17 @@ export default { const onMenuClick = (e) => { const path = e.value; + const currentMenu = menuArray.value.find(item => item.value === path); + if (/^https?:\/\//.test(path)) { window.open(path, '_blank'); } else if (/^\//.test(path)) { - router.push(path); + router.push({ + path, + query: currentMenu?.query || {}, + params: currentMenu?.params || {}, + }); } else { console.warn('[plugin-layout]: 菜单的path只能是以http(s)开头的网址或者路由地址'); diff --git a/packages/fes-template-vite/.fes.js b/packages/fes-template-vite/.fes.js index e538bd27..79a8e7d3 100644 --- a/packages/fes-template-vite/.fes.js +++ b/packages/fes-template-vite/.fes.js @@ -54,6 +54,7 @@ export default defineBuildConfig({ { title: '子菜单', path: '/menuTest', + query: { id: 1 }, }, ], }, diff --git a/packages/fes-template-vite/src/app.jsx b/packages/fes-template-vite/src/app.jsx index b9803c35..0aca5a34 100644 --- a/packages/fes-template-vite/src/app.jsx +++ b/packages/fes-template-vite/src/app.jsx @@ -23,8 +23,9 @@ export const beforeRender = { }; export const layout = { - logo: `${process.env.BASE_URL}wine-outline.svg`, - renderCustom: (props) => { + // eslint-disable-next-line node/prefer-global/process + logo: `${process.env.BASE_URL}logo.png`, + renderCustom: () => { return <UserCenter />; }, };