教培机构一体化运营管理系统操作手册

目录

适用系统地址:http://jrjy.ivantech.cn/

系统定位:面向培训学校(教培机构)的招生、教务、财务一体化运营管理系统


一、系统概述

本系统为培训学校提供从「意向学员跟进 → 报名签合同 → 排课上课 → 课时消课 → 退费/冻结 → 财务结算 → 报表统计」的一体化管理,并内置流程审批(工作流)机制,涵盖学员、课程、教务、合同、财务、运营、组织、数据、报表、系统等核心模块。

系统采用左侧菜单 + 顶部导航 + 主体页面的布局:

  • 左侧菜单:按角色权限动态显示各功能模块。

  • 顶部导航:面包屑、我的消息、用户头像菜单(重置密码 / 反馈建议 / 退出)、全屏按钮等。

  • 主体区域:展示当前功能页面内容。

登录后默认进入「控制台」首页,展示个人课表、内部公告、本月报名走势、课程报名 TOP5、学员统计等看板。


二、登录与退出

1. 登录

  • 打开地址 http://jrjy.ivantech.cn/,进入登录页。

  • 依次输入账号 、密码。

  • 初始账号为手机号,可以在系统中查询,初始密码为123456

  • 若为多租户(SaaS)模式,还需在「所属机构」下拉框中选择所属机构(输入账号后自动带出机构列表)。

  • 点击 「欢迎登录」 按钮进入系统。

提示:密码输入框支持「显示/隐藏」切换(小眼睛图标);输入大写字母时会提示键盘大写状态。

登录流程图:
#mermaid-svg-GBga1RwXMYi8siAm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GBga1RwXMYi8siAm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GBga1RwXMYi8siAm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GBga1RwXMYi8siAm .error-icon{fill:#552222;}#mermaid-svg-GBga1RwXMYi8siAm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GBga1RwXMYi8siAm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GBga1RwXMYi8siAm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GBga1RwXMYi8siAm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GBga1RwXMYi8siAm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GBga1RwXMYi8siAm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GBga1RwXMYi8siAm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GBga1RwXMYi8siAm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GBga1RwXMYi8siAm .marker.cross{stroke:#333333;}#mermaid-svg-GBga1RwXMYi8siAm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GBga1RwXMYi8siAm p{margin:0;}#mermaid-svg-GBga1RwXMYi8siAm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GBga1RwXMYi8siAm .cluster-label text{fill:#333;}#mermaid-svg-GBga1RwXMYi8siAm .cluster-label span{color:#333;}#mermaid-svg-GBga1RwXMYi8siAm .cluster-label span p{background-color:transparent;}#mermaid-svg-GBga1RwXMYi8siAm .label text,#mermaid-svg-GBga1RwXMYi8siAm span{fill:#333;color:#333;}#mermaid-svg-GBga1RwXMYi8siAm .node rect,#mermaid-svg-GBga1RwXMYi8siAm .node circle,#mermaid-svg-GBga1RwXMYi8siAm .node ellipse,#mermaid-svg-GBga1RwXMYi8siAm .node polygon,#mermaid-svg-GBga1RwXMYi8siAm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GBga1RwXMYi8siAm .rough-node .label text,#mermaid-svg-GBga1RwXMYi8siAm .node .label text,#mermaid-svg-GBga1RwXMYi8siAm .image-shape .label,#mermaid-svg-GBga1RwXMYi8siAm .icon-shape .label{text-anchor:middle;}#mermaid-svg-GBga1RwXMYi8siAm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GBga1RwXMYi8siAm .rough-node .label,#mermaid-svg-GBga1RwXMYi8siAm .node .label,#mermaid-svg-GBga1RwXMYi8siAm .image-shape .label,#mermaid-svg-GBga1RwXMYi8siAm .icon-shape .label{text-align:center;}#mermaid-svg-GBga1RwXMYi8siAm .node.clickable{cursor:pointer;}#mermaid-svg-GBga1RwXMYi8siAm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GBga1RwXMYi8siAm .arrowheadPath{fill:#333333;}#mermaid-svg-GBga1RwXMYi8siAm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GBga1RwXMYi8siAm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GBga1RwXMYi8siAm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GBga1RwXMYi8siAm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GBga1RwXMYi8siAm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GBga1RwXMYi8siAm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GBga1RwXMYi8siAm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GBga1RwXMYi8siAm .cluster text{fill:#333;}#mermaid-svg-GBga1RwXMYi8siAm .cluster span{color:#333;}#mermaid-svg-GBga1RwXMYi8siAm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GBga1RwXMYi8siAm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GBga1RwXMYi8siAm rect.text{fill:none;stroke-width:0;}#mermaid-svg-GBga1RwXMYi8siAm .icon-shape,#mermaid-svg-GBga1RwXMYi8siAm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GBga1RwXMYi8siAm .icon-shape p,#mermaid-svg-GBga1RwXMYi8siAm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GBga1RwXMYi8siAm .icon-shape .label rect,#mermaid-svg-GBga1RwXMYi8siAm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GBga1RwXMYi8siAm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GBga1RwXMYi8siAm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GBga1RwXMYi8siAm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
失败
成功
打开 http://jrjy.ivantech.cn/
进入登录页
输入账号
是否为多租户 SaaS 模式?
选择所属机构

账号自动带出机构列表
输入密码
点击「欢迎登录」
账号 / 机构 / 密码校验
提示账号无效或密码错误
校验通过 → 写入登录凭证
进入「控制台」首页
按角色权限显示左侧菜单

登录判定规则:

  • 账号为空 → 提示"请输入账号"。

  • 密码为空 → 提示"请输入密码"。

  • 多租户未选机构 → 提示"请选择所属机构"。

  • 账号/机构/密码不匹配 → 提示"账号无效 / 密码错误"。

  • 校验通过 → 签发登录凭证 → 进入首页。

2. 重置密码

  • 登录后,鼠标悬停右上角用户头像/名称 ,在下拉菜单中选择 「重置密码」。

  • 输入新密码并提交即可。

3. 退出登录

  • 鼠标悬停右上角用户头像/名称 ,选择 「退 出」 即可安全退出,返回登录页。

三、控制台(首页)

登录后的默认页面,主要看板如下:

区域 说明
数据概览卡片 核心经营数据指标(需权限)
课表中心 我的课表(老师账号展示个人课表;系统管理员无任课信息时提示为空)
内部公告栏 最新内部公告,点击「详情」可查看公告内容
龙虎榜 / 校区排名 销售业绩排名(需权限)
本月报名走势 本月课程报名趋势图
课程报名前 5 报名量最高的 5 门课程
学员统计柱状图 学员数据统计(可按分校筛选)

四、学员模块

路径:学员

学员流转概览

学员在系统内按**阶段(stage)**流转:推荐例子(stage=0)→ 意向学员(stage=1)→ 在读学员/在学学员(stage=2)→ 结业/退课/停课。

