当前位置: 首页 > news >正文

健身房私教管理系统 (二):多角色路由分发与实体扩展表设计

目录

  • 前言
  • 一、 数据库设计:统一主表 + 动态角色扩展表(1 + N 模式)
    • 1. 统一用户主表 (`fit_users`)
    • 2. 角色扩展表 (N)
      • 2.1 教练扩展表 (`fit_trainer_profiles`)
      • 2.2 学员扩展表 (`fit_member_profiles`)
      • 2.3 员工扩展表 (`fit_staff_profiles`)
  • 二、 前端交互:角色选择页与动态路由分发
    • 1. 视图层设计
    • 2. 控制层逻辑
  • 本篇小结

前言

在上一篇中,我们理清了微搭外部用户的底层动态核验流程。当新用户首次进入系统时,我们的欢迎页会精准拦截并引导其点击“用户注册”。

今天这篇,我们聚焦于点击注册后的核心环节:如何设计一个支持“学员、教练、管理员、员工”多角色的动态注册流,以及如何在低代码平台中优雅地解耦底层数据表与全局状态对象。

一、 数据库设计:统一主表 + 动态角色扩展表(1 + N 模式)

在进入前端页面开发前,必须先定下底层的“数据底座”。对于多角色系统,最忌讳的是将所有角色的特有字段(如教练的“特长标签”、学员的“身体数据”、员工的“入职时间”)全部堆在一张表里,这会导致数据表极其臃肿且充满空值。

我们采用经典的“统一主表 + 角色扩展表(1 + N)”架构:

1. 统一用户主表 (fit_users)

所有角色必须在这张表里有一条记录,用来承载通用的、全系统唯一的账户信息。

字段名称字段标识数据类型描述
用户IDid文本主键,UUID
手机号phone电话号码唯一索引,与微搭 Auth 绑定
昵称nickname文本用户昵称/真实姓名
头像avatar图片头像 URL
当前角色current_role枚举学员 / 教练 / 管理员 / 员工
状态status枚举待激活 / 启用 / 冻结
创建时间created_at日期时间-
更新时间updated_at日期时间-

2. 角色扩展表 (N)

根据用户在主表中的current_role,动态关联到对应的扩展表。

2.1 教练扩展表 (fit_trainer_profiles)

字段名称字段标识数据类型描述
记录IDid文本主键,UUID
用户IDuser_id关联关系外键 →fit_users.id
教练简介bio文本-
擅长标签tags数组["减脂", "增肌", "普拉提"]
资质证书certificates数组图片列表[{"url": "...", "name": "..."}]
基础提成比例base_commission_rate数字如 0.30 表示 30%
入职日期work_start_date日期-
创建时间created_at日期时间-
更新时间updated_at日期时间-

2.2 学员扩展表 (fit_member_profiles)

字段名称字段标识数据类型描述
记录IDid文本主键,UUID
用户IDuser_id关联关系外键 →fit_users.id
健身目标fitness_goal文本减脂 / 增肌 / 塑形
初始体重initial_weight数字单位:kg
当前体重current_weight数字单位:kg
身高height数字单位:cm
出生日期birth_date日期-
紧急联系人emergency_contact电话号码-
剩余课时remaining_lessons数字-
会员卡类型membership_type枚举无 / 月卡 / 季卡 / 年卡
会员到期时间membership_expire_at日期时间-
创建时间created_at日期时间-
更新时间updated_at日期时间-

2.3 员工扩展表 (fit_staff_profiles)

字段名称字段标识数据类型描述
记录IDid文本主键,UUID
用户IDuser_id关联关系外键 →fit_users.id
员工工号employee_no文本唯一索引
入职日期hire_date日期-
所属门店store_id关联关系外键 →fit_stores.id
员工状态employee_status枚举在职 / 离职 / 休假
创建时间created_at日期时间-
更新时间updated_at日期时间-

二、 前端交互:角色选择页与动态路由分发

当未注册用户点击“立即注册”后,系统不应该直接展示一个冗长的表单,而是将其引导至一个极简的“角色选择页”

1. 视图层设计

页面提供四个精美的卡片式按钮:

  • 【我是学员】—— 适合消费者,表单侧重于个人健身偏好。
  • 【我是教练】—— 适合健身房教练,表单侧重于专业资质、履历。
  • 【我是员工 / 我是管理员】—— 适合店内运营人员,可能需要输入特定的“门店邀请码”或提交后由后台管理员审核。

点击创建页面的图标,创建角色选择页面


在页面组件下添加普通容器,设置样式,宽为100%,高为100vh

里边添加四个按钮,修改按钮的内容分别为我是学员、我是教练、我是员工、我是管理员

设置普通容器的布局样式为纵向排列,水平垂直居中

打开按钮的是否通栏配置

给按钮设置圆角

给普通容器设置内边距

给按钮设置外边距

给按钮配置背景色形成一个对比

设置了背景色之后要将边框设置为无边框

