element侧边栏根据权限不同内容改变的实现

简介: 今天在搭项目基本大框的时候,发现了一个问题,就是我们的产品后台有两个管理端,并且两个管理端所有的功能仅仅查一个功能页面,这个时候就需要考虑两个管理端使用一套,并且不同的账号有不同的权限和页面

el侧边栏根据权限不同内容改变实现方案

今天在搭项目基本大框的时候,发现了一个问题,就是我们的产品后台有两个管理端,并且两个管理端所有的功能仅仅查一个功能页面,这个时候就需要考虑两个管理端使用一套,并且不同的账号有不同的权限和页面

1.webp.jpg

因为后台管理基本上都是通过一个home页然后通过子路由来使空白区域进行更迭,所以我们使用上面方法来实现这个方案呢?

v-show方案实现

我们可能最初的想法是通过vuex访问权限来进行判断用户的身份,然后通过v-show来对对应某页进行隐藏

<el-menu v-show="status">
          <el-menu-item>
            <template slot="title">
              <span>后台用户管理</span>
            </template>
          </el-menu-item>
</el-menu>
复制代码

在mounted钩子下获取到登录存储在vuex中的数据,在渲染的过程中就能更好地隐藏,这种方法很简单,但是之后因为一个功能而转而使用了另一种方法来实现

v-for方案实现

第二个方案就是使用v-for方案,首先是准备两个不同的列表项代表不同权限对应的侧边栏

menuList: [ ],
commonList: [
        { id: 0, menuName: '首页', path: '/welcome' },
        { id: 1, menuName: '前台用户管理', path: '/frontuser' },
        { id: 2, menuName: '文章管理', path: '/article' },
        { id: 3, menuName: '资源管理', path: '/resource' },
        { id: 4, menuName: '问答管理', path: '/quiz' }
      ],
superList: [
        { id: 0, menuName: '首页', path: '/welcome' },
        { id: 1, menuName: '前台用户管理', path: '/frontuser' },
        { id: 2, menuName: '后台用户管理', path: '/backuser' },
        { id: 3, menuName: '文章管理', path: '/article' },
        { id: 4, menuName: '资源管理', path: '/resource' },
        { id: 5, menuName: '问答管理', path: '/quiz' }
      ],
复制代码

再通过mounted中进行权限判断,判断后分别赋上对应的数组,之后再进行v-for渲染,这种实现方案明显地比第一种使用v-show要复杂地很多,需要准备数据,还要鉴权赋值,但是为什么最后选择了这种方案实现,是因为产品有这样一个功能

getList() {
      console.log(this.$store.state.admin)
      if (this.$store.state.admin) {
        this.menuList = this.superList
      } else {
        this.menuList = this.commonList
      }
    },
复制代码

header路由标签更新

因为产品图中header有一段标签需要随着子路由的跳转而更新,在使用上文第二种方法之前我尝试了不同方法实现更新标签这个功能,但是总是因为目标跳转路由的获取而失败,我也尝试了在路由守卫实现,但是因为在路由配置中无法使用vuex,而最后以失败告终,所以我尝试了使用v-for实现这个功能,最后通过点击事件来实现header路由标签更新,在渲染项添加事件@click="next(item.menuName)然后因为第二个方案中我们在数据中存储了路由对应的文字,所以就可以随着更新了。

1.webp.jpg

next(router) {
      this.nextrouter = router
}
复制代码

方案改进

因为第二种方案的话是需要两个数组进行判断渲染的,所以不妨换种思路,通过鉴权然后使用数组方法push一个新的对象,这个对象就是所需要的新的路由项目,也是可以的。

if (this.$store.state.admin) this.menuList.push({ id: 2, menuName: '后台用户管理', path: '/backuser' })
复制代码


目录
打赏
0
0
1
0
69
分享
相关文章
HTML5新增了哪些表单元素
HTML5通过新增多种表单元素和属性,提升了用户体验与交互性。例如,`email`和`url`元素分别验证邮箱地址和网址格式;`number`和`range`便于输入数字及区间值;`date`等元素简化了日期时间的选择;`search`添加搜索图标,`color`提供颜色选择器;`datalist`结合`input`属性给予用户下拉列表选项;`keygen`用于生成密钥对以增强安全性;`output`则用于动态展示计算结果。这些改进共同提高了表单的功能性和易用性。
WK
64 2
|
8月前
|
Element UI 自定义环形进度条里的内容
Element UI 自定义环形进度条里的内容
272 2
js改变元素的内容、属性、样式
js改变元素的内容、属性、样式
63 3
js怎样改变元素的内容、属性、样式
js怎样改变元素的内容、属性、样式
139 0
JS获取元素、修改元素的内容、样式、属性--详解
JS获取元素、修改元素的内容、样式、属性--详解
326 0
JS中修改元素内容,属性,样式的方法【详解】
JS中修改元素内容,属性,样式的方法【详解】
225 0
HTML的笔记及展示(1)(锚点、a元素添加超链接href、img元素、iframe元素、HTML5新增的拖放API)
HTML的笔记及展示(1)(锚点、a元素添加超链接href、img元素、iframe元素、HTML5新增的拖放API)
243 0
HTML的笔记及展示(1)(锚点、a元素添加超链接href、img元素、iframe元素、HTML5新增的拖放API)
HTML的笔记及展示(2)(表单元素、input元素、label、button以及HTML5新增的一些元素)
HTML的笔记及展示(2)(表单元素、input元素、label、button以及HTML5新增的一些元素)
262 0
HTML的笔记及展示(2)(表单元素、input元素、label、button以及HTML5新增的一些元素)
【JavaScript-事件②】表单元素的属性操作,密码显示隐藏的实现
阅读使人充实,会谈使人敏捷,写作使人精确。 ——培根
169 0
【JavaScript-事件②】表单元素的属性操作,密码显示隐藏的实现
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等