推荐例子 / 意向学员 → 在学学员 流转流程图:
#mermaid-svg-DrBaeVxQL2PUztTD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DrBaeVxQL2PUztTD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DrBaeVxQL2PUztTD .error-icon{fill:#552222;}#mermaid-svg-DrBaeVxQL2PUztTD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DrBaeVxQL2PUztTD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DrBaeVxQL2PUztTD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DrBaeVxQL2PUztTD .marker.cross{stroke:#333333;}#mermaid-svg-DrBaeVxQL2PUztTD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DrBaeVxQL2PUztTD p{margin:0;}#mermaid-svg-DrBaeVxQL2PUztTD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DrBaeVxQL2PUztTD .cluster-label text{fill:#333;}#mermaid-svg-DrBaeVxQL2PUztTD .cluster-label span{color:#333;}#mermaid-svg-DrBaeVxQL2PUztTD .cluster-label span p{background-color:transparent;}#mermaid-svg-DrBaeVxQL2PUztTD .label text,#mermaid-svg-DrBaeVxQL2PUztTD span{fill:#333;color:#333;}#mermaid-svg-DrBaeVxQL2PUztTD .node rect,#mermaid-svg-DrBaeVxQL2PUztTD .node circle,#mermaid-svg-DrBaeVxQL2PUztTD .node ellipse,#mermaid-svg-DrBaeVxQL2PUztTD .node polygon,#mermaid-svg-DrBaeVxQL2PUztTD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DrBaeVxQL2PUztTD .rough-node .label text,#mermaid-svg-DrBaeVxQL2PUztTD .node .label text,#mermaid-svg-DrBaeVxQL2PUztTD .image-shape .label,#mermaid-svg-DrBaeVxQL2PUztTD .icon-shape .label{text-anchor:middle;}#mermaid-svg-DrBaeVxQL2PUztTD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DrBaeVxQL2PUztTD .rough-node .label,#mermaid-svg-DrBaeVxQL2PUztTD .node .label,#mermaid-svg-DrBaeVxQL2PUztTD .image-shape .label,#mermaid-svg-DrBaeVxQL2PUztTD .icon-shape .label{text-align:center;}#mermaid-svg-DrBaeVxQL2PUztTD .node.clickable{cursor:pointer;}#mermaid-svg-DrBaeVxQL2PUztTD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DrBaeVxQL2PUztTD .arrowheadPath{fill:#333333;}#mermaid-svg-DrBaeVxQL2PUztTD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DrBaeVxQL2PUztTD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DrBaeVxQL2PUztTD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DrBaeVxQL2PUztTD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DrBaeVxQL2PUztTD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DrBaeVxQL2PUztTD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DrBaeVxQL2PUztTD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DrBaeVxQL2PUztTD .cluster text{fill:#333;}#mermaid-svg-DrBaeVxQL2PUztTD .cluster span{color:#333;}#mermaid-svg-DrBaeVxQL2PUztTD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DrBaeVxQL2PUztTD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DrBaeVxQL2PUztTD rect.text{fill:none;stroke-width:0;}#mermaid-svg-DrBaeVxQL2PUztTD .icon-shape,#mermaid-svg-DrBaeVxQL2PUztTD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DrBaeVxQL2PUztTD .icon-shape p,#mermaid-svg-DrBaeVxQL2PUztTD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DrBaeVxQL2PUztTD .icon-shape .label rect,#mermaid-svg-DrBaeVxQL2PUztTD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DrBaeVxQL2PUztTD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DrBaeVxQL2PUztTD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DrBaeVxQL2PUztTD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 意向学员(stage=1)
推荐例子(stage=0)
驳回
通过
未确认上门
已确认上门
退回
通过
添加例子
登记推荐关系

推荐人+被推荐人
跟进 / 修改顾问
提交推荐审核
推荐例子审核
修改 → 重新发起
跟进 / 回访 / 修改顾问
预约上门
确认上门 confirmHomeVisit=1
未确认上门 → 报名被拦截
添加线索
报名弹窗 填合同+课程
修改合同 → 重新提交
提交合同审核
合同执行中
转为在学学员 stage=2

出现在「在读学员」

流转规则说明:

  • 推荐例子 :添加例子 → 登记推荐关系 → 提交推荐审核;审核通过后先转为「意向学员」(stage 0 → stage 1),驳回则修改后重新发起。

  • 意向学员 :来源有二------推荐审核通过、或直接「添加线索」。

    单个添加-

    批量新增

  • 由意向学员转在学:跟进/回访 → 预约并确认上门 → 报名签合同 → 提交合同审核 → 合同执行中 → 转为在学学员(在读,stage=2)。

  • 点击添加跟进记录,并添加至少一条沟通渠道为上门的数据

    点击【确认上门】并确认

    确认后可报名课程

  • 未确认上门时点「报名」会被拦截,提示「学生未确认上门,请确认上门后再进行报名」。

1. 意向学员

  • 展示尚未报名的意向学员列表。

  • 可进行跟进管理,记录跟进内容,推动其转报名。

2. 在读学员

  • 展示当前在读学员列表。

  • 支持查看学员详情、报名记录、安排排课等。

3. 结课学员

  • 展示已结课的历史学员列表。

4. 推荐例子 / 推荐例子审核

  • 推荐例子:登记学员推荐关系(推荐人、被推荐人),用于推荐奖励核算。

  • 推荐例子审核 :对提交的推荐关系进行审批。

5. 预约跟进计划表

  • 查看预约跟进计划,按计划联系学员。

6. 回访记录

  • 记录与管理对学员/家长的回访情况。

7. 学员统计

  • 从多维度统计学员数据(新增、在读、结课、流失等)。

8. 学员成绩

  • 录入、查看学员考试成绩。

五、课程模块

路径:课程

1. 课程管理

  • 维护课程基本信息(课程名称、科目、时长、单价等),是排课与报名的基础数据。

添加课程前的前置操作 - 用户操作流程图:
#mermaid-svg-WjrvJwJUjqdbTx9U{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WjrvJwJUjqdbTx9U .error-icon{fill:#552222;}#mermaid-svg-WjrvJwJUjqdbTx9U .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WjrvJwJUjqdbTx9U .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WjrvJwJUjqdbTx9U .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WjrvJwJUjqdbTx9U .marker.cross{stroke:#333333;}#mermaid-svg-WjrvJwJUjqdbTx9U svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WjrvJwJUjqdbTx9U p{margin:0;}#mermaid-svg-WjrvJwJUjqdbTx9U .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster-label text{fill:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster-label span{color:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster-label span p{background-color:transparent;}#mermaid-svg-WjrvJwJUjqdbTx9U .label text,#mermaid-svg-WjrvJwJUjqdbTx9U span{fill:#333;color:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U .node rect,#mermaid-svg-WjrvJwJUjqdbTx9U .node circle,#mermaid-svg-WjrvJwJUjqdbTx9U .node ellipse,#mermaid-svg-WjrvJwJUjqdbTx9U .node polygon,#mermaid-svg-WjrvJwJUjqdbTx9U .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WjrvJwJUjqdbTx9U .rough-node .label text,#mermaid-svg-WjrvJwJUjqdbTx9U .node .label text,#mermaid-svg-WjrvJwJUjqdbTx9U .image-shape .label,#mermaid-svg-WjrvJwJUjqdbTx9U .icon-shape .label{text-anchor:middle;}#mermaid-svg-WjrvJwJUjqdbTx9U .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WjrvJwJUjqdbTx9U .rough-node .label,#mermaid-svg-WjrvJwJUjqdbTx9U .node .label,#mermaid-svg-WjrvJwJUjqdbTx9U .image-shape .label,#mermaid-svg-WjrvJwJUjqdbTx9U .icon-shape .label{text-align:center;}#mermaid-svg-WjrvJwJUjqdbTx9U .node.clickable{cursor:pointer;}#mermaid-svg-WjrvJwJUjqdbTx9U .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WjrvJwJUjqdbTx9U .arrowheadPath{fill:#333333;}#mermaid-svg-WjrvJwJUjqdbTx9U .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WjrvJwJUjqdbTx9U .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WjrvJwJUjqdbTx9U .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WjrvJwJUjqdbTx9U .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WjrvJwJUjqdbTx9U .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WjrvJwJUjqdbTx9U .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster text{fill:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U .cluster span{color:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WjrvJwJUjqdbTx9U .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WjrvJwJUjqdbTx9U rect.text{fill:none;stroke-width:0;}#mermaid-svg-WjrvJwJUjqdbTx9U .icon-shape,#mermaid-svg-WjrvJwJUjqdbTx9U .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WjrvJwJUjqdbTx9U .icon-shape p,#mermaid-svg-WjrvJwJUjqdbTx9U .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WjrvJwJUjqdbTx9U .icon-shape .label rect,#mermaid-svg-WjrvJwJUjqdbTx9U .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WjrvJwJUjqdbTx9U .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WjrvJwJUjqdbTx9U .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WjrvJwJUjqdbTx9U :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 缺少科目
缺少年级
缺少特殊类型
缺少适用学校
全部已具备
准备添加课程
前置基础数据

是否已存在?
课程 → 科目管理

新增/维护 科目
填科目名称 → 保存
教务 → 年级管理

新增/维护 年级
填年级名称 → 保存
课程 → 课程特殊类型管理

新增 类型 可选
填类型名称 → 保存
组织 → 组织管理

维护校区/分校
新增校区 → 保存
回到 课程管理

点击「新增」或「批量新增」
在表单中下拉选择

科目/年级/学校/特殊类型
开始添加课程

  • 新增课程表单里的科目、年级、学校、特殊类型都是下拉选择,只能选已维护好的数据;若下拉中找不到,需先退出到对应菜单(科目管理 / 年级管理 / 组织管理 / 特殊类型管理)补建,再回来添加课程。
  • 常见准备顺序:先维护学校 → 科目 → 年级 → 特殊类型(可选) ,最后才进入课程管理建课。


