# 多身份功能 - 动态角色显示完成 > 完成时间:2026-02-28 > 功能:从数据库动态加载用户角色并支持切换 --- ## ✅ 已完成功能 ### 1. 个人中心"当前角色"区域改造 **位置:** `peidu/uniapp/src/pages/user/index.vue` **功能特性:** - ✅ 点击"当前角色"展开/收起角色列表 - ✅ 从数据库 `user_roles` 表动态加载用户的所有角色 - ✅ 显示主身份标记(带"主身份"徽章和左侧绿色条) - ✅ 当前角色高亮显示(绿色背景 + 勾选图标) - ✅ 点击角色切换,调用后端API - ✅ 底部显示"申请其他身份"入口 --- ## 📋 修改内容 ### 1. 模板部分(Template) ```vue 当前角色 {{ roleName }} {{ getRoleIcon(role.roleType) }} {{ getRoleLabel(role.roleType) }} 主身份 + 申请其他身份 ``` ### 2. 数据部分(Data) 新增字段: ```javascript showRoleList: false, // 角色列表展开状态 userRoles: [], // 用户的所有角色(从数据库加载) ``` ### 3. 方法部分(Methods) 新增方法: ```javascript // 加载用户的所有角色(从数据库) async loadUserRoles() // 切换角色列表展开/收起 toggleRoleList() // 切换到指定角色 async switchToRole(roleType) // 跳转到申请身份页面 goToApplyRole() // 角色类型转换(数据库字段 -> 前端值) getRoleValue(roleType) // 获取角色图标 getRoleIcon(roleType) // 获取角色名称 getRoleLabel(roleType) ``` ### 4. 生命周期 修改 `onShow`: ```javascript onShow() { this.checkLoginStatus() if (this.isLoggedIn) { this.loadUserData() this.loadUserRoles() // 新增:加载用户的所有角色 } } ``` --- ## 🎨 界面效果 ### 折叠状态 ``` ┌─────────────────────────────────┐ │ 👤 当前角色 家长 ▼ │ └─────────────────────────────────┘ ``` ### 展开状态(单身份用户) ``` ┌─────────────────────────────────┐ │ 👤 当前角色 家长 ▲ │ ├─────────────────────────────────┤ │ 👨‍👩‍👧 家长 [主身份] ✓ │ │ │ │ + 申请其他身份 │ └─────────────────────────────────┘ ``` ### 展开状态(多身份用户) ``` ┌─────────────────────────────────┐ │ 👤 当前角色 家长 ▲ │ ├─────────────────────────────────┤ │ 👨‍👩‍👧 家长 [主身份] ✓ │ │ 👨‍🏫 陪伴员 │ │ 💼 分销员 │ │ │ │ + 申请其他身份 │ └─────────────────────────────────┘ ``` --- ## 🔄 数据流程 ### 1. 加载角色流程 ``` 用户打开个人中心 ↓ onShow() 触发 ↓ loadUserRoles() 调用 ↓ userStore.loadAllRoles() 调用后端API ↓ GET /api/user/roles/list ↓ 返回用户所有角色 ↓ 显示在界面上 ``` ### 2. 切换角色流程 ``` 用户点击某个角色 ↓ switchToRole(roleType) 调用 ↓ userStore.switchRole(roleType) 调用后端API ↓ POST /api/user/roles/switch ↓ 后端更新主身份 ↓ 前端刷新页面 ↓ 跳转到首页 ``` --- ## 📊 角色映射关系 | 数据库字段 | 前端值 | 显示名称 | 图标 | |-----------|--------|---------|------| | parent | user | 家长 | 👨‍👩‍👧 | | teacher | teacher| 陪伴员 | 👨‍🏫 | | manager | manager| 管理师 | 👔 | | distributor| distributor| 分销员 | 💼 | | provider | provider| 服务商 | 🎓 | --- ## 🎯 核心特性 1. **动态加载** - 从数据库 `user_roles` 表读取,有几个角色就显示几个 2. **主身份标记** - 主身份显示"主身份"徽章和左侧绿色条 3. **当前角色高亮** - 当前使用的角色有绿色背景和勾选图标 4. **折叠展开** - 点击标题栏展开/收起,箭头旋转动画 5. **切换功能** - 点击角色调用后端API切换主身份 6. **申请入口** - 底部提供"申请其他身份"入口 --- ## 🧪 测试步骤 ### 1. 单身份用户测试 ``` 1. 使用家长账号登录(13800138000) 2. 进入个人中心 3. 点击"当前角色" 4. 应该只显示"家长"一个角色 5. 点击"申请其他身份"跳转到申请页面 ``` ### 2. 多身份用户测试 ``` 1. 在数据库中为用户添加多个角色 2. 登录该账号 3. 进入个人中心 4. 点击"当前角色" 5. 应该显示所有角色 6. 主身份有"主身份"标记 7. 当前角色有绿色背景和勾选图标 8. 点击其他角色切换 9. 切换成功后跳转到首页 ``` ### 3. 切换角色测试 ``` 1. 展开角色列表 2. 点击非当前角色 3. 显示"切换中..."加载提示 4. 切换成功显示"切换成功"提示 5. 自动跳转到首页 6. 首页显示对应角色的功能 ``` --- ## ⚠️ 注意事项 1. **后端必须先启动** - 否则无法加载角色数据 2. **数据库表必须存在** - `user_roles` 表必须已创建 3. **API接口必须正常** - `/api/user/roles/list` 和 `/api/user/roles/switch` 必须可用 4. **前端必须重新编译** - 修改后需要在HBuilderX中重新编译 --- ## 📁 相关文件 - `peidu/uniapp/src/pages/user/index.vue` - 个人中心页面(已修改) - `peidu/uniapp/store/user.js` - 用户状态管理(已有loadAllRoles和switchRole方法) - `peidu/uniapp/src/pages/user/apply-role.vue` - 申请身份页面(已创建) --- ## 🎉 完成标志 - ✅ 个人中心显示"当前角色"区域 - ✅ 点击展开显示所有角色 - ✅ 主身份有特殊标记 - ✅ 当前角色高亮显示 - ✅ 点击角色可以切换 - ✅ 底部有"申请其他身份"入口 - ✅ 折叠展开动画流畅 --- ## 🚀 下一步 1. 启动后端服务 2. 使用HBuilderX重新编译前端 3. 测试角色加载和切换功能 4. 如有问题,查看控制台日志 --- **预计测试时间:** 15分钟 **难度等级:** ⭐⭐ 中等 **风险等级:** ⭐ 极低