From 3835cf1ca8d5ac8475052d3876ebeb4a2c4160f1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 22 Jan 2024 14:22:02 +0800
Subject: [PATCH] 根据角色,动态切换首页,及首页变更的一系列相关调整
---
src/page/index/sidebar/sidebarItem.vue | 238 ++++++++++++++++++++++++++++-------------------------------
1 files changed, 113 insertions(+), 125 deletions(-)
diff --git a/src/page/index/sidebar/sidebarItem.vue b/src/page/index/sidebar/sidebarItem.vue
index 2693e31..3564c07 100644
--- a/src/page/index/sidebar/sidebarItem.vue
+++ b/src/page/index/sidebar/sidebarItem.vue
@@ -1,146 +1,134 @@
<template>
- <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)}">
- <i :class="item[iconKey]"></i>
- <span slot="title"
- :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]">
- <template slot="title">
- <i :class="item[iconKey]"></i>
- <span slot="title"
- :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)"
- :class="{'is-active':vaildActive(child)}"
- v-if="validatenull(child[childrenKey])"
+ <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) }">
+ <i :class="item[iconKey]"></i>
+ <span slot="title" :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]">
+ <template slot="title">
+ <i :class="item[iconKey]"></i>
+ <span slot="title" :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)"
+ :class="{ 'is-active': vaildActive(child) }" v-if="validatenull(child[childrenKey])"
:key="child[labelKey]">
- <i :class="child[iconKey]"></i>
- <span slot="title">{{generateTitle(child)}}</span>
- </el-menu-item>
- <sidebar-item v-else
- :menu="[child]"
- :key="cindex"
- :props="props"
- :screen="screen"
+ <i :class="child[iconKey]"></i>
+ <span slot="title">{{ generateTitle(child) }}</span>
+ </el-menu-item>
+ <sidebar-item v-else :menu="[child]" :key="cindex" :props="props" :screen="screen"
:collapse="collapse"></sidebar-item>
+ </template>
+ </el-submenu>
</template>
- </el-submenu>
- </template>
- </div>
+ </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 {
+export default {
name: "sidebarItem",
- data() {
- return {
- config: config
- };
+ data () {
+ return {
+ config: config
+ }
},
props: {
- menu: {
- type: Array
- },
- screen: {
- type: Number
- },
- first: {
- type: Boolean,
- default: false
- },
- props: {
- type: Object,
- default: () => {
- return {};
+ menu: {
+ type: Array
+ },
+ screen: {
+ type: Number
+ },
+ first: {
+ type: Boolean,
+ default: false
+ },
+ props: {
+ type: Object,
+ default: () => {
+ return {}
+ }
+ },
+ collapse: {
+ type: Boolean
}
- },
- collapse: {
- type: Boolean
- }
},
- created() {
+ created () {
},
- mounted() {
+ mounted () {
},
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);
- }
+ ...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)
+ }
},
methods: {
- generateTitle(item) {
- return this.$router.$avueRouter.generateTitle(
- item[this.labelKey],
- (item.meta || {}).i18n
- );
- },
- vaildActive(item) {
- if (this.validIsOpen(item)) {
- return false;
+ 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
+ })
+ }
}
- 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
- });
- }
- }
}
- };
+}
</script>
--
Gitblit v1.9.3