新增课程 - 用户操作流程图:
#mermaid-svg-mARqyS7aGbcSgr4j{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mARqyS7aGbcSgr4j .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mARqyS7aGbcSgr4j .error-icon{fill:#552222;}#mermaid-svg-mARqyS7aGbcSgr4j .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mARqyS7aGbcSgr4j .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mARqyS7aGbcSgr4j .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mARqyS7aGbcSgr4j .marker.cross{stroke:#333333;}#mermaid-svg-mARqyS7aGbcSgr4j svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mARqyS7aGbcSgr4j p{margin:0;}#mermaid-svg-mARqyS7aGbcSgr4j .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mARqyS7aGbcSgr4j .cluster-label text{fill:#333;}#mermaid-svg-mARqyS7aGbcSgr4j .cluster-label span{color:#333;}#mermaid-svg-mARqyS7aGbcSgr4j .cluster-label span p{background-color:transparent;}#mermaid-svg-mARqyS7aGbcSgr4j .label text,#mermaid-svg-mARqyS7aGbcSgr4j span{fill:#333;color:#333;}#mermaid-svg-mARqyS7aGbcSgr4j .node rect,#mermaid-svg-mARqyS7aGbcSgr4j .node circle,#mermaid-svg-mARqyS7aGbcSgr4j .node ellipse,#mermaid-svg-mARqyS7aGbcSgr4j .node polygon,#mermaid-svg-mARqyS7aGbcSgr4j .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mARqyS7aGbcSgr4j .rough-node .label text,#mermaid-svg-mARqyS7aGbcSgr4j .node .label text,#mermaid-svg-mARqyS7aGbcSgr4j .image-shape .label,#mermaid-svg-mARqyS7aGbcSgr4j .icon-shape .label{text-anchor:middle;}#mermaid-svg-mARqyS7aGbcSgr4j .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mARqyS7aGbcSgr4j .rough-node .label,#mermaid-svg-mARqyS7aGbcSgr4j .node .label,#mermaid-svg-mARqyS7aGbcSgr4j .image-shape .label,#mermaid-svg-mARqyS7aGbcSgr4j .icon-shape .label{text-align:center;}#mermaid-svg-mARqyS7aGbcSgr4j .node.clickable{cursor:pointer;}#mermaid-svg-mARqyS7aGbcSgr4j .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mARqyS7aGbcSgr4j .arrowheadPath{fill:#333333;}#mermaid-svg-mARqyS7aGbcSgr4j .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mARqyS7aGbcSgr4j .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mARqyS7aGbcSgr4j .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mARqyS7aGbcSgr4j .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mARqyS7aGbcSgr4j .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mARqyS7aGbcSgr4j .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mARqyS7aGbcSgr4j .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mARqyS7aGbcSgr4j .cluster text{fill:#333;}#mermaid-svg-mARqyS7aGbcSgr4j .cluster span{color:#333;}#mermaid-svg-mARqyS7aGbcSgr4j div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mARqyS7aGbcSgr4j .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mARqyS7aGbcSgr4j rect.text{fill:none;stroke-width:0;}#mermaid-svg-mARqyS7aGbcSgr4j .icon-shape,#mermaid-svg-mARqyS7aGbcSgr4j .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mARqyS7aGbcSgr4j .icon-shape p,#mermaid-svg-mARqyS7aGbcSgr4j .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mARqyS7aGbcSgr4j .icon-shape .label rect,#mermaid-svg-mARqyS7aGbcSgr4j .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mARqyS7aGbcSgr4j .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mARqyS7aGbcSgr4j .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mARqyS7aGbcSgr4j :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
进入课程管理
点击「新增」
弹出添加课程表单
填写 课程名称
选择 适用学校
选择 所属科目
选择 适用年级
选择 课堂类型
填写 单价
选择 是否上架
点击 确定
保存成功?
提示必填项/错误
提示成功 列表刷新

批量新增课程 - 用户操作流程图:
#mermaid-svg-q7JrLvc90diFDkI1{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-q7JrLvc90diFDkI1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-q7JrLvc90diFDkI1 .error-icon{fill:#552222;}#mermaid-svg-q7JrLvc90diFDkI1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-q7JrLvc90diFDkI1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-q7JrLvc90diFDkI1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-q7JrLvc90diFDkI1 .marker.cross{stroke:#333333;}#mermaid-svg-q7JrLvc90diFDkI1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-q7JrLvc90diFDkI1 p{margin:0;}#mermaid-svg-q7JrLvc90diFDkI1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-q7JrLvc90diFDkI1 .cluster-label text{fill:#333;}#mermaid-svg-q7JrLvc90diFDkI1 .cluster-label span{color:#333;}#mermaid-svg-q7JrLvc90diFDkI1 .cluster-label span p{background-color:transparent;}#mermaid-svg-q7JrLvc90diFDkI1 .label text,#mermaid-svg-q7JrLvc90diFDkI1 span{fill:#333;color:#333;}#mermaid-svg-q7JrLvc90diFDkI1 .node rect,#mermaid-svg-q7JrLvc90diFDkI1 .node circle,#mermaid-svg-q7JrLvc90diFDkI1 .node ellipse,#mermaid-svg-q7JrLvc90diFDkI1 .node polygon,#mermaid-svg-q7JrLvc90diFDkI1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-q7JrLvc90diFDkI1 .rough-node .label text,#mermaid-svg-q7JrLvc90diFDkI1 .node .label text,#mermaid-svg-q7JrLvc90diFDkI1 .image-shape .label,#mermaid-svg-q7JrLvc90diFDkI1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-q7JrLvc90diFDkI1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-q7JrLvc90diFDkI1 .rough-node .label,#mermaid-svg-q7JrLvc90diFDkI1 .node .label,#mermaid-svg-q7JrLvc90diFDkI1 .image-shape .label,#mermaid-svg-q7JrLvc90diFDkI1 .icon-shape .label{text-align:center;}#mermaid-svg-q7JrLvc90diFDkI1 .node.clickable{cursor:pointer;}#mermaid-svg-q7JrLvc90diFDkI1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-q7JrLvc90diFDkI1 .arrowheadPath{fill:#333333;}#mermaid-svg-q7JrLvc90diFDkI1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-q7JrLvc90diFDkI1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-q7JrLvc90diFDkI1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-q7JrLvc90diFDkI1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-q7JrLvc90diFDkI1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-q7JrLvc90diFDkI1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-q7JrLvc90diFDkI1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-q7JrLvc90diFDkI1 .cluster text{fill:#333;}#mermaid-svg-q7JrLvc90diFDkI1 .cluster span{color:#333;}#mermaid-svg-q7JrLvc90diFDkI1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-q7JrLvc90diFDkI1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-q7JrLvc90diFDkI1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-q7JrLvc90diFDkI1 .icon-shape,#mermaid-svg-q7JrLvc90diFDkI1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-q7JrLvc90diFDkI1 .icon-shape p,#mermaid-svg-q7JrLvc90diFDkI1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-q7JrLvc90diFDkI1 .icon-shape .label rect,#mermaid-svg-q7JrLvc90diFDkI1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-q7JrLvc90diFDkI1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-q7JrLvc90diFDkI1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-q7JrLvc90diFDkI1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
进入课程管理
点击「批量新增」
弹出批量新增课程表单
填写 课程名称

如 秋季班
多选 适用学校
多选 所属科目
多选 适用年级
多选 课堂类型
选择 特殊类型 可选
填写 价格
点击 确定
必填项齐全?
提示必填项缺失
按 年级×课堂类型 自动组合

生成多个课程
提示 批量新增成功

列表刷新出现全部新课程

  • 批量新增只需填写一次 课程名称、学校、科目、价格,再多选年级和课堂类型,系统自动做笛卡尔积组合(如 3 个年级 × 2 种课堂类型 = 一次生成 6 门课程)。

2. 课程特殊类型管理

  • 维护课程的特殊类型(如体验课、专题课等)分类。

3. 科目管理

  • 维护科目(语文、数学、英语等)信息。

4. 优惠规则(针对一对一)

  • 配置招生报名时的优惠政策/折扣规则,报名签合同时可自动套用。

六、教务模块

路径:教务

1. 管理未确认课时

  • 展示需要确认的未确认课时,供老师确认实际上课情况。