2. 控制层逻辑

点击不同角色按钮时,触发同一个页面事件,传入角色参数。我们需要在跳转前做两件事:

  1. 将用户选择的临时角色写入页面变量。
  2. 执行页面跳转,并将角色信息传递到下一个页面。

创建一个文本变量用来保存用户的选择

创建一个自定义方法用来执行页面的跳转

// 通用角色选择处理函数:onRoleSelectexportdefaultasyncfunctiononRoleSelect({event,data}){// 从按钮绑定的 data 中获取角色信息constselectedRole=data.target;// 'STUDENT' | 'TRAINER' | 'STAFF' | 'ADMIN'// 1. 在全局应用数据中记录用户当前意向角色$w.page.dataset.state.tempRegisterRole=selectedRole;// 2. 根据角色跳转到对应的注册表单页,并传递角色参数constregisterPages={'STUDENT':'page_register_student','TRAINER':'page_register_trainer','STAFF':'page_register_staff','ADMIN':'page_register_admin'};$w.utils.navigateTo({pageId:registerPages[selectedRole],params:{role:selectedRole// 将角色信息传递到下一个页面}});}

按钮配置示例

在角色选择页中,四个角色按钮分别绑定同一个事件,传入不同的角色值:

按钮事件绑定入参
我是学员onRoleSelectSTUDENT
我是教练onRoleSelectTRAINER
我是员工onRoleSelectSTAFF
我是管理员onRoleSelectADMIN


本篇小结

通过本章的学习,我们完成了从“欢迎页拦截”到“多角色选择与底层扩展表设计”的过渡。这种“主表+扩展表”的 1+N 模式,既顺应了微搭低代码平台的数据模型构建规范,又具备极高的商业扩展性(支持未来门店多角色裂变)。

下篇专栏,我们将切入实战代码,带大家手把手用微搭的表单组件,完成【教练注册页】的资质上传、表单校验,以及如何原子化地向fit_usersfit_trainer_profiles两张表同时写入数据。欢迎持续关注!

http://www.jsqmd.com/news/852702/

相关文章:

  • 长文本处理技术综述:突破上下文限制
  • BBH基准测试结果反常?DeepSeek-R1推理延迟飙升47%的真实原因,工程师已连夜回滚
  • 2026年Word生成完全指南:4种方法从零到自动化,效率提升10倍
  • VAP技术深度解析:从硬件解码到跨平台特效动画的完整实现方案
  • 2026年的专业床垫,从平价到高端究竟该怎么选?
  • 新手避坑指南:用STM32CubeMX和Keil5给NUCLEO-F411RE点亮0.96寸OLED(附完整工程源码)
  • EG2133全桥驱动自举电路翻车实录:从电容烧毁到稳定运行的完整调试过程
  • UVM约束进阶玩法:用randc、solve...before和动态约束打造更‘聪明’的测试序列
  • HermesAgent工具连接Taotoken的配置要点与排错指南
  • 石家庄合同纠纷律师实操解析与胜诉案例参考 - 奔跑123
  • 信噪比计算实战指南:从原理到代码实现
  • 终极指南:如何用3分钟将任何网页转换为可编辑的Figma设计稿?
  • 终极滚动控制指南:如何为Mac触控板和鼠标设置独立滚动方向
  • QGIS点云处理避坑指南:从LAS文件到精准地图投影,我用LAStools插件踩过的那些雷
  • 地暖行业如何做线上推广获客?2026全网获客指南与服务商盘点 - 优质企业观察收录
  • 石家庄离婚纠纷实操参考:如何匹配靠谱代理律师 - 奔跑123
  • 3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验
  • Midjourney年付优惠不是终点——而是AI绘图成本控制起点:构建可持续提示工程工作流,ROI提升3.8倍
  • 哈尔滨中医皮肤科专家出诊机构专业权威排行 - 奔跑123
  • NFS服务器搭建与配置指南:从原理到生产环境实践
  • 基于SSD202D的摩托车智能仪表方案:从芯片选型到量产实战
  • 2026年看图软件选型指南:8款主流工具横向测评,格式兼容/性能/专业能力全对比(附工具大全)
  • CTFshow F5杯MISC题复盘:从‘大小二维码’到‘GoodNight’,手把手带你拆解那些‘脑洞’背后的技术点
  • 告别Electron臃肿?手把手教你用Tauri 2.x Beta + Rust + 前端三件套打造轻量级桌面应用
  • 破解脑瘫儿童康复训练误区:O-BFE三维方法论如何实现高效功能重建? - 资讯速览
  • YimMenu:GTA5在线模式的终极防护与体验增强解决方案
  • Word怎么转图片?一文搞懂所有免费方法丨2026实测
  • 应知应会 --- 如何查询备案
  • 别再手动算进制了!Python struct模块搞定int/float/double与16进制互转(附完整代码)
  • STM32F103多路舵机控制实战:基于CubeMX和HAL库同时驱动8个舵机的完整方案