news 2026/4/29 8:32:58

微搭低代码MBA 培训管理系统实战 36——小程序端课程预约功能实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微搭低代码MBA 培训管理系统实战 36——小程序端课程预约功能实现

目录

  • 前情回顾与本节目标
  • 第一步:数据模型准备
    • 1.1 预约课程表(MBA_BookingCourses)
    • 1.2 预约记录表(MBA_Bookings)
  • 第二步:创建页面
  • 第三步:页面布局
  • 第四步:预约规则说明
    • 4.1 规则展开区域
    • 4.2 规则展开收起
  • 第五步:课程列表区域
  • 第六步:预约功能实现
  • 最终效果
  • 总结

前情回顾与本节目标

在上一节中,我们完成了教务端的预约管理功能。本节我们将实现小程序端的课程预约功能,学员可以查看可预约的课程列表,进行预约和取消预约操作。

本节核心目标:

  • 课程列表展示:显示可预约的课程列表,包含课程信息和名额状态
  • 预约功能:学员可以预约课程,扣减剩余名额
  • 取消预约:学员可以取消已预约的课程
  • 黑名单校验:黑名单学员无法预约

第一步:数据模型准备

1.1 预约课程表(MBA_BookingCourses)

字段名称字段标识字段类型说明
课程ID_id文本主键,系统自动生成
关联课程rel_schedule_id多对一关联 Schedules 表
课程名称course_name文本课程名称
授课教师teacher_name文本教师姓名
上课日期course_date日期上课日期
开始时间start_time时间开始时间
结束时间end_time时间结束时间
总名额total_spots数字总名额
剩余名额remaining_spots数字剩余名额
预约状态status枚举1-可预约、2-已约满、3-已结束

1.2 预约记录表(MBA_Bookings)

字段名称字段标识字段类型说明
预约ID_id文本主键,系统自动生成
关联课程rel_course_id多对一关联 BookingCourses 表
关联学员rel_student_id多对一关联 StudentProfiles 表
预约状态status枚举1-已预约、2-已签到、3-缺勤、4-已取消
预约时间book_time日期时间预约时间

第二步:创建页面

点击创建页面图标,输入"课程预约"

切换到布局设计,选择tab栏导航布局,加入菜单


第三步:页面布局

切回到页面设计,添加容器组件,设置宽、高和背景色:

:root{width:100%;min-height:100vh;background-color:#F6F7F9;}

继续添加普通容器,设置背景色、内边距和圆角:

:root{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);padding:48px 20px 24px 20px;border-radius:0 0 24px 24px;}

里边添加文本组件,设置文本颜色、字号和加粗的效果:


第四步:预约规则说明

4.1 规则展开区域

添加普通容器,里边添加两个普通容器,设置外层容器的布局为横向排列,两端对齐

内层的第一个普通容器里添加图标和文本组件,设置横向排列

内层的第二个普通容器里添加两个按钮组件

然后配置背景色、圆角、内外边距

4.2 规则展开收起

创建一个自定义变量用来控制按钮的显示

给按钮配置条件展示

$w.page.dataset.state.showRules

另外一个按钮进行取反

!$w.page.dataset.state.showRules

给按钮配置点击事件,对变量进行赋值

添加普通容器,里边添加文本组件,用来显示规则说明

绑定条件展示

!$w.page.dataset.state.showRules

第五步:课程列表区域

添加数据列表组件,数据模型选择预约课程表

设置数据列表的第一个普通容器的背景色、外阴影和圆角

清掉默认的布局组件,里边添加三个普通容器

第一个普通容器里添加两个文本组件,设置横向排列,两端对齐

分别绑定课程名称、预约状态字段

$w.item_listView1.course_name
$w.app.utils.formatEnum($w.item_listView1.status,'yuyuezhuangtai',$w.app)

第二个普通容器添加三个普通容器,里边添加图标和文本组件,文本组件绑定上课日期时间

$w.DateText($w.item_listView1.created,'MM月DD日')+$w.DateText($w.item_listView1.start_time,'HH:mm')+"-"+$w.DateText($w.item_listView1.end_time,'HH:mm')

按照同样的方法配置其余字段

$w.item_listView1.teacher_name
"剩余"+($w.item_listView1.remaining_spots||0)+"/"+$w.item_listView1.total_spots+"名额"

在第三个容器里添加按钮组件,修改文本为立即预约

第六步:预约功能实现

创建自定义方法bookCourse