认课(课次确认)方式一:逐学生认课(班级学生列表弹窗)
#mermaid-svg-PqPhuplCWS1RCTpe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PqPhuplCWS1RCTpe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PqPhuplCWS1RCTpe .error-icon{fill:#552222;}#mermaid-svg-PqPhuplCWS1RCTpe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PqPhuplCWS1RCTpe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PqPhuplCWS1RCTpe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PqPhuplCWS1RCTpe .marker.cross{stroke:#333333;}#mermaid-svg-PqPhuplCWS1RCTpe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PqPhuplCWS1RCTpe p{margin:0;}#mermaid-svg-PqPhuplCWS1RCTpe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PqPhuplCWS1RCTpe .cluster-label text{fill:#333;}#mermaid-svg-PqPhuplCWS1RCTpe .cluster-label span{color:#333;}#mermaid-svg-PqPhuplCWS1RCTpe .cluster-label span p{background-color:transparent;}#mermaid-svg-PqPhuplCWS1RCTpe .label text,#mermaid-svg-PqPhuplCWS1RCTpe span{fill:#333;color:#333;}#mermaid-svg-PqPhuplCWS1RCTpe .node rect,#mermaid-svg-PqPhuplCWS1RCTpe .node circle,#mermaid-svg-PqPhuplCWS1RCTpe .node ellipse,#mermaid-svg-PqPhuplCWS1RCTpe .node polygon,#mermaid-svg-PqPhuplCWS1RCTpe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PqPhuplCWS1RCTpe .rough-node .label text,#mermaid-svg-PqPhuplCWS1RCTpe .node .label text,#mermaid-svg-PqPhuplCWS1RCTpe .image-shape .label,#mermaid-svg-PqPhuplCWS1RCTpe .icon-shape .label{text-anchor:middle;}#mermaid-svg-PqPhuplCWS1RCTpe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PqPhuplCWS1RCTpe .rough-node .label,#mermaid-svg-PqPhuplCWS1RCTpe .node .label,#mermaid-svg-PqPhuplCWS1RCTpe .image-shape .label,#mermaid-svg-PqPhuplCWS1RCTpe .icon-shape .label{text-align:center;}#mermaid-svg-PqPhuplCWS1RCTpe .node.clickable{cursor:pointer;}#mermaid-svg-PqPhuplCWS1RCTpe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PqPhuplCWS1RCTpe .arrowheadPath{fill:#333333;}#mermaid-svg-PqPhuplCWS1RCTpe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PqPhuplCWS1RCTpe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PqPhuplCWS1RCTpe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PqPhuplCWS1RCTpe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PqPhuplCWS1RCTpe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PqPhuplCWS1RCTpe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PqPhuplCWS1RCTpe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PqPhuplCWS1RCTpe .cluster text{fill:#333;}#mermaid-svg-PqPhuplCWS1RCTpe .cluster span{color:#333;}#mermaid-svg-PqPhuplCWS1RCTpe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PqPhuplCWS1RCTpe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PqPhuplCWS1RCTpe rect.text{fill:none;stroke-width:0;}#mermaid-svg-PqPhuplCWS1RCTpe .icon-shape,#mermaid-svg-PqPhuplCWS1RCTpe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PqPhuplCWS1RCTpe .icon-shape p,#mermaid-svg-PqPhuplCWS1RCTpe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PqPhuplCWS1RCTpe .icon-shape .label rect,#mermaid-svg-PqPhuplCWS1RCTpe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PqPhuplCWS1RCTpe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PqPhuplCWS1RCTpe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PqPhuplCWS1RCTpe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 认课
否
是
取消
确定
请假
未上课
进入 排课日历/总排课
点击已排课的班级块
打开 班级学生列表弹窗

显示各学生 认课状态/请假状态/剩余课次
找到目标学生
该生操作
满足认课条件?

未认课 + 排课已过期 + 未请假
该生不显示「认课」按钮

按请假/状态另行处理
点该生「认课」
弹窗确认 该学生已上课?
调 confirmConsumption

消耗该生1课次
认课成功 该生状态=已认课
点该生「请假」
弹窗填写 请假原因
请假成功 状态=请假中
点该生「未上课」
弹窗填写 未上课原因
记录未上课 消耗课次

认课(课次确认)方式二:整节课批量认课(管理未确认课时)
#mermaid-svg-UxvJXyRIvNtwf5SL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UxvJXyRIvNtwf5SL .error-icon{fill:#552222;}#mermaid-svg-UxvJXyRIvNtwf5SL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UxvJXyRIvNtwf5SL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UxvJXyRIvNtwf5SL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UxvJXyRIvNtwf5SL .marker.cross{stroke:#333333;}#mermaid-svg-UxvJXyRIvNtwf5SL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UxvJXyRIvNtwf5SL p{margin:0;}#mermaid-svg-UxvJXyRIvNtwf5SL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster-label text{fill:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster-label span{color:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster-label span p{background-color:transparent;}#mermaid-svg-UxvJXyRIvNtwf5SL .label text,#mermaid-svg-UxvJXyRIvNtwf5SL span{fill:#333;color:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL .node rect,#mermaid-svg-UxvJXyRIvNtwf5SL .node circle,#mermaid-svg-UxvJXyRIvNtwf5SL .node ellipse,#mermaid-svg-UxvJXyRIvNtwf5SL .node polygon,#mermaid-svg-UxvJXyRIvNtwf5SL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UxvJXyRIvNtwf5SL .rough-node .label text,#mermaid-svg-UxvJXyRIvNtwf5SL .node .label text,#mermaid-svg-UxvJXyRIvNtwf5SL .image-shape .label,#mermaid-svg-UxvJXyRIvNtwf5SL .icon-shape .label{text-anchor:middle;}#mermaid-svg-UxvJXyRIvNtwf5SL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UxvJXyRIvNtwf5SL .rough-node .label,#mermaid-svg-UxvJXyRIvNtwf5SL .node .label,#mermaid-svg-UxvJXyRIvNtwf5SL .image-shape .label,#mermaid-svg-UxvJXyRIvNtwf5SL .icon-shape .label{text-align:center;}#mermaid-svg-UxvJXyRIvNtwf5SL .node.clickable{cursor:pointer;}#mermaid-svg-UxvJXyRIvNtwf5SL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UxvJXyRIvNtwf5SL .arrowheadPath{fill:#333333;}#mermaid-svg-UxvJXyRIvNtwf5SL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UxvJXyRIvNtwf5SL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UxvJXyRIvNtwf5SL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UxvJXyRIvNtwf5SL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UxvJXyRIvNtwf5SL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UxvJXyRIvNtwf5SL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster text{fill:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL .cluster span{color:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UxvJXyRIvNtwf5SL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UxvJXyRIvNtwf5SL rect.text{fill:none;stroke-width:0;}#mermaid-svg-UxvJXyRIvNtwf5SL .icon-shape,#mermaid-svg-UxvJXyRIvNtwf5SL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UxvJXyRIvNtwf5SL .icon-shape p,#mermaid-svg-UxvJXyRIvNtwf5SL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UxvJXyRIvNtwf5SL .icon-shape .label rect,#mermaid-svg-UxvJXyRIvNtwf5SL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UxvJXyRIvNtwf5SL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UxvJXyRIvNtwf5SL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UxvJXyRIvNtwf5SL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 整节确认
确定
批量多节
进入 教务 → 管理未确认课时
未确认课时列表

含 已认课/未认课/请假/退课 计数
确认方式
该行点「课次确认」
弹窗确认 学生均来上课?
batchConfirmConsumption 整节课确认
整节课学生全部认课

列表刷新
勾选多行 → 「批量确认」
批量确认成功 列表刷新

  • 逐学生认课 发生在班级学生列表弹窗 (入口:排课日历/总排课点班级块),前提是排课已过期、该生未认课、未请假 ,否则「认课」按钮不显示;同一弹窗内可对该生请假 (填原因)或未上课(填原因,消耗课次)。
  • 管理未确认课时 页面的课次确认 是整节课维度的一次性确认(确认学生均来上课),支持单节与勾选批量。

2. 班级管理

  • 维护班级信息,支持查看班级详情与班级课表。

3. 年级管理

  • 维护年级信息,选项会以「年级(年份)」形式展示(如"高二(2015)")。

4. 排课时段管理

  • 配置排课的时间段(如一天内的任课往返口/课时段)。

5. 排课管理 / 总排课 / 排课日历

  • 排课管理:为班级、老师分配课程安排。

  • 总排课:集中查看整体排课情况。

  • 排课日历:以日历形式查看排课,便于协调资源。

