【教培管家】后台订单管理与预约确认

目录

⏳ 前情回顾

在上一讲中,我们完成了支付闭环:从统一下单到支付回调。目前支付成功后,系统会自动更新订单为"已支付、待确认"状态。

今天,我们将聚焦于后台教务管理,引入系统"心脏"------签到/课消记录表,并实现管理员一键确认预约、同步生成排课记录的核心功能。


🎯 本节目标

  1. "核心心脏"架构理解 :深入理解 Attendances 表作为教务枢纽的设计。
  2. 后台订单管理搭建:创建预约管理页面,配置数据表格与筛选。
  3. 确认预约逻辑实现 :编写 confirmBooking 方法,实现订单状态更新与课表记录生成。

第一步:教务"心脏"------数据结构设计

既然我们已经确定了以 【签到/课消记录表】 为核心的架构,那么这张表就是整个教务系统的"心脏"。它连接了学员、排课、老师甚至财务课消。

学员课表

Attendances这张表记录了"谁、在什么时候、上了什么课、结果如何"。

字段名称 字段标识 类型 说明
关联学员 child_id 关联关系 关联 Children
关联排课 schedule_id 关联关系 关联 Schedule
关联订单 booking_id 关联关系 关联 Bookings
课程类型 type 枚举 1: 体验课, 2: 正课
上课日期 lesson_date 日期 冗余字段,方便快速查询
开始时间 start_time 文本 从排课表同步过来的时间点
状态 status 枚举 1: 待签到, 2: 到课, 3: 请假, 4: 旷课
预计消耗 cost_count 数字 本次上课预计消耗课时 (正课1.0, 体验课0)
实际扣除 actual_cost 数字 老师点名后实际扣除的课时
执教老师 teacher_id 关联关系 从排课表同步的老师 ID
数据来源 source 枚举 1: 计划任务, 2: 手动添加
确认时间 confirm_time 日期时间 老师点名确认的具体时间
课堂备注 remark 文本 老师填写的课堂表现或备注

第二步:后台订单管理搭建

打开管理后台,点击创建页面的图标

创建预约管理页面

添加布局组件

添加数据表格组件

数据模型选择学员课表,勾选场景

添加筛选条件

切换到布局模型,添加菜单

按照同样的操作继续创建预约管理,数据模型选择预约表


第三步:确认预约逻辑实现 (核心衔接)

当管理员点击"确认预约"时,系统需要同时完成"订单状态更新"和"写入课表记录"。

打开预约管理页面,在操作列添加按钮,修改为确认预约

在代码区添加自定义方法,方法名改为confirmBooking

javascript 复制代码
export default async function ({ event, data }) {
  const booking = data.target; // 获取当前行数据
  console.log("booking",booking)
  try {
    $w.utils.showLoading({ title: '处理中...' });

    // 1. 更新订单状态为"已确认"
    await $w.cloud.callDataSource({
      dataSourceName: 'Bookings',
      methodName: 'wedaUpdateV2',
      params: {
        data: {
          confirmStatus: '2' // 已确认
        },
        filter: {
          where: {
            _id: { $eq: booking._id }
          }
        }
      }
    });

    // 2. 写入"心脏"表 (Attendances)
    // 从关联的排课信息中获取时间、日期、老师等冗余字段
    await $w.cloud.callDataSource({
      dataSourceName: 'Attendances',
      methodName: 'wedaCreateV2',
      params: {
        data: {
          child_id: { _id: booking.child_id._id },
          schedule_id: { _id: booking.schedule_id._id },
          booking_id: { _id: booking._id },
          type: booking.type,
          lesson_date: booking.schedule_id.date, // 同步日期
          start_time: booking.schedule_id.startTime, // 同步时间
          teacher_id: { _id: booking.teacher_id._id }, // 同步老师
          status: '1', // 待签到
          cost_count: booking.type === '1' ? 0 : 1, // 体验课不消课
          source: '2' // 手动添加/后台触发
        }
      }
    });

    $w.utils.showToast({ title: '确认成功,已同步至课表', icon: 'success' });
    $w.table1.refresh();
  } catch (e) {
    console.error("确认预约失败", e);
    $w.utils.showToast({ title: '操作失败', icon: 'error' });
  } finally {
    $w.utils.hideLoading();
  }
}

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

给按钮绑定条件展示,当确认排课等于1的时候显示


最终效果

教务登录系统看到一条排课信息

点击确认预约,自动将排课写入到学员课表表里


🚀 总结

通过本节课,我们确立了以 Attendances 表为核心的教务架构,并实现了从后台手动确认预约到生成课表记录的完整闭环。这为学员端查看课表打下了坚实的数据基础。

下一讲,我们将转战小程序端,实现:学员端"我的课表"展示与签到

相关推荐
液态不合群13 小时前
别被“低代码快速构AI”忽悠了!实操30+项目后,我扒出了底层真相
人工智能·低代码
烟囱土著14 小时前
如何让相册「动」起来❓看这里❗
微信·微信小程序·小程序
yinmaisoft21 小时前
JNPF 积分管理子系统,购物中心会员运营躺赢神器!
大数据·人工智能·低代码·开发工具
CORNERSTONE36521 小时前
一款中后台方向的低代码可视化搭建平台
低代码·数据可视化
蓝帆傲亦1 天前
Web前端Mock数据实战指南:正确使用Mock.js提升开发效率
微信小程序·小程序·uni-app
00后程序员张1 天前
iOS 应用代码混淆,对已编译 IPA 进行类与方法混淆
android·ios·小程序·https·uni-app·iphone·webview
kyh10033811201 天前
微信小游戏《找茬找汉字闯关王》开发实战:送全部源码
microsoft·微信·微信小程序·小程序·微信小游戏·汉字找茬找梗
汤姆yu1 天前
基于微信小程序的校园快递代取系统
微信小程序·小程序
albert-einstein1 天前
微信小程序反编译(不通过模拟器进行反编译)
微信小程序·小程序