From f1336af7af2225820ac9a8dc6dfcf501e4d4cd7b Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期三, 06 十二月 2023 09:05:16 +0800 Subject: [PATCH] 系统左侧菜单,hover背景色bug处理 --- Source/UBCS-WEB/src/page/index/sidebar/sidebarItem.vue | 220 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 113 insertions(+), 107 deletions(-) diff --git a/Source/UBCS-WEB/src/page/index/sidebar/sidebarItem.vue b/Source/UBCS-WEB/src/page/index/sidebar/sidebarItem.vue index 2693e31..5914522 100644 --- a/Source/UBCS-WEB/src/page/index/sidebar/sidebarItem.vue +++ b/Source/UBCS-WEB/src/page/index/sidebar/sidebarItem.vue @@ -2,145 +2,151 @@ <div class="menu-wrapper"> <template v-for="item in menu"> <el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item)" - :index="item[pathKey]" - @click="open(item)" :key="item[labelKey]" - :class="{'is-active':vaildActive(item)}"> + :class="{'is-active':vaildActive(item)}" + :index="item[pathKey]" + @click="open(item)"> <i :class="item[iconKey]"></i> <span slot="title" - :alt="item[pathKey]">{{generateTitle(item)}}</span> + :alt="item[pathKey]">{{ generateTitle(item) }}</span> </el-menu-item> <el-submenu v-else-if="!validatenull(item[childrenKey])&&vaildRoles(item)" - :index="item[pathKey]" - :key="item[labelKey]"> + :key="item[labelKey]" + :index="item[pathKey]"> <template slot="title"> <i :class="item[iconKey]"></i> <span slot="title" - :class="{'el-menu--display':collapse && first}">{{generateTitle(item)}}</span> + :class="{'el-menu--display':collapse && first}">{{ generateTitle(item) }}</span> </template> <template v-for="(child,cindex) in item[childrenKey]"> - <el-menu-item :index="child[pathKey],cindex" - @click="open(child)" + <el-menu-item v-if="validatenull(child[childrenKey])" + :key="child[labelKey]" :class="{'is-active':vaildActive(child)}" - v-if="validatenull(child[childrenKey])" - :key="child[labelKey]"> + :index="child[pathKey],cindex" + @click="open(child)"> <i :class="child[iconKey]"></i> - <span slot="title">{{generateTitle(child)}}</span> + <span slot="title">{{ generateTitle(child) }}</span> </el-menu-item> <sidebar-item v-else - :menu="[child]" :key="cindex" + :collapse="collapse" + :menu="[child]" :props="props" - :screen="screen" - :collapse="collapse"></sidebar-item> + :screen="screen"></sidebar-item> </template> </el-submenu> </template> </div> </template> <script> - import {mapGetters} from "vuex"; - import {isURL, validatenull} from "@/util/validate"; - import config from "./config.js"; +import {mapGetters} from "vuex"; +import {isURL, validatenull} from "@/util/validate"; +import config from "./config.js"; - export default { - name: "sidebarItem", - data() { - return { - config: config - }; +export default { + name: "sidebarItem", + data() { + return { + config: config + }; + }, + props: { + menu: { + type: Array + }, + screen: { + type: Number + }, + first: { + type: Boolean, + default: false }, props: { - menu: { - type: Array - }, - screen: { - type: Number - }, - first: { - type: Boolean, - default: false - }, - props: { - type: Object, - default: () => { - return {}; - } - }, - collapse: { - type: Boolean + type: Object, + default: () => { + return {}; } }, - created() { + collapse: { + type: Boolean + } + }, + created() { + }, + mounted() { + }, + computed: { + ...mapGetters(["roles"]), + labelKey() { + return this.props.label || this.config.propsDefault.label; }, - mounted() { + pathKey() { + return this.props.path || this.config.propsDefault.path; }, - computed: { - ...mapGetters(["roles"]), - labelKey() { - return this.props.label || this.config.propsDefault.label; - }, - pathKey() { - return this.props.path || this.config.propsDefault.path; - }, - iconKey() { - return this.props.icon || this.config.propsDefault.icon; - }, - childrenKey() { - return this.props.children || this.config.propsDefault.children; - }, - isOpenKey() { - return this.props.isOpen || this.config.propsDefault.isOpen; - }, - nowTagValue() { - return this.$router.$avueRouter.getValue(this.$route); + iconKey() { + return this.props.icon || this.config.propsDefault.icon; + }, + childrenKey() { + return this.props.children || this.config.propsDefault.children; + }, + isOpenKey() { + return this.props.isOpen || this.config.propsDefault.isOpen; + }, + nowTagValue() { + return this.$router.$avueRouter.getValue(this.$route); + } + }, + methods: { + generateTitle(item) { + return this.$router.$avueRouter.generateTitle( + item[this.labelKey], + (item.meta || {}).i18n + ); + }, + vaildActive(item) { + if (this.validIsOpen(item)) { + return false; + } + const groupFlag = (item["group"] || []).some(ele => + this.$route.path.includes(ele) + ); + return this.nowTagValue === item[this.pathKey] || groupFlag; + }, + vaildRoles(item) { + item.meta = item.meta || {}; + return item.meta.roles ? item.meta.roles.includes(this.roles) : true; + }, + validatenull(val) { + return validatenull(val); + }, + validIsOpen(item) { + if (item[this.isOpenKey] === 2 && isURL(item[this.pathKey])) { + return true; } }, - methods: { - generateTitle(item) { - return this.$router.$avueRouter.generateTitle( - item[this.labelKey], - (item.meta || {}).i18n - ); - }, - vaildActive(item) { - if (this.validIsOpen(item)) { - return false; - } - const groupFlag = (item["group"] || []).some(ele => - this.$route.path.includes(ele) - ); - return this.nowTagValue === item[this.pathKey] || groupFlag; - }, - vaildRoles(item) { - item.meta = item.meta || {}; - return item.meta.roles ? item.meta.roles.includes(this.roles) : true; - }, - validatenull(val) { - return validatenull(val); - }, - validIsOpen(item) { - if (item[this.isOpenKey] === 2 && isURL(item[this.pathKey])) { - return true; - } - }, - open(item) { - if (this.screen <= 1) this.$store.commit("SET_COLLAPSE"); - if (this.validIsOpen(item)) { - window.open(item[this.pathKey]); - } else { - this.$router.$avueRouter.group = item.group; - this.$router.$avueRouter.meta = item.meta; - this.$router.push({ - path: this.$router.$avueRouter.getPath({ - name: item[this.labelKey], - src: item[this.pathKey] - }, item.meta), - query: item.query - }); - } + open(item) { + if (this.screen <= 1) this.$store.commit("SET_COLLAPSE"); + if (this.validIsOpen(item)) { + window.open(item[this.pathKey]); + } else { + this.$router.$avueRouter.group = item.group; + this.$router.$avueRouter.meta = item.meta; + this.$router.push({ + path: this.$router.$avueRouter.getPath({ + name: item[this.labelKey], + src: item[this.pathKey] + }, item.meta), + query: item.query + }); } } - }; + } +}; </script> +<style lang="scss" scoped> +.el-menu-item:focus, .el-menu-item:hover { + outline: 0; + background-color: #060708; +} +</style> -- Gitblit v1.9.3