排课模块 - 用户操作流程图:
#mermaid-svg-cEIhHVkhuq573Aya{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cEIhHVkhuq573Aya .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cEIhHVkhuq573Aya .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cEIhHVkhuq573Aya .error-icon{fill:#552222;}#mermaid-svg-cEIhHVkhuq573Aya .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cEIhHVkhuq573Aya .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cEIhHVkhuq573Aya .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cEIhHVkhuq573Aya .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cEIhHVkhuq573Aya .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cEIhHVkhuq573Aya .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cEIhHVkhuq573Aya .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cEIhHVkhuq573Aya .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cEIhHVkhuq573Aya .marker.cross{stroke:#333333;}#mermaid-svg-cEIhHVkhuq573Aya svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cEIhHVkhuq573Aya p{margin:0;}#mermaid-svg-cEIhHVkhuq573Aya .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cEIhHVkhuq573Aya .cluster-label text{fill:#333;}#mermaid-svg-cEIhHVkhuq573Aya .cluster-label span{color:#333;}#mermaid-svg-cEIhHVkhuq573Aya .cluster-label span p{background-color:transparent;}#mermaid-svg-cEIhHVkhuq573Aya .label text,#mermaid-svg-cEIhHVkhuq573Aya span{fill:#333;color:#333;}#mermaid-svg-cEIhHVkhuq573Aya .node rect,#mermaid-svg-cEIhHVkhuq573Aya .node circle,#mermaid-svg-cEIhHVkhuq573Aya .node ellipse,#mermaid-svg-cEIhHVkhuq573Aya .node polygon,#mermaid-svg-cEIhHVkhuq573Aya .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cEIhHVkhuq573Aya .rough-node .label text,#mermaid-svg-cEIhHVkhuq573Aya .node .label text,#mermaid-svg-cEIhHVkhuq573Aya .image-shape .label,#mermaid-svg-cEIhHVkhuq573Aya .icon-shape .label{text-anchor:middle;}#mermaid-svg-cEIhHVkhuq573Aya .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cEIhHVkhuq573Aya .rough-node .label,#mermaid-svg-cEIhHVkhuq573Aya .node .label,#mermaid-svg-cEIhHVkhuq573Aya .image-shape .label,#mermaid-svg-cEIhHVkhuq573Aya .icon-shape .label{text-align:center;}#mermaid-svg-cEIhHVkhuq573Aya .node.clickable{cursor:pointer;}#mermaid-svg-cEIhHVkhuq573Aya .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cEIhHVkhuq573Aya .arrowheadPath{fill:#333333;}#mermaid-svg-cEIhHVkhuq573Aya .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cEIhHVkhuq573Aya .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cEIhHVkhuq573Aya .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cEIhHVkhuq573Aya .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cEIhHVkhuq573Aya .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cEIhHVkhuq573Aya .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cEIhHVkhuq573Aya .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cEIhHVkhuq573Aya .cluster text{fill:#333;}#mermaid-svg-cEIhHVkhuq573Aya .cluster span{color:#333;}#mermaid-svg-cEIhHVkhuq573Aya div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cEIhHVkhuq573Aya .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cEIhHVkhuq573Aya rect.text{fill:none;stroke-width:0;}#mermaid-svg-cEIhHVkhuq573Aya .icon-shape,#mermaid-svg-cEIhHVkhuq573Aya .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cEIhHVkhuq573Aya .icon-shape p,#mermaid-svg-cEIhHVkhuq573Aya .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cEIhHVkhuq573Aya .icon-shape .label rect,#mermaid-svg-cEIhHVkhuq573Aya .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cEIhHVkhuq573Aya .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cEIhHVkhuq573Aya .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cEIhHVkhuq573Aya :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 新增排课
过期
未过期
冲突
成功
查看/管理已有排课
删课
设备注
给学生排课
进入 排课管理
老师列表

可按 姓名/电话/部门/状态 查询
找到老师 点「排课」
进入该老师 排课日历

按周/月展示 时段格子
要做什么?
点击某天某时段的空白格子
该时段已过期?
提示 已过期 无法排课
弹出「添加排课」对话框
选择 时间段/特殊类型/科目/课程
点击 确定 保存
排课冲突?
提示冲突 重新选择时段
日历出现排课

显示班级信息
点击已排课的班级块
查看班级学员
管理操作
确认删除该排课
输入排课备注
选择学生 加入该时段
总排课/排课日历

查看全校课表

  • 入口 :排课管理以老师为入口(老师列表 → 点「排课」→ 进入该老师的排课日历)。

  • 新增排课 :在日历上点某天某时段的空白格 ,弹出「添加排课」对话框,选择时间段、科目、课程后保存;时段已过期 的格子不能排课。

  • 冲突处理:若排课与其他排课冲突,系统提示后需重新选择时段。

  • 后续管理 :点已排课的班级块可查看学员、删课 、设备注 、给学生排课 (加入学员)。

  • 全局查看 :通过「总排课 / 排课日历」查看全校或各老师的课表。

总排课页面截图:


七、合同模块

路径:合同(核心业务模块)

1. 合同管理

  • 展示所有合同列表,支持报名(新建合同) 、查看详情、执行中的合同支持退费/批量退课(仅执行中 状态显示退费/退课按钮)。

  • 列表中的课程信息默认处于收起状态,可展开查看课程详情。

  • 执行中的合同不可修改合同信息、不显示可修改徽章。

  • 报名弹窗为左右分区:左侧固定显示合同基本信息与合同汇总,右侧可滚动显示课程列表。

  • 合同类型(新签/续签)时显示对应字段信息。

报名合同 - 用户操作流程图:
#mermaid-svg-FuLMSMhQvo4QYDXA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FuLMSMhQvo4QYDXA .error-icon{fill:#552222;}#mermaid-svg-FuLMSMhQvo4QYDXA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FuLMSMhQvo4QYDXA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FuLMSMhQvo4QYDXA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FuLMSMhQvo4QYDXA .marker.cross{stroke:#333333;}#mermaid-svg-FuLMSMhQvo4QYDXA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FuLMSMhQvo4QYDXA p{margin:0;}#mermaid-svg-FuLMSMhQvo4QYDXA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster-label text{fill:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster-label span{color:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster-label span p{background-color:transparent;}#mermaid-svg-FuLMSMhQvo4QYDXA .label text,#mermaid-svg-FuLMSMhQvo4QYDXA span{fill:#333;color:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA .node rect,#mermaid-svg-FuLMSMhQvo4QYDXA .node circle,#mermaid-svg-FuLMSMhQvo4QYDXA .node ellipse,#mermaid-svg-FuLMSMhQvo4QYDXA .node polygon,#mermaid-svg-FuLMSMhQvo4QYDXA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FuLMSMhQvo4QYDXA .rough-node .label text,#mermaid-svg-FuLMSMhQvo4QYDXA .node .label text,#mermaid-svg-FuLMSMhQvo4QYDXA .image-shape .label,#mermaid-svg-FuLMSMhQvo4QYDXA .icon-shape .label{text-anchor:middle;}#mermaid-svg-FuLMSMhQvo4QYDXA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FuLMSMhQvo4QYDXA .rough-node .label,#mermaid-svg-FuLMSMhQvo4QYDXA .node .label,#mermaid-svg-FuLMSMhQvo4QYDXA .image-shape .label,#mermaid-svg-FuLMSMhQvo4QYDXA .icon-shape .label{text-align:center;}#mermaid-svg-FuLMSMhQvo4QYDXA .node.clickable{cursor:pointer;}#mermaid-svg-FuLMSMhQvo4QYDXA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FuLMSMhQvo4QYDXA .arrowheadPath{fill:#333333;}#mermaid-svg-FuLMSMhQvo4QYDXA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FuLMSMhQvo4QYDXA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FuLMSMhQvo4QYDXA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FuLMSMhQvo4QYDXA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FuLMSMhQvo4QYDXA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FuLMSMhQvo4QYDXA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster text{fill:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA .cluster span{color:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FuLMSMhQvo4QYDXA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FuLMSMhQvo4QYDXA rect.text{fill:none;stroke-width:0;}#mermaid-svg-FuLMSMhQvo4QYDXA .icon-shape,#mermaid-svg-FuLMSMhQvo4QYDXA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FuLMSMhQvo4QYDXA .icon-shape p,#mermaid-svg-FuLMSMhQvo4QYDXA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FuLMSMhQvo4QYDXA .icon-shape .label rect,#mermaid-svg-FuLMSMhQvo4QYDXA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FuLMSMhQvo4QYDXA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FuLMSMhQvo4QYDXA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FuLMSMhQvo4QYDXA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
退回
审核通过
意向学员列表
点击该学员「报名」
已确认上门?
提示 未确认上门

先去「确认上门」
登记预约上门 → 确认上门
弹出报名弹窗

左侧: 合同基本信息+合同汇总

右侧: 选择课程列表
填写合同信息 选课程
点击 确定保存
生成合同 状态=草稿

