uni-app 根据用户权限动态生成对应的tabbar和页面

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 根据用户权限动态生成对应的tabbar和页面

信息类型 信息内容
权限描述 管理员登录后可以看到首页、订单和个人中心,普通用户只能看到首页和个人中心。后台分配订单权限后,用户通过刷新或重新登录可获取新权限,并动态生成相应页面。

比如,管理员登录后,我想让他看到首页、订单、和我的,普通用户登录后,却只能看到首页和我的,或者只能看到我的页面,后台给他订单的权限后,他通过手动刷新页面或者重新登录,进行刷新获得的新权限,再比如,我有看首页和个人中心的权限,那么登录后就动态生成,首页和个人中心底部tabbar和对应页面,假如后台后给我分配了看订单的权限,我重新登录,或者经过刷新页面,就能动态生成首页、订单和个人中心底部tabbar和对应页面。


1 回复

在uni-app中,根据用户权限动态生成对应的tabbar和页面,可以通过编程方式在运行时配置tabbar项和页面路由。以下是一个简单的实现示例:

1. 获取用户权限

假设我们有一个API可以获取用户的权限信息,返回的数据格式如下:

{
  "permissions": ["dashboard", "profile", "settings"]
}

2. 动态配置tabbar

pages.json中,我们可以先定义所有可能的页面,但不包括在tabbar中:

{
  "pages": [
    {
      "path": "pages/dashboard/dashboard",
      "style": {
        "navigationBarTitleText": "Dashboard"
      }
    },
    {
      "path": "pages/profile/profile",
      "style": {
        "navigationBarTitleText": "Profile"
      }
    },
    {
      "path": "pages/settings/settings",
      "style": {
        "navigationBarTitleText": "Settings"
      }
    }
  ],
  "tabBar": {
    "list": []  // 初始时不配置任何tabbar项
  }
}

3. 在main.js中动态设置tabbar

import Vue from 'vue'
import App from './App'
import store from './store' // 假设我们有一个Vuex store来管理用户状态
import axios from 'axios'

Vue.config.productionTip = false

axios.get('/api/user/permissions')
  .then(response => {
    const permissions = response.data.permissions;
    const tabBarList = permissions.map(permission => ({
      pagePath: `pages/${permission}/${permission}`,
      text: permission.charAt(0).toUpperCase() + permission.slice(1)
    }));

    // 更新Vuex store中的tabbar配置
    store.commit('updateTabBar', tabBarList);

    // 可以在Vuex store的mutation中动态修改tabbar
    // 例如,在store.js中:
    // mutations: {
    //   updateTabBar(state, tabBarList) {
    //     uni.setTabBarStyle({
    //       // 设置tabbar样式
    //     });
    //     uni.setTabBarItem({
    //       list: tabBarList.map((item, index) => ({
    //         pagePath: item.pagePath,
    //         text: item.text,
    //         iconPath: `static/icons/${item.text.toLowerCase()}.png`,
    //         selectedIconPath: `static/icons/${item.text.toLowerCase()}-active.png`,
    //         index: index
    //       }))
    //     });
    //   }
    // }

    new Vue({
      store,
      ...App
    }).$mount()
  })
  .catch(error => {
    console.error('Failed to fetch user permissions:', error);
  });

4. 确保页面路由存在

确保在pages目录下,对应的权限页面路径存在,并且可以在没有tabbar配置的情况下正常访问(通过编程导航)。

通过这种方式,我们可以根据用户权限动态地设置uni-app的tabbar和页面路由,从而实现权限控制。注意,实际应用中还需要考虑权限的刷新、缓存等问题。

回到顶部