130 lines
3.6 KiB
Markdown
130 lines
3.6 KiB
Markdown
|
|
# 自定义TabBar使用说明
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
|
|||
|
|
本项目实现了基于用户类型的动态自定义TabBar,支持根据用户登录状态和类型显示不同的导航项:
|
|||
|
|
|
|||
|
|
- **未登录状态**:默认显示求职者tabbar(职位 + 招聘会 + AI+ + 消息 + 我的)
|
|||
|
|
- **企业用户(userType=0)**:显示"发布岗位"导航
|
|||
|
|
- **求职者用户(userType=1,2,3)**:显示"招聘会"导航
|
|||
|
|
|
|||
|
|
## 实现方案
|
|||
|
|
|
|||
|
|
### 1. 微信小程序原生自定义TabBar
|
|||
|
|
|
|||
|
|
在 `custom-tab-bar/` 目录下创建了微信小程序原生自定义TabBar组件:
|
|||
|
|
|
|||
|
|
- `index.js` - 组件逻辑,根据用户类型动态生成TabBar配置
|
|||
|
|
- `index.wxml` - 模板文件
|
|||
|
|
- `index.wxss` - 样式文件
|
|||
|
|
- `index.json` - 组件配置文件
|
|||
|
|
|
|||
|
|
### 2. UniApp兼容的自定义TabBar组件
|
|||
|
|
|
|||
|
|
创建了 `components/CustomTabBar/CustomTabBar.vue` 组件,支持多端兼容:
|
|||
|
|
|
|||
|
|
- 支持微信小程序、H5、APP等多端
|
|||
|
|
- 响应式设计,根据用户类型动态显示
|
|||
|
|
- 支持消息徽章显示
|
|||
|
|
- 支持页面跳转逻辑
|
|||
|
|
|
|||
|
|
### 3. 配置修改
|
|||
|
|
|
|||
|
|
在 `pages.json` 中启用了自定义TabBar:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
"tabBar": {
|
|||
|
|
"custom": true,
|
|||
|
|
// ... 其他配置
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 1. 在页面中引入自定义TabBar
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<template>
|
|||
|
|
<view class="page">
|
|||
|
|
<!-- 页面内容 -->
|
|||
|
|
|
|||
|
|
<!-- 自定义tabbar -->
|
|||
|
|
<CustomTabBar :currentPage="0" />
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 用户类型判断
|
|||
|
|
|
|||
|
|
组件会自动从 `useUserStore` 中获取用户信息,根据用户登录状态和 `userInfo.userType` 字段判断用户类型:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 用户类型说明
|
|||
|
|
// 未登录: 默认显示求职者tabbar
|
|||
|
|
// 0: 企业用户 - 显示"发布岗位"
|
|||
|
|
// 1: 求职者 - 显示"招聘会"
|
|||
|
|
// 2: 网格员 - 显示"招聘会"
|
|||
|
|
// 3: 政府人员 - 显示"招聘会"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 动态切换用户类型
|
|||
|
|
|
|||
|
|
当用户登录状态或类型发生变化时,TabBar会自动更新:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 未登录状态:自动显示求职者tabbar
|
|||
|
|
// 登录后根据用户类型显示对应tabbar
|
|||
|
|
|
|||
|
|
// 切换用户类型
|
|||
|
|
userInfo.value.userType = 1; // 切换到求职者
|
|||
|
|
uni.setStorageSync('userInfo', userInfo.value);
|
|||
|
|
|
|||
|
|
// 登出时清除用户信息,自动回到未登录状态
|
|||
|
|
userStore.logOut(false);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 页面配置
|
|||
|
|
|
|||
|
|
### 已配置的页面
|
|||
|
|
|
|||
|
|
- `pages/index/index.vue` - 首页(currentPage: 0)
|
|||
|
|
- `pages/careerfair/careerfair.vue` - 招聘会页面(currentPage: 1)
|
|||
|
|
- `pages/chat/chat.vue` - AI+页面(currentPage: 2)
|
|||
|
|
- `pages/msglog/msglog.vue` - 消息页面(currentPage: 3)
|
|||
|
|
- `pages/mine/mine.vue` - 我的页面(currentPage: 4)
|
|||
|
|
|
|||
|
|
### 测试页面
|
|||
|
|
|
|||
|
|
- `pages/test/tabbar-test.vue` - TabBar功能测试页面
|
|||
|
|
|
|||
|
|
## 技术特点
|
|||
|
|
|
|||
|
|
1. **响应式设计**:根据用户类型动态显示不同的导航项
|
|||
|
|
2. **多端兼容**:支持微信小程序、H5、APP等平台
|
|||
|
|
3. **消息徽章**:支持显示未读消息数量
|
|||
|
|
4. **页面跳转**:智能判断tabBar页面和普通页面的跳转方式
|
|||
|
|
5. **用户类型监听**:实时监听用户类型变化并更新TabBar
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 确保在 `pages.json` 中设置了 `"custom": true`
|
|||
|
|
2. 每个页面的 `currentPage` 参数需要正确设置
|
|||
|
|
3. 用户类型存储在 `userInfo.userType` 字段中
|
|||
|
|
4. 组件会自动监听用户类型变化并更新显示
|
|||
|
|
|
|||
|
|
## 测试方法
|
|||
|
|
|
|||
|
|
1. 访问测试页面:`/pages/test/tabbar-test`
|
|||
|
|
2. 切换不同的用户类型
|
|||
|
|
3. 观察底部TabBar的变化
|
|||
|
|
4. 测试页面跳转功能
|
|||
|
|
|
|||
|
|
## 故障排除
|
|||
|
|
|
|||
|
|
如果TabBar不显示或显示异常:
|
|||
|
|
|
|||
|
|
1. 检查 `pages.json` 中的 `custom: true` 配置
|
|||
|
|
2. 确认用户信息是否正确存储
|
|||
|
|
3. 检查组件是否正确引入
|
|||
|
|
4. 查看控制台是否有错误信息
|