出现在合同管理列表
合同列表 → 该行点「提交审核」
输入审核备注
提交 合同进入 待审核/审核中
等待合同审批
审批结果
按意见修改合同

重新提交审核
合同状态=执行中
认款/缴费 → 排课开课

  • 前置:意向学员必须先「确认上门」才能报名,否则点击报名会被拦截提示。
  • 保存后只是草稿:还需到「合同管理」列表点该行「提交审核」,并填写审核备注。
  • 等待合同审批:提交后合同状态变为「待审核/审核中」,可在合同列表「新增合同工作流信息」列查看流程进度。
  • 审批退回 :需修改合同后重新提交;通过后合同变为「执行中」,方可认款与排课。

2. 新增合同待审核

  • 展示新签订但尚未审核通过的合同,供审核人进行审核。

  • 审核时可查看流程节点位置,执行审核/同意操作。

合同审批 - 用户操作流程图 (默认流程:第一审批人=财务,第二审批人=中心校长):


#mermaid-svg-zbTEp5C9XUXLzlxk{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zbTEp5C9XUXLzlxk .error-icon{fill:#552222;}#mermaid-svg-zbTEp5C9XUXLzlxk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zbTEp5C9XUXLzlxk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zbTEp5C9XUXLzlxk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zbTEp5C9XUXLzlxk .marker.cross{stroke:#333333;}#mermaid-svg-zbTEp5C9XUXLzlxk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zbTEp5C9XUXLzlxk p{margin:0;}#mermaid-svg-zbTEp5C9XUXLzlxk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster-label text{fill:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster-label span{color:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster-label span p{background-color:transparent;}#mermaid-svg-zbTEp5C9XUXLzlxk .label text,#mermaid-svg-zbTEp5C9XUXLzlxk span{fill:#333;color:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk .node rect,#mermaid-svg-zbTEp5C9XUXLzlxk .node circle,#mermaid-svg-zbTEp5C9XUXLzlxk .node ellipse,#mermaid-svg-zbTEp5C9XUXLzlxk .node polygon,#mermaid-svg-zbTEp5C9XUXLzlxk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zbTEp5C9XUXLzlxk .rough-node .label text,#mermaid-svg-zbTEp5C9XUXLzlxk .node .label text,#mermaid-svg-zbTEp5C9XUXLzlxk .image-shape .label,#mermaid-svg-zbTEp5C9XUXLzlxk .icon-shape .label{text-anchor:middle;}#mermaid-svg-zbTEp5C9XUXLzlxk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zbTEp5C9XUXLzlxk .rough-node .label,#mermaid-svg-zbTEp5C9XUXLzlxk .node .label,#mermaid-svg-zbTEp5C9XUXLzlxk .image-shape .label,#mermaid-svg-zbTEp5C9XUXLzlxk .icon-shape .label{text-align:center;}#mermaid-svg-zbTEp5C9XUXLzlxk .node.clickable{cursor:pointer;}#mermaid-svg-zbTEp5C9XUXLzlxk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zbTEp5C9XUXLzlxk .arrowheadPath{fill:#333333;}#mermaid-svg-zbTEp5C9XUXLzlxk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zbTEp5C9XUXLzlxk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zbTEp5C9XUXLzlxk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zbTEp5C9XUXLzlxk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zbTEp5C9XUXLzlxk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zbTEp5C9XUXLzlxk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster text{fill:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk .cluster span{color:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zbTEp5C9XUXLzlxk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zbTEp5C9XUXLzlxk rect.text{fill:none;stroke-width:0;}#mermaid-svg-zbTEp5C9XUXLzlxk .icon-shape,#mermaid-svg-zbTEp5C9XUXLzlxk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zbTEp5C9XUXLzlxk .icon-shape p,#mermaid-svg-zbTEp5C9XUXLzlxk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zbTEp5C9XUXLzlxk .icon-shape .label rect,#mermaid-svg-zbTEp5C9XUXLzlxk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zbTEp5C9XUXLzlxk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zbTEp5C9XUXLzlxk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zbTEp5C9XUXLzlxk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 第二审批人:中心校长
第一审批人:财务
同意
不同意/退回
未完成
已就绪
同意
退回
销售/发起人

合同列表 点「提交审核」
合同状态=待审核/审核中

等待第一审批人处理
财务在任务中心/新增合同待审核

打开该合同
审核决策
业绩分配 由财务填写/确认
合同流转到 第二审批人
填写意见 退回发起人
中心校长打开合同
校验 业绩分配完成

且班主任已选?
提示补齐 业绩分配/班主任

再重新同意
审核决策
流程结束

合同状态=执行中
填写意见 退回发起人
发起人收到退回

修改合同/补齐资料
发起人可在合同列表

看到流程进度与结果
执行中 合同可 认款/排课/退费

  • 发起人(销售)视角 :提交审核后即进入等待审批 状态,可在合同列表「新增合同工作流信息」列查看当前在哪个节点 ;被财务或中心校长退回 时,按意见修改合同 / 补齐业绩分配、班主任后重新提交审核 ;只有中心校长审核通过 ,合同才变为「执行中」,之后才能认款、排课、退费。

  • 财务(第一审批人)视角 :打开待审核合同 → 确认无误点「同意」→ 填写/确认业绩分配 → 流转给中心校长;不同意则退回发起人。

  • 中心校长(第二审批人)视角 :打开合同 → 系统校验业绩分配完成 + 班主任已选 (未完成会拦截)→ 点「同意」后流程结束、合同转为执行中;或退回发起人。

3. (退款/冻结)合同审核

  • 处理退费、冻结类合同的审核流程。

冻结合同 - 用户操作流程图:
#mermaid-svg-zfR71EsWGWu1S6L2{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zfR71EsWGWu1S6L2 .error-icon{fill:#552222;}#mermaid-svg-zfR71EsWGWu1S6L2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zfR71EsWGWu1S6L2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zfR71EsWGWu1S6L2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zfR71EsWGWu1S6L2 .marker.cross{stroke:#333333;}#mermaid-svg-zfR71EsWGWu1S6L2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zfR71EsWGWu1S6L2 p{margin:0;}#mermaid-svg-zfR71EsWGWu1S6L2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster-label text{fill:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster-label span{color:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster-label span p{background-color:transparent;}#mermaid-svg-zfR71EsWGWu1S6L2 .label text,#mermaid-svg-zfR71EsWGWu1S6L2 span{fill:#333;color:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 .node rect,#mermaid-svg-zfR71EsWGWu1S6L2 .node circle,#mermaid-svg-zfR71EsWGWu1S6L2 .node ellipse,#mermaid-svg-zfR71EsWGWu1S6L2 .node polygon,#mermaid-svg-zfR71EsWGWu1S6L2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zfR71EsWGWu1S6L2 .rough-node .label text,#mermaid-svg-zfR71EsWGWu1S6L2 .node .label text,#mermaid-svg-zfR71EsWGWu1S6L2 .image-shape .label,#mermaid-svg-zfR71EsWGWu1S6L2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-zfR71EsWGWu1S6L2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zfR71EsWGWu1S6L2 .rough-node .label,#mermaid-svg-zfR71EsWGWu1S6L2 .node .label,#mermaid-svg-zfR71EsWGWu1S6L2 .image-shape .label,#mermaid-svg-zfR71EsWGWu1S6L2 .icon-shape .label{text-align:center;}#mermaid-svg-zfR71EsWGWu1S6L2 .node.clickable{cursor:pointer;}#mermaid-svg-zfR71EsWGWu1S6L2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zfR71EsWGWu1S6L2 .arrowheadPath{fill:#333333;}#mermaid-svg-zfR71EsWGWu1S6L2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zfR71EsWGWu1S6L2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zfR71EsWGWu1S6L2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zfR71EsWGWu1S6L2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zfR71EsWGWu1S6L2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zfR71EsWGWu1S6L2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster text{fill:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 .cluster span{color:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zfR71EsWGWu1S6L2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zfR71EsWGWu1S6L2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-zfR71EsWGWu1S6L2 .icon-shape,#mermaid-svg-zfR71EsWGWu1S6L2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zfR71EsWGWu1S6L2 .icon-shape p,#mermaid-svg-zfR71EsWGWu1S6L2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zfR71EsWGWu1S6L2 .icon-shape .label rect,#mermaid-svg-zfR71EsWGWu1S6L2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zfR71EsWGWu1S6L2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zfR71EsWGWu1S6L2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zfR71EsWGWu1S6L2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不满足
满足
多于1
1个
不同意/退回
同意
是
否
合同管理列表