exportdefaultasyncfunctionbookCourse({event,data}){try{constcourse=data.target;constuserInfo=$w.app.dataset.state.currentUser;// 校验是否登录if(!userInfo){return$w.utils.showToast({title:'请先登录',icon:'error'});}// 校验黑名单if(userInfo.is_blacklisted){return$w.utils.showModal({title:'提示',content:'您已被加入黑名单,无法预约课程,请联系老师解除',showCancel:false});}// 校验名额if(course.remaining_spots<=0){return$w.utils.showToast({title:'名额已满',icon:'error'});}// 校验是否已经预约(查询预约记录表)constexistingBookingRes=await$w.cloud.callDataSource({dataSourceName:'MBA_Bookings',methodName:'wedaGetRecordsV2',params:{filter:{where:{$and:[{rel_course_id:{$eq:course._id}},{rel_student_id:{$eq:userInfo._id}},{status:{$eq:'1'}}// 已预约状态]}},select:{$master:true}}});if(existingBookingRes.records&&existingBookingRes.records.length>0){return$w.utils.showToast({title:'已预约该课程',icon:'none'});}$w.utils.showLoading({title:'预约中...'});// 创建预约记录await$w.cloud.callDataSource({dataSourceName:'MBA_Bookings',methodName:'wedaCreateV2',params:{data:{rel_course_id:{_id:course._id},rel_student_id:{_id:userInfo._id},status:'1',book_time:$w.Now()}}});// 更新课程剩余名额await$w.cloud.callDataSource({dataSourceName:'MBA_BookingCourses',methodName:'wedaUpdateV2',params:{data:{remaining_spots:course.remaining_spots-1},filter:{where:{_id:{$eq:course._id}}}}});$w.utils.hideLoading();$w.utils.showToast({title:'预约成功',icon:'success'});// 刷新列表$w.listView1.refresh({})}catch(e){console.error('预约失败',e);$w.utils.hideLoading();$w.utils.showToast({title:'预约失败',icon:'error'});}}

给按钮设置点击事件,调用方法,传入所在行数据


最终效果

进入首页,点击课程预约,可以看到可供预约的课程

总结

本节完成了小程序端课程预约功能的实现:

  1. 课程列表展示:显示可预约课程,包含课程信息、名额状态
  2. 预约功能:学员预约课程,扣减剩余名额
  3. 取消预约:学员取消已预约课程,恢复名额
  4. 黑名单校验:黑名单学员无法预约
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 8:30:53

WinArchiver Pro(解压缩软件) 6.2

WinArchiver是一款功能强大的压缩、解压缩软件&#xff0c;它可以打开&#xff0c;生成以及管理压缩文件。WinArchiver 中文版支持几乎所有的压缩文件&#xff0c;包括zip、rar、7z、iso等各种格式。WinArchiver 中文版同时还支持将压缩文件加载到虚拟光驱&#xff0c;从而省去…

作者头像 李华
网站建设 2026/4/29 8:26:00

2026生成式AI搜索优化:GEO监测工具选型与实践

概述生成式AI技术的快速发展&#xff0c;彻底改变了用户获取信息的方式。DeepSeek、Kimi、ChatGPT等AI搜索工具&#xff0c;已经成为用户查询信息的主要入口。这一变化催生了GEO&#xff08;生成式引擎优化&#xff09;这一全新的营销技术领域。本文从功能完整性、易用性、价格…

作者头像 李华
网站建设 2026/4/29 8:23:31

LoRA技术解析:大模型高效微调与部署实践

1. 低秩适配&#xff08;LoRA&#xff09;技术解析1.1 大模型微调的挑战与机遇现代基础大语言模型&#xff08;如Llama 3系列&#xff09;通过数千亿参数的规模和海量预训练数据&#xff0c;展现出惊人的通用能力。但在实际业务场景中&#xff0c;我们常常遇到这样的矛盾&#…

作者头像 李华
网站建设 2026/4/29 8:21:23

FPGA浮点DSP设计优化与融合数据路径技术

1. FPGA浮点DSP设计的技术挑战与创新方案在数字信号处理领域&#xff0c;浮点运算一直是实现高精度计算的核心需求。传统FPGA设计在浮点运算实现上面临着三大技术瓶颈&#xff1a;首先是运算延迟问题&#xff0c;标准IEEE 754浮点运算符需要深度流水线实现&#xff0c;导致单次…

作者头像 李华
网站建设 2026/4/29 8:20:22

智能储气技术在双膜气柜中的应用

在工业自动化与信息化融合发展的背景下&#xff0c;双膜储气设备正逐步向数字化、智能化方向升级。通过引入智能控制系统&#xff0c;可提升设备运行效率&#xff0c;增强系统自适应调节能力&#xff0c;优化运营成本&#xff0c;同时强化安全保护与环保性能。以智能装备替代部…

作者头像 李华
网站建设 2026/4/29 8:17:04

多功能老年护理实训室满足多元实训需求

老年护理实训室是培养专业老年照护人才的核心场所&#xff0c;多功能布局与合理配置能适配各类实训需求&#xff0c;贴合一线照护场景&#xff0c;为实训室建设提供可落地的参考&#xff0c;助力提升实训教学质量。点击获取实训室建设方案 一、多功能老年护理实训室核心建设原…

作者头像 李华