@if(message()){

{{message()}}

} @if(error()){} @if(tab()!=='rates'){
统计月份@if(monthPickerOpen()){}
{{overview()?.sourceStatus?.mode==='parse'?'新数据库':overview()?.sourceStatus?.mode==='live'?'实时数据':'缓存数据'}} · 查询于 {{overview()?.sourceStatus?.refreshedAt|date:'MM-dd HH:mm:ss':'+0800'}}
} @if(tab()==='overview'||tab()==='batches'){} @if(tab()==='overview'){ @if(overview();as data){ @if(data.sourceStatus.sync;as sync){
{{sync.settlementReady?'工资截止来源已确认':sync.state==='batch_verified'?'旧接口已同步 · 结算待核对':'结算暂不可用'}}来源同步:{{sync.lastSuccessAt?(sync.lastSuccessAt|date:'yyyy-MM-dd HH:mm:ss':'+0800'):'尚无成功记录'}} · 延迟 {{sync.lagSeconds==null?'未知':sync.lagSeconds+' 秒'}}{{sync.message}}
}@else{

无法核验旧系统同步状态,当前统计仅供查看,不能结算。

}
参与陪练{{data.coachCount}}本月有课酬或抗遗忘工资
有效课次{{data.lessonCount}}含课型4 {{data.type4Count||0}} 节
总工时{{data.totalHours|number:'1.1-1'}}h课型4不计工时
基础工资¥{{data.baseAmount|number:'1.2-2'}}优先使用已保存的工资快照
抗遗忘工资¥{{data.reviewAmount||0|number:'1.2-2'}}有效复习 {{data.reviewCount||0}} 次
当月收入¥{{data.payableAmount|number:'1.2-2'}}按收入月份汇总,结算调整另列
批次结算应发{{data.settlementAmount==null?'未生成':'¥'+(data.settlementAmount|number:'1.2-2')}}调整 ¥{{data.settlementAdjustmentAmount||0|number:'1.2-2'}} · 补结 ¥{{data.settlementCarryAmount||0|number:'1.2-2'}}
异常记录{{data.exceptionCount}}审核工资前必须处理
{{data.month}} 老师收益汇总点击老师查看课酬与抗遗忘工资明细
@if(isManager()){}
@for(row of data.coachItems;track row.coachId){}@empty{}
陪练老师门店30分钟60分钟体验课课型4总课次工时基础工资复习次数抗遗忘工资当月收入明细
{{coachLabel(row.coachName,row.coachId)}}ID {{row.coachId}}{{row.storeName}}{{row.type30Count}}{{row.type60Count}}{{row.trialCount}}{{row.type4Count}}{{row.lessonCount}}{{row.totalHours|number:'1.1-1'}}h¥{{row.baseAmount|number:'1.2-2'}}{{row.reviewCount||0}}¥{{row.reviewAmount||0|number:'1.2-2'}}¥{{row.payableAmount|number:'1.2-2'}}
当前筛选范围没有有效计薪记录
@if(data.type4Count){

课型4“陪练”按原系统口径只计入课次,不计算工资和工时。

}
} } @else if(tab()==='rewards'){ @if(rewardCoachId()){

当前查看老师 ID {{rewardCoachId()}}

} } @else if(tab()==='batches'){
{{allBatchMonths()?'全部月份':month()}} 全公司工资批次每月仅一张;门店筛选不会拆分工资单
@for(row of page()?.items||[];track row.objectId){}@empty{}
月份状态陪练有效课次工时基础工资复习次数抗遗忘工资调整应发异常操作
{{row.month}}{{row.statusLabel}}{{row.coachCount}}{{row.lessonCount}}{{row.totalHours|number:'1.1-1'}}h¥{{row.baseAmount|number:'1.2-2'}}{{row.reviewCount||0}}¥{{row.reviewAmount||0|number:'1.2-2'}}¥{{row.adjustmentAmount|number:'1.2-2'}}¥{{row.payableAmount|number:'1.2-2'}}{{row.exceptionCount}}
尚未生成工资批次。请先在“收益统计”核对实时数据。
@if(page();as batches){
共 {{batches.total}} 个批次 · 第 {{batches.page}} 页
} } @else { @if(standards();as config){
课程数{{config.summary.courseCount}}
已确认映射{{config.summary.confirmedCount}}
待确认课程{{config.summary.unmappedCount}}
生效规则{{config.summary.activeRuleCount}}
@if(standardsSection()==='students'){
按学员与预约确认学段包含待开始预约及所选工资月份的已完课记录。按学员确认分类并填写依据后,工资统计会刷新。
@for(row of writingRows();track row.appointmentId){}@empty{}
学员 / 预约课程 / 时间档案年级对应分类核对依据 *操作
{{row.studentName}}{{row.appointmentGeneralId}}{{row.courseName}}{{row.startsAt}}{{row.grade||'待确认'}}{{row.assessmentReason||(row.suggestedCategoryKey?'档案可识别学段':'请补充核实依据')}}
必填,至少 2 个字
@if(isManager()){}
暂无待核对预约
} @if(standardsSection()==='rules'){
当前课程工资标准按最新价目表统一为课程分类、时长、线上和线下单价;新版本从生效日期起计算,历史工资仍使用原规则
@if(isManager()){
课时扣减@for(cost of creditCosts();track cost.account){ {{cost.account==='Purse'?'30分钟课时':cost.account==='SilverCoin'?'60分钟课时':cost.account==='UserExp'?'体验课时':'陪练时长'}} -{{cost.amount}} }
}
@for(row of standardMatrix();track row.categoryKey+':'+row.durationMinutes){}
课程分类课程时长线上单价线下单价课时扣减当前版本操作
{{row.categoryName}}{{row.durationMinutes}}分钟¥{{row.online?.teacherPay|number:'1.2-2'}}¥{{row.offline?.teacherPay|number:'1.2-2'}}{{row.online?creditSummary(row.online):row.offline?creditSummary(row.offline):'—'}}{{row.online?.effectiveFrom||row.offline?.effectiveFrom}}{{row.online?.isDefault&&row.offline?.isDefault?'系统价目':'管理员版本'}}@if(isManager()){}@else{—}
工资规则修订记录
@for(rule of standards()?.rules||[];track rule.objectId){@if(!rule.isDefault){}}
分类时长 / 方式生效日期工资状态
{{rule.categoryName}}{{rule.durationMinutes}}分钟 · {{rule.deliveryLabel}}{{rule.effectiveFrom}}¥{{rule.teacherPay|number:'1.2-2'}}{{rule['superseded']?'历史版本':rule.active?'当前版本':'已停用'}}
} @else if(standardsSection()==='mappings'){
历史课程映射优先读取课程目录;旧预约保留的课程也可确认分类,语法写作须对应学段
@for(row of filteredMappings();track row.courseId){}@empty{}
历史课程系统建议数据库大类课程分类状态操作
{{row.courseName}}ID {{row.courseId}}{{row.suggestedCategoryName||'需按学段确认'}}{{row.stageName||'数据库未归类'}}{{row.confirmed?'已确认':!row.stageConfirmed?'数据库大类缺失':'待确认'}}@if(isManager()){}
没有匹配的课程
} @else if(standardsSection()==='categories') {
标准课程分类分类名称与价目表完全一致,不再显示或使用旧分类
@for(stage of stageOptions;track stage.key){{{stage.name}}·数据库大类}
@for(category of activeCategories();track category.key){
{{category.key}}{{category.name}}固定分类
}
} @else if(standardsSection()==='reservations') {
历史未来预约课时预留按预约时间顺序核对现有余额;确认后仅补建预留,不扣减实际课时
@if(isManager()&&reservationReconciliation()?.summary?.total){}
@if(reservationReconciliation();as result){
待核对预约{{result.summary.total}}
可补建预留{{result.summary.ready}}
待补课时{{result.summary.insufficient}}
映射/数据异常{{result.summary.exceptions}}
@for(row of result.items;track row.appointmentId){}@empty{}
预约ID学员课程预约时间标准课时预留处理结果
{{row.appointmentGeneralId}}{{row.studentName}}ID {{row.studentId}}{{row.courseName}}{{row.startsAt|date:'yyyy-MM-dd HH:mm':'+0800'}}{{row.categoryName||'未映射'}}{{row.durationMinutes}}分钟 · {{row.deliveryLabel}}@for(cost of row.creditCosts;track cost.account){{{cost.label}} {{cost.amount}}}{{row.statusLabel}}{{row.reason}}
所有未来预约均已建立课时预留
}@else{
正在核对历史未来预约……
}
} @else {
2026 年 9 月起复习课课时差异只预览新规则生效后的已完课记录;确认前不会修改余额
@if(isManager()&&reconciliation()?.summary?.differenceCount){}
@if(reconciliation();as result){
已完成复习课{{result.summary.completedReviewCount}}
待处理差异{{result.summary.differenceCount}}
应退陪练时长{{result.summary.refundTotal|number:'1.1-2'}}
@for(row of result.items;track row.appointmentId){}@empty{}
预约ID学员ID上课时间时长规则应扣实际已扣应退状态
{{row.appointmentGeneralId}}{{row.studentId}}{{row.lessonAt}}{{row.durationMinutes}}分钟{{row.expected}}{{row.charged}}{{row.adjustment}}{{row.status}}
暂无已完成的复习课记录
}@else{
正在核对复习课课时……
}
} } } @if(detail()||selectedCoachId()){
}