仅显示 审核通过的合同
冻结按钮显示条件

审核通过 + 未支付完 + 未退费?
按钮不显示

按实际状态处理
勾选 1 个合同
点击顶部「冻结」按钮
仅单选校验

已选数量=1?
提示 只能选择一个合同
弹出原因弹窗

填写 冻结原因
发起冻结审批
进入 退款/冻结 合同审核
审核人处理
审批终止

合同保持原状态
合同状态=冻结
后续解冻?
行内点「解冻」 填原因
发起解冻审批 → 审核通过
合同恢复 执行中
冻结生效 暂停开课/排课

退费(退款/部分退课) - 用户操作流程图:
#mermaid-svg-HgHek22YTW2DZa2B{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HgHek22YTW2DZa2B .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HgHek22YTW2DZa2B .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HgHek22YTW2DZa2B .error-icon{fill:#552222;}#mermaid-svg-HgHek22YTW2DZa2B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HgHek22YTW2DZa2B .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HgHek22YTW2DZa2B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HgHek22YTW2DZa2B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HgHek22YTW2DZa2B .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HgHek22YTW2DZa2B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HgHek22YTW2DZa2B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HgHek22YTW2DZa2B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HgHek22YTW2DZa2B .marker.cross{stroke:#333333;}#mermaid-svg-HgHek22YTW2DZa2B svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HgHek22YTW2DZa2B p{margin:0;}#mermaid-svg-HgHek22YTW2DZa2B .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HgHek22YTW2DZa2B .cluster-label text{fill:#333;}#mermaid-svg-HgHek22YTW2DZa2B .cluster-label span{color:#333;}#mermaid-svg-HgHek22YTW2DZa2B .cluster-label span p{background-color:transparent;}#mermaid-svg-HgHek22YTW2DZa2B .label text,#mermaid-svg-HgHek22YTW2DZa2B span{fill:#333;color:#333;}#mermaid-svg-HgHek22YTW2DZa2B .node rect,#mermaid-svg-HgHek22YTW2DZa2B .node circle,#mermaid-svg-HgHek22YTW2DZa2B .node ellipse,#mermaid-svg-HgHek22YTW2DZa2B .node polygon,#mermaid-svg-HgHek22YTW2DZa2B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HgHek22YTW2DZa2B .rough-node .label text,#mermaid-svg-HgHek22YTW2DZa2B .node .label text,#mermaid-svg-HgHek22YTW2DZa2B .image-shape .label,#mermaid-svg-HgHek22YTW2DZa2B .icon-shape .label{text-anchor:middle;}#mermaid-svg-HgHek22YTW2DZa2B .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HgHek22YTW2DZa2B .rough-node .label,#mermaid-svg-HgHek22YTW2DZa2B .node .label,#mermaid-svg-HgHek22YTW2DZa2B .image-shape .label,#mermaid-svg-HgHek22YTW2DZa2B .icon-shape .label{text-align:center;}#mermaid-svg-HgHek22YTW2DZa2B .node.clickable{cursor:pointer;}#mermaid-svg-HgHek22YTW2DZa2B .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HgHek22YTW2DZa2B .arrowheadPath{fill:#333333;}#mermaid-svg-HgHek22YTW2DZa2B .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HgHek22YTW2DZa2B .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HgHek22YTW2DZa2B .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HgHek22YTW2DZa2B .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HgHek22YTW2DZa2B .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HgHek22YTW2DZa2B .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HgHek22YTW2DZa2B .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HgHek22YTW2DZa2B .cluster text{fill:#333;}#mermaid-svg-HgHek22YTW2DZa2B .cluster span{color:#333;}#mermaid-svg-HgHek22YTW2DZa2B div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HgHek22YTW2DZa2B .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HgHek22YTW2DZa2B rect.text{fill:none;stroke-width:0;}#mermaid-svg-HgHek22YTW2DZa2B .icon-shape,#mermaid-svg-HgHek22YTW2DZa2B .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HgHek22YTW2DZa2B .icon-shape p,#mermaid-svg-HgHek22YTW2DZa2B .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HgHek22YTW2DZa2B .icon-shape .label rect,#mermaid-svg-HgHek22YTW2DZa2B .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HgHek22YTW2DZa2B .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HgHek22YTW2DZa2B .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HgHek22YTW2DZa2B :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
按单个课程退课
超范围
通过
不同意/退回
同意
整合同退费
进入 合同管理 → 点「查看」合同详情
合同状态=执行中?

仅执行中显示退费功能
退费按钮不显示
课程信息 退费入口
两种退费方式
勾选要退课的课程行

赠送课时行 复选框禁用不可选
点击「退费」按钮

需 ContractRefund 权限
退费确认弹窗

每门课程显示 可退费X课次
每门课程输入退费课次

范围 1 ~ 可退费课次
填写 退费原因 必填
点击「确定退费」
校验课次范围
提示 退费课次不能超过可退费课次
调预览接口

计算赠送课次变化
二次确认弹窗

合计退费课次 + 赠送课次变化
提交部分退费申请

items=各课程退费课次
进入 退款/冻结 合同审核
审核结果
申请终止 合同保持原状态
该课程退费完成

标记 已退费/有部分退费
合同管理列表

勾选1个合同
点顶部「退费」→ 填退费原因
发起整合同退费审批

  • 冻结 :合同需审核通过 + 未支付完 + 未退费 才显示「冻结」按钮(仅单选),填冻结原因 → 发起冻结审批 → 审核通过后合同状态=冻结(可再发起解冻 恢复执行中)。

    -

  • 退费两种方式:

    • 按单个课程退课 :合同详情 → 课程信息,勾选课程点「退费」,每门课程单独输入退费课次 (1 ~ 可退费课次 = 总课次 − 已完成 − 已退费),填退费原因,提交前预览赠送课次变化 并二次确认。

    • 整合同退费 :合同管理列表勾选 1 个合同点「退费」,填原因发起整合同退费审批。

  • 赠送课时行 :复选框禁用不可选 ,赠送课次不能退;退费会同步调整赠送课次(一对一课程显示 before → after 变化)。

  • 两类退费与冻结均进入 (退款/冻结)合同审核 ,审核无需业绩分配与班主任校验(直接显示表单信息,默认隐藏「退回」「加批」按钮),同意后生效。

4. 赠送合同管理

  • 管理赠送课时类的合同;赠送课时行的退费按钮完全隐藏 、复选框禁用(灰色不可选)。

5. 退费申请列表

  • 展示退费申请的列表与处理状态。

6. 合同转课记录

  • 记录合同课程的转课操作(源课程 → 目标课程)时间线。
    -

转课 - 用户操作流程图:
#mermaid-svg-mG3S7VXnQRjUvaGM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mG3S7VXnQRjUvaGM .error-icon{fill:#552222;}#mermaid-svg-mG3S7VXnQRjUvaGM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mG3S7VXnQRjUvaGM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mG3S7VXnQRjUvaGM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mG3S7VXnQRjUvaGM .marker.cross{stroke:#333333;}#mermaid-svg-mG3S7VXnQRjUvaGM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mG3S7VXnQRjUvaGM p{margin:0;}#mermaid-svg-mG3S7VXnQRjUvaGM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster-label text{fill:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster-label span{color:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster-label span p{background-color:transparent;}#mermaid-svg-mG3S7VXnQRjUvaGM .label text,#mermaid-svg-mG3S7VXnQRjUvaGM span{fill:#333;color:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM .node rect,#mermaid-svg-mG3S7VXnQRjUvaGM .node circle,#mermaid-svg-mG3S7VXnQRjUvaGM .node ellipse,#mermaid-svg-mG3S7VXnQRjUvaGM .node polygon,#mermaid-svg-mG3S7VXnQRjUvaGM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mG3S7VXnQRjUvaGM .rough-node .label text,#mermaid-svg-mG3S7VXnQRjUvaGM .node .label text,#mermaid-svg-mG3S7VXnQRjUvaGM .image-shape .label,#mermaid-svg-mG3S7VXnQRjUvaGM .icon-shape .label{text-anchor:middle;}#mermaid-svg-mG3S7VXnQRjUvaGM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mG3S7VXnQRjUvaGM .rough-node .label,#mermaid-svg-mG3S7VXnQRjUvaGM .node .label,#mermaid-svg-mG3S7VXnQRjUvaGM .image-shape .label,#mermaid-svg-mG3S7VXnQRjUvaGM .icon-shape .label{text-align:center;}#mermaid-svg-mG3S7VXnQRjUvaGM .node.clickable{cursor:pointer;}#mermaid-svg-mG3S7VXnQRjUvaGM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mG3S7VXnQRjUvaGM .arrowheadPath{fill:#333333;}#mermaid-svg-mG3S7VXnQRjUvaGM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mG3S7VXnQRjUvaGM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mG3S7VXnQRjUvaGM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mG3S7VXnQRjUvaGM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mG3S7VXnQRjUvaGM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mG3S7VXnQRjUvaGM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster text{fill:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM .cluster span{color:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mG3S7VXnQRjUvaGM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mG3S7VXnQRjUvaGM rect.text{fill:none;stroke-width:0;}#mermaid-svg-mG3S7VXnQRjUvaGM .icon-shape,#mermaid-svg-mG3S7VXnQRjUvaGM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mG3S7VXnQRjUvaGM .icon-shape p,#mermaid-svg-mG3S7VXnQRjUvaGM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mG3S7VXnQRjUvaGM .icon-shape .label rect,#mermaid-svg-mG3S7VXnQRjUvaGM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mG3S7VXnQRjUvaGM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mG3S7VXnQRjUvaGM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mG3S7VXnQRjUvaGM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
目标更贵
目标更便宜
无差价
合同详情 → 课程信息
合同状态=执行中?

