uniapp动态底部tabbar_微信小程序开发例子

uniapp动态底部tabbar_微信小程序开发例子文章目录1.需求背景1.1源码下载2.问题前提及思路3.开始撸3.1设置`tabbar.js`配置不同角色不同的菜单3.2设置`page.json`3.3vue配置3.4tabBar组件代码3.5setRole方法1.需求背景公司要求开发一个小程序,要求二种不同权限的人群都可以使用,使用时根据不同的权限,获取不同的tabbar,以及展示对应不同的内容。登录页面分为用户登录及管理员登录1.2用户登录和管理员登录的tabbar根据账号角色进行对应展示1.1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1. 需求背景

公司要求开发一个小程序,要求二种不同权限的人群都可以使用,使用时根据不同的权限,获取不同的tabbar,以及展示对应不同的内容。

登录页面分为 用户登录管理员登录
在这里插入图片描述
1.2 用户登录和管理员登录的 tabbar 根据账号角色进行对应展示
在这里插入图片描述

1.1 源码下载

【源码】uni-app 微信小程序根据角色动态的更改底部tabbar

2. 问题前提及思路

uniapp 本身的动态设置tabbar方法 uni.setTabBarItem(OBJECT),但是使用这个方法刷新切换时会短暂白屏以及uni.setTabBarItem只能满足动态设置tabbar一项的内容,无法实现多项的需求。所有综合考虑决定还是使用uview-ui的Tabbar底部导航栏组件。
在这里插入图片描述
最终选择了uni-app的uview-ui(UI框架)+ vuex来完成这个功能。其中,vuex主要是用来存储当前的tabbar内容的。

3. 开始撸

3.1 设置 tabbar.js 配置不同角色不同的菜单

utils文件夹下新建一个tabbar.js,来存储不同权限下的底部导航数据。我这里有两种不同的权限,第二种权限比第一种权限多了两项菜单。

// 普通用户tabbar
let tab1 = [
	{ 
   
		"pagePath": "/pages/loginLogRecord/index",
		"text": "登录记录",
		"iconPath": "/static/icon_bx.png",
		"selectedIconPath": "/static/icon_bx_hover.png"
	},
	{ 
   
		"pagePath": "/pages/accessRecord/index",
		"text": "存取记录",
		"iconPath": "/static/icon_adress.png",
		"selectedIconPath": "/static/icon_adress_hover.png"
	},
	{ 
   
		"pagePath": "/pages/person/index",
		"text": "我的",
		"iconPath": "/static/icon_user.png",
		"selectedIconPath": "/static/icon_user_hover.png"
	}
]
// 管理员用户tabbar
let tab2 = [
	{ 
   
		"pagePath": "/pages/loginLogRecord/index",
		"text": "登录记录",
		"iconPath": "/static/icon_bx.png",
		"selectedIconPath": "/static/icon_bx_hover.png"
	},
	{ 
   
		"pagePath": "/pages/accessRecord/index",
		"text": "存取记录",
		"iconPath": "/static/icon_adress.png",
		"selectedIconPath": "/static/icon_adress_hover.png"
	},
	{ 
   
		"pagePath": "/pages/authorizationList/index",
		"text": "授权名单",
		"iconPath": "/static/authorization.png",
		"selectedIconPath": "/static/authorization_hover.png"
	},
	{ 
   
		"pagePath": "/pages/inventory/index",
		"text": "盘点",
		"iconPath": "/static/inventory.png",
		"selectedIconPath": "/static/inventory_hover.png"
	},
	{ 
   
		"pagePath": "/pages/person/index",
		"text": "我的",
		"iconPath": "/static/icon_user.png",
		"selectedIconPath": "/static/icon_user_hover.png"
	}
]
export default [
	tab1,
	tab2
]

Jetbrains全家桶1年46,售后保障稳定

3.2 设置 page.json

在page.json文件里,把tabbar里的几个页面去重放进去。只是单纯的写个路径,什么都不要添加。testiconPathselectedIconPath 字段全部删掉这里不需要配置。

"tabBar": { 
   
	"color": "#333333",
	"selectedColor": "#328CFA",
	"backgroundColor": "#FFFFFF",
	"list": [
		{ 
   
			"pagePath": "pages/loginLogRecord/index"
		},
		{ 
   
			"pagePath": "pages/accessRecord/index"
		},
		{ 
   
			"pagePath": "pages/authorizationList/index"
		},
		{ 
   
			"pagePath": "pages/inventory/index"
		},
		{ 
   
			"pagePath": "pages/person/index"
		}
	]
}

3.3 vue 配置

