实现按角色动态显示的底部 tabBar:
uni-app 微信小程序支持自定义 tabBar,通过 custom-tab-bar 组件实现。
在 src/pages.json 中:
tabBar.custom = truetabBar.list 作为基础配置(微信小程序要求),但删除 iconPath / selectedIconPath,仅保留 pagePath 和 text文件:src/custom-tab-bar/index.vue
组件逻辑:
authStore.userRoleuni.switchTab 切换页面| 角色 | tab 列表 |
|---|---|
| sales | 首页 (/pages/home/home)、任务 (/pages/task/task)、我的 (/pages/my/my) |
| construction | 首页 (/pages/home/home)、任务 (/pages/task/task)、我的 (/pages/my/my) |
| dispatch | 首页 (/pages/home/home)、排班 (/subPackages/pages-dispatch/schedule)、任务 (/pages/task/task)、我的 (/pages/my/my) |
pages.json 中 tabBar.list 已注册的页面subPackages/pages-dispatch/schedule 是分包页面,不能直接放进 tabBar.listpages 主包中建一个轻量壳页 pages/schedule/schedule.vue,内容直接渲染调度端排班组件;调度端原 subPackages/pages-dispatch/schedule.vue 保留或重定向| 文件 | 操作 | 说明 |
|---|---|---|
src/pages.json |
修改 | tabBar.custom = true,调整 tabBar.list |
src/custom-tab-bar/index.vue |
新建 | 自定义 tabBar 组件 |
src/custom-tab-bar/index.json |
新建 | 组件配置(component: true) |
src/pages/schedule/schedule.vue |
新建 | 排班 tabBar 壳页(主包) |
src/components/dispatch/ScheduleView.vue |
新建 | 排班实际内容组件 |
src/subPackages/pages-dispatch/schedule.vue |
修改 | 复用 ScheduleView 组件 |
src/pages/home/home.vue |
无需修改 | 已按角色渲染 |
src/pages/task/task.vue |
无需修改 | 已按角色渲染 |
src/pages/my/my.vue |
无需修改 | 已按角色渲染 |
src/components/dispatch/ScheduleView.vue,将 subPackages/pages-dispatch/schedule.vue 的内容抽成组件src/pages/schedule/schedule.vue,引入 ScheduleViewsubPackages/pages-dispatch/schedule.vue,改为引入 ScheduleViewsrc/custom-tab-bar/index.vue 和 index.jsonsrc/pages.json:
tabBar.custom = truetabBar.list 注册 4 个页面:home、schedule、task、myauthStore.userRole 在 tabBar 渲染时已经可用npm run type-checknpm run build:mp-weixin文档生成时间:2026-06-24