仅执行中显示转课
转课按钮不显示
勾选要转出的课程行

赠送课次行 不可选
点该行「转课」

需 ContractSwap 权限
打开转课弹窗
原课程 只读显示
填写 转课课次

1 ~ 最多可转课次 剩余课次
选择 目标课程

不能选原课程 仅上架课程

按年级/学校过滤
点击「差价预览」
自动计算 应收金额/应退金额 只读

并回填 实收/实退金额
差价方向
实收金额=补差价

实退留空
实退金额=退差价

实收留空
实收/实退 均留空
填写 备注 可选

如 差价微信已补
点「确认转课」
确认弹窗

原课程转出X课次
执行转课 executeSwap
转课成功

课程/课时 更新
合同操作记录留痕

可查 转课时间线

  • 入口 :合同详情 → 课程信息,仅执行中 合同显示「转课」按钮(需 ContractSwap 权限);赠送课次不可转。
  • 转课弹窗 :原课程只读;填转课课次 (≤剩余课次);选目标课程(不能选原课程、仅上架课程、按年级/学校过滤)。
  • 差价预览 :点「差价预览」自动计算差价并只读展示应收/应退金额 ,同时自动回填实收/实退(目标更贵→补差价;目标更便宜→退差价;无差价→留空),实收/实退可按实际微调。
  • 确认转课 :确认弹窗后执行,转课成功并留痕(合同操作记录时间线)。

合同相关操作往往需要业绩分配完成 + 班主任已选后才可提交审核(详见审批流程)。


八、财务模块

路径:财务

1. 认款合同

  • 对已收款合同进行认款确认,登记实际到账情况。

2. 课酬统计

  • 按人员统计上课课酬、消课课酬等,用于老师薪资核算。

九、工作流(审批)模块

路径:工作流

系统内置可视化流程审批引擎,几乎所有关键业务(合同审核、推荐审核、请款、退费冻结、请假等)都通过流程审批流转。

1. 流程中心 / 任务中心

  • 流程中心:常用流程的统一入口。

  • 任务中心:分为多个子列表:

    • 我的发起:我发起的所有流程。

    • 待办任务:等待我审批的任务。

    • 已办任务:我处理过的任务。

    • 抄送我的:抄送给我知悉的任务。

2. 流程管理

  • 流程监控:查看流程执行进度、处理情况,支持加签、减签、变更审批人、打印等运维操作。

  • 流程类型:管理流程分类。

  • 流程设计:可视化配置企业审批流程(DIY / LF 两种设计模式),可维护流程版本。

3. 流程运维

  • 委托设置 / 委托列表:将本人待办委托给他人代审,并查看委托记录。

  • 消息模板:配置流程相关消息通知模板。


十、数据(统计)模块

路径:数据

1. 销售统计

  • 按课程/时间段统计销售业绩数据。

2. 销售业绩

  • 按销售/顾问维度统计业绩达成情况。

3. 学员统计

  • 学员数量与结构的多维度统计。

4. 授课统计

  • 统计老师授课课时、次数等情况。

十一、报表模块

路径:报表

提供面向管理层的经营报表:

  • 个人区域销售报表:销售人员个人分区业绩。

  • 校区区域销售报表:按校区统计区域销售业绩。

  • 班主任业绩报表:按班主任维度统计业绩。

  • 区域市场报表:市场推广成效统计。

  • 教育顾问报表:教育顾问招生业绩。

  • 学科组长KPI报表:学科组长考核指标。

  • 授课饱和度统计报表:老师授课饱和度分析。

  • 教务报表: 教务报表


十二、组织与系统模块

路径:组织 / 系统

组织

  • 员工管理:维护员工账号与基本信息。

  • 组织管理:维护机构组织架构(部门/校区)。

  • 职位管理:配置职位信息。

系统

  • 内部公告:发布、管理内部公告(首页公告栏展示)。

  • 角色与权限:创建角色并分配菜单/操作权限,控制不同岗位的功能可见范围。

  • 操作日志:审计系统关键操作记录,便于追溯。


十三、通用操作说明

列表页通用操作

  • 多数列表页顶部提供查询条件,可通过筛选后再「查询」。

  • 列表支持分页浏览,可自定义每页条数。

  • 行操作按钮(查看、编辑、审核、退费、删除等)依数据状态与权限显示。

弹窗表单通用操作

  • 弹出窗通常包含「保存」「取消」按钮;带审核的流程会进入工作流审批。

我的消息

  • 顶部导航「我的消息」图标上会显示未读数量角标,悬停可查看消息列表,点击消息标题可展开查看内容。

全屏浏览

  • 顶部导航提供全屏切换按钮,便于大屏查看报表与看板。

十四、常见问题(FAQ)

  1. 登录后某些菜单看不到?

    → 菜单按角色权限(系统 → 角色与权限)控制,请联系管理员为您分配相应角色权限。

  2. 为什么我无法提交合同审核?

    → 提交前需完成业绩分配 并选择班主任;若当前流程节点为财务节点或退款/冻结合同,则不强制校验。

  3. 合同退费按钮不见了?

    → 只有执行中状态的合同才显示退费/批量退课按钮;赠送合同行的退费按钮默认隐藏。

  4. 排课信息怎么查看?

    → 可在控制台的「课表中心」查看个人课表,或在 教务 → 排课管理/总排课/排课日历 中查看。


附:系统模块菜单总览

一级菜单 二级功能
控制台 首页、我的课表、我的跟进
学员 推荐例子、推荐例子审核、在读学员、意向学员、结课学员、跟进记录、预约跟进计划表、回访记录、学员统计、学员成绩
课程 课程管理、课程特殊类型管理、科目管理、优惠规则
教务 管理未确认课次、上课记录、班级管理、年级管理、排课时段管理、排课管理、总排课
合同 合同管理、新增合同待审核、(退款/冻结)合同审核、赠送合同管理、退费申请列表、合同转课记录、合同退费记录
财务 课酬统计、认款合同
工作流 流程中心、任务中心(我的发起/待办任务/已办任务/抄送我的)、流程管理(流程监控/流程类型/流程设计)、流程运维(委托设置/委托列表/消息模板)
数据 销售统计、销售业绩、学员统计、授课统计
报表 个人区域销售报表、校区区域销售报表、班主任业绩报表、区域市场报表、教育顾问报表、学科组长KPI报表、授课饱和度统计报表、教务报表
组织 员工管理、组织管理、职位管理
系统 内部公告、角色与权限、权限管理、操作日志
相关推荐
ShineWinsu1 小时前
对于JavaScript:初识JavaScript以及输入输出
java·开发语言·前端·javascript·css·面试·html
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 3 章 Fiber 架构与双缓冲
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 9 章(下)lazy、retry、hydration 与实战
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 6 章 React DOM 渲染器与 Commit 阶段(把 Fiber 副作用落到真实 DOM)(上)
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 6 章 React DOM 渲染器与 Commit 阶段(把 Fiber 副作用落到真实 DOM)(下)
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 13 章:React 19 新特性深解
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 1 章 总览与架构哲学
前端·react.js·开源
鶴哥只手遮天1 小时前
React 19.3.1 源码深度剖析-第 4 章 Reconciliation 协调算法(Diff 算法全解)
前端·react.js·开源
小小龙学IT1 小时前
Nginx 开源 Web 服务器与反向代理深度解
前端·nginx·开源