当前位置:   article > 正文

微信小程序根据不同的权限展示不同的自定义tabbar_微信小程序根据权限获取菜单

微信小程序根据权限获取菜单

项目场景:

小程序中我们可能需要根据不同的权限展示不同的tabbar,比如你是会员的话,那么你的底部就展示一个VIP的tabbar,如果是普通用户的话就把这个VIP的tabbar隐藏掉。


解决方案:

tabar自定义官方链接

首先我们先实现一个自定义的tabbar:

  1. 在 app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整
  2. 创建custom-tab-bar,在根目录创建,如图(我用的是vant的组件,vant样式的使用vant官方链接 就不用去写样式了,也可以去那官方文档中的片段链接):
    在这里插入图片描述
    3.在app.json中把你所有项都加上(最多只能加5个,多了有就不行了),因为我们要通过getCurrentPages去获取当前的路径
    在这里插入图片描述
    4.在custom-tab-bar文件中.定义两套不同的tabar列表,在data中写了三个vipList、noVipList和list,默认展示的是list,如果app.globalData.userRank == 0 的时候是noVipList,如果app.globalData.userRank == 1 的时候是vipList,注意的是:list个和noVipList是一样的,那我们在下面判断进行setData的时候不能使用this.setData({list:this.data.list}),这样是不会改变的,你必须重写一个noVipList
// custom-tab-bar中的js
const app = getApp();
Component({
  data: {
    active:'0',
    list: [{
      url:'/pages/index/index',
      text: "首页",
      name:0,
      icon:'home-o'
    }, {
      url:'/pages/logs/logs',
      text: "日志",
      name:1,
      icon:'search'
    }],
    vipList: [{
      url:'/pages/index/index',
      text: "首页",
      name:0,
      icon:'home-o'
    }, {
      url:'/pages/logs/logs',
      text: "日志",
      name:1,
      icon:'search'
    },{
      url:'/pages/vip/vip',
      text: "VIP",
      name:2,
      icon:'friends-o'
    }],
    noVipList: [{
      url:'/pages/index/index',
      text: "首页",
      name:0,
      icon:'home-o'
    }, {
      url:'/pages/logs/logs',
      text: "日志",
      name:1,
      icon:'search'
    }]
  },
  attached() {
  },
  methods: {
    init() {
      const page = getCurrentPages().pop();
			this.setData({
				active: this.data.list.findIndex(item => item.url === `/${page.route}`)
			});
    },
    // 这是用了切换不同的权限的,做个判断切换不同的权限
    checkPermission() {
      if (app.globalData.userRank == 0) {
        console.log(app.globalData.userRank)
        this.setData({
					list: this.data.noVipList,
        })
      }
      if (app.globalData.userRank == 1) {
        console.log(app.globalData.userRank)
        this.setData({
					list: this.data.vipList,
        })
			}
    },
    onChange(event) {
      console.log(event)
      this.setData({ active: event.detail });
      wx.switchTab({
				url: this.data.list[event.detail].url
			});
    },
  }
})

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

5.在每个页面的文件夹中去调用init, this.getTabBar().init() 每个页面都要调用,切换权限就是下面的那个onChange了

// 页面中的js
const app = getApp();
Page({
  data: {
    radio: 109,
    chepaihao:'',
   
  checked:false
  },
  onClick(event) {
    const { name } = event.currentTarget.dataset;
    console.log(name)
    this.setData({
      chepaihao: name,
    });
  }, 
  onChange({ detail }) {
  let _this = this
    if(detail) {
       app.globalData.userRank = 1
       console.log( app.globalData.userRank)
      _this.getTabBar().checkPermission()
    }else {
      app.globalData.userRank = 0
      _this.getTabBar().checkPermission()
    }

    this.setData({ checked: detail });
  },
  onShow() {
    console.log( this.getTabBar())
    this.getTabBar().init()
  }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

总结:

  1. 先设置自定义导航
  2. 自定义几套你需要的List
  3. 在全局定义一个标识来判断不同的权限展示
  4. 在每个页面调用init方法,tabbar选择当前页面的active
  5. 写个按钮切换权限,去切换全局的标识来切换不同的权限

项目git地址

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号