@if(data()?.dataDateTo){}
{{visibleAppointments().length}}条筛选结果当前范围共 {{data()?.appointments?.length||0}} 条
@if(hasScheduleFilters()){}
@if(message()){

{{message()}}

} @if(error()){} @if(data()&&!data()?.liveSourceAvailable){

{{data()?.liveSourceMessage}}

}
预约到完课流程按原系统真实操作职责梳理
学员端负责查看、确认和评价,不直接创建预约
  1. 1
    运营创建预约选择学员已绑定课程、时间和陪练
    状态 0
  2. 2
    陪练开始并结束教师端开始上课,结束后提交课堂结果
    10 → 11
  3. 3
    学员确认评价学员端确认完成并提交评分与评价
    状态 20
  4. 4
    陪练生成学习报告学员确认后由陪练提交点评;工资仍按上课记录而非预约计算
    状态 30
当前范围课程{{activeAppointments()}}{{range().from}} 至 {{range().to}}
待分配{{unassignedCount()}}未分配老师时不能开始
在岗陪练{{data()?.coaches?.length||0}}未配置可用时间会提示
历史排课总量{{data()?.totalAppointments||0}}{{data()?.dataDateFrom||'—'}} 至 {{data()?.dataDateTo||'—'}}
最后刷新{{data()?.refreshedAt|date:'HH:mm'}}{{ data()?.sync?.label || '实时排课接口读取' }}
{{view()==='list'?'预约明细':'陪练排课泳道'}}{{loading()?'加载中…':'点击课程可改期或换老师'}}
待开始 上课中 陪练已结束 学员已确认 已完课 已归档 逾期未完成 已取消
@if(view()==='list'){
@for(item of visibleAppointments();track item.targetId){} @empty{}
时间会员陪练课程课型状态操作
{{item.startsAt|date:'MM-dd HH:mm'}}–{{item.endsAt|date:'HH:mm'}}{{item.studentName}}{{item.coachName}}@if(item.coachAccountMissing){历史陪练账号已失效}{{item.courseName}}{{item.classTypeLabel}}@if(item.readOnly){实时数据}{{statusDisplayLabel(item)}}
@if(item.readOnly){原业务端维护}@else{@if(rowActions(item);as actions){@if(actions.canEdit){}@if(actions.canRestore){}@if(actions.canCancel){}@if(actions.canComplete){}@if(!actions.canEdit&&!actions.canRestore&&!actions.canCancel&&!actions.canComplete){按业务端状态流转}}}
{{hasScheduleFilters()?'没有符合筛选条件的排课':'当前范围暂无排课;历史数据范围为 '+(data()?.dataDateFrom||'—')+' 至 '+(data()?.dataDateTo||'—')}}
} @else {
@for(coach of data()?.coaches||[];track coach.userId){
{{coach.displayName}}筛选结果 {{visibleCoachCount(coach.userId)}} 节@if(!coach.availabilityConfigured){未设置可用时间}
@for(item of visibleAppointments();track item.targetId){@if(item.coachId===coach.userId){}}
} @empty{
暂无陪练资料
} @if(unassignedCount()){
待分配 / 历史账号{{unassignedCount()}} 节
@for(item of visibleAppointments();track item.targetId){@if(!item.coachId||item.coachAccountMissing){}}
}
}
@if(drawerOpen()){
}