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

目录

⏳ 前情回顾

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

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


🎯 本节目标

  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 表为核心的教务架构,并实现了从后台手动确认预约到生成课表记录的完整闭环。这为学员端查看课表打下了坚实的数据基础。

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

相关推荐
ZKNOW甄知科技2 小时前
燕千云迭代版本发布:智能Agent深入业务现场
运维·人工智能·低代码·机器学习·自然语言处理·自动化·aigc
济南壹软网络科技有限公司3 小时前
盲盒源码系统小程序V6MAX底层架构解析,PHP+Uniapp高性能商用底座发布
小程序·架构·uni-app
2501_915918413 小时前
iOS 上架注意事项有哪些?Appuploader 的四个阶段自查清单
android·ios·小程序·https·uni-app·iphone·webview
Autumn_ing4 小时前
AI原型设计工具怎么选?可编辑原型与可运行前端适合什么场景
前端·小程序·产品经理·代码·codex·墨刀ai客户端·ai原型
她的男孩4 小时前
条件分支两边审批一样,却发成两份待办:Forge Admin 审批设计器的公共节点合并
spring boot·低代码·工作流引擎
fengGer的bugs4 小时前
微信小程序实战:本地存储的新生儿喂养记录(原生 + 四套主题 + 疫苗日程)
微信小程序·小程序
Ai-_Man5 小时前
我需要批量导出Poe左边栏所有对话,而不是一条具体的对话内容,你们AI导出鸭可以吗?
开发语言·前端·javascript·人工智能·小程序
青企通5 小时前
二手交易小程序的担保交易:资金托管、状态机与争议处理
小程序
驰骋工作流1 天前
低代码平台的评估指标:从「上层建筑 / 基座」两层看驰骋BPM驰骋低代码低代码工作流引擎
低代码
驰骋工作流1 天前
菜单的类型:为什么「菜单」需要分类——结合驰骋 GPN_Menu 的设计驰骋BPM驰骋低代码低代码工作流引擎
低代码