From 16eb67ab6b103663d30cad9ba74360f982e131cb Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 03 九月 2024 10:34:59 +0800 Subject: [PATCH] 自定义列显隐控制 --- src/layout/components/Sidebar/SidebarItem.vue | 173 ++++++++++++++++++++++++--------------------------------- 1 files changed, 74 insertions(+), 99 deletions(-) diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue index 058d557..8a35ba0 100644 --- a/src/layout/components/Sidebar/SidebarItem.vue +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -1,40 +1,16 @@ <template> <div v-if="!item.hidden"> - <template - v-if=" - hasOneShowingChild(item.children, item) && - (!onlyOneChild.children || onlyOneChild.noShowingChildren) && - !item.alwaysShow - " - > - <app-link - v-if="onlyOneChild.meta" - :to="resolvePath(onlyOneChild.path, onlyOneChild.query)" - > - <el-menu-item - :index="resolvePath(onlyOneChild.path)" - :class="{ 'submenu-title-noDropdown': !isNest }" - > - <item - :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)" - :title="onlyOneChild.meta.title" - /> + <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> + <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)"> + <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> + <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> </el-menu-item> </app-link> </template> - <el-submenu - v-else - ref="subMenu" - :index="resolvePath(item.path)" - popper-append-to-body - > + <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> <template slot="title"> - <item - v-if="item.meta" - :icon="item.meta && item.meta.icon" - :title="item.meta.title" - /> + <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> </template> <sidebar-item v-for="(child, index) in item.children" @@ -47,78 +23,77 @@ </el-submenu> </div> </template> + <script> + import path from 'path' + import { isExternal } from '@/utils/validate' + import Item from './Item' + import AppLink from './Link' + import FixiOSBug from './FixiOSBug' -<script> -import path from "path"; -import { isExternal } from "@/utils/validate"; -import Item from "./Item"; -import AppLink from "./Link"; -import FixiOSBug from "./FixiOSBug"; - -export default { - name: "SidebarItem", - components: { Item, AppLink }, - mixins: [FixiOSBug], - props: { - // route object - item: { - type: Object, - required: true, - }, - isNest: { - type: Boolean, - default: false, - }, - basePath: { - type: String, - default: "", - }, - }, - data() { - this.onlyOneChild = null; - return {}; - }, - methods: { - hasOneShowingChild(children = [], parent) { - if (!children) { - children = []; - } - const showingChildren = children.filter((item) => { - if (item.hidden) { - return false; - } else { - // Temp set(will be used if only has one showing child) - this.onlyOneChild = item; - return true; + export default { + name: 'SidebarItem', + components: { Item, AppLink }, + mixins: [FixiOSBug], + props: { + // route object + item: { + type: Object, + required: true + }, + isNest: { + type: Boolean, + default: false + }, + basePath: { + type: String, + default: '' } - }); + }, + data() { + this.onlyOneChild = null + return {} + }, + methods: { + hasOneShowingChild(children = [], parent) { + if (!children) { + children = []; + } + const showingChildren = children.filter(item => { + if (item.hidden) { + return false + } else { + // Temp set(will be used if only has one showing child) + this.onlyOneChild = item + return true + } + }) - // When there is only one child router, the child router is displayed by default - if (showingChildren.length === 1) { - return true; - } + // When there is only one child router, the child router is displayed by default + if (showingChildren.length === 1) { + return true + } - // Show parent if there are no child router to display - if (showingChildren.length === 0) { - this.onlyOneChild = { ...parent, path: "", noShowingChildren: true }; - return true; - } + // Show parent if there are no child router to display + if (showingChildren.length === 0) { + this.onlyOneChild = { ... parent, path: '', noShowingChildren: true } + return true + } - return false; - }, - resolvePath(routePath, routeQuery) { - if (isExternal(routePath)) { - return routePath; + return false + }, + resolvePath(routePath, routeQuery) { + if (isExternal(routePath)) { + return routePath + } + if (isExternal(this.basePath)) { + return this.basePath + } + if (routeQuery) { + let query = JSON.parse(routeQuery); + return { path: path.resolve(this.basePath, routePath), query: query } + } + return path.resolve(this.basePath, routePath) + } } - if (isExternal(this.basePath)) { - return this.basePath; - } - if (routeQuery) { - let query = JSON.parse(routeQuery); - return { path: path.resolve(this.basePath, routePath), query: query }; - } - return path.resolve(this.basePath, routePath); - }, - }, -}; -</script> + } + </script> -- Gitblit v1.8.0