uniapp是可以直接使用vuex的,所以,直接在项目的根目录下新建一个store文件夹,存储相关数据。

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import tabBar from '@/utils/tabbar.js'
const store = new Vuex.Store({ 
   
	state: { 
   
		wx_token: '',
		tabBarList: [],
		roleId: 0, //0 普通员工,1管理员
	},
	mutations: { 
   
		// 设置wx_token
		setWxtoken(state, data) { 
   
			state.wx_token = data;
			uni.setStorageSync('wx_token',data)
		},
		// 设置用户角色ID
		setRoleId(state, data) { 
   
			state.roleId = data;
			uni.setStorageSync('roleId',data)
			state.tabBarList = tabBar[data];
			uni.setStorageSync('tabBarList',tabBar[data])
		},
	},
})
export default store

在入口文件 main.js 中使用

import Vue from 'vue'
import App from './App'
import uView from "uview-ui";
import store from './store/index'
Vue.use(uView);
Vue.config.productionTip = false
Vue.prototype.$store = store
App.mpType = 'app'
const app = new Vue({ 
   
    ...App,
	store
})
app.$mount()

3.4 tabBar组件代码

<template>
	<view>
		<u-tabbar :list="tabBarList" :active-color="activeColor" :inactive-color="inactiveColor" :height="84" :border-top="borderTop">
		</u-tabbar>
	</view>
</template>
<script> import store from '@/store' export default { 
      props:{ 
      tabBarList:{ 
      type:Array, default:uni.getStorageSync('tabBarList') } }, data() { 
      return { 
      borderTop: true, inactiveColor: '#909399', activeColor: '#328CFA', } }, } </script>

3.5 setRole方法

登录时,获取返回的权限,然后再调用setRole方法

<script> import { 
      mapMutations } from 'vuex'; export default { 
      data() { 
      return { 
      roleId:0, }; }, methods: { 
      methods: { 
      ...mapMutations(['setRoleId']), }, //登录 login() { 
      this.setRoleId(this.roleId)// 0或者1 uni.switchTab({ 
      url: '../index/index' //然后跳转到登录后的首页 }) } } } </script>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206857.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 仓库管理系统源码[通俗易懂]

    java 仓库管理系统源码[通俗易懂]系统操作权限管理。系统提供基本的登入登出功能,同时系统包含两个角色:系统超级管理员和普通管理员,超级管理员具有最高的操作权限,而普通管理员仅具有最基本的操作权限,而且仅能操作自己被指派的仓库。 请求URL鉴权。对于系统使用者登陆后进行操作发送请求的URL,后台会根据当前用户的角色判断是否拥有请求该URL的权限。 基础数据信息管理。对包括:货物信息、供应商信息、客户信息、仓库信息在内的基础数据信…

    2022年9月23日
    2
  • js – form表单提交不刷新

    大家已经发现了,当我们点击submit提交form表单的时候,他会刷新一次,如果不想它刷新的话有下面两种方法:利用iframe我们可以利用一个隐藏的iframe来实现,主要是我们把提交目标放到一个隐藏的iframe里,然后让iframe提交数据(ps:这个未实测,仅仅是网上提供的,我记录一下.以后遇到或者会试一下吧)<formaction=”…

    2022年4月18日
    61
  • 只有使用 ACL 的 通配符掩码 才可以使用一条语句就可以 匹配出,奇数vlan的网段和 偶数vlan的网段,odd 奇数, even 偶数[通俗易懂]

    只有使用 ACL 的 通配符掩码 才可以使用一条语句就可以 匹配出,奇数vlan的网段和 偶数vlan的网段,odd 奇数, even 偶数[通俗易懂]只有使用ACL的通配符掩码才可以使用一条语句就可以匹配出,奇数vlan的网段和偶数vlan的网段,odd奇数,even偶数!

    2022年7月19日
    33
  • Java微信公众号开发(附源码!!!)

    Java微信公众号开发(附源码!!!)笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号。本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。准备工作:一、在微信公众平台申请账号。百度搜索微信公众平台,点击注册,通过邮箱注册成功后会看到如下画面。在这里,选择类型时要注意下。如果你是个人开发的话只能选择订阅号,订阅号没有自定义菜单等…

    2022年5月15日
    42
  • DropDownList绑定数据库「建议收藏」

    DropDownList绑定数据库「建议收藏」//获取文本this.DropDownList1.SelectedItem.Text;本类内使用protectedvoidPage_Load(objectsender,EventArgse)   {       this.DropDownList1.Items.Clear();       this.DropDownList1.DataSource=DbHelperSQL.Query(“select*fromauthors”).Tables[0];       this.Drop

    2022年10月8日
    3
  • BeanCopier_protobuf的简单使用

    BeanCopier_protobuf的简单使用BeanCopier的简单使用cglib包下的一个类.简单栗子//创建实例.BeanCopiercopier=BeanCopier.create(source.getClass(),target.getClass(),false);//Copy操作copier.copy(person1,person2,null);注意到:第三个参数userConve…

    2025年9月14日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号