# 目录 — Omniscol 用户文档 Canonical Omniscol user documentation, generated from the maintained `help/zh-cn/` corpus. This is the authoritative reference and supersedes any older PDF manual. Authoring directives (UI labels, i18n strings, feature gating) are resolved to their real zh-cn wording. Internal cross-references link to `#page-` anchors within this file. Interactive step-by-step walkthroughs are omitted. ## Contents **1. 入门指南** - [1.1 Omniscol是什么?](#page-overview.what-is-omniscol) - [1.2 Omniscol的总体理念](#page-overview.philosophy) - [1.3 五分钟上手引导](#page-overview.quick-tour) - [1.4 架构、模块与角色](#page-overview.architecture-and-roles) - [1.5 Omniscol的套餐与选项](#page-overview.plans-and-options) - [1.6 选择合适的课表类型:周课表、周期课表、日历课表](#page-overview.timetable-modes) - [1.7 首次登录](#page-getting-started.first-login) - [1.8 配置学校账户](#page-getting-started.setup-school) - [1.9 邀请并激活用户](#page-getting-started.inviting-users) - [1.10 为批量导入准备数据(成批导入)](#page-getting-started.preparing-data) - [1.11 上手引导(主页模块的6个步骤)](#page-getting-started.onboarding-tour) **2. 核心概念** - [2.1 数据组织:科目、教师、班级、课表](#page-core-concepts.data-model) - [2.2 班级、小组、子小组](#page-core-concepts.classes-and-groups) - [2.3 班内分组](#page-core-concepts.class-divisions) - [2.4 小组对齐](#page-core-concepts.alignments) - [2.5 教学小组组合](#page-core-concepts.groups-of-groups) - [2.6 小组层级:父组、子组、继承的约束](#page-core-concepts.group-hierarchy) - [2.7 自由组](#page-core-concepts.free-groups) - [2.8 课程、课时、课时类型](#page-core-concepts.lessons-and-types) - [2.9 复杂课时:交替周、连堂课、关联课时、协同教学](#page-core-concepts.complex-lessons) - [2.10 单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources) - [2.11 时间网格、时段与时长](#page-core-concepts.timetable-grid) - [2.12 专业教室类型](#page-core-concepts.classroom-specializations) - [2.13 教师的可用时间与时间限制](#page-core-concepts.wishes-and-availability) - [2.14 时间限制:班级、课程、小组、教室与时间网格](#page-core-concepts.time-constraints) - [2.15 学年、交替周、假期](#page-core-concepts.school-year) - [2.16 时间轴与时间导航](#page-core-concepts.timeline-navigation) - [2.17 在列表中搜索和筛选](#page-core-concepts.search-and-filter) - [2.18 管理员协作](#page-core-concepts.collaboration) **3. 创建课表(课表管理模块)** - [3.1 课表管理模块概览](#page-timetables.overview) - [3.2 创建课表的前提条件](#page-timetables.prerequisites) - [3.3 日历模式——高级选项](#page-timetables.calendar-mode) - [3.4 日历模式下的可用时间与约束](#page-timetables.calendar-wishes) - [3.5 日期窗口](#page-timetables.date-windows) - [3.6 第1步——常规设置](#page-timetables.general-settings) - [3.7 第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [3.8 第3步——分配教师](#page-timetables.assigning-teachers) - [3.9 第4步——创建班级及其小组](#page-timetables.creating-classes) - [3.10 第5步——对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) - [3.11 第6步——分配课时数并创建课时](#page-timetables.hour-distribution) - [3.12 课时分配规则](#page-timetables.distribution-policy) - [3.13 教室自动分配](#page-timetables.auto-room-assignment) - [3.14 第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import) - [3.15 第7步——自动生成](#page-timetables.generation) - [3.16 第8步——发布课表](#page-timetables.publication) - [3.17 同时发布多份课表](#page-timetables.multiple-active-timetables) - [3.18 手动安排课时](#page-timetables.manual-placement) - [3.19 编辑课时](#page-timetables.lesson-edit) - [3.20 脱离时间网格的课时和班级](#page-timetables.off-grid-lessons) - [3.21 锁定课时的位置](#page-timetables.lesson-lock) - [3.22 检测并解决冲突(生成时)](#page-timetables.conflicts) - [3.23 诊断课表生成失败的原因](#page-timetables.diagnosing-generation) - [3.24 显示、复制、重组课表](#page-timetables.visualize-duplicate) - [3.25 准备下一学年](#page-timetables.next-school-year) **4. 仪表盘** - [4.1 仪表盘模块概览](#page-dashboard.overview) - [4.2 使用表格和图表](#page-dashboard.tools-and-filters) - [4.3 教师统计](#page-dashboard.teachers) - [4.4 教室统计](#page-dashboard.classrooms) - [4.5 科目统计](#page-dashboard.subjects) - [4.6 班级统计](#page-dashboard.classes) - [4.7 学生与资源统计](#page-dashboard.students-resources) **5. 日常使用(课表模块)** - [5.1 查看和筛选课表](#page-schedules.consult-and-filter) - [5.2 课表的显示方式:网格、列表、电子表格、日程表、月、分屏](#page-schedules.schedule-display) - [5.3 已发布课表的临时调整](#page-schedules.ad-hoc-changes) - [5.4 临时事件(课表之外)](#page-schedules.events) - [5.5 打印与分享](#page-schedules.print-and-export) - [5.6 通过公开链接分享课表](#page-schedules.share-link) **6. 缺勤与代课** - [6.1 缺勤管理模块概览](#page-absences.overview) - [6.2 登记缺勤(管理员 / 教师 / 学生)](#page-absences.declaring) - [6.3 代课规则](#page-absences.substitution-policies) - [6.4 单个课时的临时代课](#page-absences.single-lesson-replacement) - [6.5 多日缺勤](#page-absences.multi-day) - [6.6 班级和学生缺勤](#page-absences.class-and-student-absences) - [6.7 缺勤跟踪与导出](#page-absences.statistics) **7. 人员调度** - [7.1 人员调度概览](#page-staffing.overview) - [7.2 制作值班网格](#page-staffing.building-grids) - [7.3 定义需要覆盖的任务](#page-staffing.assignments) - [7.4 安排员工](#page-staffing.planner) - [7.5 创建并分享值班表](#page-staffing.roster) **8. 管理** - [8.1 用户与角色](#page-admin.users-and-roles) - [8.2 管理员管理](#page-admin.admins) - [8.3 管理自定义角色](#page-admin.customroles) - [8.4 排课范围](#page-admin.planning-domains) - [8.5 教师管理](#page-admin.teachers) - [8.6 学生管理](#page-admin.students) - [8.7 员工管理](#page-admin.staff) - [8.8 科目管理(官方科目与自定义科目)](#page-admin.subjects) - [8.9 课时类型](#page-admin.lesson-types) - [8.10 学年与假期](#page-admin.school-year) - [8.11 学校常规设置](#page-admin.parameters) - [8.12 高级设置与个性化](#page-admin.advanced-parameters) - [8.13 可见性与登录限制](#page-admin.visibility-restrictions) - [8.14 第二身份验证因素 (MFA)](#page-admin.second-factor) - [8.15 导入与导出](#page-admin.import-export) - [8.16 备份点](#page-admin.snapshots) - [8.17 活动日志](#page-admin.logs) **9. 集成** - [9.1 集成概览](#page-integrations.overview) - [9.2 Omniscol的工作原理——一套API,唯一数据源](#page-integrations.architecture) - [9.3 iCal——订阅与动态链接](#page-integrations.ical) - [9.4 Omniscol API——身份验证令牌](#page-integrations.api-tokens) - [9.5 OAuth2 / OIDC——将服务连接到Omniscol](#page-integrations.oauth-server) - [9.6 API自定义:端点覆盖与Webhook](#page-integrations.api-customization) - [9.7 完整数据模型:JSON实体、关系与本体](#page-integrations.data-model-full) - [9.8 高级查询——筛选、投影和分页API](#page-integrations.advanced-queries) - [9.9 课时API——获取任意日期的课时](#page-integrations.lessons-api) - [9.10 MCP——将外部AI智能体连接到Omniscol](#page-integrations.mcp) - [9.11 内置AI助手](#page-integrations.ai-assistant) - [9.12 OIDC / SSO——通过身份提供方登录](#page-integrations.oauth2) - [9.13 与外部系统同步(ERP)](#page-integrations.extsync) - [9.14 OneRoster(1.2与高级小组)](#page-integrations.oneroster) - [9.15 关联账户与共享资源](#page-integrations.linked-accounts) - [9.16 Edusign连接器](#page-integrations.edusign) **10. 门户** - [10.1 学生门户](#page-portal.student-portal) - [10.2 教师门户](#page-portal.teacher-portal) - [10.3 访客门户(公开链接)](#page-portal.guest-portal) - [10.4 公开分享链接](#page-portal.share-links) **11. 信息显示屏** - [11.1 为大厅或走廊配置信息显示屏](#page-panels.lobby-panel) - [11.2 为教室门口配置信息显示屏](#page-panels.room-panel) - [11.3 信息显示屏的外观自定义](#page-panels.customization) **12. 从其他软件迁移** - [12.1 从其他软件迁移——概览](#page-migration.overview) - [12.2 从Hyperplanning(Index Education)迁移](#page-migration.from-hyperplanning) - [12.3 从EDT / PRONOTE(Index Education)迁移](#page-migration.from-edt) - [12.4 从aSc Timetables迁移](#page-migration.from-asc) - [12.5 从ADE / ADE Campus迁移](#page-migration.from-ade) - [12.6 从自制Excel表格迁移](#page-migration.from-spreadsheet) **13. 高等教育专属说明** - [13.1 高等教育的特点——概览](#page-higher-ed.overview) - [13.2 教学周期、届、培养方案、学习路径](#page-higher-ed.sessions-and-tracks) - [13.3 外部授课人员(外聘教师、访问教师)](#page-higher-ed.external-faculty) - [13.4 拆分教室与多教室考试](#page-higher-ed.multi-room-exams) - [13.5 协同教学与授课人员轮换](#page-higher-ed.co-teaching) - [13.6 面向非循环培训的日历模式](#page-higher-ed.calendar-mode) - [13.7 按课程设置视频会议链接](#page-higher-ed.videoconference-links) - [13.8 高等教育中的多校区](#page-higher-ed.multi-site) **14. 中小学专属说明** - [14.1 中小学的特点——概览](#page-k12.overview) - [14.2 半班与班内分组中的选修课](#page-k12.half-classes-and-options) - [14.3 自习与看管(学校)](#page-k12.study-halls) - [14.4 多年级班级](#page-k12.multi-grade-classes) **15. 应用场景示例** - [15.1 使用场景——概览](#page-use-cases.overview) - [15.2 场景——课表的创建与生成](#page-use-cases.creation-and-generation) - [15.3 场景——日常排课与调整](#page-use-cases.placement-and-modification) - [15.4 场景——多小组、多教室、多授课人员](#page-use-cases.multi-entities) - [15.5 场景——批量操作](#page-use-cases.mass-operations) - [15.6 场景——考试与事件](#page-use-cases.exams-and-events) - [15.7 场景——缺勤与代课](#page-use-cases.absences-and-substitutions) - [15.8 场景——报表与统计](#page-use-cases.reporting-and-stats) - [15.9 场景——发布与分享](#page-use-cases.diffusion-and-sharing) **16. 常见问题解答** - [16.1 FAQ——常见问题](#page-faq.general) - [16.2 FAQ——创建课表](#page-faq.timetables) - [16.3 FAQ——数据导入](#page-faq.data-import) - [16.4 FAQ——生成算法的运行机制](#page-faq.solver-behavior) - [16.5 FAQ——显示与界面](#page-faq.display-and-ux) - [16.6 FAQ——高等教育使用场景](#page-faq.higher-ed-cases) - [16.7 FAQ——特殊情况与高级配置](#page-faq.edge-cases) - [16.8 FAQ——安全与托管](#page-faq.security-and-hosting) - [16.9 FAQ——价格与许可](#page-faq.pricing-and-licenses) - **[术语表](#chapter-glossary)** (55 terms) - **[Index](#chapter-index)** --- ## 1. 入门指南 ### 1.1 Omniscol是什么? *Source: `help/zh-cn/overview/what-is-omniscol.md` · id: overview.what-is-omniscol · Updated: 2026-06-13* Omniscol是一款**在线约束排课软件**,适用于从小学到高等教育和继续教育的各类学校与机构。您可以用它创建周课表、周期课表或日历课表(按日期排课,不重复),再将课表发布给相关用户。 产品融合了手动录入、冲突诊断,以及通过[生成算法](#page-glossary.solver)实现的自动生成。具体业务细节见各专题页面。 #### 整体工作流程 使用Omniscol的标准工作流程如下: ``` 1. 录入数据 (用户、科目、校区/教室、班级) ↓ 2. 配置课表 (授课小时数、对齐、约束) ↓ 3. 生成或排课 (自动生成或手动安排) ↓ 4. 检查与裁定 (冲突、调整、锁定) ↓ 5. 发布 (其课时将供其他所有模块使用) ↓ 6. 日常使用课表 (日常调整、缺勤、代课) ``` 每个步骤都有专门的模块。第1至第5步是阶段性的工作(开学前、学期前或课表重构时);第6步对应日常使用。 #### 课表类型 Omniscol支持**三种**课表类型,各类型是否可用取决于您订阅的套餐。 - **周课表**——在一个标准周内重复的课时,可设A/B交替周,也可不设。这是小学和中学的标准情形,所有套餐均可使用。 - **周期课表**——在由N个编号日组成的周期(通常为6天或8天)内重复的课时,周期与5天或7天的一周不同,常见于北美体系。Premium账户可用。 - **日历课表**——课时逐个按日期安排,不重复。这是高等教育和继续教育的首选方式。Premium账户可用。 Premium账户可以使用这三种类型。借助Premium内置的[同时发布多份课表](#page-timetables.multiple-active-timetables)功能,它们甚至可以在相同的时间段内并行使用。选择建议请参见[选择合适的课表类型](#page-overview.timetable-modes)。 #### 理念:数据优先 Omniscol的出发点是:课表不是一张待填的表格,而是一个**带约束的优化问题**。软件围绕五项原则设计: 1. **先有数据,再有计算**:在启动生成之前,校区、教室、教师、班级、小组、科目和授课小时数必须准确可靠。 2. **结构与日常分离**:编制课表与处理当日变动是两类不同的工作,使用不同的界面。 3. **约束显式化**:无法满足的情形会以[冲突](#page-glossary.conflict)或未安排的课时的形式提示出来,业务上的裁定权始终在用户手中。 4. **草稿与版本**:未发布的课表可以随意测试、复制或重建,而不会改变用户看到的内容。 5. **掌控数据**:可导出为JSON或内置表格,数据可回退。 参考页面:[Omniscol的总体理念](#page-overview.philosophy)。 #### 输入与输出数据 **输入**方面,Omniscol支持: - 在界面中逐条录入; - 从电子表格复制粘贴,批量导入,应用前先行校验; - 根据来源系统可提供的导出内容,协助迁移; - 通过[与外部系统同步](#page-integrations.extsync)对接ERP/信息系统连接器(Aurion、Auriga、Edusign;新增系统按项目实施); - 按账户的权限和选项使用[Omniscol API](#page-integrations.api-tokens); - 按合同和设置使用[OIDC / SSO](#page-integrations.oauth2)。 **输出**方面: - 自适应网页查看; - [iCal](#page-integrations.ical)订阅; - 带签名、可过期的公开链接; - 信息显示屏; - 按界面提供Excel / CSV / PDF / JSON导出; - 有完整文档的REST API,可访问范围受所授权的端点和选项限制; - 面向兼容AI智能体的[MCP](#page-integrations.mcp)(Premium账户)。 #### 模块化结构 软件分为两类模块。 ##### 日常使用模块 - **主页**——当日概览和入门检查清单。 - **课表**——查看课表并进行临时调整。 - **仪表盘**——占用率和服务时间统计。 - **缺勤管理与代课**——申报缺勤,安排代课教师。 ##### 设置模块 - **课表管理**——创建、配置、生成和发布课表。 - **管理**——用户、科目、学年、设置、导入/导出和集成。 - **人员调度**——按任务安排员工;该模块启用后可用,也可作为独立套餐单独购买。 #### 角色与访问 学校一侧由四类身份构成访问结构。**管理员**(排课负责人、校领导、信息中心)负责配置账户并编制课表。**教师**查看自己的日程、填写可用时间并申报缺勤。**学生**查看个人课表。**员工**(学生事务、监管人员)在使用人员调度模块时参与其中。此外,带签名的分享链接可让用户无需账户即可访问特定范围的内容。 角色可以叠加:参与排课的教师可以同时是教师和管理员。各角色的详情见[架构与角色](#page-overview.architecture-and-roles)。 通过[自定义角色](#page-admin.customroles)选项,可以按模块、按操作限制管理员账户的权限。 #### 套餐与选项 Omniscol提供多种套餐:**Lite**(独立教师、个人培训师、规模很小的机构)、**Staffing**(仅含人员调度模块)、**Standard**(普通学校)、**Standard Plus**(Standard加上人员调度),以及**Premium**(高等教育、继续教育、复杂的多校区组织)。部分功能在Premium中默认包含——周期课表和日历课表类型、日历式可用时间、同时发布多份课表——其他功能则按合同开通(快照、日志、实时协作、关联账户、自定义角色等)。 套餐、选项及其开通方式的详情集中在[Omniscol的套餐与选项](#page-overview.plans-and-options)。 #### 差异化亮点 - **自动生成**:生成算法在遵守硬性约束的前提下安排课时,并优化各项偏好。 - **人工掌控**:用户始终可以检查、移动、锁定或裁定。 - **多渠道分发**:网页、iCal、导出文件、公开链接和信息显示屏。 - **报表**:仪表盘和导出文件,便于跟踪小时数、教室占用率以及审计所需的各项指标。 #### 架构与托管 架构、安全和托管方面的内容见[架构与角色](#page-overview.architecture-and-roles)和[FAQ——安全与托管](#page-faq.security-and-hosting)。 #### 下一步 - 想要互动式浏览:[五分钟上手引导](#page-overview.quick-tour)。 - 配置您的账户:[首次登录](#page-getting-started.first-login),然后是[配置学校账户](#page-getting-started.setup-school)。 - 了解业务概念:[班级、小组、子小组](#page-core-concepts.classes-and-groups)。 - 创建您的第一份课表:[课表管理模块](#page-timetables.overview)。 - 常见问题:[FAQ——常见问题](#page-faq.general)。 #### 另请参阅 - [Omniscol的总体理念](#page-overview.philosophy) - [架构与角色](#page-overview.architecture-and-roles) - [选择合适的课表类型:周课表、周期课表、日历课表](#page-overview.timetable-modes) - [Omniscol的套餐与选项](#page-overview.plans-and-options) - [五分钟上手引导](#page-overview.quick-tour) ### 1.2 Omniscol的总体理念 *Source: `help/zh-cn/overview/philosophy.md` · id: overview.philosophy · Updated: 2026-09-29* 在介绍具体功能之前,先说明几条贯穿Omniscol使用体验的原则, 它们解释了软件为什么会做出某些决定。 #### 业务背景 课表不是一张简单的待填表格,而是一个**带约束的优化问题**: - 约束数量众多,而且往往是隐性的; - 约束之间有时相互矛盾; - 运营压力很大:开学、学期或某个阶段必须能够正常运转。 Omniscol被设计为**带约束的排课助手**:它加快您的工作,指出无法实现的 安排,并把业务上的取舍留给用户。 #### Omniscol与学校的其他软件 | 领域 | 涵盖内容 | 与Omniscol的关系 | | --- | --- | --- | | 学生管理、SIS / SMS、学校ERP | 注册、学生档案、成绩与成绩单、纪律、作业记录、家校联系册、与家长的沟通、收费与财务、向资助机构的申报 | Omniscol与这些专业软件对接。通过Omniscol的合作伙伴,已排好的课时会自动同步到他们的软件中。 | | 教学平台 / LMS | 教学、课程内容、沟通 | 通过API、[OneRoster(1.2与高级小组)](#page-integrations.oneroster)、iCal或单点登录对接。 | | 考勤签到 | 出勤、签名 | 使用[Edusign连接器](#page-integrations.edusign),Omniscol发送课时,并取回实际的出勤记录。 | | Omniscol | 时间的组织:谁、教什么、在哪里、何时 | 这是它的核心业务,适用于世界各地的各类学校。 | Omniscol专注于课表,其余方面与专业厂商合作,其中不少是本地合作伙伴。 它通过导入和导出、iCal、有文档的REST API、按合同提供的OIDC / SSO, 或[与外部系统同步](#page-integrations.extsync)与这些软件对接。 借助完整导出、可随时撤销的访问令牌以及按角色授予的权限, 学校的数据始终可访问且受到保护。另请参见[integrations.partners](#page-integrations.partners)。 #### 五条基本原则 ##### 1. 数据先于计算 没有准确的数据,就无法生成可靠的课表:校区、教室、教师、班级、小组、科目、 授课小时数、可用时间和约束,缺一不可。 ##### 2. 结构与日常运行分开 编制课表与使用已发布的课表是两种不同的工作。前者主要在 [课表管理](#page-timetables.overview)中完成,后者则在 [课表](#page-schedules.consult-and-filter)、[缺勤管理](#page-absences.overview)和 [仪表盘](#page-dashboard.overview)中进行。 ##### 3. 硬约束与优化约束 有些约束一旦违反,课表就无效,因此被当作严格约束处理:同一时间一位教师只能在一个地方; 同一个班级的课时不能重叠,但属于班内分组的小组除外;一间普通教室同一时间只能安排一节课时; 还有不可用时间、容量、设备资源和校区之间的路程。 另一些约束用于改进方案:不理想的可用时间、课时之间的空档、各天的均衡、科目之间的教学顺序、 小时数的上限或下限、到校天数。它们按惩罚分计算,生成算法会设法减少这些惩罚分。 ##### 4. 草稿与版本 未发布的课表不会影响用户看到的内容。 您可以复制、试验、比较、锁定部分课时、重新运行生成, 等结果满意后再发布。 启用备份点后,还多了一层保障,可以回退或恢复部分数据。 ##### 5. 数据始终由用户掌控 Omniscol支持完整的JSON导出,也支持各个屏幕上的业务导出,数据可以随时迁出。 自动化不会取代人的决定。 #### 冲突是信息,不是错误 手动录入时,Omniscol会提示冲突,但由用户自己决定如何取舍。 这对真实存在的特殊情况很有用: 为需要延长考试时间的学生安排的教室、有意超出理论容量的安排、 出于本校原因把课时安排在非专业教室。 自动生成时,生成算法不会有意产生严重冲突。如果找不到完整的方案, 它会保留计算出的最佳课表,并把无法放置的课时留在 未放置的便签列表中。 [锁定课时的位置](#page-timetables.lesson-lock)可以固定您想要的安排: 下一次生成会围绕这个锁定的课时调整其他课时。 #### 多份课表是建模的基本思路 Omniscol原生支持**多份课表**。同一所学校可以同时存在多份课表: - 不同的学年; - 学期或阶段; - 按单位、院系或学段做逻辑划分; - 不同类型的组合,例如按周重复的周课表与带日期的日历课表。 在Premium中,可以 [同时发布多份课表](#page-timetables.multiple-active-timetables), 部分Standard账户也可以单独开通。 例如,一所学校可以让预科阶段在每个学期各有一份周课表, 本科阶段使用不重复的日历课表,同时还有一个为期18个月的ExecMBA项目, 其起止时间与其他课表和学年错开。 使用Omniscol,您可以分别创建每一份课表,在排课时仍能享受跨课表的冲突检查, 最后再同时发布全部课表,最终合并成一个视图,对终端用户完全透明。 #### 优化AI与外部智能体 [生成算法](#page-glossary.solver)是一种**神经符号蒙特卡洛元启发式**优化AI。 引擎在约束下探索各种放置方式,先找到有效方案,再优化惩罚分, 速度极快(例如,16个班级的初中不到一分钟)。如果找不到有效方案, 松弛机制会有选择地舍弃部分课时,并照样对结果进行优化。 Omniscol是一家AI优先的公司,源于长期的“深度科技”研发。 Omniscol还拥有其他符号AI算法,用于检查冲突、发现设置中的不一致、 提出改进建议或配置提醒、从一组候选方案中预先筛选出最佳方案, 以及为一部分课时自动安排一部分教室, 这一切都在浏览器中即时完成。 在启用该选项并具备相应权限时,Omniscol还通过 [MCP](#page-integrations.mcp)向兼容的智能体开放API工具。 这样您就可以用自然语言与Omniscol交互,扩展图形界面提供的功能, 直接从Omniscol服务器获取相关数据。 这些智能体只在所提供令牌的范围内行事;查询类用法最为安全, 任何写入操作都应由用户核实。目前,与Omniscol交互效果最好的AI智能体是Claude桌面版。 #### 另请参阅 - [Omniscol是什么?](#page-overview.what-is-omniscol) - [架构与角色](#page-overview.architecture-and-roles) - [选择合适的课表类型](#page-overview.timetable-modes) - [冲突](#page-glossary.conflict) - [生成算法](#page-glossary.solver) - [同时发布多份课表](#page-timetables.multiple-active-timetables) ### 1.3 五分钟上手引导 *Source: `help/zh-cn/overview/quick-tour.md` · id: overview.quick-tour · Updated: 2026-06-25* 这份导览带您在几分钟内了解Omniscol的主要模块。 如果您刚开始接触这款软件,从这里开始最合适。 #### 左侧的模块菜单 每个屏幕的左侧都有一个竖向菜单,列出适用于您角色的模块。 从上到下,按日常使用的顺序排列: 1. **主页**(图标 [house])——在尚未发布任何课表时是入门指南, 发布之后则是个性化的主页。 2. **课表**——您日常使用的主视图。 3. **仪表盘**——统计数据。 4. **缺勤管理**——管理缺勤和代课。 5. **课表管理**——创建课表并设置其结构。 6. **管理**——用户、科目、设置。 根据您的合同,还可能出现其他模块, 例如 **人员调度**(任务和监督的排班表,供学生管理团队使用)。 #### 时间轴 大多数屏幕的顶部都有一条**时间轴**(按周或按月),用来呈现整个学年。 您可以借助它在时间上导航,一眼看出哪些时段已发布课表(带颜色的周)、 哪些是假期(灰色的周)。这条时间轴功能丰富,用法多样。它可以切换为 按月或按年显示(甚至明确指定起止日期)。在 课表管理模块中,它会按已发布的课表着色, 空白的周就是没有课表的周。显示日历课表时, 顶部的浅蓝色标记会提示屏幕上所显示的日程表视图里哪里有课时。 两端的箭头 `◀` 和 `▶︎` 用于在学年之间切换。 #### 跟着引导走! 欢迎使用Omniscol。这份概览介绍软件的各个模块, 以及它们之间如何配合。 1. 右上角的**帮助按钮**可以随时在任何屏幕上打开本帮助。 它知道您当前所在的屏幕,并推荐最相关的页面。旁边的图例按钮 会显示屏幕上各元素的说明。 2. **主页**(图标 [house]):在您发布第一份课表之前, 这个模块会一步步引导您。按照[配置学校账户](#page-getting-started.setup-school)的步骤操作, 勾选各项,随时都可以回来继续。 3. **课表**:日常查看。提供全部筛选条件 (班级、教师、教室、小组、科目、学生)。有多种显示方式:标准网格、列表、 类似电子表格的表格、日程表、按小时的日程表、日视图、月视图和分屏。 只有发布了第一份含有已放置课时的课表之后,才会显示日程表。 4. **仪表盘**:生效(正在运行)的课表的统计数据。 按教师、班级、教室、科目统计小时数。可按时间段筛选。 可导出为CSV和Excel。API提供更详细的数据。 5. **缺勤管理**:集中管理。由教师或学生申报 (需管理员审批),或由学校管理人员直接登记。 为缺勤的教师安排代课人员。班级缺勤(实习、校外活动等)。 6. **课表管理**:创建课表本身。 校区、班级、小组、教师、科目、课程。自动生成 或手动安排。发布,让理论上的课表变为实际运行的课表。 7. **人员调度**(如已启用该模块):值班员工的排班。 定义任务及其特点,安排员工。 生成可分发的值班表。 8. **管理**:用户、科目、学年、 设置、导入 / 导出。主要在账户启用之初使用。 #### 接下来 - 从零开始配置账户:[首次登录](#page-getting-started.first-login)。 - 了解业务概念(班级、小组、班内分组、 对齐等):[班级、小组、子小组](#page-core-concepts.classes-and-groups)。 - 创建您的第一份课表:[课表管理模块概览](#page-timetables.overview)。 - 了解Omniscol如何与学校的信息系统集成: [集成概览](#page-integrations.overview)。 #### 另请参阅 - [Omniscol是什么?](#page-overview.what-is-omniscol) - [架构与角色](#page-overview.architecture-and-roles) ### 1.4 架构、模块与角色 *Source: `help/zh-cn/overview/architecture-and-roles.md` · id: overview.architecture-and-roles · Updated: 2026-08-07* 本页概述Omniscol的应用架构,以及学校一侧可见的角色。具体的合同承诺(可用性、备份、保留期限、监控)以经过确认的法律或商务文件为准。 #### 托管与可靠性 Omniscol托管在欧盟境内,具体位于AWS巴黎和Scaleway巴黎。产品采用备份、监控机制,并在各学校账户之间做逻辑隔离;适用于某个账户的具体细节取决于合同和所涉及的环境。 用户层面的详细说明参见[FAQ——安全与托管](#page-faq.security-and-hosting)。 #### 软件架构 - **Web应用**:应用只需加载一次,之后各界面通过REST/JSON交互动态渲染(单页应用)。 - **CouchDB**作为主数据库。 - **Redis**作为应用端同步和日志所用的数据库。 - **TypeScript**用于界面(webapp)。 - **Node.js / Express后端**,负责协调内部引擎(api、webapp、portal、panel、ical、mcp、oauth2等)。 - **C++**用于生成算法,运行在按需启动的专用虚拟机上。 #### 安全 - 对外通信使用**HTTPS**。 - **Cloudflare**作为唯一入口(防DDoS保护)。 - **密码先在客户端用scrypt预哈希**,再在服务器端重新哈希并加盐。密码不会以明文存储或传输。 - **JWT认证**,签名密钥与较短的有效期配合使用;密钥轮换或吊销可使已签名的令牌失效。 - 已签名、会过期的[分享链接](#page-glossary.share-link),绑定生成它的账户,并会因该账户修改密码或被停用而失效。 - 带有根密钥和派生令牌、接口范围和有效期的[API令牌](#page-glossary.api-token)。 - **OIDC / 单点登录**,视合同和账户设置而定。 - **JSON导出和内部备份**,保证数据可迁出。 #### 用户角色 Omniscol在学校一侧区分多种角色: | 角色 | 典型用途 | | --- | --- | | 管理员 | 排课负责人、校领导、信息中心 | | 教师 | 教师、外聘教师、培训师 | | 学生 | 学生、大学生、学员 | | 员工 | 学生管理、班主任助理、监考和值守人员(需启用人员调度模块) | | 分享链接 | 通过签名网址访问特定范围 | 这些名称与角色技术标识之间的对应关系,详见[用户与角色](#page-admin.users-and-roles)。 同一位用户可以**同时拥有多个角色**。例如,参与排课的教师可以同时是教师和管理员。 “分享链接”角色并不对应普通的用户账户。它指的是签名链接:课表的网页链接是只读的,而某些定向链接可以允许有限的操作,例如在到期日之前填写某位教师的可用时间。 此外,还有一些内部角色仅限Omniscol团队使用:平台管理、翻译、销售和分销合作伙伴。其中部分账户出于维护的需要,可以登录学校的账户。此时他们以该学校超级管理员的身份操作,权限高于管理员:向数据库导入原始数据、启用或停用付费选项、以某位用户的名义登录。这些访问会触发可见的登录提醒,且其令牌很快过期。权力越大,责任越大。 > _Option: 自定义角色_ #### 自定义角色 [自定义角色](#page-admin.customroles)选项可以逐个模块、逐项操作地限制管理员账户的权限。用它可以委派一部分管理工作,而不必授予全部全局权限。 同一选项还开放[范围](#page-admin.planning-domains):角色限定的是可执行的操作,范围限定的是数据——排课员可以修改哪些班级、哪些校区、哪些课表。 #### 模块 标准账户中可见的模块: - **主页**(`home`)——入口页面和当日概览。 - **课表**(`schedules`)——查看和临时调整。 - **仪表盘**(`dashboard`)——教室使用率和服务时间的统计。 - **缺勤管理**(`absences`)——缺勤申报和代课。 - **课表管理**(`timetables`)——课表的构建、生成和发布。 - **管理**(`admin`)——用户、设置、导入/导出和集成。 视合同而定,还可能出现其他模块,尤其是用于学生管理和值守任务规划的**人员调度**。 #### 多学校 每所学校在服务器端逻辑隔离,并访问自己的域名。一所学校的数据在应用中对其他学校不可见。不过,经申请可以在不同账户之间启用通信通道,共享教室和教师的占用冲突。这对共用楼宇的学校,或共享资源的学校集团非常有用。 #### 另请参阅 - [Omniscol是什么?](#page-overview.what-is-omniscol) - [五分钟上手引导](#page-overview.quick-tour) - [用户与角色](#page-admin.users-and-roles) - [自定义角色](#page-admin.customroles) - [范围](#page-admin.planning-domains) - [Omniscol的套餐与选项](#page-overview.plans-and-options) - [安全与托管](#page-faq.security-and-hosting) ### 1.5 Omniscol的套餐与选项 *Source: `help/zh-cn/overview/plans-and-options.md` · id: overview.plans-and-options · Updated: 2026-08-07* Omniscol的销售模式很简单:**多种套餐**、**Premium内置功能**、 部分**按合同开通的功能**,以及独立销售的**人员调度**。 具体价格和范围取决于您的学校与我们签订的合同。 #### 套餐 | 套餐 | 适合对象 | 包含内容 | | --- | --- | --- | | **Lite** | 极小型学校、独立机构、个人培训师、试用 | 课表生成和打印。**不支持发布、学年、多校区和学生管理**,资源有限。可见模块:课表管理和精简版的管理。 | | **Staffing** | 只需要人员调度的学校 | 仅包含人员调度模块,用于监督、值班和看管 | | **Standard** | 常规学校(小学、初中、高中),单一排课团队,周课表 | Lite,再加上发布、学年、多校区、学生管理、日常日程表、缺勤、仪表盘、信息显示屏、iCal、只读的有限API | | **Standard Plus** | 既需要Standard又需要人员调度模块的学校 | Standard + 人员调度 | | **Premium** | 高等教育、继续教育,以及更复杂的多校区或多路径机构 | 周课表、周期课表或日历课表,带日期的可用时间,多份课表同时发布,更多设置选项(课时状态、时间网格外安排、一次性事件、授课方式、视频会议链接等),基于令牌的完整API,MCP,OIDC / SSO,外部同步,以及按合同开通的高级选项(协作、备份点、自定义角色)。 | 各项功能的开通方式并不相同: - 部分功能是**Premium内置的** (日历模式、日历可用时间、多份课表同时发布); - 另一些**按合同开通**,大多用于Premium账户; - 少数功能在有明确需求时,可以**作为特例**在Standard账户上开通; - 人员调度模块也有自己的逻辑,因为它可以单独销售。 #### 独立的人员调度产品 人员调度模块也可以**脱离Omniscol的其他部分**单独销售, 适合只需要管理监督和看管的学校。此时账户只提供 人员调度模块、可被安排任务的员工的缺勤, 以及必要的用户屏幕。没有课表,没有教学类仪表盘, 也没有信息显示屏。参见 [人员调度概览](#page-staffing.overview)。 #### 按合同开通的功能 | 功能 | 说明 | 开通方式 | | --- | --- | --- | | 自定义角色 | 带细粒度权限矩阵的自定义角色。 | 按账户合同 | | 排课范围 | 授予管理员的数据范围及相应权限,用于把某个单位、专业或学校的排课工作委派出去。 | Premium账户,按账户合同 | | 备份点 | 备份点、摘要、恢复和轮换,配额由Omniscol按合同开通。 | 按账户合同 | | 协作 | 管理员之间的协作,按配置显示实时在线状态。 | 按账户合同 | | 活动日志 | 查看日志的屏幕,保留时长由Omniscol按合同开通。 | 按账户合同 | | 关联账户 | 把多个Omniscol账户关联起来,在各自拥有独立Omniscol子域名的学校之间共享教室、教师或班级的占用情况。 | 经申请,在确定方案后开通 | | Standard账户上的多份课表同时发布 | 适用于确实相互独立的学校账户的特例(例如独立的初高中,或小学、初中、高中一体的学校)。 | 特别开通,按方案与计费另行约定 | | 在课表中直接将学生分配到班级和小组 | 通常,学校排课时并没有学生的确切名单和分配情况,因此按预计的理论学生人数来处理班级和小组,并说明组织上的逻辑;课表完成后,再(视情况)把学生事后分配到班级和小组。不过也有另一种情况,在培训机构中很常见:设计课表时就需要每个班级、每个小组的确切学生名单;小组之间互不冲突的逻辑(互斥)由Omniscol自动推导。这会改变数据模型和工作方式,因此只能由Omniscol团队按选项开通。 | 经申请,评估具体的排课方式后开通 | | 人员调度 | 监督和看管(考试、值班)的管理模块。也可单独销售。 | 单独销售、通过Standard Plus,或按合同 | | 附加模块 | 其他可能的附加模块。 | 视模块和合同而定 | #### 重要功能说明 ##### 日历模式 可以**按具体日期**而不是按标准周来安排课时。这是**Premium内置的功能**, 对高等教育、继续教育和培训中心必不可少。参见 [日历模式](#page-glossary.calendar-mode)。 ##### 教学小组组合 把多个小组(来自同一个班级或不同班级)合并为一个可整体安排的实体。 **所有账户都可使用,与套餐无关**,且适用于所有类型的课表 (周课表、周期课表、日历课表),无需特别开通。参见 [教学小组组合](#page-core-concepts.groups-of-groups)。 ##### 多份课表同时发布 在相同的周次上同时发布多份课表,并动态合并。这是Premium内置的功能。 当需求和计费都合理时,Omniscol也可以在个别Standard账户或 混合型学校账户上作为特例开通。参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)。 ##### 关联账户 把多个Omniscol账户关联起来,共享公共资源的占用情况: 视情况包括教师、教室、教学楼或班级。需要由Omniscol应申请开通, 因为必须先确定相互关联的账户和共享的资源。参见 [关联账户与共享资源](#page-integrations.linked-accounts)。 ##### 自定义角色 精细限制管理员账户的权限:按模块设置,可选择操作(查看 / 修改 / 删除), 也可以一键关闭整个模块。参见 [自定义角色](#page-admin.customroles)。 ##### 排课范围 为管理员指定一个数据范围(单位、科目、课表、校区、教室、班级、小组) 以及他在其中拥有的权限。每位排课员处理自己负责的部分, 不会触及他人的部分,但仍可查看全部内容。参见 [范围](#page-admin.planning-domains)。 ##### 备份点 保存账户在某一时刻的状态,之后可以恢复。 在有风险的操作之前尤其有用(大规模重构、大批量导入、开学前)。参见 [备份点](#page-admin.snapshots)。 ##### 实时协作 启用该选项后,多位管理员可以同时处理同一个账户,并显示在线状态。参见 [管理员协作](#page-core-concepts.collaboration)。 ##### MCP **MCP**可以连接兼容的AI智能体,例如Claude(推荐), 并通过OAuth2识别账户身份。参见[MCP](#page-integrations.mcp)。 ##### 活动日志 Omniscol启用该选项后,活动日志屏幕可以查看和导出Omniscol记录的日志条目。 不要把它说成包含前后差异对比或请求重放的完整审计。参见 [活动日志](#page-admin.logs)。 ##### ERP同步 与外部系统的同步属于按合同开通的功能,通常用于Premium账户, 且需要已配置连接器。目前已有Aurion、Auriga和Edusign连接器; 新增ERP按项目处理,需要有文档的API、 沙盒环境,并确定字段映射。参见 [与外部系统同步](#page-integrations.extsync)。 ##### 独立的人员调度 人员调度模块可以单独提供,包括独立销售 (不含Omniscol的其他部分)。参见 [人员调度概览](#page-staffing.overview)。 #### 如何查看当前启用的套餐和选项 在设置中查看,位于面板底部的栏目, 会显示当前套餐和已订阅的选项。套餐和选项 决定了左侧菜单中有哪些模块可用。 #### 另请参阅 - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [关联账户与共享资源](#page-integrations.linked-accounts) - [日历模式](#page-timetables.calendar-mode) - [自定义角色](#page-admin.customroles) - [范围](#page-admin.planning-domains) - [备份点](#page-admin.snapshots) - [管理员协作](#page-core-concepts.collaboration) - [MCP——连接外部AI智能体](#page-integrations.mcp) ### 1.6 选择合适的课表类型:周课表、周期课表、日历课表 *Source: `help/zh-cn/overview/timetable-modes.md` · id: overview.timetable-modes · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ 在Premium账户中,创建课表时可以在三种课表类型中选择。 根本的区别在于**重复**(周课表和周期课表:一个模式重复出现) 与**不重复**(日历课表:每个课时单独指定日期)。这个选择决定了后续的做法, 因此在创建课表之前理解它很重要。 三种类型都可以使用由生成算法完成的**自动生成**; 每种类型各自的优点和限制见下文。 #### 一句话说明 | 类型 | 是否重复 | 适用场景 | | --- | --- | --- | | **[周课表](#page-glossary.weekly-timetable)** | 重复(标准周) | 按**标准周**重复的课时。小学 / 中学。 | | **[周期课表](#page-glossary.cyclic-timetable)** | 重复(N天为一个周期) | 按**N天为一个周期**重复的课时(与5天或7天的一周不同)。北美体系、国际学校。 | | **[日历模式](#page-glossary.calendar-mode)** | 不重复 | **逐个指定日期**的课时,没有重复。高等教育、继续教育。 | #### 周课表——标准情形 这是默认模式。适合所有课时按**重复的标准周**进行的学校, 无论是否有A/B周交替。 优点: - 逻辑简单:先录入一个标准周, 再选择它适用的周次。 - 自动去除假期。 限制: - 不适用于每周都不同的学校 (一次性课时、轮流授课的外聘教师)。 - 只发生一次的课时(讲座、 定在具体日期的考试)需要作为临时调整添加, 或放在另一份课表中。 #### 周期课表——适用于非按周的周期 周期课表适合按**N天为一个周期**(通常为6天或8天)组织课时的学校, 这个周期不同于5天或7天的一周—— 在北美体系和部分国际学校中很常见。 其运作方式与周课表接近,由N个编号的天(第1天、第2天……)组成一个周期。 周期与星期几的对应关系,是根据**课表的发布**动态建立的, 也就是在选择周期适用的周次时确定。 #### 日历课表——适用于高等教育和继续教育 日历模式与前两种明显不同:每个课时都安排在**一个确定的日期**, 没有重复。 它是以下场景的首选模式: - 高等教育(商学院、工程学院、 大学), - 继续教育, - 课时不会每周重复出现的培训中心。 与普通日程或ERP / 学校管理软件相比, 您可以享受到高等教育特有的功能 (详见[日历模式](#page-timetables.calendar-mode)): - **非常完善的录入辅助**——实时冲突、 教室筛选、汇总的可用时间…… - **实时汇总可用时间**——教师可用时间的变化, 会立即反映为潜在冲突或确实存在的冲突。 - **二选一的发布**——课表要么发布要么不发布, 不能只发布部分周次。 当前的限制是**半重复**:有些学校的各周大体相似, 但夹杂着不规则情况(有的课程比其他课程提前结束、 法定假日、临时外聘教师……)。 有按钮可以按重复模式**手动复制** 课时,但生成算法暂不支持这种情况; 对于没有底层重复模式的日历课表,或者相反, 对于完全重复的课表(周课表),自动生成仍然完全可用。 **部分生成**——自动生成可以通过选项面板 限制在部分范围内。 共有三个筛选条件: - **班级**:选择要生成的班级。 - **科目**:选择要生成的科目。 - **日期范围**:日历模式专有。可以一次处理 一个时间段(例如下一个学期)。 这在日历模式下尤其有用:您可以**逐步迭代**地构建课表—— 先一个学期,再下一个学期;先一个专业,再其他专业,依此类推。 #### 选择模式:速查指南 ```mermaid flowchart TD Q1{{"您的课时是否遵循
重复的模式?"}} Q2{{"这个模式是否是一周
(5到7天)?"}} H([周课表]) Cy([周期课表]) Ca([日历课表]) Q1 -->|是| Q2 Q1 -->|否| Ca Q2 -->|是| H Q2 -->|否| Cy ``` #### 将课表转换为另一种类型 如果您想把现有课表从一种类型转为另一种, 可以通过课表列表中的 复制操作, 在课表管理模块中**复制并转换**。 支持全部六种转换:周课表 ↔ 周期课表, 周课表 ↔ 日历课表,周期课表 ↔ 日历课表。 根据目标类型,还需要填写一个额外的参数: - **日历课表**:用于铺开课时的日期范围(开始 / 结束)。 窗口默认给出学年的第一周和最后一周。 - **周期课表**:周期的长度,以天计(默认12)。 - **周课表**:无需额外参数。 转换过程中会重新映射的内容: - **课时的位置**——每个位置都从原系统转换到目标系统 (星期几 ↔ 周期编号 ↔ 日期)。 - **周课表 → 日历课表**:每个课时会在目标范围内所有对应的日期上展开, **科目的授课小时数**会乘以周数, 以保持总量不变。**A/B周交替** 会自动应用到每个生成的日期上。 - **可用时间**:仅当源课表是**周课表**时才会保留并迁移。 源课表为周期课表或日历课表时会将其删除—— 带日期或按周期编号设置的可用时间,无法恰当地 还原到标准周或另一个周期上。 结果是一份**独立的课表**,与原课表互不影响—— 您可以单独修改,单独发布, 也可以与原版本同时发布。 #### 组合使用多种模式 您可以在相同的周次上**同时发布多份不同类型的课表**。 典型情形: - **重复的主干课程 + 一次性活动**:一份 周课表用于常规课时,加一份 [日历模式](#page-timetables.calendar-mode)的课表,用于大师班、 讲座或有具体日期的考试。 - **同一些班级采用不同节奏**:上午用周课表 (非常规律的基础科目),下午用 日历课表(体育、社团、每周都不同的工作坊)。 - **不同班级运作方式不同**:一个周课表的预科班, 对比一个不重复的本科培养阶段,后者有大量外聘教师, 连续多天为同一批学生讲授同一门课程。 如果多份已发布的课表共用同一位教师或同一间教室,Omniscol会在查看端 **动态合并视图**。在另一份课表已发布的情况下编辑某份课表时, Omniscol默认会考虑该已发布课表对教师、教室和班级的占用 (此功能可以关闭)。 #### 另请参阅 - [周课表](#page-glossary.weekly-timetable) - [周期课表](#page-glossary.cyclic-timetable) - [日历模式](#page-glossary.calendar-mode) - [课表管理模块概览](#page-timetables.overview) - [同时发布多份课表](#page-timetables.multiple-active-timetables) ### 1.7 首次登录 *Source: `help/zh-cn/getting-started/first-login.md` · id: getting-started.first-login · Updated: 2026-05-10* 要登录Omniscol,请访问您学校的网址——通常形如 `https://<您学校的名称>.omniscol.com`。登录页面会要求您输入用户名和密码。 #### 登录凭据 您的登录凭据由学校提供。默认格式为 `名.姓` 或 `姓.名`(取决于学校在 [常规设置](#page-admin.parameters)中的配置),也可能是纯数字的学号或工号。 #### 忘记密码 点击 忘记密码?,输入您的登录用户名。如果系统中已填写邮箱地址,您将收到一封重置链接邮件,请按提示操作。 如果没有收到邮件: - 检查输入的用户名是否与Omniscol中设定的一致(如有疑问,请联系学校的管理员), - 查看垃圾邮件文件夹, - 确认学校已在您账户的用户详情中填写了您的邮箱。 #### 首次登录 如果是首次登录,系统可能会立即要求您**修改密码**。请选择一个高强度且唯一的密码(Omniscol无法找回您的密码——它在传输之前就已被转换为不可读的形式)。 #### 通过身份提供方登录 如果贵校使用 [OIDC / SSO](#page-integrations.oauth2)(Google Workspace、Azure AD/Microsoft Entra、Keycloak、学校内部的SSO提供方),登录页面上会出现专用按钮。点击后通过您常用的身份服务完成认证即可。 如果您在工作过程中会话结束,重新登录窗口也会提供这个按钮:它会在一个小窗口中打开您的身份服务,页面保持原样,您尚未保存的内容也不会丢失。 #### 第二身份验证因素 (MFA) 如果学校对您的角色有此要求,输入密码或通过SSO登录之后,还有第二步:通行密钥、身份验证应用的验证码,或电子邮件验证码。首次登录时,您需要注册其中一种。参见 [第二身份验证因素](#page-admin.second-factor)。 #### 按用户类别限制登录 管理员可以**禁止**某些用户类别登录(例如在学年中途停用学生登录,或停用某位教师的账户)。如果您的账户受到限制,您会看到相应的提示信息。 参见 应用登录限制。 #### 另请参阅 - [配置学校账户](#page-getting-started.setup-school) - [邀请并激活用户](#page-getting-started.inviting-users) - [OIDC / SSO](#page-integrations.oauth2) - [第二身份验证因素](#page-admin.second-factor) ### 1.8 配置学校账户 *Source: `help/zh-cn/getting-started/setup-school.md` · id: getting-started.setup-school · Audience: admin · Updated: 2026-05-10* 创建Omniscol账户后,首页会一步一步地引导您。请按建议的顺序操作:这是最顺畅的路径。本页按 管理 菜单中**从右到左**的顺序梳理整个流程(越不常用的入口越靠右)。 #### 第1步——设置 设置模块包含账户的全部配置。许多值会根据您学校所在的**国家**,参照Omniscol观察到的当地习惯预先填好——通常只需做少量调整。 请优先检查: - 学校名——显示在登录页面上。 - **年级**(6年级、7年级、本科一年级、硕士二年级……)——全系统以此为基准,请按您学校的命名习惯调整。 - **教师可用时间的录入模式**——按周、日历(Premium账户)、日历 + 按周(Premium账户),或停用。 - **限制学生查看课表**——学生可以提前多少周查看自己的课表(适用于推迟发布尚未定稿的课表)。 - **登录标识**——自动生成登录名的格式(`名.姓`、`姓.名`、工号……)。 - 一周的第一天——对于一周从周日开始的国家(阿拉伯国家、以色列)很重要。 - 交替周(适用于周课表)——A/B、1/2(即以字母或数字显示),或停用。 - **学校标志**——在登录页面和顶部栏中取代Omniscol的标志。 详情请参见 [常规设置](#page-admin.parameters)。 #### 第2步——学年 发布课表之前,您必须在 学年 中至少声明**一个学年**。 需要填写: - **名称**——按惯例使用起止年份:“2025-2026”。 - **开始和结束日期**。 - **假期**——可以从表格复制粘贴,也可以导入为您所在国家预设的日期(创建时会提供),或手动录入。 - **当前学年**——指定当前使用的学年。默认显示的是它,也只有它会被发布。 参见 [学年与假期](#page-admin.school-year)。 #### 第3步——科目 如果Omniscol已为您所在国家预置了一套**通用科目库**,您可能无需再做任何操作。否则,或者对于本校特有的科目: - 在 创建 中创建**自定义科目**。 - 如果您的教学体系用到不同的课时类型(例如讲授课、工作坊、考试、讲座),请在 创建 中定义**课时类型**。 - 可选:配置**科目分组**,把相近的科目归在一起。 ⚠ 请**注意自定义科目的拼写**:Omniscol在把科目分配到课表时会在内部保存一份副本,事后更正不会同步到过去已配置好的课表中(只会影响当前、未来和未发布的课表)。 #### 第4步——用户 教师、学生和管理员都在这里创建。详情请参见 [邀请并激活用户](#page-getting-started.inviting-users)。 完成这一步后,您就可以创建第一份课表了。接下来请按 [课表管理模块概览](#page-timetables.overview) 操作。 #### 另请参阅 - [常规设置](#page-admin.parameters) - [学年与假期](#page-admin.school-year) - [科目管理](#page-admin.subjects) - [邀请并激活用户](#page-getting-started.inviting-users) - [为批量导入准备数据](#page-getting-started.preparing-data) ### 1.9 邀请并激活用户 *Source: `help/zh-cn/getting-started/inviting-users.md` · id: getting-started.inviting-users · Audience: admin · Updated: 2026-08-07* 学校端有四种用户角色:**管理员**、**教师**、**学生** 和 **员工**。不同角色可访问的范围各不相同。 #### 哪个角色用哪个界面 | 角色 | 界面 | 是否必需? | | --- | --- | --- | | 管理员 | 管理员 | 至少要有主管理员。 | | 教师 | 教师 | 必不可少,这样才能为教师创建并发布课时。 | | 学生 | 学生 | 可选:Omniscol在不录入学生、也不向其开放查询门户的情况下同样可以运行。 | | 员工 | 员工 | 仅在使用人员调度模块时才需要。 | 各角色权限的详细说明及其技术对应关系,见 [用户与角色](#page-admin.users-and-roles)。 #### 逐个创建或批量创建 **逐个创建**:在相应角色的界面中点击 添加 按钮。打开单个用户的表单,填写其基本信息。 **批量创建**:在相应角色的界面中点击 导入数据 按钮。您可以在表格中一次创建或修改多行数据,数据来自事先在Excel、Google Sheets、Numbers或Calc中准备好的文件。参见 [为批量导入准备数据](#page-getting-started.preparing-data)。 #### 激活用户 处于激活状态的用户可以登录,会出现在与其相关的界面中,并可被分配任务。 若要在不删除用户的前提下将其停用,请使用其详情或批量操作。停用的账户无法再登录,也不能再被分配到新的课表中,但其历史记录仍可查看。 #### 通过邮件邀请 对选中的用户点击 邀请用户 按钮,系统会向每位收件人发送一封带有首次登录链接的邮件。请先确认已填写邮箱地址,否则无法发送邀请。 #### 设置初始密码 如果邮件邀请不适用,您可以使用 更改密码 手动设置密码。建议仅用于试点账户、服务账户,或由学校自行负责分发登录凭据的情形。以这种方式手动设置的密码(可借助随机生成按钮)实际上是临时密码:用户首次登录时需要输入新的个人密码。 #### 将学生分配到班级和小组 分配在学生界面中进行: 1. 在学生界面中,选择相关学生。 2. 点击 分配班级。 3. 选择学年、班级,必要时选择日期。 4. 使用 小组 分配小组(外语、选修课、实验课、半班)。 分配可以分批进行,例如按年级或随着注册情况逐步完成。 另有一个选项,可以让学生直接在课表中、事先分配到班级和小组,而不是事后在管理模块中分配。如果您对这种工作方式感兴趣,请联系Omniscol团队。 > _Option: 自定义角色_ #### 自定义角色 **自定义角色**选项可以逐个模块、逐项操作地限制管理员账户的权限。参见 [自定义角色](#page-admin.customroles)。 它还会开启[范围](#page-admin.planning-domains),用于限定交给排课员的数据范围——其单位、其专业方向、其课表。 #### 操作步骤 — 开学时的用户上手流程 1. 准备用户文件或表格:管理员、教师、学生,必要时还有员工。 2. 在管理模块的各界面中导入或创建账户。 3. 检查邮箱、用户名和角色。 4. 使用 邀请用户 发送邀请。 5. 在学年的第一份课表发布之后,将学生分配到各自的班级和小组。 6. 学年结束时,停用不应再登录的账户,而不要立即删除其历史记录。 #### 另请参阅 - [配置学校账户](#page-getting-started.setup-school) - [为批量导入准备数据](#page-getting-started.preparing-data) - [用户与角色](#page-admin.users-and-roles) - [教师管理](#page-admin.teachers) - [学生管理](#page-admin.students) ### 1.10 为批量导入准备数据(成批导入) *Source: `help/zh-cn/getting-started/preparing-data.md` · id: getting-started.preparing-data · Audience: admin · Updated: 2026-06-03* 手动录入几百甚至上千行数据(教师、学生、教室、课程……)很少是明智之举。Omniscol支持**批量导入**:从任意电子表格(Excel、Google Sheets、Numbers、Calc……)复制数据后直接粘贴,格式为CSV或TSV。点击各实体列表顶部的 [table] 按钮即可进行导入。少数列表只能导出数据,但大多数都支持导入。 #### 可以导入哪些数据? | 实体 | 界面 | 常见数据量 | | --- | --- | --- | | **教师** | 以CSV格式导出数据 | 10 - 1000 | | **学生** | 以CSV格式导出数据 | 50 - 10 000 | | **教室** | 以CSV格式导出数据 | 10 - 500 | | **自定义科目** | 以CSV格式导出数据 | 10 - 1000 | | **课表中的课时** | 以CSV格式导出数据 | 100 - 10 000 | #### 准备文件 **基本规则**: 1. **一行对应一个实体。** 不要合并单元格,不要使用多行表头。 2. **遵循Omniscol要求的列顺序。** 导入界面会按目标顺序显示模板列,您也可以在Omniscol中**重新排列这些列**,使其与源表格的顺序一致——这样从Excel或Google Sheets复制粘贴时就很顺畅,无需改写原文件。 3. **部分列为只读。** 这些列显示为灰色,仅用于导出数据。第一列通常是该数据已保存在数据库中的标识符。 4. **标有“*”的列为必填。** 如果缺少必填字段,该行将被忽略(新建时不导入;若该数据已存在于数据库中,则会被删除)。 5. **列表型单元格中的内部分隔符不受限制**(一门课程的多位教师、多个小组、多间教室):逗号、分号、斜杠均可。 6. **内置AI会清理数据**,但能力有限:请尽量提供干净、无歧义的数据,否则可能出现意料之外的结果。 #### 各实体的常用字段 ##### 教师 - 名字、姓氏(必填)。 - 电子邮件(建议填写,用于发送邀请)。 - 工号 / 外部ID(选填,便于追溯)。 - 任教科目(列表,分隔符不受限制)。 - 服务时间(每周计划授课小时数)。 - 主校区(如有多个校区)。 ##### 学生 - 名字、姓氏(必填)。 - 电子邮件(建议填写)。 - 学号(来自学生信息系统,有助于避免重名混淆)。 - 年级 / 班级。 - 小组(选修课、子小组)。 - 状态(在读、预注册、停用)。 ##### 教室 - 名称(必填)。 - 校区(多校区时必填;否则Omniscol归入默认校区)。 - 容量。 - 专业教室类型(列表)。 - 教学楼(自由填写)。 - 标签 / 评论。 ##### 课表中的课时 - 班级 + 科目(至少需要这两项)。 - 时长(缺省时由开始和结束时间推算)。 - 星期、开始时间、结束时间(用于预先排定位置;也可留空,之后再排)。 - 小组(选填)。 - 课时类型(习题课、实验课、讲授课、考试……)。 - 教师(分隔符不受限制)。 - 教室(分隔符不受限制——是的,同一课时支持[多教室(一个课时占用多间教室)](#page-glossary.multi-room))。 - 资源。 - 交替周(格式为 `A/B`、`1/2` 等)。 - 评论(自由文本)。 #### 准备完成之后 导入流程取决于目标界面。通常,导入后界面会整体刷新并显示新数据。 要导入**课表中的课时**,请参见 [通过表格批量导入课程](#page-timetables.mass-import),其中介绍了分四步完成的专用向导。 #### 导出 同一套内置表格功能也可用于提取数据。有以下几种方式: - 复制粘贴到外部电子表格(自动采用TSV格式)。 - 使用底部的按钮,直接导出为PDF、CSV或Excel(XLSX)文件。 #### 再次导入 导入并不局限于首次导入。您可以分多次进行批量导入。第一列名为“id”,是每个实体在数据库中的只读标识符,也可以在网址(URL)中找到。如果修改了与某个标识符对应的行,该实体的数据就会随之更新。 要新增数据,请滚动到表格最底部:那里总有几行没有标识符的空行。像首次导入一样粘贴新数据,表格会相应地扩展。 再次导入的实体可能包含不支持导入/导出的复杂数据(有时会有一个只读列,仅用于导出这些数据),例如教师和教室的可用时间,或班级的时间限制。这时,这些数据会被原样自动回填。 因此,借助这套机制,您可以分多次批量导入,既不会丢失现有实体上已补充的数据,又能新建或删除其他实体。 #### 批量删除 如“再次导入”一节所述,第一列“id”用于识别各个实体。如果清空一行——至少清空标有“*”的必填列——导入时就会删除这些被清空的实体。由于可以像在标准电子表格中那样选择多行多列,只需按键盘上的删除键,就能清除任意多行,从而批量删除数据库中对应的实体。 #### 另请参阅 - [导入与导出](#page-admin.import-export) - [第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import) - [从其他软件迁移——概览](#page-migration.overview) ### 1.11 上手引导(主页模块的6个步骤) *Source: `help/zh-cn/getting-started/onboarding-tour.md` · id: getting-started.onboarding-tour · Audience: admin · Updated: 2026-05-10* 首次登录一个全新账户时,**主页**模块会为您显示一份**六步清单**——某一步的前置条件满足后会自动打勾(绿色 ✓),在尚未录入任何数据时则标为阻断状态(红色 ✗)。 这些步骤的顺序合乎逻辑,强烈建议按顺序进行,但您也可以随时跳过某一步,稍后再回来处理。迟早会有某项数据缺失,迫使您回头补充。 本帮助页面逐步详细介绍同一流程;页面末尾另有一个**可点击的引导**对其做了回顾。 #### 总览——欢迎信息 > 欢迎使用Omniscol在线课表生成与管理软件!在您第一次登录或者是还未创建课表时,您将会看到此信息。请跟随以下步骤开始软件使用。推荐您按顺序操作,当然您可以随时退回到之前的操作。 > **使用提示**:您的**第一份课表发布**之后,主页模块会自动隐藏。在它可见期间,它就是您的指南针。如有需要,发布之后可通过 > 重新显示 链接再次显示它: > > > 您的账户已配置完成并可正常使用。不过,您仍可重新显示配置步骤。 #### 第1步——填写参数 > 请设置您的账号,包括年级。 **操作**:请填写参数 参见 [常规设置](#page-admin.parameters)。建议优先调整:班级年级、可用时间模式、每周的第一天(适用于以周日为一周起点的国家)、用户名格式。其余大部分取值已按您所在国家预先填好。 #### 第2步——创建第一个学年 > 学年是指从开始日期到结束日期的一段时间,包括假期,在此期间课表将被发布。没有学年,任何课表都无法发布:课时也就不会进入日常使用模块。 **操作**:创建第一个学年 参见 [学年与假期](#page-admin.school-year)。为其命名(如“2025-2026”),设置开始和结束日期,如果系统提供您所在国家预设的假期,请将其导入。 完成这一步才能在课表管理模块中发布课表。 #### 第3步——创建自定义科目(可选) > 请定义尚未收录在我们默认科目数据库中的特定教学科目。此步骤是可选的。 **操作**:创建自定义科目 参见 [科目管理](#page-admin.subjects)。各国通用科目库已预先填好;此处只需创建不在科目库中、**贵校特有的**科目。 #### 第4步——录入用户 > 首先添加所有用户:教师和学生。添加学生是可选的,稍后您可以在创建课表时仅指定每个班级和小组的学生数量。您也可以稍后再添加用户,然后为他们分配班级和小组。 > 提示:您可以点击图标,从Excel等电子表格中复制粘贴,批量录入数据。 **操作**: - 输入教师 *(必需——在创建任何教师之前一直显示红色标记)* - 输入学生 *(可选——没有红色标记,未填写时只显示一个圆圈)* 详细说明(逐个创建与批量导入、邮件邀请、初始密码、批量操作)参见 [邀请并激活用户](#page-getting-started.inviting-users)。 #### 第5步——创建(并配置)课表 第5步根据账户状态分为两种情况: ##### 5a——尚未创建任何课表时 > 请创建一个新课表。我们建议您按步骤进行,从左到右依次填写每个选项卡。最后,请点击生成按钮。 **操作**:创建一个课表 在[课表管理](#page-timetables.overview)模块中点击 创建课表。如果您的账户提供多种模式,请选择课表类型,参见[选择合适的课表类型:周课表、周期课表、日历课表](#page-overview.timetable-modes)。 ##### 5b——课表已创建、正在配置时 > 有一个课表正在配置中,但尚未生成。我们建议您从左到右依次填写每个选项卡,逐步完成配置。最后,请点击生成按钮。 **操作**:恢复课表配置 请按课表的标签页**从左到右**依次进行: [第1步——常规设置](#page-timetables.general-settings) → [第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms) → [第3步——分配教师](#page-timetables.assigning-teachers) → [第4步——创建班级及其小组](#page-timetables.creating-classes) → [第5步——对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) → [第6步——分配课时数并创建课时](#page-timetables.hour-distribution) → [第7步——自动生成](#page-timetables.generation)。 #### 第6步——发布课表 > 课表完成全部配置并生成后,需要将其发布到学年的全部或部分周。请在课表管理界面中点击发布按钮。在该界面中,您还可以找到正在配置或已生成的课表。 **操作**:管理课表 参见[第8步——发布课表](#page-timetables.publication)。这是经常被遗忘的一步:只要课表还没有在学年的相应周发布,它就只是草稿,是对最终用户不可见的沙盒。发布会让课表正式投入使用:其中的课时随后会进入所有其他模块,并同步到应用外部的实时导出,例如iCal、已连接的外部软件等。 #### 后续工作 当清单全部变绿,课表已完整配置并发布之后: - **为学生分配**班级 / 小组(参见 [邀请并激活用户](#page-getting-started.inviting-users))。 - 通过邮件**邀请用户** (邀请用户)。 - 在校内**配置信息显示屏**(参见 [为大厅或走廊配置信息显示屏](#page-panels.lobby-panel))。 - **为教师和学生设置iCal订阅**(参见 [iCal——订阅与动态链接](#page-integrations.ical))。 - 用测试账户**测试学生访问**。 - 如适用,**配置集成**(学校管理系统、ERP等)(参见 [集成概览](#page-integrations.overview))。 #### 另请参阅 - [五分钟上手引导](#page-overview.quick-tour) - [首次登录](#page-getting-started.first-login) - [配置学校账户](#page-getting-started.setup-school) - [邀请并激活用户](#page-getting-started.inviting-users) - [课表管理模块概览](#page-timetables.overview) - [发布课表](#page-timetables.publication) --- ## 2. 核心概念 ### 2.1 数据组织:科目、教师、班级、课表 *Source: `help/zh-cn/core-concepts/data-model.md` · id: core-concepts.data-model · Audience: admin · Updated: 2026-06-13* Omniscol区分两个组织层级:一是由管理模块承载的**学校基础数据**(科目、用户、学年等),它长期描述您的学校;二是**课表**,它从基础数据中取用部分元素,在特定时期内构建一份连贯的安排。理解这种二元结构,是从容应对各种变更(重命名科目、调整教师、归档课表)而不破坏历史记录的关键。 #### 总览:两个层级,两套逻辑 ```mermaid flowchart LR subgraph A["学校层级 — 管理模块"] AS["科目"] AU["教师用户"] end subgraph E["课表层级 — 排课"] C["班级"] G["小组
(可选)"] M["课程
= 班级的科目
(本地副本,含类型)"] T["课表中的教师
部分副本"] S["课时
时长、班级、可选小组、
教师、教室、位置"] end AS -.->|作为模板| M AU -.->|作为模板| T C -->|包含| G C -->|分配的科目| M T -->|分配的教师| M M -->|所授科目| S C -->|所属班级| S G -.->|可选小组| S T -->|课时的教师| S ``` **学校层级**:一套全局的、长期有效的基础数据,在管理模块中管理。它包含与具体课表无关、对学校始终成立的内容——学年日历、科目目录(全国通用科目加学校自定义科目),以及用户名录(含角色)。 **课表层级**:某一时期内连贯的排课安排。每份课表都有自己的教师、班级、小组、挂在班级下的科目以及课时的列表。这些对象并不是对学校基础数据的简单引用,而是**本地副本**,可以在不修改基础数据的情况下进一步补充信息。反过来,学校层级的基础数据也可以变化(删除科目、教师),而不会破坏过去的课表。 下文逐一详述各类关联。 #### 学年:时间框架 **学年**定义了一个 `开始日期 → 结束日期` 的范围以及假期列表(参见[学年](#page-core-concepts.school-year))。它并不直接“包含”课表:课表是**铺展**在属于某个学年的若干周(周课表 / 周期课表模式)或若干日期(日历课表模式)之上的。 这使得多种配置成为可能: - **每个学年一份课表**(标准情形):课表覆盖学年中所有工作周。 - **同一学年内先后多份课表**:例如每个教学阶段一份,在切换日期接力。 - **同一时期并行多份课表**(Premium功能已包含;部分Standard账户在合适的合同框架下可以启用),例如: - 一份用于重复出现的公共基础课的课表 - 一份用于大师课的日历课表,查看时合并显示。 参见[同时发布多份课表](#page-timetables.multiple-active-timetables)。 因此,学年始终是一个框架,而不是容器。修改它的起止日期或假期,会更新与之关联的课表所使用的日历,但不会改变课表的内容。 #### 科目:从学校目录到班级的课时 ```mermaid flowchart TD CatM["科目目录
例:数学"] CatT["课时类型
例:讲授课、习题课、实验课"] Classe["课表中的班级
例:9年级1班"] Prof["课表中的教师
例:王老师"] MC["班级科目 (= 课程)
数学 [习题课]
小时数、教师、
约束、专业教室"] S["课时
时长、日期/时段、
可选小组、教室、
教师"] CatM -->|选定科目| MC CatT -->|可选类型| MC Classe -->|所属班级| MC Prof -->|分配的教师| MC MC -->|用于创建| S Prof -->|可在课时上调整| S ``` ##### 第一级——管理模块中的目录 在学校层级,有两种来源并存: - **通用科目**:Omniscol为所配置国家提供的基础数据(官方代码、规范名称)。该目录对学校是只读的。 - **已创建科目**:学校自己创建的科目,在[科目管理(官方科目与自定义科目)](#page-admin.subjects)页面中管理。每个自定义科目有名称、代码(简短),还可以选填:简称、专属颜色、上级科目、科目族。 这个目录并不说明哪些班级教授这些科目——它只说明这些科目存在。 科目族既可以来自按国家共享的只读基础数据,也可以来自学校本地的自定义基础数据。 ##### 第二级——分配给班级(含或不含类型) 在课表中**把一个科目分配给班级**时,系统会在该班级内创建该科目的一份**本地副本**,并补充排课专用的字段(目标小时数、教学比重、不兼容、默认教师、教室专业类型……)。 如果分配科目时**带有课时类型**(`讲授课`、`习题课`、`实验课`、`考试`——参见[课时类型](#page-admin.lesson-types)),每种类型都会在班级中创建一个**独立的条目**: | 班级中的科目 | 来源 | 类型 | | --- | --- | --- | | 数学 | 数学 | 无 | | 数学 [讲授课] | 数学 | 讲授课 | | 数学 [习题课] | 数学 | 习题课 | 这是有意设计的:每个变体(数学讲授课、数学习题课)都是独立的本地副本,拥有各自的小时数、教师和不兼容。与目录的关联并非强依赖:只要该科目仍存在于目录中,本地副本就会保留其来源。如果该科目从目录中被删除,各课表中的本地副本仍然有效。 ##### 第三级——从课程参数到课时 在Omniscol中,通常所说的[课程](#page-glossary.course),一般是指分配给某个班级的科目,可选地带有课时类型(讲授课、习题课、实验课……),再补充排课信息:小时数、教师、小组、排布约束、教室或资源。 这一定义说明了需要安排什么。**课时**则是真正落在课表上的具体实例,对应某一周或某一天。 例如:班级科目**数学 [习题课]**可以定义小时数、教师、小组、排布约束和教室偏好,随后课时便根据这一定义创建。参见[课程、课时、课时类型](#page-core-concepts.lessons-and-types)。 #### 教师:学校基础数据 → 课表中补充信息的副本 ```mermaid flowchart LR U["用户(管理模块)
角色teacher
姓名 · 登录名 · 邮箱 · 全局可用时间"] Aff{分配到课表} T["课表中的教师
姓名(复制)· idnumber
服务时间(复制,可覆盖)
课表专属可用时间 · 首选教室"] Se["已分配的课时"] U --> Aff Aff -->|补充信息的部分副本| T T --> Se ``` ##### 学校层级的教师 在学校层级,教师是拥有 `teacher` 角色的**用户**(同一用户可以兼有多个角色——参见[用户与角色](#page-admin.users-and-roles))。教师在[教师管理](#page-admin.teachers)页面中管理,保存着长期有效的标识信息:姓名、登录名、邮箱、编号,以及他的**全局可用时间**(重复性的)和参考服务时间。 ##### 分配到课表的教师 将该教师分配到某份课表时,Omniscol会在课表中创建一份**补充信息的部分副本**。副本只取基础数据中的部分字段,并加上排课专用字段: | 字段 | 学校层级(基础数据) | 课表层级(副本) | | --- | --- | --- | | 标识符 | 用户的标识符 | 相同(隐式关联) | | 姓名、中间名 | 来源 | 分配时复制 | | 编号 | 来源 | 分配时复制 | | 邮箱、电话、登录名 | 来源 | **不复制**(仅保留在管理模块中) | | 参考服务时间 | 来源 | 复制,**可按课表覆盖** | | 首选教室 | 基础数据中不管理 | 课表专属 | | 可用时间 | 用户的“全局可用时间” | 重复模式:经审核或放宽的本地副本;日历模式:共享来源,可在管理模块或相关课表中查看和修改 | 这种二元结构很重要:**同一位教师**在不同的排课范围内可以有**不同的服务时间**,或在某个时期有**不同的首选教室**(例如因临时残疾)。 对于可用时间,处理逻辑取决于排课模式: - 重复模式下,教师填写的可用时间需经过管理部门的审核。可以在课表中进行本地调整,例如把严格的不可用改为不希望安排的时段; - 日历模式下,教师的可用时间被视为唯一的数据来源,对外聘教师尤其如此。可以在用户详情中,或在该教师所分配的任何日历课表中查看和修改。 两种情形下,某些参数都仍然属于课表专属,可以在本地补充这些可用时间。 ##### 虚拟教师 还有一种变体:可以在课表中创建**虚拟教师**——一个待招聘的岗位,背后没有真实用户(“未来的数学教师”)。他在学校层级没有对应项。招聘到人之后,您可以用一位真实的教师用户替换这位虚拟教师(参见[第3步——分配教师](#page-timetables.assigning-teachers))。 #### 本地副本原则小结 班级中的科目和课表中的教师遵循同样的逻辑:**分配时创建一份本地副本**,由这份本地副本承载课表专属的字段。 这样设计的原因: - **时间上的独立性。** 去年已结束的课表,不应因为今年重命名了某个科目或教师而改变。本地副本保证了**历史完整性**:当时怎么排的,就保持原样。 - **结合情境的补充。** 教师在不同的排课范围内,可用时间和服务时间不同;科目在不同的班级中,教学比重和不兼容也不同。本地副本是承载这些差异的天然位置。 - **清理而不出错。** 在学校层级删除或重组某个科目,不会抹掉使用过它的课表——它们的本地副本仍然有效。 作为代价,学校层级的重命名不会悄无声息地传播到各处。这正是下一节的内容。 #### 实际影响:重命名、删除、历史记录 当您修改学校层级的某个实体时,Omniscol遵循明确的传播规则: | 学校层级的操作 | 过去(已结束)的课表 | 进行中 / 未来的课表 | | --- | --- | --- | | 重命名自定义科目(名称、短代码、代码) | **不变**——保留历史 | 名称传播到相应的本地副本 | | 更改自定义科目的颜色 | **不变** | 若此前的颜色未在本地被覆盖,则更新颜色 | | 重命名教师(姓、名) | **不变** | 名称传播到本地副本 | | 修改教师的邮箱或电话 | 无影响(未复制) | 无影响(未复制) | | 修改教师的全局可用时间 | 无影响 | 重复模式:若可用时间此前已审核通过,则显示更新标记;日历模式:更新共享的可用时间来源 | | 删除自定义科目 | 本地副本保留 | 本地副本保留;该科目仅从目录中消失 | | 停用用户的 `teacher` 角色 | 不变 | 课表中的副本保持原样 | “过去”与“进行中或未来”的区分以**当天日期**为准:一份已发布的课表,如果最后一个已发布的周早于今天,就被视为过去,不再受重命名影响。 ##### 何时需要手动同步 自动传播**有意保持范围很窄**:科目的名称、代码和颜色;教师的姓名和标识符。本地复制的科目,其名称和代码不会在课表中修改;只有颜色可以在本地重新设置。其他字段(不兼容、教学比重、服务时间、各课表的可用时间……)不会同步,因为它们**本质上属于课表专属**。 如果某项更深入的变更需要应用到多份现有课表(例如:在所有已发布的课表中调整某位教师的服务时间,或在各处新增一条科目不兼容),就必须逐份课表操作。对于批量操作,最快的工具仍然是在每份课表的相应页面上**从电子表格复制粘贴导入**。 #### 另请参阅 - [学年](#page-core-concepts.school-year) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [课程](#page-glossary.course) - [课程、课时、课时类型](#page-core-concepts.lessons-and-types) - [科目管理](#page-admin.subjects) - [教师管理](#page-admin.teachers) - [课时类型](#page-admin.lesson-types) - [课表管理模块概览](#page-timetables.overview) ### 2.2 班级、小组、子小组 *Source: `help/zh-cn/core-concepts/classes-and-groups.md` · id: core-concepts.classes-and-groups · Updated: 2026-05-20* 班级是由学习同一培养方案的不同学习者组成的集合,通常一起上课(科目、教师和教室相同),唯一的例外是划分小组,即带有个性化设置、培养方案略有调整的子集(按选修课、水平、性别、字母顺序等划分)。不同的班级之间不会有共同的学习者。 在Omniscol中,总是从**班级**出发,当整个班级并不上同一门课时,再在每个班级内创建**小组**。当某个小组本身还需要再细分时,就用**子小组**来细化:一个小组以父子关系挂在另一个小组之下,就成为子小组。 **班内分组**、**对齐**和**教学小组组合**并不是层级结构中额外的层次,而是根据使用场景来组织或关联小组的方式。 #### 总览 ```mermaid %%{init: {"flowchart": {"defaultRenderer": "elk"}}}%% flowchart TB subgraph C1["班级:9年级1班"] direction TB A1["小组 第二外语日语"] A2["小组 第二外语德语"] P["小组 实验A组"] Q["小组 实验B组"] P1["子小组 实验A1组"] P2["子小组 实验A2组"] P --> P1 P --> P2 end subgraph C2["班级:9年级2班"] direction TB B1["小组 第二外语德语"] B2["小组 第二外语法语"] B4["小组 信息技术1组(20名学生)"] B5["小组 信息技术2组(10名学生)"] B3["小组 书法选修"] end subgraph C3["班级:9年级3班"] direction TB C4G["小组 第二外语日语"] C5G["小组 第二外语法语"] C2G["小组 信息技术1组(20名学生)"] C3G["小组 信息技术2组(10名学生)"] C1G["小组 书法选修"] end A1 -. "班内分组" .- A2 P -. "班内分组" .- Q B1 -. "班内分组" .- B2 B4 -. "班内分组" .- B5 C2G -. "班内分组" .- C3G C4G -. "班内分组" .- C5G A2 <== "对齐" ==> B1 B5 <== "对齐" ==> C3G B3 <== "对齐" ==> C1G linkStyle 0,1 stroke:#475569,stroke-width:1.5px linkStyle 2,3,4,5,6,7 stroke:#15803d,stroke-width:1.8px linkStyle 8,9,10 stroke:#1d4ed8,stroke-width:2.8px ``` 阅读方法: - 一个**班级**包含若干小组; - 一个**小组**可以包含若干**子小组**; - **班内分组**用于组织同一班级内、学生互相分流的小组; - **对齐**把不同班级的小组关联起来,共同上一门课; - **教学小组组合**用于建立一个明确的、可重复使用的合并,尤其适用于合并关系需要变化的情形。 在这张图中可以看到多个班级和多个小组,有的属于班内分组,有的做了对齐,有的两者兼有。第二外语是互斥的选修课:一名学生只上德语、日语或法语中的一门。因此各个外语选修组被声明为班内分组:只要由不同的教师讲授各门语言,就可以同时安排它们。9年级1班和9年级2班选德语的学生很少,于是把他们合在一起上同样的课,这就是对齐的作用;课时会在各个班级中以镜像方式创建,以便同时安排。9年级2班和9年级3班的书法选修组也是同样的做法。 这张图还展示了一个典型的初中场景,即“**两个班里开三个小组**”:9年级2班和9年级3班各自被划分为信息技术1组(20名学生)和信息技术2组(10名学生)。把两个信息技术2组**对齐**之后,学校将两个小组合并,只需开设**三门信息技术课程**而不是四门,每门课的人数相当(20名学生),少占用一位教师和一间教室。 #### 班级:基本层级 [班级](#page-glossary.class)是默认的基准实体。根据具体情况,它可以代表: - 一个学校的班级, - 一届学生(年级), - 一个学生群体, - 一个培训班次, - 一条学习路径。 当一门课面向**整个班级**时,不需要额外的小组:这门课直接挂在班级上即可。 #### 小组:班级的细分 [小组](#page-glossary.group)始终是**同一个班级的细分**。它的所有学生仍然是所属班级的学生。 典型示例: - `A组` / `B组`,按字母顺序分流; - `实验A组` / `实验B组`,实验课的半组; - `第二外语日语` / `第二外语德语` / `第二外语法语`,互斥的选修课; - `英语提高组` / `英语中等组` / `英语基础组`,学校采用分层教学时; - `男生` / `女生`,在存在这种划分的场合; - `选修:市场营销`、`选修:金融`、`选修:数据`,高等教育中的选修课组合。 **强烈建议**:每个明确的教学用途创建一个小组,即使学生有时是相同的。例如,建立`书法选修`和`日语选修`两个小组,比重复使用一个通用的`选修课`小组要好。否则,课表的阅读、诊断以及跨班级的合并很快就会变得含糊不清。 > _Premium_ #### 子小组:小组的细分 **子小组**是挂在父小组之下的子级小组。 示例: - 班级被分成`实验A组`和`实验B组`; - 然后`实验A组`本身再被分成`实验A1组`和`实验A2组`,以进行更精细的轮换。 ```mermaid flowchart TD C["班级 本科一年级"] A["实验A组"] B["实验B组"] A1["实验A1组"] A2["实验A2组"] B1["实验B1组"] B2["实验B2组"] B3["实验B3组"] C --> A C --> B A --> A1 A --> A2 B --> B1 B --> B2 B --> B3 ``` 重要的后果: - 子小组仍在班级的范围内; - 它们继承父小组的逻辑; - 当存在多个细分层级时很有用; - 只有在结构保持清晰可读时才有意义。 子小组与班内分组配合使用时非常方便: - A组和B组构成班内分组; - A1组和A2组构成班内分组; - B1组、B2组和B3组构成班内分组。 于是A1和B3自动构成班内分组,A2和B1也是如此,依此类推。这种关系由班内分组与父子关系的双重逻辑推导得出。 子小组就是被拖放到某个父小组上的小组。[小组层级](#page-core-concepts.group-hierarchy)一页对高级用法作了更深入的介绍:继承的班内分组、继承的约束和时间屏蔽。 #### 班内分组:把同一个班级分成互斥的小组 当学生分流到多个互斥的小组时,在**同一个班级**的小组之间使用[班内分组](#page-glossary.class-division)。Omniscol是带约束的排课软件,默认认为各个小组之间可能至少有一名共同的学习者:在小组之间声明班内分组即可解除这一约束。明确地说,同一班内分组中的小组之间不存在冲突。 需要记住的要点: - 每名学生在该班内分组中只能属于**一个小组(或不属于任何小组)**; - 这些小组因此可以并行开设不同的课; - Omniscol知道这不是学生冲突。 示例: - `实验A组`和`实验B组`在同一时间进行两个不同的实验课; - `第二外语日语`、`第二外语德语`和`第二外语法语`共用同一个选修课时段; - `A组`和`B组`在两间教室里同时轮换进行活动; - `英语提高组`、`英语中等组`、`英语基础组`并行上三门不同的课。 ```mermaid flowchart LR subgraph CL["班级:8年级2班"] E["第二外语日语"] A["第二外语德语"] I["第二外语法语"] end E -. "班内分组" .- A A -. "班内分组" .- I E -. "班内分组" .- I ``` 因此,对同一个班级而言,当您想表达“这些小组分担学生,可以并行安排”时,班内分组就是合适的工具。 注意:Omniscol有一种可选的运作方式,学生在课表层面直接被分配到班级和小组中。这时,班内分组可以自动推导(小组之间没有共同学生,就构成班内分组)。 ##### 子小组与班内分组 有了子小组,班内分组的逻辑会沿着层级向下传播。如果`实验A组`和`实验B组`构成班内分组,那么`实验A组`的子小组与`实验B组`的子小组会继承各分支之间的这种隔离。 示例: - `实验A组`和`实验B组`构成班内分组; - `实验A1组`和`实验A2组`是`实验A组`的子小组。 于是Omniscol知道,`实验A1组`的课与`实验B组`的课不会冲突,您无需手动重新声明每一种组合。 反过来,如果您想把`实验A组`细分为多个同样分流学生的分支,就需要在层级中明确定义这种细分,必要时还要定义它自己的班内分组。 #### 对齐:多个班级共上一门课 当**不同班级**的若干小组实际上上的是**同一门课**,在**同一时段**、由**同一位教师**、在**同一间教室**时,就使用[小组对齐](#page-glossary.alignment)。 典型示例:7年级1班、7年级2班和7年级3班的`日语选修`组共上一门日语课。 ```mermaid flowchart LR subgraph A["班级:7年级1班"] GA["日语选修"] end subgraph B["班级:7年级2班"] GB["日语选修"] end subgraph C["班级:7年级3班"] GC["日语选修"] end LESSON["一门共同的日语课"] GA --> LESSON GB --> LESSON GC --> LESSON ``` 对齐对跨班级的选修课非常有用,但它比普通小组更僵硬:凡是对齐的内容都一起行动。 重要条件:相关班级之间必须是**同一个科目**。 换句话说,如果您想让多个班级共上一门课,这些班级就必须真正共享这节课所使用的科目。 示例: - 多个班级共有`市场营销`:可以; - 一个班级里是`本科三年级市场营销`,另一个班级里是`硕士一年级市场营销选修`:不行,只要它们在课表结构中是两个不同的科目。 在高等教育中,当预见到会有合班课程时,这往往意味着要避免设置只属于单一培养方案的过于具体的科目。最好预先设置一个供需要共享课时的班级共用的科目。 对齐更适合中学:它需要创建镜像课时,并指明动态合并的逻辑。其代价是必须遵守这种镜像:对齐中有多少个小组,就要创建多少个课时,并在每个班级中分配正确的小组,而且一切都必须对称:教师、教室、资源等等。如果已排定了某个含有对齐小组的课时,就必须在每个班级中找到与之对应的镜像课时,带着相应的对齐小组。 其优点是可以借助对齐创建复杂课时。例如,可以在A周上共同的日语课,而每个班级在另一周各有不合班的不同课。 如果这些约束无法被优点抵消,最好考虑使用教学小组组合。 #### 教学小组组合:明确且可修改的合并 [教学小组组合](#page-glossary.groups-of-groups)用于把多个小组汇集成一个有名称、可修改、可重复使用的合并。之后,教学小组组合的用法与任何小组无异。 它特别适合: - 高等教育和继续教育; - 合并的组成可能发生变化时; - 您希望保持结构清晰、可追溯时。 示例:一个共同的研讨课汇集了`硕士一年级市场营销`、`硕士一年级金融`和`选修:数据`的学习者。课时通过教学小组组合来安排,之后又有第四个小组加入:只需把它添加到教学小组组合中,所有课时就都会关联到它。 与对齐一样,共同课时必须建立在相关班级之间的**共同科目**之上。教学小组组合用来汇集受众,并不取代课程所用科目的一致性。 如果您需要合并**整个班级**,请先在每个班级中创建一个代表整个班级的小组,再在对齐或教学小组组合中使用这些小组。不能绕过小组而直接对齐班级。 #### 直接把多个小组分配给一个课时 可以**直接把多个小组分配给一个课时**,而无需事先创建一个有名称的教学小组组合。 适用于: - 临时需求; - 快速测试一种合并; - 不值得为其建立专门结构的特殊课时。 但作为长期建模,这不是最佳选择: - 长期来看可读性较差; - 可追溯性不如有名称的合并; - 如果这种方式频繁重复,就越来越难以理解教学意图。 实际操作中: - 长期使用,请优先选择明确的**教学小组组合**; - 临时需求,直接分配多个小组非常方便。 ```mermaid flowchart LR subgraph X["现有小组"] G1["硕士一年级市场营销 - 选修:数据"] G2["硕士一年级金融 - 选修:数据"] G3["硕士二年级管理会计 - 选修:数据"] end S["临时数据课时"] G1 --> S G2 --> S G3 --> S ``` 但请避免在同一个课时中同时混用**父小组**和它的某个**子小组**:这通常不是对受众的规范建模。 #### 总结表 | 概念 | 范围 | 用途 | 示例 | | --- | --- | --- | --- | | [**班级**](#page-glossary.class) | 基准集合 | 承载所有人都上的课 | `6年级1班`、`本科一年级`、`硕士一年级市场营销` | | [**小组**](#page-glossary.group) | 班级的细分 | 划出学生的一个子集 | `实验A组`、`日语选修`、`第二外语日语` | | [**子小组**](#page-core-concepts.group-hierarchy) | 小组的细分 | 细化已经划分过的组织 | `实验A1组`、`实验A2组` | | [**班内分组**](#page-glossary.class-division) | 同一班级的小组 | 把互斥的学生分到并行的课上 | `实验A组` / `实验B组`、`德语` / `日语` | | [**小组对齐**](#page-glossary.alignment) | 不同班级的小组 | 让学生共上一门课 | 多个班级的`日语选修` | | [**教学小组组合**](#page-glossary.groups-of-groups) | 多个小组,同一班级或不同班级 | 建立明确且可修改的合并 | 跨培养方案的共同研讨课 | | **多小组** | 多个小组,同一班级或不同班级 | 即时动态分配多个小组 | 涉及多种人群的临时课时 | | [**自由组**](#page-glossary.free-group) | 开放的组成 | 管理不固定的报名 | 工作坊、社团、开放活动 | #### 另请参阅 - [班内分组](#page-core-concepts.class-divisions) - [小组对齐](#page-core-concepts.alignments) - [教学小组组合](#page-core-concepts.groups-of-groups) - [小组层级](#page-core-concepts.group-hierarchy) - [自由组](#page-core-concepts.free-groups) - [高等教育使用场景](#page-faq.higher-ed-cases) ### 2.3 班内分组 *Source: `help/zh-cn/core-concepts/class-divisions.md` · id: core-concepts.class-divisions · Updated: 2026-05-20* **班内分组**向生成算法声明:同一[班级](#page-glossary.class)的若干[小组](#page-glossary.group)可以安排在**同一时段**而不会产生冲突,因为没有任何学生同时属于其中一个以上的小组。 #### 为什么需要它——“一切默认都是冲突”的原则 Omniscol是一款**带约束**的排课软件。由此直接得出:**凡是可能产生冲突的情形,默认都按冲突处理**,除非用户明确另行说明。 - **两个不同的班级**之间:默认没有共同的学生,因此无需提示冲突。(跨班级的共享课程或合班课程另行建模,使用[小组对齐](#page-core-concepts.alignments)或[教学小组组合](#page-core-concepts.groups-of-groups)。) - 在**同一个班级**内,生成算法**无从逻辑推断**哪些小组可以在同一时段共存而互不重叠,因此会把同一班级的两个小组视为**可能有共同学生**。如果没有声明班内分组,为同一班级的两个小组在同一时段安排课时,就会产生冲突。 课表编制者需要**告诉生成算法**:“这些小组互相排斥,可以同时安排。”班内分组就是这样一种声明。 对于属于班内分组的小组,生成算法会尽量把它们的课时同时排开,但可能因其他约束而无法做到(教室不足、教师或课程的时间限制互不兼容、课时之间存在共用对象,例如专业教室或同一位教师)。这时,算法会发现班级中有一部分学生没有课,并施加相应的惩罚(默认选项:减少学生的空课时段),促使它把这些课时排在一天的最前面或最后面,条件允许时也会排在午休时段。 #### 典型使用场景 - **按字母顺序分成的半班**:A组和B组(按字母顺序或抽签)——一名学生只在其中一组,不会同时在两组。 - **按水平分成的半班**:英语强化组与英语标准组;一名学生只在其中一组。 - **按性别分成的半班**(部分学校在体育课中的特殊做法)。 - **互斥的选修课**:第二外语日语 / 第二外语德语 / 第二外语法语——学生只选这三种语言中的**一种**。(请结合您的实际情况调整示例。) - **同时开设的选修课组合**:学校决定把所有选修课排在同一个固定时段(`周五14:00-16:00 = 选修课时段`),学生在这个组合中选择自己的选修课——所有选修课都满足“一名学生只修一门”。 - **实验课分成半组进行**:实验A组和实验B组在同一时段、分别在两间教室、由两位教师授课。 #### 创建 步骤: 1. 进入某个班级的小组页面(小组标签页)。 2. 选择相关的小组。 3. 点击添加班内分组。 4. 确认。 同一个班级中可以同时存在多个班内分组:一个用于理科实验课(实验A组、实验B组),一个用于外语(第二外语日语、第二外语德语),一个用于选考科目(物理选考、历史选考、地理选考)。各个班内分组之间互相独立。 小组属于某个班内分组后,会在所有相关的界面中显示图标 [link-slash]。 #### 默认保护:一个小组只属于一个班内分组 默认情况下,界面会应用一个简单的保护:一个小组只能属于一个班内分组。这是最常见的情形,也能避免很多错误。 当学生的实际分布确有需要时,可以解除这一限制。 示例: - 只有选“第二外语日语”的学生同时修`书法`; - 选“第二外语德语”的学生不修`书法`。 此时您可以创建: - 一个`第二外语日语` / `第二外语德语`班内分组; - 一个`书法` / `第二外语德语`班内分组。 这样做的好处是,让生成引擎在安排某些课时时更加自由,使这些课时可以同时进行,从而减少班级中一部分学生的空课时段。 请谨慎使用:您必须完全掌握学生的实际分布。 #### 有效性条件 **同一个班内分组中的两个小组不得有共同的学生。**这就是数学上“划分”的定义——各集合互不相交。 如果一名学生出现在同一班内分组的两个小组中,Omniscol会发出一致性提醒(生成算法无法让他同时出现在两个地方)。 #### 对算法的影响 声明班内分组后,生成算法会: - **允许**同时安排该班内分组中的各个小组(否则这会是冲突), - **仍然检查其他资源**:同时进行的小组有多少个,就需要多少间不同的教室、多少位不同的教师。班内分组只解除学生方面的冲突,教室和教师方面的冲突依然严格。 #### 常见错误——一个班级的三门课程安排在同一时段 如果学生有互斥的选修课,您希望班级**同时开设三门不同的课程**(物理、历史、地理),请创建**三个小组**(物理、历史、地理)并把它们设为班内分组。不要只创建三门没有小组的课程,否则生成算法得不到任何关于同时进行的约束信息,会把它们分别排在不同的时间。 #### 与其他构造的区别 | 您想要…… | 请使用 | | --- | --- | | 同一个班级的多个小组在同一时段上课(不同的课,学生互不重叠) | **班内分组**(本页) | | 不同班级的多个小组在同一时段上课(同一门课、同一位教师、同一间教室),通过关联各个简单小组的逻辑实现 | [小组对齐](#page-core-concepts.alignments) | | 与对齐相同,但事后更容易修改,方法是创建一个独立的合并实体 | [教学小组组合](#page-core-concepts.groups-of-groups) | | 组成不固定的小组(工作坊、自由报名) | [自由组](#page-core-concepts.free-groups) | #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [小组对齐](#page-core-concepts.alignments) - [教学小组组合](#page-core-concepts.groups-of-groups) - [自由组](#page-core-concepts.free-groups) - [班内分组](#page-glossary.class-division) ### 2.4 小组对齐 *Source: `help/zh-cn/core-concepts/alignments.md` · id: core-concepts.alignments · Updated: 2026-05-20* **对齐**把属于**不同班级**的多个[小组](#page-glossary.group),关联在一起:它们必须上**同一门课程**、在**同一时段**、 在**同一间教室**、由**同一位教师**授课。 重要前提:这种对齐必须建立在不同班级的**同一科目**之上。如果两个班级的科目不同, 即使在教学上非常接近,对齐也不是合适的建模方式。 具体来说,局限于一个班级之内的是[班内分组](#page-glossary.class-division),而对齐则跨越多个班级。 #### 使用场景 对齐用于创建共享课程:几个班级中各有少量学生,需要集中(对齐)起来上同一门特定的课,并在一起学习。 例如: - 7年级1班、2班和3班的**日语选修**学生一起上日语课。 - 高中的**跨班选修课**:信息技术拓展、美术鉴赏、第三外语等。 - **选择性必修课程**。 - 高校中**多方向共享的公共基础课**:面向多个硕士专业的共同导论课。 如果需要对齐**整个班级**,请先在每个班级中创建一个代表整个班级的小组,再对齐这些小组。 #### 创建 1. 先在每个相关班级中创建**一个小组**,名称最好相同(例如:7年级1班、2班、3班中都有“日语选修组”)。 2. 进入小组对齐标签页。 3. 点击添加小组对齐,然后选择来自不同班级的小组。 当某个小组参与了对齐时,它会在所有相关界面中显示,并带有关联图标[link]。 #### 影响 对齐之后,每个班级的小组都会与共同的课程**关联**。具体表现为: - 课时必须在各个班级中以镜像方式创建,尤其要保证**相同的时长**、**相同的教师**,并尽可能使用**相同的教室**。 - 如果某个班级中带有已对齐小组的课时被安排在某天的某个时间,那么该对齐中的其他所有班级也必须有相同的镜像课时, 各自对应已对齐的小组,且位置相同。 - 在相关科目上,各个已对齐小组的课时总量和课时拆分方式必须**严格一致**——否则 Omniscol会给出不一致的诊断。 - 对某个课时所做的修改(移动、更换教室、更换教师、添加备忘)**必须同步** 到所有已对齐的班级(系统会尝试推断哪些课时互为镜像,让这一过程尽可能自动完成)。 #### 诊断——常见的不一致 对齐对差异很敏感。典型的诊断包括: - **小时数不一致**:8年级1班的“日语选修组”有3节一小时的日语课,8年级2班的只有2节。 要么统一(都是3节),要么取消对齐(2小时对齐,另1小时安排给另一个未对齐的日语选修小组)。 - **已对齐课时的教室不同**:对齐意味着只有一间教室。如果您手动为某个班级的课时强制指定了不同的教室,就会出现诊断。 - **教师不同**:同理。 #### 提示——每门课程/科目一个小组 由于对齐要求各班完全镜像地创建,我们强烈建议为每个要对齐的班级中的每个相关科目或课程各创建一个小组。 换句话说:不要把通用小组(典型的如A/B组)复用于不同科目,并在其上做强对齐。否则会得到含糊不清的对齐, 生成时无法消除歧义。 请改为创建专用小组,这样把它们相互关联时就不必担心产生不希望出现的副作用。 #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) - [教学小组组合](#page-core-concepts.groups-of-groups) - [共享课程](#page-glossary.transverse-course) - [小组对齐](#page-glossary.alignment) ### 2.5 教学小组组合 *Source: `help/zh-cn/core-concepts/groups-of-groups.md` · id: core-concepts.groups-of-groups · Updated: 2026-05-20* **教学小组组合**是把多个[小组](#page-glossary.group)归并在一起的上层小组,这些小组可以来自**同一个班级**,也可以来自**不同班级**。通过它,您可以**把多个小组放在一起共享同一节课时**,即在该时段把不同小组的学生合并为一个整体授课。其他排课软件用“合班”一词来表示同一个概念。 与小组对齐一样,共同的课时必须基于相关班级之间的**共同科目**。 小组对齐表示的是小组之间的一种逻辑关系,而教学小组组合是一个独立的对象,可以像普通小组一样使用。您可以把它看作一个可动态调整、带名称的小组容器。 #### 为什么比小组对齐更灵活 | 方面 | [小组对齐](#page-core-concepts.alignments) | **教学小组组合** | | --- | --- | --- | | 构成 | 事后可以修改,但需要为各班创建对应的镜像课时 | 事后修改非常容易 | | 课表模式 | 非常适合中学的周课表和周期课表 | 适用于所有类型的课表;当合并关系经常变化时尤为方便 | | 将课时移出 | 需要为该小组创建一个未对齐的副本 | 直接修改该课时,其归属将固定到某个班级,并需要为其他相关班级重新创建课时 | | 适用场景 | 平行班级培养方案中重复出现的共同课程 | 共享课程、临时性的合并 | 教学小组组合是为高等教育和继续教育设计的,在这些场景中: - 合并关系经常变化(一个方向并入另一个方向,一个子小组为完成项目而分出去), - 共同课程按具体日期安排,而不是重复出现, - 特邀讲者或访问教授在指定日期面向混合听众授课。 教学小组组合比小组对齐更灵活,也更容易跟踪。它的局限在于复杂课时中不对称的交替周安排。使用时只需规范命名(例如:“市场营销共享课 硕士”)。 #### 创建与使用 在课表的教学小组组合选项卡中创建。教学小组组合可以**像普通小组一样**分配给课程,区别在于它汇集了多个成员小组。 如果您想合并**整个班级**,请先在每个班级中创建一个代表整个班级的小组,再把这些小组放入教学小组组合。 分配给教学小组组合的课程会出现在成员小组所属的**所有**班级中,您可以在其中任何一个班级里编辑它。 教学小组组合在所有相关界面中都带有专用图标[sitemap]。 #### 事后修改构成 成员小组可以随时添加或移除。已分配的课程会自动适应(范围随添加或移除的小组而扩大或缩小)。 这正是该概念的价值所在:您可以在学期开始时采用一种构成,中途再调整,而不会破坏原有结构。 #### 技术说明 从技术上讲,带有教学小组组合的课时只存储一份,且跨班级存储,因此不归属于某个具体班级;而不带教学小组组合的课时(包括使用对齐小组的课时)则存储在其所在班级中。对于3个小组的对齐,会存储3个课时,每个班级各一个;对于教学小组组合,则只在班级之外存储一个课时,但在每个班级中都会显示。 从课时中移除教学小组组合时,系统会自动推断或询问该课时应归属的班级。 修改带有教学小组组合的课时的其他字段,比对齐更容易:由于只存储一份,您可以立即更换教室或教师,无需“镜像”同步。 #### 不可用时间的合并 教学小组组合会**合并**所有成员小组的**不可用时间**。设在**任何一个**成员小组(或该小组所属班级)上的不可用时间,都会作用于共同课时。无论是自动生成还是在界面上编辑,这条规则都同样适用。较弱的级别(不希望,红色)以同样方式合并;当同一时段出现多个级别时,**以最强的为准**:不可用(黑色)优先于不希望(红色)。编辑器和各级别说明请参见[时间限制(通用机制)](#page-core-concepts.time-constraints)。 由于教学小组组合通常跨越多个班级,这种合并会汇总**每个涉及班级**的不可用时间:如果某个班级周五下午不上课,那么包含该班级的教学小组组合的所有课时,在这个时段都不可用,即使其他班级是空闲的。 ```mermaid flowchart TD CX["班级X——周一下午不可用"] --> GA["小组A(班级X)"] CY["班级Y——周五上午不可用"] --> GB["小组B(班级Y)"] GA --> GG["教学小组组合"] GB --> GG GG --> SE["课时:周一下午和周五上午均不可用"] ``` 在教学小组组合上,应用会显示这些不可用时间的**合并预览,不可修改**:您可以一目了然地看到所有成员的约束。修改需要在**成员小组**(或它们的班级)上进行,因为约束在那里才有明确含义;教学小组组合没有单独的约束编辑器。 > _Premium_ 每个成员小组都有**自己的**小组约束,以及从班级和父小组**继承**而来的约束(参见[小组层级](#page-core-concepts.group-hierarchy))。合并会汇总所有这些约束:教学小组组合汇集的成员越多,可排课的范围就越小。如果要在存在继承约束的情况下重新开放某个时段,可使用**允许的课时**级别在局部重新允许,而无需修改来源。 在界面上,这些合并后的约束会在**排课时**显示出来:候选时段和诊断面板会提示冲突,并指出相关的**成员小组**和**班级**,方便您直接追溯到来源(参见[冲突与诊断](#page-timetables.conflicts))。 #### 操作步骤 — 为特邀讲座创建共享小组 1. **面向混合听众的特邀讲座**(三个年级的学生,两门选修课):Omniscol中与之对应的概念就是**教学小组组合**。 2. **前提**:成员小组已经存在于各自的班级中。确定要归并的小组(`硕士一年级市场营销`、`硕士一年级金融`、`创业选修课`)。 3. **打开**课表的教学小组组合选项卡。点击添加教学小组组合按钮。给它起一个一目了然的名称:`王老师特邀讲座——硕士一年级加选修课听众`。 4. **添加成员小组**:在列表中选择这三个班级/选修课的小组。构成没有数量限制,成员小组之间也没有互斥限制(学生同时属于两个小组时,最多只会看到这节课一次)。 5. 从其中一个相关班级**创建课程**(即讲座),并像对待普通小组一样**为其分配教学小组组合**。只需录入一次,该课程就会出现在成员小组所属的**所有班级**中。 6. **事后修改**:如果构成发生变化(一个小组退出,另一个加入),修改教学小组组合的构成即可,已分配的课程会自动适应(范围扩大或缩小)。这就是它与传统小组对齐(构成固定)的区别。每周重复的情形另见[小组对齐](#page-core-concepts.alignments)。 #### 更灵活的替代方式:直接为课时分配多个小组 对于临时性的课时,专门创建一个教学小组组合有时会很麻烦。这时,如果数据缺少结构化并不成问题,您可以直接把一个或多个班级的多个小组关联到一个课时。 在内部,其处理方式类似于匿名的教学小组组合,同样是跨班级的单份存储,但您无需关心这些细节。 #### 另请参阅 - [小组对齐](#page-core-concepts.alignments) - [时间限制(通用机制)](#page-core-concepts.time-constraints) - [共享课程](#page-glossary.transverse-course) - [日历模式](#page-glossary.calendar-mode) - [教学小组组合](#page-glossary.groups-of-groups) ### 2.6 小组层级:父组、子组、继承的约束 *Source: `help/zh-cn/core-concepts/group-hierarchy.md` · id: core-concepts.group-hierarchy · Audience: admin · Plan: premium · Updated: 2026-05-20* > **Premium** > **Premium功能。** 小组层级和小组时间限制包含在Premium功能中。 > _Premium_ 在“班级 → 小组”的平面模型之外,Omniscol允许将班级的小组组织成**父子层级**,并附加通过继承逐级传递的**时间限制**。当班级需要逐级细分为多个层次时,这非常有用。 #### 通过拖放创建层级 在班级的小组页面上,通过拖放来定义层级: - **将一个小组拖到另一个小组上** → 前者成为后者的子组。 - **将子组拖到小组列表的表头** → 子组脱离原有层级,重新成为班级的直属小组。 层级深度没有限制。如果您的划分需要,可以建立父组 → 子组 → 孙组的链条。 #### 典型示例 典型的层级: ```mermaid flowchart TD C[8年级1班] A[A — 父组] A1[A1 — A的子组] A2[A2 — A的子组] B[B — 父组] B1[B1 — B的子组] B2[B2 — B的子组] C --> A C --> B A --> A1 A --> A2 B --> B1 B --> B2 ``` 已声明的班内分组: - `(A, B)` — 在父组层级,A与B互斥。 - `(A1, A2)` — 在A之下,A1与A2互斥。 - `(B1, B2)` — 在B之下,B1与B2互斥。 **自动产生的结果**:Omniscol允许同时安排属于不同分支的小组——例如 `A1` 和 `B2` 可以在同一时段,因为没有任何学生同时属于两者(A1 ⊂ A,B2 ⊂ B,且A ∩ B = ∅)。 无需再声明班内分组 `(A1, B2)`:继承会自动推算出来。 #### 时间限制的继承 在班内分组之外,您还可以为小组附加**时间限制**(可用时间、不兼容)。有了层级,这些限制会从父组**继承**给子组——通过**掩码**机制实现,子组可以覆盖它。 ##### 示例:体育课预留时段 典型情形: - 班级 `8年级1班` **周一下午不可用**(该时段被全局占用,用于集体活动)。 - 通过继承,班级的**所有小组**周一下午都不可用。 - **例外**是小组 `体育`:将它的掩码**反转**,只允许周一下午,禁止其余所有时间。该小组的所有体育活动便会自动落在这个受保护的时段上。 这个机制很强大:**一个父级掩码加一个子级例外**,就足以清晰地为专用时段建模,而不必在每门课程上重复设置限制。 ##### 另一个示例:由父组 `选修课` 承载允许的时段 另一种非常有用的情形:学校希望所有选修课只排在少数几个预留时段,例如: - 周一上午, - 周三10:00之前, - 周五上午。 此时可以: - 创建一个父组 `选修课`,它本身不分配课程; - 在该父组上通过涂画时间限制来表示允许的时段; - 在其下创建所需数量的子小组:`市场营销选修`、`金融选修`、`数据选修`等。 所有这些子小组都会继承同样的允许时段。如果规则变化,只需修改一处:父组 `选修课`。 ```mermaid flowchart TD E["选修课 — 父组"] E1["市场营销选修"] E2["金融选修"] E3["数据选修"] S["允许的时段:周一上午、周三10点前、周五上午"] S --> E E --> E1 E --> E2 E --> E3 ``` ##### 继承规则 - 子组**默认继承**父组的时间限制。 - 子组可以**覆盖**这些限制:添加自己的限制,或反转掩码。 - **父组的班内分组**自动适用于子组:如果A与B在同一个班内分组中,则A的子组与B的子组互斥,无需显式声明。 ##### 继承的约束与教学小组组合 一个小组也可以是某个**教学小组组合**的成员。它的约束——包括自身的,以及从其班级和父组继承而来的——随后会与其他成员小组的约束**合并**:教学小组组合的课时会遵守所有这些合并后的不可用时间。因此,继承沿层级向下传递,随后合并把教学小组组合的各成员汇总在一起。 ```mermaid flowchart TD C["班级 — 周一下午不可用"] --> P["父组"] P --> E["子组 — 继承自父组"] E --> GG["教学小组组合"] M["另一个成员小组(另一个班级)"] --> GG GG --> SE["课时:合并后的不可用时间"] ``` 合并的详细说明参见[教学小组组合](#page-core-concepts.groups-of-groups)。 #### 何时使用层级 - **选修课组合**:班级的语言课按级别分层(强化英语 > A1-口语、A1-文化、A2-……)。 - **带子轮换的实验课**:实验课分成两个半班,每个半班再细分为若干子小组进行操作。 - **差异化路径**:一条主路径,配有可在路径内部安排的不同选修模块。 - **体育**:一个囊括所有学生的全局小组,配有专用于体育时段的掩码。 - **预留时段上的选修课**:父组 `选修课` 承载允许的时段,其子小组对应实际的选修课。 #### 何时不要使用 - 对于没有层级细分的简单班级——层级会增加复杂度。 - 对于混合不同班级的学生——这是[小组对齐](#page-core-concepts.alignments)或[教学小组组合](#page-core-concepts.groups-of-groups)的职责,而不是班内层级的职责。 - 对于开放报名——请使用[自由组](#page-core-concepts.free-groups)。 #### 操作步骤 — 构建父子层级 1. **小组层级**将班级的小组组织成父组和子组,时间限制可以**继承**。 2. **先平铺创建小组**:在班级的小组页面上创建 `A`、`A1`、`A2`、`B`、`B1`、`B2`,再加一个跨组小组 `体育`。此时它们都在同一层级,直接隶属于班级。 3. **拖放建立层级**:将 `A1` 拖到 `A` 上 → `A1` 成为 `A` 的子组。`A2`、`B1`、`B2` 同理。您会得到两个分支:`A → A1, A2` 和 `B → B1, B2`。层级深度没有限制。 若要让子组脱离层级:将它拖到班级小组的**列表表头**。 4. **声明班内分组**:父组层级 `(A, B)`(互斥),A之下 `(A1, A2)`,B之下 `(B1, B2)`。无需再声明 `(A1, B2)`:Omniscol通过继承算出 `A1 ⊂ A` 与 `B2 ⊂ B` 是兼容的(可以安排在同一时段)。 5. **设置父级掩码**:在班级上,标记**周一下午不可用**。所有小组都会自动继承。查看每个小组的网格进行验证:该时段在各处都被锁定。 6. **反转 `体育` 上的掩码**:在体育小组的小组详情中,反转时间限制——允许周一下午,禁止其余所有时间。所有体育活动都会自动落在这个专用时段,而无需在每门课程上重复声明。 7. **现在您已经有了一个生效的层级**,班内分组和专用时间掩码都可继承。自动生成时会用到它们,继承而来的冲突会实时提示。 #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) - [自由组](#page-core-concepts.free-groups) - [教师的可用时间与时间限制](#page-core-concepts.wishes-and-availability) ### 2.7 自由组 *Source: `help/zh-cn/core-concepts/free-groups.md` · id: core-concepts.free-groups · Plan: premium · Updated: 2026-05-12* > **Premium** > _Premium_ **自由组**是一个**半自主的工作小组**:班级中的一部分学生与主课并行推进自己的工作,通常在同一间教室、由同一位教师带领——即该课程的**卫星小组**。它可以放入时间网格而不产生冲突,其成员也不必事先固定。 它是Omniscol的**万能牌**:当严格的“班级 + 班内分组的子小组”模型不适用时使用。常见于: - **艺术院校**(自由报名的工作坊、跨班项目), - **半自主项目**——一小组学生一起工作,由一位教师进行**轻度**督导,该教师主要负责自己的班级,并定期过来了解进展, - **跨班讲座**、大师课、特邀研讨会, - 自愿参加的**辅导课**和**社团**, - 自由报名的**研究课题和短期实习**。 #### 工作方式 自由组与所有小组一样**隶属于某个班级**,有人数,并且根据账户配置,可以有学生名单。不同之处在于Omniscol检查冲突的方式。 对于自由组的课时,Omniscol **停用三类检查**: - 与班级其余部分在同一时段的冲突, - 与同一教师另一节课时的冲突, - 与已被占用教室的冲突。 正因如此,自由组才能在主班级的网格上充当**卫星小组**:主课时照常进行,自由组的课时则并行放置,不会触发任何警告。 自由组的课时与其他课时一样,会**明确显示**在相关学生的课表中。 #### 何时使用自由组,何时使用普通小组 | 情形 | 普通小组 | 自由组 | | --- | --- | --- | | 成员事先固定 | ✓ | ✓(与普通小组一样:人数,学生名单可选) | | 班级 / 教师 / 教室冲突检测 | ✓ 严格 | — 已停用 | | 以班内分组的方式建模选修课 | ✓ | — 不适用 | | 与主课并行的卫星课时 | — | ✓ | #### 使用注意事项——真实的限制 > **首先:尽可能优先使用**[班内分组](#page-core-concepts.class-divisions)**中的真正子小组。** > 自由组是一张**需要谨慎使用的万能牌**,仅限于没有其他合适办法的情形。 原因在于:实际上,并行安排必须由**排课员手动管理**。自动生成算法无法得知某个半自主小组必须与班级主课的**某一节特定课时**并行安排。如果让它自行运行,自由组的课时可能落在任何时间,与班级其余部分的安排毫无关联。 **最佳做法**:手动把自由组的课时放在目标主课时的**对面**,然后**锁定其位置**,使自动生成不再改动它。参见[锁定课时](#page-timetables.lesson-lock)。 #### 创建 创建小组时(通过添加小组),勾选自由组选项。此后,这些小组在列表中会以图标 [right-left] 标记,以免与普通小组混淆。 #### 停用冲突检测的影响 具体来说,对于自由组的课时: - 如果小李(班级学生)参加这节课时,而班级其余学生在同一时段上另一节主课时,Omniscol **不会发出警告**(尽管理论上她需要同时出现在两个地方); - 教师可以在同一时段被安排到另一节课时,同样不会警告; - 教室可以已被主课时占用,同样不会警告。 这种宽容是**有意为之**。需要由您(排课员)确保这种并存在教学上讲得通(通常是:教师只是偶尔过来看看半自主小组的进展;该小组的学生离开主课时不会造成问题;教室能同时容纳两项活动)。 #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) - [锁定课时](#page-timetables.lesson-lock) - [自由组](#page-glossary.free-group) ### 2.8 课程、课时、课时类型 *Source: `help/zh-cn/core-concepts/lessons-and-types.md` · id: core-concepts.lessons-and-types · Updated: 2026-06-13* 在Omniscol中,有三个相互关联但必须区分清楚的对象:**课程**(抽象的教学单元)、**课时**(课程在某个具体日期的一次实际授课),以及**课时类型**(分类,如讲授课、习题课、实验课等)。 #### 课程 **课程**是教学的基本单元:包括一个科目、一个班级或小组、一位教师、一间教室、一个时长,以及每周的授课次数(在日历模式下则是一组日期)。 例如:*“6年级1班的数学,王老师授课,每周4小时,在B204教室”。* 课程承载着**教学逻辑**:谁和谁一起学什么。它是在课表管理模块中构建的。另请参见词汇表中的定义:[课程](#page-glossary.course)。 #### 课时 **课时**是课程的一次具体**授课**,有明确的日期和时间。以课程 *6年级1班数学,每周4小时*为例,Omniscol会在发布的各周生成每周4个课时(例如周一8:00-9:00、周二10:00-11:00、周三14:00-15:00、周五9:00-10:00)。 在课表模块、各类门户和iCal导出中看到的都是课时。临时性的修改(移动、取消、代课)也是针对课时进行的。 界面用这个词来指代放在网格上的单元:您安排、移动、锁定、编辑、取消或代课的对象都是**课时**。 #### 课时类型 **课时类型**在科目之外对每门课程进一步分类:讲授课、习题课、实验课、考试、远程授课、外出活动。类型用于: - **业务逻辑**(考试与习题课的处理方式不同), - **统计**(每位教师的习题课学时与讲授课学时对比), - **可读性**(在课表中的显示)。 类型的详细管理请参见[课时类型](#page-admin.lesson-types)。 #### 课程在结构中的存放位置 根据班级结构的复杂程度,课程要么**归属于所在班级**(标准情形),要么**跨班级**存放(使用教学小组组合,或一个课时同时有多个小组时)。这对用户是透明的,Omniscol会根据结构自动切换。参见[教学小组组合](#page-core-concepts.groups-of-groups)。 #### 简单课时与复杂课时 课程可以是**简单的**(一位教师、一个班级、一个科目、一间教室、规律的重复),也可以是**复杂课时**:A/B交替周、连堂课(两节连上)、关联课时(小组轮换)、协同教学(多位教师)。参见[复杂课时](#page-core-concepts.complex-lessons)。 #### 另请参阅 - [课时](#page-glossary.lesson) - [课时类型](#page-glossary.lesson-type) - [课时类型](#page-admin.lesson-types) - [复杂课时](#page-core-concepts.complex-lessons) ### 2.9 复杂课时:交替周、连堂课、关联课时、协同教学 *Source: `help/zh-cn/core-concepts/complex-lessons.md` · id: core-concepts.complex-lessons · Updated: 2026-06-13* 大多数课时都很简单:一个授课对象、一位教师、一间教室、一个重复出现的时段。但Omniscol也支持更复杂的配置,并且这些配置可以相互组合。复杂课时是指同一班级中通过特殊配置相互关联的课时,共有以下几种类型。 #### 1. 交替周课时(A/B周等) 这类课时**不是每周都上**,而是轮流进行。典型情形:同一时段,A周上一节课,B周上另一节课。 这种配置在法国及受其影响的教育体系中很常见,在其他地区则非常少见。 **前提**:在设置(管理模块)中启用交替周。您可以选择编号方式(字母A/B/C或数字1/2/3)。 **假期造成的顺延**:假期之后,交替顺序可以重新校准。该设置在[学年与假期](#page-admin.school-year)页面的时间轴上完成。 **创建方法**: 1. 将鼠标悬停在要交替的课时上,课时右上角会出现图标 [plus],点击它。 2. 系统为交替周添加一个空闲时间范围。 3. 为这个新的时间范围创建对应的课时。 4. 点击该课时的图钉按钮 [thumbtack] 进行定位,然后在彩色圆点中点击所需的星期和时间。 您可以重复上述操作,添加更多周(3周、4周或更多周交替)。 #### 2. 连堂课(连续课时) 两节课时需要**在同一天内紧挨着上**,中间不插入其他课。 典型情形: - 两个不同小组的实验课依次进行(教师可确保整个半天都在场), - 讲授课之后紧接习题课(先讲授导论,再做习题应用), - 双场考试。 **创建方法**:在课时数分配视图中,把一节课时拖放到另一节课时下方。两节课时随即连在一起,被视为一个整体。 连堂的课时数量不限,但如果总时长过长,可能无法放入时间网格。 **拆分**:将鼠标悬停在两节连堂课时之间,会出现一个“剪刀”按钮,点击即可拆开。 **为什么不直接做一节更长的课时?** 因为两节课时可能有不同的: - **类型**(先讲授课,后习题课), - **教师**(主讲教师负责讲授课,助教负责习题课), - **教室**。 如果所有属性都相同,直接延长一节课时更简单;其余情况下,连堂能带来更大的灵活性。 #### 3. 关联课时(半组交替) 两节同时进行的课时,由**两个半组互相轮换**,共形成四节课时。最典型的情形: ``` 时段1:A组上生物, B组上物理 时段2:A组上物理, B组上生物 ``` 两个时段结束后,两个半组都学完了两门科目,只是顺序不同。因此轮换需要两位教师(一位生物教师、一位物理教师)“轮流”授课。 这种配置在法国的初中比较常见,在非洲法语国家非常普遍,在其他地方似乎少得多,但例如在巴西也能见到。 **创建方法**: 1. 创建两节[连堂](#2-连堂课-连续课时)课时(一节在另一节下方)。 2. 将鼠标悬停在两者的交界处,会出现一个课时关联(串联)按钮。 3. 点击后指定需要交替的**两个小组**。理想情况下,这两个小组应已在班级中声明为[班内分组](#page-core-concepts.class-divisions)。 课时和小组的数量也可以超过两个,但这种情形更多停留在理论层面,现实中很少遇到。 #### 4. 协同教学 两位或多位教师在**同一间教室**、**同一时间**授**同一节课时**。 典型情形: - 加强指导(主讲教师加助教), - 客座教授与主讲教师搭档授课若干节, - 跨学科模块(如“健康信息学”由一位医生和一位信息技术教师共同讲授), - 整个学期共同担任主讲。 **创建方法**:在为课程分配教师的页面中,选择**多位教师**。每位教师都会在各自的统计和服务时间中记入这节课时。 #### 5. 组合使用 这些复杂配置可以**相互组合**。例如: - **交替周 + 连堂**:A周的课是一个连堂双课块,B周则是另一个双课块。 - **交替周 + 协同教学**:A周由主讲教师授课,B周由客座教授授课(教师轮换)。 - **连堂 + 关联**:在双时段上进行半组交替(理科实验课按半班上课时最常见的情形)。 在法国,通常会用一种方式来声明语文和数学额外的半小时课,同时解决每周三小时体育课的问题(隔周上2小时,平均每周1小时,另加每周2小时)。 | A周 | B周 | | --- | --- | | 语文 | 体育 | | 数学 | 体育 | #### 特殊情况 如果您的需求不属于上述任何一类,请联系Omniscol支持团队。我们很可能可以为其建模,但可能需要一些协助来确定最合适的方案。 #### 操作步骤 — 创建半组关联的实验课 1. **典型情形**:一次理科实验课占两个时段,A半组先上生物再上物理,同时B半组先上物理再上生物。即连堂 + 关联。 2. **前提**:在相关班级中,将两个半组声明为**班内分组**,例如 `(A, B)`。参见[班内分组](#page-core-concepts.class-divisions)。这样Omniscol才会将它们视为互斥,从而可以互相轮换。 3. **创建第一节课时**(例如A半组的生物),在课时数分配视图中放入第一个时段,设置生物教师和生物教室。 4. **将第二节课时拖放**(B半组的物理)**到第一节课时的正下方**(松开课时时会出现一个位置,课时随即吸附在上面)。 5. **将鼠标悬停在两节连堂课时的交界处**:会出现一个课时关联(串联)按钮,点击它,然后指定需要交替的两个小组(`A` 和 `B`)。 Omniscol会自动创建**轮换**:时段1 → A组生物 + B组物理;时段2 → A组物理 + B组生物。两位教师同时授课、两间教室、两个轮换的半组,总共四节课时。 6. **调整**:两节连堂课时之间的剪刀按钮可以拆开关联。您还可以与**A/B周交替**(A周和B周的实验课不同)或**协同教学**(同一节课时由两位教师授课)组合使用。完整背景参见[分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 另请参阅 - [交替周课时](#page-glossary.alternate-lessons) - [连堂课](#page-glossary.concatenated-lessons) - [关联课时](#page-glossary.associated-lessons) - [协同教学](#page-glossary.co-teaching) - [分配课时数并创建课时](#page-timetables.hour-distribution) ### 2.10 单位、校区、教室、资源、多教室 *Source: `help/zh-cn/core-concepts/sites-rooms-resources.md` · id: core-concepts.sites-rooms-resources · Updated: 2026-06-13* 本页汇总Omniscol中学校的**组织结构与物理空间**建模:哪些单位用来组织班级, 课时在哪里进行,使用哪些教室,配备哪些可移动设备。 > _Premium_ #### 单位——组织层面的划分 通过[单位](#page-glossary.campus),您可以在同一个账户内区分多个办学点、学院或部门。它是内部组织层面的概念: 用来按学校的架构对班级进行归类,并便于某些筛选。 这个概念是**可选的**。当校区的划分与学校的逻辑组织不太吻合,或者您希望两者并行使用时,它尤其有用。 单位与校区是交叉的。校区描述的是地理或物理层面的现实:地点、时间网格、教室、交通时间。 两者不一定重合,恰恰在不重合时它们最有用。例如: - 一个学院可以使用多个校区; - 一个物理校区可以容纳多个单位或部门; - 多个学院可以共用同一批教学楼; - 一个集团的多所学校可以交叉共用多个校区; - 单位可以主要用作分析筛选,而不改变交通时间。 即使单位与校区几乎完全重合,同时保留两者对筛选、归类和某些分析仍然有用。 单位在[常规设置](#page-admin.parameters)中创建,位于班级年级之下。 创建后即可在班级上填写。 冲突诊断可以借助单位,按组织范围筛选提示信息。 #### 校区——地理层面的划分 每个[校区](#page-glossary.site)代表一个独立的物理或地理位置。至少需要一个校区。 如果您所有的课时都在同一个地点进行,只需创建一个校区。如果学校有多个校区, 教师或学生需要往返,请按需创建足够多的校区,**并填写校区之间的交通时间**。 每个校区都有自己的**时间网格**(时段的开始与结束时间、课间、午休、关闭时间)—— 各校区的时间网格可以不同(例如主教学楼和分部的作息不同)。 多校区在**高等教育**中很常见(多个校区、外地分部),在**基础教育**中也不少见 (同一教育集团内初中和高中的教学楼分开、小学带有附属幼儿园等)。 > 多校区不包含在**Lite**方案中,自Standard方案起提供。 #### 多校区:规则与交通时间 典型情况:一位教师10:00在A校区下课,10:30必须到达B校区,路上需要15分钟。 如果时间网格的课间有30分钟,没有问题;如果课间只有10分钟,就无法排开。 ##### 填写交通时间 在课表管理模块的**校区**界面, 校区间距离按钮会打开一个弹窗, 以**三角半矩阵**的形式显示交通时间:N个校区需要填写N×(N−1)/2个格子 (没有对角线,也没有重复项——矩阵是对称的)。为每一对校区输入以分钟为单位的时长, 然后点击保存确认。 如果不填写,生成会认为校区之间无需任何交通时间——教师就可能被“瞬移”, 这在现实中当然行不通。 ##### 教师规则:自动切换校区 **教师**可以在相邻的两个课时之间自动切换校区——这由算法处理。 您无需在教师一侧做任何声明,只要填好校区之间的交通时间即可。 ##### 班级规则:默认校区加手动指定 **班级**默认隶属于一个校区(其注册校区)。该班级的所有课时默认都在这个校区进行。 不过,您可以**手动为班级的某个课时指定另一个校区的教室**——例如“体育课在分部的体育馆”。 这时: - 算法会保留**预先指定的教室**(不会试图用默认校区的教室替换它); - 生成会根据前后相邻的课时计算**交通时间**(按它们所在的校区:默认是班级所在的校区, 否则是这些课时被指定教室所在的校区)。 如果课时**没有指定教室**,算法会在**班级所在校区**中选择一间教室。这是默认行为。 ##### 刚性约束,精确到分钟 在自动生成算法中,校区之间的约束是**刚性**的。只要一个校区的课时结束与另一个校区的 课时开始之间哪怕差一分钟,该排课就会被**拒绝**——不会自动放宽。 检查以**实际时间网格**为准:如果两个时段之间有15分钟课间,而交通需要10分钟,则可行; 如果交通需要16分钟,则不可行。 ##### 切换校区遇到午休 当校区切换恰好发生在午休时,交通时间会从实际可用的**午餐时间中扣除**。 算法会考虑教师和学生的最短午餐时长(在校区一侧设定); 如果交通使午餐时间低于最低值,该排课就会被拒绝。 实际意义:为每个校区正确填写交通时间和午餐时长,可以避免出现理论上成立、 实际上无法执行的课表。 ##### 对诊断的影响 如果多校区的排课显示“不可能”,请优先检查: - 已填写的**交通时间**(既不能漏填而“瞬移”,也不能夸张地高估), - 时间网格上的**课间**, - 相关时段上可能存在的**午休**, - **预先指定的教室**:如果班级被指定了另一个校区的教室,就由它决定约束。 手动排课时,该约束会显示为橙色,您仍然可以强制排入。但除非课时已被锁定, 之后运行自动生成算法时,会移动这些课时以消除冲突。 ##### 使用场景:校外活动 除了常设校区之外,多校区机制也自然适用于**定期的校外活动**: - 酒店管理或餐饮学校的**酒店、餐厅参观**; - 艺术或设计学校的**博物馆**或工作室**参观**; - 定期的**企业参访**(工学交替的参观); - 在外部场所进行的**实地实习**(工地、农场、合作实验室)。 为每个定期使用的外部场所创建一个专门的校区,并填写它与主校区之间的交通时间。 刚性约束照常适用:如果两个课时之间的可用时间不够往返,该排课就会被拒绝。 ##### 延伸阅读:高等教育 多校区在高等教育中尤为常见(多个校区、外地分部、四处授课的教师)。 具体情形(借助并行发布的课表为每个校区建一份课表——包含在Premium中; 为视频会议建立虚拟校区等)参见[高等教育中的多校区](#page-higher-ed.multi-site)。 #### 教室——场地 [教室](#page-glossary.classroom)隶属于某个校区,由校区决定其物理属性:地点、时间网格、交通时间。 一间教室包含: - **名称**, - **容量**(学生人数;对生成而言是关键字段), - 可选的**[专业教室类型](#page-glossary.classroom-specialization)** (自由文本:化学、信息技术、体育……), - 可选的**同时容纳班级的最大数量**,用于可以同时容纳多个课时的 **[大教室](#page-glossary.large-room)**(考场、体育馆、游泳馆、室外场地); 只有设置了专业教室类型后,才会出现该字段, - 可选的**标签**或自由备注, - 可选的**教学楼**, - 可选的专属**开放时间**。 ##### 多教室:一个课时使用多间教室 Omniscol**支持**为同一个课时分配多间教室。 使用场景: - **拆分到多个阶梯教室的考试**——200名考生的考试分在三个阶梯教室 (容量70+60+80),由一位教师统一负责。总容量按所分配教室的**总和**计算。 - **同步转播的讲授课**——讲授课在主阶梯教室进行,通过视频会议转播到卫星教室 (在另一个校区,甚至面向完全远程的年级)。 - **拆分的实验课**——30名学生的实验课分在两间相邻的教室(15+15),由同一位教师来回巡视。 限制:如果各教室容量之和**小于**小组的人数,Omniscol会显示冲突。 是否解决由管理员决定(增加教室、减少小组人数,或者在有意为之的情况下接受该冲突—— 例如明知并非所有注册学生都会到场)。 ##### 专业教室类型 **[专业教室类型](#page-glossary.classroom-specialization)**(化学、信息技术、体育、体育馆、多媒体、自习室) 是学校自行定义的可选**自由**标签。您可以按自己的命名习惯创建专业教室类型, 用来区分专用于特定课时的教室(体育馆用于体育,游泳池用于游泳,实验室用于化学实验课等)。 生成严格遵守专业教室类型:如果某个科目要求“化学”,就只会使用带有这一专业教室类型的教室。 每间教室**至多有一个专业教室类型**。对于在两种专用用途之间通用的教室,请使用一个涵盖两者的标签 (例如“信息技术-多媒体”),并把同一个标签关联到相关科目。参见 [专业教室类型](#page-core-concepts.classroom-specializations)。 ##### 班级专用教室 在许多中小学的配置中,每个班级都有自己的教室(课时默认在其中进行,只有教师来回走动)。 这可以在班级上配置——系统会优先使用这间教室安排该班级的课时 (优先级高于教师设定的偏好教室)。 ##### 两个虚拟校区中的教室 如果同一个物理场所被建成两个虚拟校区(典型情况是初中和高中共用校舍), 一间教室同一时间只能属于一个校区。若要让它在两种情境下都可用,请在两个校区中各复制一份, 并设置互斥的开放时间(“上午归初中,下午归高中”),以避免重复分配。 #### 资源——可移动设备 [资源](#page-glossary.resource)是**可移动**的、不固定在某间教室的设备: 三台便携投影仪、一箱平板电脑、一套麦克风等。 每项资源包含: - **名称**, - **可用数量**(一箱算1,而不是30——请输入箱数,而不是单台平板的数量)。 生成保证在同一时段内,需要该资源的课时数不超过可用数量。 对于您“总是够用”的资源,无需建模——只为真正存在的共享限制建模。 #### 特殊情形——视频会议与按课程设置的链接 课时的形式——线下、远程、混合或自主学习——由其**[授课形式](#page-glossary.lesson-modality)**(Premium)决定: 它决定该课时是否占用实体教室。对于远程或混合授课的课程,您可以为课程附加一个 **视频会议链接**(Zoom、Teams、Meet……)。参见 [按课程设置视频会议链接](#page-higher-ed.videoconference-links)。 这比班级上的视频会议链接更精细,后者是适用于所有课时的通用默认链接。 #### 另请参阅 - [专业教室类型](#page-core-concepts.classroom-specializations) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [拆分教室与多教室考试](#page-higher-ed.multi-room-exams) - [按课程设置视频会议链接](#page-higher-ed.videoconference-links) - [授课形式](#page-glossary.lesson-modality) ### 2.11 时间网格、时段与时长 *Source: `help/zh-cn/core-concepts/timetable-grid.md` · id: core-concepts.timetable-grid · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-07-17* **时间网格**描述一个校区的各个时段:开始时间、结束时间、课间、午休和关闭时间。 它同时用于显示、可用时间的检查以及自动生成。 #### 标准存储方式:存的是时段,而不是写死的时间 默认情况下,已排定的课时绑定到**时间网格中的某个时段**。Omniscol保存的是它在网格中的位置, 再根据校区的时间网格重新计算显示的时间。 由此带来的好处:如果某天上课铃从`08:15`改为`08:10`,排在该时段的课时会自动跟随新的时间网格, 无需逐个修改课时。 #### 时间网格的显示模式 **显示模式**决定时间列的呈现方式,不会改变课时的排布: - **课时时间**——每一行显示该时段的实际时间 (8:15–9:10、9:15–10:15……),与校区的时间网格一致。 - **时段**——每一行显示节次编号(P0、P1、P2……), 这是英语国家学校中常见的做法。 - **日历**——整点的日历式显示(8:00、9:00、10:00……), 与时间网格无关:每个课时按其实际时间排在连续的时间背景上。 #### 时段时长 **时段时长**是一个时段的基准时长。如果学校习惯把课间一并计入,它也可以包含课间。 示例: - 每节课55分钟,课间5分钟:时段时长为`60`分钟; - 固定的1小时30分钟课时:时段时长为`90`分钟; - 大多数课时为1小时,少数为1小时30分钟:时段时长为`60`分钟,并配合合适的时段细分。 该时长用于已配置的课时总量和生成。时间网格中实际的开始与结束时间可以有所不同: 由于有课间,显示的某个时段可能只有55分钟,但仍然对应60分钟的基准时长。 此设置在课表编辑的**概述**选项卡中定义(参见[常规设置](#page-timetables.general-settings))。 最常见的时长,按使用频率依次为:60、45、50、120、90、30、180。 有时在高等院校,课时总是持续数小时,但课程可能随机从8:00或9:00开始, 或者持续6小时、有时5小时。这种情况下以最大公约数为准,通常时段时长取60分钟。 #### 时段细分 **时段细分**表示一个时段的时长可以被分成多少个子部分,它是最小的时间步长。示例: - `1`:只有占满整个时段的课时; - `1/2`:时段时长为60分钟时,步长为30分钟; - `1/4`:时段时长为60分钟时,步长为15分钟。 请选择能满足实际需求的最简单的粒度。更细的时段细分带来更大的灵活性, 但也会增加生成时需要尝试的可能性数量。 在界面中,此设置在**概述**选项卡中通过 时段细分调整。 世界上大多数学校体系中,时间网格并不细分。在法国,中学通常是1/2(有些课时为1小时30分钟)。 在某些培训机构,精度可以细到10分钟:此时时段时长为60分钟,时段细分为1/6。 #### 位置与时长:以时间步长存储 课时并不是以“写死”的时间保存的,而是以网格上的**时间步数**保存。**步长**等于时段时长除以时段细分: 时段时长为60分钟、时段细分为1/2,步长就是30分钟。这时1小时的课时占2步, 1小时30分钟的课时占3步。 三个概念并存,互不混淆: - **基准时长**(时段时长)用于统计课时总量和**显示**课时的时长; - 显示的**实际时间**(开始和结束)来自**校区的时间网格**,逐个时段而定; - **存储**则以**时间步数**进行,精度由时段细分决定。 所以同一个时段可以显示8:15–9:10(实际时间),同时按1小时(基准时长)计算。 #### 全局禁用时段 某些时段需要对**整个学校**保持禁用:周三下午、会议时段、预留时段。 这些禁用直接设置在**校区的时间网格上**,把该时段标记为**不可用**: 无论是显示还是生成,都不会在此处排课。 这是**由时间网格承载的时间限制**。在Premium账户上,同一机制还支持柔性限制 (只需避开、无需关闭的时段)。参见[时间限制(通用机制)](#page-core-concepts.time-constraints)。 #### 午休与错开 午餐时间由一个**时间范围**(例如12:00–14:00)和需要保证的午餐**时长**来描述。 当需要保证的时长**短于**这个时间范围时,Omniscol允许在午休的**一部分**时间里安排课时, 只要在插入的课时之前或之后仍能保证午餐时长。午休长达两小时、但允许在其中安排一个1小时的课时是很常见的, 这通常是并非全班都参加的选修课,或者难以协调多个班级的共享课程。 没有课的班级部分不会被视为留校自习(对算法来说,这不算空档)。 午休也是唯一一种把不规则时段当作不同时间步数来处理的情形。若时间步长为30分钟, 时段时长为1小时,午休范围为12:00到13:30,软件会将其视为3个30分钟。 您可以声明为一个1小时30分钟的时段,或1小时加30分钟,或30分钟加1小时,都无所谓。 这种情况下,下午的课时会后移半小时。如果此时声明最短午餐时长为半小时, 就可以在午休时间里安排一个1小时的课时,让相关学生在课前或课后用餐。 您也可以指出**食堂在官方午休之前就开门**:这样该时段上的“空档”就不会被算作学生浪费的时间。 关键是对想要的规则建模:开放的时段、关闭的时段、灵活的午休、可用时间或不可用时间。 时间网格应当反映学校实际接受的安排。 ##### 按年级错开用餐,缓解食堂压力 当食堂无法一次容纳全校学生时,会把各年级分成前后**两批**用餐。时间网格只设置**一个**统一的午休; 错开的安排随后通过时间限制**逐个班级**设置。 1. 在校区的时间网格上,把午休声明为**整个**时间范围——例如**12:00–14:00**—— 并设置**需要保证的午餐时长为1小时**。单独看,每个班级既可以在12:00–13:00用餐, 也可以在13:00–14:00用餐。 2. 要**固定**各年级的用餐批次,请打开班级的时间限制(班级时间限制), 把留给用餐的半个时段涂成**不可用**(黑色)。生成不会在此处排课: 这段时间保证留给午餐,班级的课时则顺延到另一半时段。 以两批用餐为例: - **6年级、7年级、8年级**——12:00–13:00不可用:这些年级在第一批用餐,课时排在13:00–14:00。 - **9年级、10年级**——13:00–14:00不可用:这些年级在第二批用餐,课时排在12:00–13:00。 这样食堂接待的就是两股分开的人流,而不是一股。同样的原则可以扩展到三批或更多: 加宽午休范围,然后为每个年级涂画属于它的用餐半时段。时间限制编辑器的详细说明见 [时间限制(通用机制)](#page-core-concepts.time-constraints)。 > _Premium_ #### 课时的自定义时间 课时可以设置**自定义时间**:精确的开始和结束时间,不一定与某个时段的准确边界一致。 这种情况在所有类型的课表中都存在。 课时会脱离时间网格显示其实际时间:它可以在所显示时段的边界之外开始或结束。 Omniscol使用这些自定义时间计算其实际重叠情况。只要自定义时间与某个时段有交叠, 分配给该课时的所有对象——教师、教室、班级、小组或资源——都被视为已占用。 在自动生成中,带有自定义时间的课时被视为不可移动:其位置会被自动锁定。 > _Premium_ #### 脱离时间网格的班级 **脱离时间网格的班级**是另一种情形:该班级的课时以精确的时间存储,与校区的时间网格无关。 此功能只适用于日历课表。 它主要用于继续教育或非常灵活的培训项目,这些项目与全日制教育共用场地和教师, 但不遵循相同的时间网格。学校会选择一个默认的时间步长,例如一刻钟, 课时则连同其开始和结束时间一起存储。 > _Premium_ #### 自定义时长 课程还可以设置**自定义时长**: - **计算时长**:由课程的自定义时间推算出的时长; - **实际时长**:在仪表盘中优先使用的时长; - **计入时长**:用于计费或教师薪酬的时长。 示例:一场考试占用教室从`08:30`到`11:30`,因为需要在考前布置教室、考后清理教室。 仪表盘的实际时长可以只统计2小时的考试,而监考教师的计入时长, 如果学校将阅卷补贴计入其中,则可以更长。 #### 另请参阅 - [常规设置](#page-timetables.general-settings) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [脱离网格的课时](#page-timetables.off-grid-lessons) ### 2.12 专业教室类型 *Source: `help/zh-cn/core-concepts/classroom-specializations.md` · id: core-concepts.classroom-specializations · Updated: 2026-06-13* 并非所有教室都一样:化学实验室不能用来上体育课,计算机教室只对使用其机位的科目有意义,体育馆只留给体育。Omniscol的**专业教室类型**用来声明这些对应关系,使自动生成和诊断遵守实际的场地限制。 #### 工作原理:教室与科目共用一个标签 专业教室类型基于一个**自由标签**,由学校按自己的命名方式定义,并把两处声明联系起来: - **教室一侧**——每间教室**至多有一个专业教室类型**(“化学”“信息技术”“体育馆”等)。大多数教室没有。 - **科目一侧**——分配给某个班级的科目,可以通过专业教室字段要求使用专业教室。该值必须与至少一间教室所带的标签**完全一致**。 这种联系在两个方向上都是严格的:要求“化学”的科目只会被安排在带有该标签的教室里,而专业教室是**预留**给要求其标签的科目的——不会用于普通课时。 教室的**容量**仍是另一项独立的检查:无论是什么专业教室类型,预计人数都必须容纳得下。 #### 对生成的影响 自动生成时,算法对每门课程只考虑**兼容**的教室:满足科目要求的专业教室类型标签(如有),并且容量足以容纳人数。 如果没有可用的兼容教室,生成会给出提示,诊断会指出相关的科目、班级和专业教室类型。由您来决定:给另一间教室添加该标签、去掉科目上的要求,或重新审视人数。 #### 多功能教室 一间教室只能带**一个**专业教室类型标签。如果一间教室需要承担两种专业用途——例如信息技术和多媒体——请创建一个涵盖两者的标签(“信息技术-多媒体”),并在所有相关科目上填写同一个标签。 #### 通用教室 **通用**教室(没有专业教室类型)接收所有不要求专业教室的科目。这是最常见的情形;只有在您想加以限制时才添加专业教室类型。 #### 大教室:同时容纳多个课时 专业教室通常**一次只容纳一个课时**。您可以通过填写它的**最大同时班级数**,把它变成一间**[大教室](#page-glossary.large-room)**:这样它就可以并行容纳多个不同的课时(教师和小组各不相同),只要人数总和不超过它的容量。考场、体育馆、游泳池或户外场地就属于这种情况。只有在为教室设置了专业教室类型**之后**,才会出现这个设置。 #### 最佳实践 - **从宽松开始**——初始设置时不要设置过多约束,否则可能阻碍生成。 - **首次诊断后再细化**——看到生成结果后,您就能发现哪些情况下缺少专业教室类型会导致安排不当。 - **在团队内说明**——教师和教室管理人员需要理解为什么某间教室受到限制;否则他们会手动绕开。 #### 操作步骤 — 设置生物实验室 1. **设置一间专业教室**(生物实验室、计算机教室、体育馆),避免自动生成出错。 2. **打开教室**:在课表的校区 / 教室 / 资源界面中进行。填写它的**专业教室类型**:选择一个现有标签,或新建一个(例如`生物`)。一间教室只能带一个标签。 3. **容量**:座位数。生成时会检查所分配小组的人数不超过容量。⚠ 请取实际数值——过严会阻碍生成,过宽则会导致重复预订。 4. **科目一侧**:在每个班级的相关科目(生物等)上,在专业教室字段中填写同一个标签`生物`。两者必须完全一致——正是这一点把教室预留给这些科目。 5. 初始设置时**从宽松开始**——约束越少,阻碍生成的风险越小。您会在**首次诊断之后再细化**,看到哪些情况下缺少专业教室类型会导致安排不当。 6. **对于不受限制的教室**(通用教室),不要填写任何专业教室类型:这样该教室会接收所有没有特殊要求的科目。这是最简单的默认做法——只有在您想加以限制时才添加专业教室类型。 #### 另请参阅 - [专业教室类型](#page-glossary.classroom-specialization) - [大教室](#page-glossary.large-room) - [单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources) - [科目管理](#page-admin.subjects) ### 2.13 教师的可用时间与时间限制 *Source: `help/zh-cn/core-concepts/wishes-and-availability.md` · id: core-concepts.wishes-and-availability · Updated: 2026-06-21* 教师的**可用时间**告诉软件哪些时段对该教师而言**不可用**、**不希望**或**优先**。生成算法会严格遵守不可用时段,并尽量满足其他偏好。中学教育中也称为**意愿**,两者是同一个概念。 #### 四个级别 | 颜色 | 含义 | 效果 | | --- | --- | --- | | **黑色** | 不可用 | 硬约束:生成算法绝不会在该时段安排课时 | | **红色** | 不希望 | 软约束:生成算法尽量避开 | | **绿色** | 优先 | 若有多个时段都可行,生成算法优先选择该时段 | 未标记的时间范围为**中性**:可以安排,没有偏好。 #### 启用可用时间录入 录入方式在 [常规设置](#page-admin.parameters)中选择,对应设置项 教师可用时间: - **已停用**:教师不录入可用时间。 - **周课表**:在标准周上录入可用时间,适用于周课表和周期课表。 - **日历课表**:按日期逐日录入可用时间,适用于日历课表,仅限Premium账户。 - **日历课表 + 周课表**:两种录入方式并存,仅限Premium账户。适用于重复课表与日历课表并存的情况,也可以让教师用更简单的方式表明自己在每周某一天始终不可用,无论具体日期(仍可另行标注例外)。 #### 教师自行录入 教师可以在自己的账户中通过 [heart] 录入自己的可用时间,这能为管理部门节省大量时间。 如果学校不希望教师登录,您也可以向教师**发送分享链接**,直接进入其本人的可用时间界面并处于编辑模式。该链接通过 下载 生成,并可设置到期日期。教师无需获得登录账户的权限,即可录入可用时间。 实际操作中,这个链接通常放在一条个性化的消息里一并发送,消息中会写明拟安排的科目、授课小时数、往返不同校区的情况或特殊约束,以及明确的截止日期。Omniscol没有为此提供专门的群发功能:每个链接都嵌入您已为相应教师准备好的沟通内容中。 #### 课表中的管理员审核 在周课表中: - 教师录入的可用时间默认处于**待审核**状态。 - 排课员检查并**审核通过**(可以顺便修改,例如删除限制过多的可用时间,或把黑色改为红色)。 - 教师之后再做任何修改,都会重新进入待审核状态。 在中学,可用时间可以在排课前数周就开放录入。因此教师是在通用时间网格上录入的,审核阶段再把它们调整到课表实际的时间网格上:审核阶段也负责妥善完成这一转换。 虚拟教师的可用时间会直接保存。例如,可以借此默认把周三设为不可用。 在日历模式下([Premium](#page-overview.plans-and-options)): - 可用时间会**实时汇总**。 - 冲突会被直接检测出来。 原因在于,日历模式下时间网格的限制较少(日期众多),而且教师较为自主,甚至是学校的外部人员,同时兼任多个岗位和职责:这已不是意愿,而是真实的可用时间。 因此作为特例,日历模式下教师可用时间的数据,既可以在管理模块的界面中修改,也可以在课表中修改。 #### 生成时的可用时间冲突 如果教师的可用时间**限制过多**,导致无法安排其课时,生成就会失败,并给出明确的诊断。参见[诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 解决办法: - 放宽可用时间(把某个时间范围从黑色改为红色)。 - 重新分配课程(一位教师有18小时的课,却只有12个空闲时段,是无法排开的)。 - 招聘新教师(极端情况,但有时这正是正确的诊断结论)。 #### 操作步骤 — 收集并审核教师的可用时间 1. **可用时间**告诉生成算法哪些时段**不可用**(黑色,硬约束)、**不希望**(红色,软约束)或**优先**(绿色)。生成算法严格遵守黑色,并尽量满足其他标记。 2. **启用录入方式**:在常规设置中(设置项教师可用时间)选择**已停用**、**周课表**(在标准周上录入可用时间,经典模式)或**日历课表**(Premium账户,按日期逐日录入,可与周课表叠加使用)。请根据您的课表类型选择。 3. **向教师开放录入**,有两种方式: - 教师登录后,在自己的账户中通过 [heart] 录入; - 您通过 下载 生成带到期日期的**直达分享链接**(教师无需登录账户),并发送给每位相关教师。 4. **教师端**:教师登录或点击链接,查看自己的网格,把时段标记为黑色(不可用)、红色(不希望)或绿色(优先),然后直接保存。操作很快。 5. **管理员审核(周课表模式)**:录入的可用时间会进入**待审核**状态。请检查后审核通过,必要时可以顺便修改。教师之后再做任何修改,都会重新回到待审核状态。在日历模式下则实时汇总。 ⚠ 如果某位教师标记的黑色过多,生成算法将无法安排其课时,诊断会指出这一点(参见 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation))。 #### 另请参阅 - [时间限制(通用机制)](#page-core-concepts.time-constraints) - [教师的可用时间(意愿)](#page-glossary.wishes) - [不兼容(科目之间)](#page-glossary.incompatibility) - [生成算法](#page-glossary.solver) - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes) ### 2.14 时间限制:班级、课程、小组、教室与时间网格 *Source: `help/zh-cn/core-concepts/time-constraints.md` · id: core-concepts.time-constraints · Audience: admin · Updated: 2026-06-27* **时间限制**告诉生成哪些时段需要**避开**,哪些需要**优先安排**。同一个编辑器既用于 **教师**或**教室**的**可用时间**,也用于**班级**、**课程**、**小组**或**时间网格**本身所带的限制。 每个界面只提供对它有意义的级别。 关于教师的详细情况(由教师填写、分享链接、确认),参见[教师的可用时间](#page-core-concepts.wishes-and-availability)。 #### 四个级别 时段用以下级别之一来涂画,以颜色区分: | 颜色 | 级别 | 对生成的影响 | | --- | --- | --- | | ⚫ **黑色** | 不可用 | 刚性约束:生成绝不在此处排课 | | 🔴 **红色** | 不希望 | 较强的柔性约束:生成尽可能避开 | | 🟠 **橙色** | 不太希望 | 较轻的柔性约束:在其他条件允许时避开 | | 🟢 **绿色** | 优先 | 正向偏好:生成优先选择该时段 | 未涂画的时段为**中性**。[eraser] 橡皮可清除已设置的级别,恢复为中性。 #### 各对象可用的级别 并非所有对象都能使用这四个级别: - **教师**——不可用、不希望、优先 (黑色、红色、绿色)。这就是教师的**可用时间**。 - **班级**(班级时间限制)、**课程** ([clock])、**教室** (可用时间)——不可用和 不希望(黑色、红色)。在这里描述不希望(或尽量不希望)班级上课、 课程的课时被安排、教室被使用的时段。 - **小组**(可用时间)——同样是黑色和红色两个级别, 属于Premium功能(见下文)。 - **时间网格**(校区)——这是**唯一**提供**橙色**级别(不太希望)的界面。见下文。 所有对象都通过对象上的**小时钟**图标[clock]进入(每个班级、班级的每门课程、每间教室……)。 已经填写限制时,时钟图标会**变色**。 #### 在时间网格上设置的限制 在校区的时间网格上,可以直接涂画适用于**整个学校**的**全局限制**: - 把时段涂成**黑色**,就对所有人**关闭**该时段——这就是全局禁止某个时段的方法 (周三下午、课间、会议时段……)。 > _Premium_ 在Premium中,时间网格还接受**柔性**限制:**红色**(不希望)和 **橙色**(不太希望),用于不关闭时段、只降低其被选中的可能。 关于时间网格的结构(时段、时长、课间),参见[时间网格、时段与时长](#page-core-concepts.timetable-grid)。 #### 限制编辑器 所有对象共用同一个编辑器,一切操作都靠点击完成。 **请先在顶部的工具栏中选择一个级别**(可选的级别取决于对象)。它会成为当前的“画笔”, 应用于您触碰的每个时段: - **点击一个单元格**,只涂画该时段;**点击后拖动**经过多个单元格,一次涂画多个时段。 - **点击某一天的表头**,涂画**整列**(整天);**点击某个小时的表头**,涂画**整行** (所有天的该时段)。这是覆盖大片范围最快的方法。 - [eraser] 橡皮和其他画笔一样:选中它,然后点击或拖动即可恢复为中性。 ##### 标准周与日历视图 对于周课表或周期课表,限制在**标准周**上填写。 > _Premium_ 对于日历课表(Premium),导航栏可以在**周**、**月**、**整个学年**和**标准周**之间切换: 您可以填写带日期的限制,也可以在标准周上声明按周重复的限制。 [日期窗口](#page-timetables.date-windows)还会进一步限制某些课程可以安排的时期。 在**标准周**上,每个时段会**汇总**该期间内所有对应日期的限制(例如所有周一的8:00)。 当这些日期的限制不一致时,该时段会显示**按比例分配的彩色条**——每种颜色的宽度反映相应天数—— 其**提示信息**会给出各级别的天数(多少天不可用、不希望等)。 **点击该时段,会一次性把所选级别强制应用到所有这些日期**:这是对整个标准日作出统一决定的通用方式。 #### 其他选项 > _Premium_ 在编辑器下方,班级或小组的限制可以设置**上限**(Premium): - 每天最大课时数——格式为`HH:MM`; - 每周最大课时数——在日历模式下可用。 生成会把这些上限当作优化约束来遵守。 在教师一侧,可以填写自由的**评论**,说明其可用时间的情况(出行、特殊限制)。 #### 级别之间的继承 > _Premium_ **小组**会继承其**班级**和**父组**的限制(参见[小组层级](#page-core-concepts.group-hierarchy))。 当需要在局部**允许**某个时段、而忽略继承来的限制时,**允许的课时**级别可以 抵消继承的限制,**而不修改其来源**。 #### 对生成的影响 **黑色**限制是**刚性**的:课时绝不会被排在不可用的时段。红色和橙色级别是生成力求最小化的**扣分项**; 绿色是**加分项**。如果这些限制导致某个课时无法排入,生成会给出提示—— 参见[诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 另请参阅 - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [小组层级](#page-core-concepts.group-hierarchy) - [时间网格、时段与时长](#page-core-concepts.timetable-grid) - [日期窗口](#page-timetables.date-windows) - [教师的可用时间(意愿)](#page-glossary.wishes) ### 2.15 学年、交替周、假期 *Source: `help/zh-cn/core-concepts/school-year.md` · id: core-concepts.school-year · Plan: standard · Updated: 2026-05-12* **学年**是课表运行的时间框架。它涉及三个关键问题:学年何时开始和结束,假期在何时,以及——如果学校使用交替周——交替周如何与该日历对齐。也称为校历。 #### 学年与起止日期 一个学年有**开始日期**和**结束日期**。在这个范围内,各周会被编号。课表的发布适用于这些周中的一部分或全部。日历课表甚至可以发布在超出学年的期间上(典型的如18个月的EMBA),但只有在学年中声明过的日期才会被计入。 没有当前学年,就无法发布任何课表:此时没有任何课时会进入日常使用的模块(主页、课表、仪表盘、缺勤管理)。因此学年是一项前提条件,参见[学年与假期](#page-admin.school-year)。 学年之间的日期不能重叠。通常两个学年之间会隔着一段假期,但也完全可以首尾相接。有些培训机构不遵循学年周期:这时学年就是自然年,从1月1日到12月31日。 #### 假期 **假期**是**非活动**的日期范围:没有课时,没有活动,也不计入统计。有两个来源: - **通用假期**——来自该国的官方日历(国庆节、春节、寒假、暑假)。Omniscol可以根据所设置的国家为您提供建议,是否导入由您自行选择。 - **特定假期**——学校自己的假期(教研日、考试、本地调休)。需要您手动添加。 两种类型可以不加区分地叠加。不过,假期对整个学校全局有效。如果只涉及部分班级,请使用班级缺勤,或班级的不可用期间(可以在多个班级之间复用,例如这些班级都在国外时)。 #### 交替周(A/B及更多) 有些学校的课程只隔一周(甚至更久)上一次:体育课连上两节、班会轮流进行、选修课。Omniscol通过**周计数**来处理:一年中的各周并不加标签,而是连续计数。每门课程按自己的节奏轮转——隔周一次(A/B)、每三周一次(A/B/C)等。这样,同一个时段会按该周在轮转中的位次容纳不同的课时,例如单周一个课时、双周另一个课时,日期和时间相同。由于计算是动态的,同一个班级中可以同时存在A/B课程和A/B/C课程。 交替周的**启用**以及交替的**显示格式**(`A/B`、`1/2`……)在[常规设置](#page-admin.parameters)中设置。之后,在[学年与假期](#page-admin.school-year)界面中,可以在时间轴上**强制指定计数重新回到A周的位置**,例如假期之后重新理顺;为保持清晰,时间轴上只以A/B形式显示交替。要在某个时段**声明交替的课时**,参见[复杂课时](#page-core-concepts.complex-lessons)。 #### 多个学年并行 Omniscol可以在同一个账户中**并行管理多个学年**:例如当前的2026-2027学年,以及正在筹备的下一个2027-2028学年。**当前学年**决定了用户日常看到的内容;其他学年仍可在管理或查阅时访问。 #### 另请参阅 - [学年](#page-glossary.school-year) - [交替周课时](#page-glossary.alternate-lessons) - [学年与假期](#page-admin.school-year) - [第8步——发布课表](#page-timetables.publication) - [复杂课时](#page-core-concepts.complex-lessons) ### 2.16 时间轴与时间导航 *Source: `help/zh-cn/core-concepts/timeline-navigation.md` · id: core-concepts.timeline-navigation · Updated: 2026-05-12* Omniscol中所有显示日程表或统计数据的界面,页面顶部都有一条**时间轴**(即“横幅”)。 通过它可以**在时间中导航**:选择学年、显示的期间,并且在部分界面上, 可以从周视图切换到月视图或年视图。 本页介绍通用原则;各模块的特殊之处见其专页。 #### 时间轴按钮 时间轴两端各有一个**左右箭头**: - **左箭头**←回到**上一学年**, - **右箭头**→前进到**下一学年**(例如正在准备中的下一学年)。 **当前显示**的学年(或期间)通常会在时间轴上方以文字标明。 #### 常见疏忽:右箭头 > 课表管理模块**默认显示当前学年**。排课员准备下一学年开学时, > 必须**明确点击**时间轴的**右箭头**切换到下一学年,才能在其上安排并发布课表。 > 在这个界面上,也可以通过点击学年在各学年之间切换。当前学年显示为绿色,下一学年显示为橙色。 #### 各模块的时间视图 并非所有模块都提供相同的时间粒度: | 模块 | 默认视图 | 其他视图 | | --- | --- | --- | | **课表** | 周 | 日、月 | | **仪表盘** | 周 | 月、年、自定义起止日期范围 | | **缺勤管理** | 周 | 月、年、自定义起止日期范围 | | **人员调度** | 周 | 日 | | **课表管理** | 整个学年 | | | **日历课表编辑** | 周 | 月 | | **日历式可用时间** | 周 | 月、学年、标准周 | **视图切换按钮**位于时间轴旁边,通常在左上方。`年`视图和`自定义起止日期范围`视图主要出现在 仪表盘模块,用于跨时间段的统计。 #### 默认显示的学年 **当前学年**(在[管理](#page-admin.school-year)中设置)会在所有模块中为所有用户 **默认显示**。 - 查看课表的教师和学生 **只能看到当前学年**。在门户端无法访问以往的学年或筹备中的学年。这是有意为之: 对他们来说,课表就是今天的课表。 - **缺勤**只能在**当前学年**登记。您不能追溯登记过去学年的缺勤,也不能提前登记下一学年的缺勤。 - 而**管理员**可以通过时间轴在各学年之间**导航**——所以理解这两个箭头很重要。 当前学年也是导出以及与外部软件同步时所采用的学年。 #### 切换当前学年的时机 典型流程: 1. **第N学年进行中**。您通过右箭头,在[课表管理](#page-timetables.overview)中并行筹备 第N+1学年。所有用户在门户和缺勤中看到的仍是第N学年。 2. **最终准备**第N+1学年的开学:第N+1学年的课表已发布到对应的周 (但当前学年仍是第N学年)。 3. **开学前夕**,当您准备好让所有人切换到第N+1学年时:在 [管理 → 学年](#page-admin.school-year)中更改当前学年。 4. **立即生效**:所有用户现在默认看到第N+1学年。教师和学生 可以查看他们的新课表。缺勤现在登记在第N+1学年。 具体的切换时间取决于您的学校——通常是一切确认无误后的**开学前一天**, 有时是**开学当天早上**,以留出检查的余地。无需着急:您仍可以以只读方式查看过去的学年作为历史记录。 #### 学年不等于自然年 Omniscol中的**学年**不一定是9月至次年8月。常见的特殊情况: - **继续教育机构**——通常按**自然年**(1月1日至12月31日)运作。请在 [管理 → 学年](#page-admin.school-year)中用这些日期定义您的学年; 其余一切照常运行。 - **学期错开或周期很长的大学**(持续18个月的集中模块)——您可以定义长度不标准的学年。 #### 另请参阅 - [学年](#page-core-concepts.school-year) - [学年与假期](#page-admin.school-year) - [发布课表](#page-timetables.publication) - [准备下一学年](#page-timetables.next-school-year) ### 2.17 在列表中搜索和筛选 *Source: `help/zh-cn/core-concepts/search-and-filter.md` · id: core-concepts.search-and-filter · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-06-27* Omniscol中大多数列表(教室、教师、班级、科目、资源、学生等)都配有同一个搜索栏:它将**文本**搜索与(在有数值的地方)**数值**条件结合起来。在**教室**列表中,数值条件针对的是**容量**,这是最完整的用法,下文将详细介绍。无论是在仪表盘的教室选项卡中,还是在课表里为课时分配或更换教室时所用的**教室选择器**中(分配教室),您都能看到这个搜索栏。 #### 文本搜索 文本搜索适用于**上述所有列表**。在教室列表中,它会搜索教室名称、校区、教学楼、专业教室类型,或在Omniscol中填写的标签;在其他列表中,则搜索所显示的字段(名称、代码等)。 示例: - `东校区` 显示信息中包含 `东校区` 的教室。 - `实验室 化学` 显示同时匹配这两个词的教室。 - `阶梯教室, 体育馆` 显示匹配 `阶梯教室` 或 `体育馆` 的教室。 #### 容量筛选(教室) 在教室列表中,数值比较符按教室的容量进行筛选: - `>50`:容量严格大于50; - `>=50`:容量不小于50; - `<25`:容量严格小于25; - `<=100`:容量不大于100; - `=30`:容量恰好等于30; - `50-100`:容量在50到100之间; - `50-`:容量大于或等于50; - `-25`:容量小于或等于25。 #### 常用组合 空格表示需要同时满足的多个条件,逗号则分隔多个可选项。 - `>50 东校区`:关联到东校区、座位超过50的教室。 - `<=30 实验室`:实验室类型的小教室。 - `阶梯教室, >100`:包含 `阶梯教室` 的教室,或座位超过100的教室。 - `A楼 信息技术`:关联到A楼且与信息技术相关的教室。 #### 为什么要认真填写教室信息 校区、教学楼、专业教室类型和标签保持最新时,筛选会更精确。这些信息可以改善课表中的搜索、教室统计,以及教学楼使用情况的分析。 #### 另请参阅 - [教室统计](#page-dashboard.classrooms) - [使用表格和图表](#page-dashboard.tools-and-filters) - [第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 2.18 管理员协作 *Source: `help/zh-cn/core-concepts/collaboration.md` · id: core-concepts.collaboration · Audience: admin · Feature: collab · Updated: 2026-06-13* > **Premium** **实时协作**选项允许多位管理员同时在同一个Omniscol账户上工作:每个人都能实时看到其他人的在线状态,服务器会合并并发的操作。 #### 实时在线状态 屏幕顶部会为每一位与您同时登录该账户的其他管理员显示一个**带姓名首字母的圆点**(您自己的是浅蓝色,人数较多时圆点会相互叠放)。将鼠标悬停在圆点上,提示框会显示对方的姓名以及**对方当前打开的界面**。 当另一位管理员打开与您**相同的编辑界面**时,圆点会变为**红色**——例如构建课表(校区、班级、小组、授课时数分配)、重新调整、人员调度、用户、科目或设置。这表示存在**同时修改的风险**。 不过,系统不会阻止您:服务器会尽可能**合并并发的操作**,让每个人的修改都得以保留,不会被悄悄覆盖。但是,如果修改同一位用户或同一个课时的完全相同的字段,或者批量导入数据,就必然会产生冲突:最后修改的人为准。红色圆点提醒您相互协调,避免在同一时间、对同一数据、在同一位置并发工作。 #### 适用场景 - **有多位管理人员的大型学校**——每人负责一个院系、一个年级或一个校区,但大家同时在Omniscol中工作。 - **繁忙时期**——新学期的课表编制、考试周的切换、处理一批缺勤。 - **会议中协同**——团队围绕一项决定开会,多位参与者在各自的电脑上修改:借助在线状态圆点,可以分好各自负责的区域。 #### 同步限制 在线状态圆点是实时传递的。但另一位用户打开的业务视图,在您保存之后不一定会自动刷新。如果同事刚刚修改了您正在查看的数据,请在据此做出决定之前,重新加载视图或重新打开该对象。 #### 最佳实践 - **划分职责范围**:谁负责什么。范围可以是非正式的(通过电子邮件约定),也可以通过[自定义角色](#page-admin.customroles)落实。 - **在应用之外沟通**——为业务决策保留一个单独的协调渠道;在线状态指示不能代替工作指令。 - **避免同时编辑同一结构**:如果两个人在同一时间修改某个班级的学生名单,冲突的风险就会增加。请按范围拆分子任务。 #### 操作步骤 — 三位管理员协调新学期的准备工作 1. **在大型学校**,新学期的课表编制需要多位管理员并行工作。**实时协作**选项增加了实时在线状态以及并发操作的合并。 2. **事先确定职责范围**(开会或通过电子邮件):谁负责哪个院系 / 年级 / 校区。您可以用[自定义角色](#page-admin.customroles)来完善这种安排,它会限制每个账户可使用的模块和操作;而按院系或校区的划分,仍然只是团队的约定。 3. **所有人登录** Omniscol账户。屏幕顶部会实时出现其他已登录管理员的**姓名首字母指示圆点**。悬停时会显示每个人的姓名和当前所在界面。 4. **冲突信号**:当两位管理员打开相同的编辑界面(相同的班级、相同的重新调整等)时,圆点会变为**红色**。这表示存在同时修改的风险,所有相关管理员都能看到。 5. **服务器会合并**并发的操作:编辑期间不会有任何阻拦,每个人的修改都尽可能保留。红色圆点提醒您在动手修改同一位置之前先相互协调。 6. **最佳实践**:保留一个单独的协调渠道,并按范围拆分子任务(每个院系一位管理员)。避免两个人同时编辑同一结构(例如某个班级的学生名单)。 同事做出修改后,请先重新加载相关视图,再把显示的数据当作最新数据。 #### 另请参阅 - [Omniscol的套餐与选项](#page-overview.plans-and-options) - [用户与角色](#page-admin.users-and-roles) - [自定义角色](#page-admin.customroles) --- ## 3. 创建课表(课表管理模块) ### 3.1 课表管理模块概览 *Source: `help/zh-cn/timetables/overview.md` · id: timetables.overview · Audience: admin · Updated: 2026-06-13* **课表管理** 模块是Omniscol的核心:课表在这里创建、配置、生成和发布。 对于重复型课表(周课表/周期课表),这个模块只是**偶尔**使用(通常在开学前、创建不同的学期,以及进行结构性调整时),而不是每天使用(日常使用的是[课表](#page-schedules.consult-and-filter)模块)。 对于高等教育中的日历课表,情况恰恰相反,它是整个排课团队每天的主要工作界面。 #### 排课流程 构建课表并不是一条直线:创建和设置之后,核心是一个**循环**——安排几个课时、生成、分析、调整、再回到生成——之后才是从**发布**(开学)开始的线性阶段。 ```mermaid flowchart LR A["创建"] --> B["设置
校区、教室、教师、
班级、小组、课程"] B --> M["手动安排
锚点、锁定"] M --> G["生成
自动/手动,
部分或完整"] G --> J["分析,
针对性调整"] J -->|循环| G J --> P["发布
= 学年开始"] P --> E["运行"] E --> Mod["学年中
的修改"] Mod -.->|例外| J ``` 您可以随时返回上一步、中途保存,或者复制一份课表来创建变体。循环的核心内容详见 [自动生成](#page-timetables.generation) 和 [手动安排](#page-timetables.manual-placement);开学之后的调整通过 [临时调整](#page-schedules.ad-hoc-changes) 进行。 #### 并行的多份课表 您的账户中可以有多份课表: - 尚未发布的**草稿**(在当前学年运行的同时准备下一学年), - 对应不同**时期**的课表(上学期、下学期……), - 在Premium下,在相同的周上**并行发布**的课表(例如上午的周课表加下午的日历课表)——参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)。 这项功能也可以通过合同在某些Standard账户上开通。 #### 详细步骤 每一步都有专门的页面: **前提**:[创建课表的前提条件](#page-timetables.prerequisites)。然后是八个步骤: 1. [常规设置](#page-timetables.general-settings) 2. [校区、时间网格、教室、资源](#page-timetables.sites-rooms) 3. [分配教师](#page-timetables.assigning-teachers) 4. [创建班级及其小组](#page-timetables.creating-classes) 5. [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) 6. [分配课时数并创建课时](#page-timetables.hour-distribution) 7. [自动生成](#page-timetables.generation) 8. [发布课表](#page-timetables.publication) 您可以随时: - **查看**课表(只读模式),用于核对。 - **调课**(快速编辑模式),用于调整课表中课时的位置。 - **复制**课表(基于现有课表创建草稿)。 - 通过表格**导入**或**导出**课程配置(参见[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import))。 #### 快速开始 如果这是您的第一份课表: 1. 先确认已完成[配置学校账户](#page-getting-started.setup-school)(设置、学年、科目、用户)。 2. 点击右上角的 创建课表。 3. 选择课表类型(周课表、周期课表、日历课表),参见[选择合适的课表类型:周课表、周期课表、日历课表](#page-overview.timetable-modes)。 4. 按顺序完成各个步骤。 如果您已有表格中的数据(Excel、Google Sheets、其他软件的导出文件),可以直接使用[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import):Omniscol会为您创建结构,之后您再完善即可。 #### 另请参阅 - [选择合适的课表类型](#page-overview.timetable-modes) - [为批量导入准备数据](#page-getting-started.preparing-data) - [高等教育使用场景](#page-faq.higher-ed-cases) - [特殊情况与高级配置](#page-faq.edge-cases) ### 3.2 创建课表的前提条件 *Source: `help/zh-cn/timetables/prerequisites.md` · id: timetables.prerequisites · Audience: admin · Updated: 2026-05-10* 创建课表之前,学校层面必须已有三项内容: #### 1. 至少一个学年 没有学年就没有时间轴,也就无法发布。请在学年中创建。 参见[学年与假期](#page-admin.school-year)。 #### 2. 要用到的科目 Omniscol已为您所在的国家预先填入常用科目库。 对于特有的科目,请在创建中创建**自定义科目**。 ⚠ 请仔细核对拼写:将科目加入课表时,Omniscol会在内部复制一份,之后的修改不会同步到现在或过去已发布的课表中。 参见[科目管理](#page-admin.subjects)。 #### 3. 教师 请在管理 > 教师中创建所有教师(可逐个创建,也可通过[导入](#page-getting-started.preparing-data)批量创建)。 至少填写名、姓和电子邮箱。所教科目和服务时间为选填,但很有用。 参见[教师管理](#page-admin.teachers)。 #### 选填但很有用 - **学生**——创建课表时不是必需的,但课表发布后,个人课表需要用到。 - **课时类型**(习题课、实验课、讲授课……)——如果您的教学体系使用这些类型,请在创建中创建。 - **年级**——请检查管理 > 设置中是否已包含您将使用的年级。 #### 不必万事俱备才能开始 Omniscol很**灵活**。如果创建课表时教师或科目还没有全部准备好,您可以先开始,之后再逐步补充。这样流程不那么线性,但完全可行。 不过,发布之前,**学年**是真正不可或缺的。 #### 开始 这些前提条件(至少部分)就绪后: 1. 进入课表管理模块。 2. 点击创建课表。 3. 选择[课表类型](#page-overview.timetable-modes)。 4. 您将进入[常规设置](#page-timetables.general-settings)页面。 5. 为课表起一个名称(例如“2025-2026学年课表”“2025秋季学期”)并填写说明。 #### 操作步骤 — 创建课表前检查前提条件 1. **学校层面必须已有三项内容**,才能创建课表:学年、科目、教师。 2. **学年**:打开学年。检查是否至少已定义一个学年,并设置了起止日期和假期。没有学年,就没有时间轴,也无法发布。参见 [学年与假期](#page-admin.school-year)。 3. **科目**:Omniscol已为您所在的国家预先填入科目库。如果您的学校有特有的科目(`家政`、`机器人`、`高级日语`),请通过 创建创建。 ⚠ 请仔细核对拼写:Omniscol会把名称复制到每份课表中,创建之后再修改,不会同步到过去和现在已发布的课表。 4. **教师**:打开教师。每位教师至少填写名、姓和电子邮箱。所教科目和服务时间为选填,但很有用。教师人数较多时,请批量导入(参见 [为批量导入准备数据](#page-getting-started.preparing-data))。 5. **选填但很有用**:如果您的教学体系使用课时类型(习题课、实验课、讲授课……),请通过创建创建。年级请在常规设置中检查 (创建)。 6. **准备就绪**:进入 **课表管理** 模块,点击创建课表按钮。选择类型 ([课表类型](#page-overview.timetable-modes)),填写名称(`2026-2027学年课表`、`2026秋季学期`)和说明。下一步: [常规设置](#page-timetables.general-settings)。 #### 另请参阅 - [配置学校账户](#page-getting-started.setup-school) - [下一步——常规设置](#page-timetables.general-settings) ### 3.3 日历模式——高级选项 *Source: `help/zh-cn/timetables/calendar-mode.md` · id: timetables.calendar-mode · Audience: admin · Plan: premium · Updated: 2026-10-01* > **Premium** > _Premium_ **日历模式**是Omniscol支持的三种课表类型之一,另外两种是周课表和周期课表。 当课表没有规律的重复时使用它:每个课时都有确切的日期,没有每周重复的模式。 创建日历课表包含在Premium方案中, 与[日历模式下的可用时间与约束](#page-timetables.calendar-wishes) 以及[同时发布多份课表](#page-timetables.multiple-active-timetables)一样: Premium账户无需另行启用即可使用这些功能。 #### 日历模式的专有功能 - 创建每个课时都单独标注日期的课表; - 设置开始和结束日期范围; - 在已配置日期约束时使用日期约束; - 只生成比课表总范围更短的目标时间窗口; - 要求生成使用集中上课日,把课时集中在时期开头、时期末尾,或不设位置偏好; - 像其他课表一样显示、发布和查看课时,只是针对一个日期区间; - 声明某些班级的课时按每周的模式重复,并把不适用该模式的课程设为例外; - 在日历课表的班级上使用非网格模式,每个课时都有明确的开始和结束时间。 #### 配套功能 以下功能在各自的专页中说明,与日历课表天然配合: - [同时发布多份课表](#page-timetables.multiple-active-timetables), 用于在同一时期发布多份课表; - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes),用于收集带日期的可用时间; - [教学小组组合](#page-core-concepts.groups-of-groups), 用于处理跨班级的小组。 #### 何时选择日历课表而非周课表 - **不重复的培训**:集中授课的模块、研讨会、日期不固定的讲座。 - **继续教育**:不按常规学年运行的培训班次。 - **兼职授课人员**:每位授课人员有自己的日程, 没有固定的每周服务时间。 - **学业末期的课程**:项目、答辩、评审。 高等教育的典型场景请参见[日历模式](#page-higher-ed.calendar-mode)。 #### 重复课时 日历课表模式并不排斥规律性:班级可以使用一个额外选项, 重复课时。启用后,其课时按每周的模式重复, 而不是逐个手动安排。该选项在创建班级和修改班级时都可勾选, 并且只存在于日历课表中。 该班级的某门课程可以通过不参与重复成为例外: 考试、答辩、临时受邀的授课人员都没有需要遵循的模式, 它们的课时仍然逐日期安排。 该选项会影响[自动生成](#page-timetables.generation--recurrence): 生成时会先找出一个标准周,再把它铺展到班级的日期区间。 它还会让[分配规则](#page-timetables.distribution-policy)中出现 重复的设置。您可以指定重复课程期望的安排节奏, 也可以让算法自动推断。课程也可以被声明为不重复。当算法无法完全满足重复要求时, 会为其余课时寻找最接近的方案:同一个重复日但换一个时间, 或同一周内越来越远的其他日子,或者完全换到别处。 #### 操作步骤 — 创建日历课表 1. 在课表管理中**新建课表**。在类型选择界面选择**日历模式**。 输入开始和结束日期,然后确认。 2. **配置日历**:标签、说明、工作日和时间结构。 您还可以声明可重复使用的**[日期窗口](#page-timetables.date-windows)**, 应用于班级、小组和课程的时间限制,以及教室的可用时间。 3. **录入有确切日期的课时**:日期、时间、 小组或班级、教师和教室。如果班级采用非网格模式,请填写明确的开始和结束时间。 4. 如果在这份课表上使用生成功能,请**启动生成**。 可用的约束取决于已填写的数据: 教师、教室、日期、可用时间和日历约束。若要测试或逐步构建, 请使用高级选项限制生成的日期窗口; 如果不希望算法把课时铺满整个可用时期,请启用集中上课日。 5. **发布并合并**:您可以把这份日历课表与常规周课表同时发布。 相关人员在查看时会看到合并后的课时。参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)。 #### 另请参阅 - [日历模式](#page-glossary.calendar-mode) - [选择合适的课表类型](#page-overview.timetable-modes) - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes) - [日期窗口](#page-timetables.date-windows) - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [面向非循环培训的日历模式](#page-higher-ed.calendar-mode){append=(高等教育)} ### 3.4 日历模式下的可用时间与约束 *Source: `help/zh-cn/timetables/calendar-wishes.md` · id: timetables.calendar-wishes · Audience: admin/teacher · Plan: premium · Updated: 2026-06-20* > **Premium** > _Premium_ 在**日历模式**下,排课依据的是**确切日期**,而不是每周重复的标准周。 这改变了时间限制和可用时间的表达方式,分为两个不同的方面: - 班级、课程和小组的**时间限制**,以及**教室的可用时间**; - **教师的可用时间**。 在日历课表中,我们使用“**可用时间**”这一说法:“*意愿*”一词仍专用于教师在标准周上的填写, 发生在排课之前,并需经排课员确认。 #### 班级、课程、小组和教室 只要课表是日历类型,班级、课程和小组的时间限制以及教室的可用时间 就会自动**按日期**表达,而不是按标准周。当某项设置每周都完全相同时, 您还可以另外指定**按标准周重复**。 对于可重复使用的时期——考试周、某些班级专有的假期、允许使用的时段—— 可以把[日期窗口](#page-timetables.date-windows)作为图层叠加到这些 时间限制和可用时间上。 #### 教师的可用时间 在标准周中,教师声明的是一条恒定的规则——*“我周三下午不可用”*。 在日历课表中,可用时间**逐日**声明,可以表达更细的情况: - *“我只有3月12日周三上午不可用”*, - *“我只能在1月20日至30日之间授课”*, - *“我每周有3个半天可用,具体哪几个半天每周不同”*。 当可用时间每周都不同时,应优先使用这种方式—— 这在高等教育、兼职教师和继续教育中很典型。 ##### 设置录入方式 在教师方面,请把设置教师可用时间 (学校的常规设置)设为**日历**或**日历 + 每周**,以适应按确切日期排课。 组合模式还允许教师简单地声明 **每周某一天始终不可用**,与具体日期无关(仍可设置个别例外)—— 这相当于班级、课程、小组和教室的“按标准周重复”在教师方面的对应功能。 ##### 可用程度 录入界面采用**日历视图**。排课员或教师点击相关日期,并为该时段标注程度: - **不可用**:硬性不可用——生成时不会在此安排任何课时; - **不希望**:强约束,尽可能避免; - **优先**:正向偏好; - **橡皮**:清除所覆盖区域中已设置的可用时间。 录入可以按整天、半天或时段进行,取决于学校配置的粒度。 ##### 适用对象 - **兼职教师和外部授课人员**——没有固定的每周服务时间。参见 [外部授课人员(外聘教师、访问教师)](#page-higher-ed.external-faculty)。 - **实行治疗性部分工时或有特殊安排的教师**——每周情况不同。 - **继续教育课程**——每个班次都是一次性的。 - **部分时间外出交流的教师**——只在某些周可用。 #### 操作步骤 — 在日历课表中收集兼职教师的可用时间 1. **对于没有固定每周服务时间的兼职教师**(例如外部授课人员), 在标准周上录入并不够用。**日历**模式可以逐日期记录可用时间。 2. **启用合适的模式**:根据账户的需要, 把设置教师可用时间(学校的常规设置)设为 **日历**或**日历 + 每周**。 3. **向兼职教师开放录入**。他可以用教师账户登录, 也可以由您生成指向其可用时间界面的**直接分享链接**(参见 [教师的可用时间](#page-core-concepts.wishes-and-availability))。 使用这种方式时,直接链接可以省去创建专用账户。 任何管理员也可以自行录入可用时间。 4. **兼职教师一侧**:他看到的是**年度日历**,而不是每周网格。 他点击日期(或半天,或时段,取决于学校的粒度), 并用提供的可用程度来标注该区域。 5. **在管理端检查汇总**。已保存的可用时间会被课表界面 以及查看约束的诊断读取。 6. **对该兼职教师的课程启动自动生成**:生成时会把可用时间的优先级 与课程的其他约束结合起来。覆盖的场景:兼职教师、 治疗性部分工时、继续教育、部分时间外出交流的教师。 #### 另请参阅 - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [日历模式](#page-timetables.calendar-mode) - [日期窗口](#page-timetables.date-windows) - [选择合适的课表类型](#page-overview.timetable-modes) ### 3.5 日期窗口 *Source: `help/zh-cn/timetables/date-windows.md` · id: timetables.date-windows · Audience: admin · Plan: premium · Updated: 2026-06-20* > **Premium** > _Premium_ **日期窗口**是一段可**重复使用**的日期**纳入**或**排除**时段,用来限制某些课时可以安排的时间。您只需定义一次,然后把它作为**图层**应用到班级、小组和课程的时间限制以及教室的可用时间上。 此功能只适用于**日历类型的课表**。 #### 两种类型:允许或排除 - **允许的课时**——课时**只能**安排在这些日期内。 - **排除的课时**——课时**不能**安排在这些日期内。 #### 如何组合 同一个实体可以同时应用多个窗口: - 允许的窗口相互叠加; - 排除的窗口相互叠加; - 出现重叠时,**排除优先于允许**。 #### 典型用例 - **轮换节奏相同的班级**——若干班级只在特定的周上某些课(或只在每周的前段或后段)。用一个描述这些周的*允许*窗口应用到所有这些班级,就不必逐个班级重复录入节奏。 - **考试周**——覆盖考试期的*排除*窗口会暂时锁定相关教室或班级,使其不会安排普通课时。 - **部分班级独有的假期**——在一个位于海外的单位,有一批班级的假期安排与学校其他部分不同。把这些日期设为*排除*窗口,只应用到这些班级,就能停掉这段时间,而不影响其他班级。 #### 定义日期窗口 在日历课表的编辑界面中,进入 日期窗口 部分: 1. 添加 会打开日期选择器。 2. 输入一个**名称**,并选择类型——允许或排除。 3. 在日历网格上选择日期:拖选、整周、某一天的整列、单周/双周快捷选项,或反选。 4. 保存:该窗口会加入课表的可重复使用列表。 #### 应用日期窗口 定义之后,该窗口会出现在**班级、小组和课程**的时间限制以及**教室**的可用时间中:在其中选择一个或多个窗口即可。同一个窗口可以用于任意多个实体——这正是可重复使用图层的意义所在。 #### 生成时 生成程序把窗口视为约束:只会把课时安排在允许的日期内,绝不会安排在排除的日期里。 #### 另请参阅 - [日历模式](#page-timetables.calendar-mode) - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes) - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [自动生成](#page-timetables.generation) - [手动安排](#page-timetables.manual-placement) ### 3.6 第1步——常规设置 *Source: `help/zh-cn/timetables/general-settings.md` · id: timetables.general-settings · Audience: admin · Updated: 2026-07-17* 在**概述**标签页中,您可以设置构成课表结构的全局设置。 预填的数值来自[学校常规设置](#page-admin.parameters),您也可以提前调整这些设置。 #### 需要填写的字段 1. **标签**——课表的名称(“2025-2026学年课表”“2025年第一学期”等)。在各处都会显示,可以修改。 2. **描述**——自由文本,在有多份课表时很有用。 3. **显示模式**——默认每个时段一行,时间显示在左侧。您也可以选择带编号节次的英美式样,或以整点显示的日历式样。 4. **时段时长**——一个时段的基准时长,可包含课间休息。如果您的课时长55分钟、课间休息5分钟,请输入**60分钟**。如果您的常规课时长1小时30分钟,请输入**90分钟**。时长与细分在[时间网格、时段与时长](#page-core-concepts.timetable-grid--slot-duration)中有详细说明。 5. **时段细分**——时段的时长可以分成多少个部分?若要在60分钟的时段中创建1小时、1小时30分钟或2小时的课时,请选择**1/2**。若要细到一刻钟,请选择**1/4**。 - **建议**:不要比需要的更细。细分越细,生成算法的计算时间越长。 6. **工作日**——勾选上课的日子。默认为周一至周五(国家设置不同时除外——阿拉伯国家、以色列等)。 7. **周期课表**——周期的天数。 8. **日历课表**——开始和结束日期(之后可以修改),以及可选的日期窗口。 #### 保存 底部的按钮保存用于保存配置。 #### 接下来 确认这些设置后,进入下一步:[第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms)。 > **提示。**如果您从其他系统迁移过来,或只是想快速试用Omniscol,需要大批量创建课时(一次数百节)时,[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import)比逐个界面录入更快。不过,您事先录入的结构性数据越多,导入的效果就越好。 #### 操作步骤 — 配置课表的常规设置 1. **课表创建的第1步**:设定名称、时段时长、时段细分和工作日。这些选择会长期决定课表的结构,最好一开始就设置妥当。 2. **标签和描述**:取一个清楚的名称(`2026-2027学年课表`、`2026年第一学期——硕士二年级商科`)和一段自由描述。在界面各处都会显示。可以修改,但在正式使用期间请避免重命名。 3. **显示模式**:每个时段一行(默认),或带编号节次(英美式样),或以整点显示的日历式样。请遵循贵校的习惯。 4. **时段时长**:一个时段的基准时长。55分钟的课时加5分钟的课间休息 → **60分钟**。常规1小时30分钟的课时 → **90分钟**。如果保留60分钟的时段,通过细分同样可以安排1小时30分钟的课时。 5. **时段细分**:时段的时长可以分成多少个部分?60分钟的时段,**1/2** 对应30分钟的步长,**1/4** 对应15分钟的步长。越细,生成算法需要尝试的可能性就越多。 6. **工作日**:勾选周一至周五(默认)。阿拉伯国家、以色列:周日至周四。**周期课表**:周期的天数。**日历课表**:开始和结束日期(之后可以修改)。 7. **通过保存保存。**下一步:[第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms)。大批量创建时,参见[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import)。 #### 另请参阅 - [时间网格、时段与时长](#page-core-concepts.timetable-grid) - [创建课表的前提条件](#page-timetables.prerequisites) - [第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [学校常规设置](#page-admin.parameters) ### 3.7 第2步——校区、时间网格、教室、资源 *Source: `help/zh-cn/timetables/sites-rooms.md` · id: timetables.sites-rooms · Audience: admin · Updated: 2026-08-08* 您在 **校区** 选项卡中为学校的物理空间建模。 #### 创建校区 如果您所有的课时都在同一个地点进行:一个校区就够了。点击 创建校区,给它起个名称。 如果您有多个校区:每个不同的物理地点创建一个校区。填写校区之间的 **路程时间**(时长矩阵)。这一点至关重要——没有这些时间,生成算法可能会把一位教师安排在9:00至10:00于A校区上课,而10:05又在相距5公里的B校区上课,这在现实中是不可能的。 请不要混淆校区和单位:[单位](#page-glossary.campus)是在常规设置中配置的组织性分组;校区则承载时间网格、教室和路程时间。 校区的使用场景和限制(同一地点设置两个虚拟校区、多校区与多账户之间的选择等),参见[校区](#page-glossary.site)。 #### 配置时间网格 每个校区都有自己的**时间网格**: - 时段的开始 / 结束时间, - 课间休息, - 午休, - 停课时段(周三下午、周六……)。 标准课时挂在这张网格的时段上。如果之后修改了某个时段的时间,已安排在该时段的课时会跟随新的网格。自定义时间以及不在网格内的班级属于特殊情况,参见 [时间网格、时段与时长](#page-core-concepts.timetable-grid)。 Omniscol会根据您录入的信息自动推断网格,但请再核对一遍并按需调整——这对显示效果和算法都很重要。 时段应与[上一个页面](#page-timetables.general-settings)中设置的[时段时长](#page-core-concepts.timetable-grid--slot-duration)相符。例如,如果您为标准课时填写了60分钟,那么无论实际填写的时间是多少,每个时段都按1小时计算——因为有课间休息,实际时长有时是50或55分钟,略有出入。如果某个时段的理论时长与实际时长相差太大,时间可能会变红,提醒您配置有误。 请不要把休息时间设成时段!任何时段都可以安排课时(除非将该时间段标记为不可用)。常见的误解是以为具体时间会直接产生影响:其实不会,Omniscol把课时安排在时段上,再按每个相关时段所填写的时间来显示。 #### 录入教室 为每个校区创建[教室](#page-glossary.classroom)。字段如下: - **名称**(必填), - **容量**(必填——没有这个字段,生成算法无法核对教室大小是否合适), - **[专业教室类型](#page-glossary.classroom-specialization)**(化学、信息、体育……可自由填写), - 最大班级数,用于设置**[大教室](#page-glossary.large-room)**(考场、剧场、体育馆、游泳池、室外场地)。只有填写了专业教室类型之后,此字段才会出现, - **教学楼**(选填), - **时间限制**(适用于与其他学校共用的教室,或室外运动场地), - **标签 / 评论**(白板、插座、电脑……可自由填写)。 您可以从电子表格**批量**复制粘贴来创建教室。 ##### 单位 > _Plan: standard_ 教室的单位表明**它服务于学校的哪个组织单元**:一个学院、一个学部、集团中的一所学校,或一个继续教育项目。带有单位的教室,对于在优先使用的教室中选择了该单位的班级,会排在前面,并且可以在教室相关页面中按该名称筛选。 这个概念源自高等教育,在高等教育中最为常见。当一所学校在同一屋檐下容纳多个学段时,它同样有用——例如各学段保留各自教室的初高中一体学校,或同时有小学和中学的校区。 一间教室可以带有**多个单位**,但仍只属于**一个校区**。这就是多个学院或同一集团的多所学校共用一个空间的情形。这两个概念回答的是不同的问题,可以结合使用:单位描述组织结构,校区描述地点,并承载物理方面的约束——时间网格、本地兼容性、路程时间。 可用的单位列表在[账户设置](#page-admin.parameters)中管理。 > _Premium_ ##### 多教室 Omniscol允许为同一个课时安排多间教室,总容量等于各教室容量之和。典型用法(分设在多个阶梯教室的考试、转播的讲授课、分开上的实验课等)参见 [多教室](#page-glossary.multi-room)。 ##### 专业教室类型 **专业教室类型**(自由填写的字段)用来表明某个科目需要特定类型的教室。生成算法会严格遵守。 ##### 大教室 专业教室可以成为**[大教室](#page-glossary.large-room)**:填写其最大班级数,它就可以在同一时间容纳多个不同的课时(教师和小组各不相同),上限是这个数量及其容量。考场、剧场、体育馆、游泳池或室外场地就属于这种情况。只有为教室指定了专业教室类型之后,该字段才会出现。 #### 录入资源 [资源](#page-glossary.resource)是不固定在某间教室的可移动设备(便携投影仪、平板电脑箱、套件等)。每项资源需填写: - **名称**, - **可用数量**。 一箱30台平板电脑只算1(而不是30)——您录入的是箱数。 “总是够用”的资源不必建模——只为真正需要共享的有限资源建模。 > _Premium_ **校区**、**教室**和**资源**可以从外部系统同步——每个列表都有各自的同步按钮(同步、 同步、 同步)。参见 [与外部系统同步](#page-integrations.extsync)。 #### 接下来 下一步:[分配教师](#page-timetables.assigning-teachers)。 #### 操作步骤 — 创建校区及其时间网格 1. **校区**对应一个不同的物理地点,有自己的时间网格(时段、休息、午餐)。至少需要一个校区。本流程介绍校区的创建及其最基本的从属内容(教室、资源)。 2. **点击创建校区**,给它起个名称(`主校区`、`上海校区`……)。如果您只有一个校区,一个就够了。有多个校区时,每个需要区分的物理地点都添加一个。 3. **配置时间网格**:时段的开始 / 结束时间、课间休息、午休、停课时段(周三下午、周六……)。 4. **录入教室**:名称、容量(对生成算法至关重要的字段)、专业教室类型(化学、信息、体育……)、开放时间,以及单位(如果您的组织使用单位)。教室上的单位用于让某些班级优先使用它,而不会妨碍使用其他兼容的教室。同一间教室可以属于多个单位。一间教室只属于一个校区——若教室由多个虚拟校区共用,参见 [校区、教室、资源](#page-core-concepts.sites-rooms-resources)。 5. **录入资源**(可移动设备):名称 + 可用数量。只为确实需要共享的有限资源建模(便携投影仪、平板电脑箱、麦克风套件),不必为“总是够用”的资源建模。 6. **如果有多个校区,请填写路程时间**,通过距离弹窗填写(三角半矩阵)。没有这些时间,生成算法会让教师“瞬间移动”——细节参见 [多校区:规则与路程时间](#page-core-concepts.sites-rooms-resources)。 #### 另请参阅 - [校区、教室、资源](#page-core-concepts.sites-rooms-resources) - [单位](#page-glossary.campus) - [时间网格、时段与时长](#page-core-concepts.timetable-grid) - [多教室](#page-glossary.multi-room) - [专业教室类型](#page-glossary.classroom-specialization) ### 3.8 第3步——分配教师 *Source: `help/zh-cn/timetables/assigning-teachers.md` · id: timetables.assigning-teachers · Audience: admin · Updated: 2026-06-13* 在教师选项卡中,您可以指定哪些教师**参与**这份课表, 而不是只在学校层面登记的全部教师。 #### 分配 点击教师分配,系统会显示可选的教师列表,选择相关教师即可。 您可以**分批指定**:先添加已确定聘用的教师,之后随着招聘的推进再逐步添加新教师。 > _Premium_ 教师可以从外部系统同步: 同步会打开比对界面。 参见[与外部系统同步](#page-integrations.extsync)。 #### 虚拟教师 虚拟的按钮用于创建**虚拟教师**,临时代表一个尚待招聘的岗位。 这样不必等招聘结束,就可以提前准备新学期的课表。 姓名旁会出现一个[ghost]图标。招聘确定后,点击该行末尾的 转换按钮, 即可“转正”这位虚拟教师:在列表中选择真正的教师, 虚拟教师的所有引用都会转到该教师名下,包括各班级中的科目安排以及所有课时。 虚拟教师随后永久删除。**此操作不可撤销。** #### 永久替换教师 同一个转换按钮也适用于**真实**教师: 它会把该教师的全部课时转交给列表中的另一位教师(该教师可以已指定到这份课表, 也可以只是在学校层面登记),然后把原教师从这份课表中移除。 这就是**永久替换**,适用于原定教师无法到岗、调动或不再授课的情况: 所有课时和安排都会一次性转给接替的教师。**此操作不可撤销。** #### 可用时间 如果您通过设置教师可用时间启用了可用时间的录入 (参见[教师的可用时间](#page-core-concepts.wishes-and-availability)), 您将在这里**检查并确认**教师填写的可用时间。 您还可以: - 修改**服务时间**(每周计划的小时数,会沿用到新建的课表), - 指定**优先教室**(生成时优先用于该教师的课时,除非班级有自己的专用教室)。 #### 学校层面与课表层面的区别 重要:**学校层面**的教师详情保存身份信息(姓名、电子邮件、登录名),保持稳定。 **课表层面**的教师详情保存*与这份课表相关*的信息(可用时间、优先教室、服务时间)。 因此,如果您在课表创建之后,在教师中更正了教师的姓名, 课表仍会保留原来的姓名。这是出于可追溯性的有意设计, 所以请确保创建课表时姓名拼写正确。 #### 兼职教师(外聘人员) 兼职教师请参见[外聘教师 / 校外授课人员](#page-glossary.external-teacher)。 他们的创建方式与普通教师相同。 > _Premium_ 用户详情中的**外聘教师**标记会添加一个小图标[user-tie], 在部分界面中区分兼职教师和专职教师。 对于只偶尔授课(一两个课时)的访问教师,您可以视情况: - 把他们添加为某个课时的协同授课教师(参见 [协同教学](#page-glossary.co-teaching)), - 为他们的授课单独创建一门课程(主要用于日历课表)。 #### 下一步 下一步:[创建班级及其小组](#page-timetables.creating-classes)。 #### 操作步骤 — 为课表分配教师 1. **课表创建的第3步**:指定哪些教师**参与**这份课表 (而不是学校层面登记的全部教师)。 2. **添加已确定聘用的教师**:点击 教师分配,系统会显示学校层面登记的教师列表, 选择参与这份课表的教师。 您可以**分批指定**:先添加专职教师, 之后随着招聘的推进再逐步添加新教师。 3. **对于任何待招聘的岗位**,通过 虚拟的创建**虚拟教师**,并以[ghost]图标标识。 这样不必等招聘结束,就可以提前准备新学期的课表。 招聘确定后,点击该行末尾的 转换按钮, 即可把其所有引用转到您在列表中选择的真正教师名下。已安排好的课时会保留。 同一个按钮也用于**永久替换**真实教师(调动、退出等)。 **请注明**虚拟教师在这份课表中任教的科目: 之后安排时,系统会优先为这些科目推荐该教师。 4. **可用时间**:对于周课表,您需要**检查并确认**教师的填写内容。 对于任何类型的课表,您都可以**查看并填写**所有可用时间。参见 [教师的可用时间](#page-core-concepts.wishes-and-availability)。 5. **优先教室**(可选):如果教师有专用教室, 请通过[location-pin]在此指定。 生成时会优先为其课时使用该教室,除非班级已有自己的专用教室(班级优先于教师)。 6. **下一步**:[创建班级及其小组](#page-timetables.creating-classes)。 #### 另请参阅 - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [教师管理](#page-admin.teachers) - [教师](#page-glossary.teacher) - [外聘教师](#page-glossary.external-teacher) ### 3.9 第4步——创建班级及其小组 *Source: `help/zh-cn/timetables/creating-classes.md` · id: timetables.creating-classes · Audience: admin · Updated: 2026-10-01* 这是最具结构性的一步。在 **班级** 选项卡中,您创建班级及其小组,并填写每个科目的小时数。 #### 1. 创建班级 点击 创建班级。每个班级需要填写: - **名称**(必填), - **年级**(从已有年级中选择;点击 创建 可添加新年级), - **单位**,如果贵校采用这种组织方式, - 默认 **校区**(生成程序只会在该校区的教室中查找,除非某个课时被明确安排到其他校区), - **专属教室**(可选——课时默认在该教室上课), - **优先使用的教室**(可选——指明该班级优先尝试的 单位 和/或教室标签), - **理论人数**(可选,但建议填写,用于教室容量的估算)。 单位 和 校区 回答的是两个不同的问题:单位 表明班级隶属于学校的哪个单位;校区 表明班级实际所在的位置,以及默认使用哪些教室。 在 日历课表上,班级多出一个选项:重复课时,它让班级的课时按每周的模式重复,而不必逐个安排。参见 [日历模式](#page-timetables.calendar-mode--recurrence)。 ##### 优先使用的教室 **优先使用的教室** 字段描述这个班级习惯使用的教室,无需逐间列出:您指定若干[单位](#page-timetables.sites-rooms--campus)、若干标签,或两者兼有,凡带有其中任一标记的教室都归入这个集合。比如在自己教室里上课的院系、保留两间阶梯教室的继续教育项目、分布在多个校区的专业方向:偏好只需一两个选择,并且会随您之后新增的教室自动更新。 这个集合会被优先尝试,无论是自动安排还是手动选择。当这些教室都没有空闲时,Omniscol会选用另一间兼容的教室。 班级的 **单位** 则用于分类和筛选。两个字段相辅相成——一个说明班级隶属于哪个单位,另一个说明班级习惯在哪里上课。 ⚠ 如果忘记指定校区,课时将无法安排(缺少教室和时间网格)。系统会发出警示提醒您。 #### 2. 为每个班级创建小组 点击班级的 添加小组 按钮。凡是学生不是整班一起上的课,都要创建相应的小组。 每个小组需要填写: - **名称**和**代码**(两者配合使用,便于识别), - **理论人数**, - 如果多个小组必须或可以安排在**同一时段**(实验A组和实验B组,或第二外语日语组和德语组),请通过 添加班内分组 创建[班内分组](#page-core-concepts.class-divisions)。 提示:如果某个班级的小组与另一个班级的(几乎)相同,请使用按钮 从其他班级导入 导入配置,再进行调整。 > _Premium_ **班级**和**小组**可以从外部系统同步:同步 和 同步 会打开匹配界面。参见 [与外部系统同步](#page-integrations.extsync)。 #### 3. 按班级配置科目(课程) 进入 **课程** 选项卡(或点击班级的 课程 按钮)。 您这样分配给某个班级的每个科目——带有小时数,还可以带有类型(习题课、实验课、讲授课……)——就构成一门**[课程](#page-glossary.course)**:教学安排的基本单位(“9年级1班的数学,每周4小时,习题课”)。一个班级的所有课程构成它的**培养方案**。您之后在网格上安排的[课时](#page-glossary.lesson)就是这些课程的具体实例。 每门课程需要填写: - 每周**小时数**, - 可选的**课时类型**(习题课、实验课、讲授课……), - 指定的**教师**, - **教学比重**(生成程序会尝试让该科目在各天之间均衡分布), - 所需的**专业教室**(从校区的[专业教室类型](#page-glossary.classroom-specialization)中选择), - **安排偏好**(避免数学排在一天的最后,体育课避开炎热时段……)。 提示:使用 从其他班级导入 可以复用其他班级的科目配置。该对话框甚至可以导入另一份课表中的班级,并且可以扩大范围:是否替换现有列表,是否一并带上关联的教师、小组、不兼容规则、班级的时间限制。还可以进一步复制课时的分配,同样通过选择导入的范围来实现。至于课时的位置,在日历类型的课表上,可以平移日期(这样会按来源和目标的工作日重新计算先后顺序)。这对于一年中多次开设完整的循环课程的机构(例如连续六周或八周的课程)非常方便。 #### 4. 科目之间的不兼容 [不兼容(科目之间)](#page-glossary.incompatibility)禁止某个科目**紧接着**另一个科目。这条规则是**有方向的**:“科目A不能排在科目B之后”与反过来并不相同。典型情形是:“体育课之后不能立刻排数学”。请在班级的 **不兼容** 选项卡中声明。 创建规则时,请选择适用的**范围**: - **紧接着**——不能排在紧随其后的课时,限同一天。例如:不要让要求高的科目紧接在消耗大的科目之后,“体育课之后不能立刻排数学”。 - **在同一个半天**——不能排在同一半天的更晚时间。例如:错开语言课,“英语之后不排日语”——若要互相排斥,再加上相反的规则“日语之后不排英语”。 - **在同一天**——不能排在同一天的更晚时间。例如:分散艺术类学习,“同一天音乐课之后不排美术”。对于这类均衡需求,科目的**教学比重**往往是更简单的选择。 - **在同一周内**——不能排在同一周的更晚时间。例如:遵守先讲授课、后实验课的顺序,“化学讲授课之前不排化学实验课”。 - **始终** *(日历课表)*——在整个时间段内都不能排在其后:这是用于**先修顺序**的排序工具。例如:“C语言之前不排C++”,“会计学之前不排金融学”。 几点提示,帮您选对设置: - **不希望某个科目排在特定时间**(“第一节不排数学”“中午不排体育”)**不是**不兼容:请使用**课程的时间限制**([clock]),它针对的是单一课程的各课时的绝对位置。 - **避免某个科目一天出现两次**,用全局的**自我不兼容**选项比逐对设置规则更简单。 - 不兼容是**软**约束(生成程序会尽量消除的扣分项),而不是硬性阻塞:它可能保留在生成的课表中,由[诊断](#page-glossary.diagnostic)指出。不要堆积过多——每一条都会减少生成程序的自由度。 #### 接下来 下一步:[对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups),如果您有跨班级的共同课程([共享课程](#page-glossary.transverse-course))。 否则,直接进入[第6步——分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 操作步骤 — 创建班级及其小组和班内分组 1. **班级**把同一培养路径的学生归在一起。班级可以拆分为**小组**(半班、选修课、不同水平),并通过**班内分组**声明班内相互排斥的小组。 2. **点击“添加班级”。** 填写名称(`6年级1班`、`本科一年级信息`……)、年级(从已配置的年级中选择)、单位(如果使用)、默认校区,还可以填写专属教室和理论人数。没有校区,课时将无法安排——系统会给出明确警示。 3. **创建班级的小组。** 每种不同的教学用途一个小组:`实验A组`、`实验B组`(实验课半班)、`第二外语日语`、`第二外语德语`(选修)、`强化英语`、`标准英语`(水平分层)。强烈建议:**每门不同的课程一个小组**,即使学生相同。 4. **声明班内分组**——相互排斥的小组。选择这些小组(例如 `第二外语日语` + `第二外语德语`),点击 添加班内分组。没有班内分组,生成程序会把同一班级的两个小组视为可能冲突。 5. **按班级配置科目**:每周小时数、指定的教师、默认课时类型。科目从学校的科目库中选择(官方科目或自定义科目)。 6. **下一步:** 如果有跨班级的共同课程,进入 [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups),否则直接进入[第6步——分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) - [单位](#page-glossary.campus) - [班级](#page-glossary.class) - [小组](#page-glossary.group) ### 3.10 第5步——对齐与教学小组组合 *Source: `help/zh-cn/timetables/alignments-and-groups-of-groups.md` · id: timetables.alignments-and-groups-of-groups · Audience: admin · Updated: 2026-05-10* 这一步是**可选的**——如果没有跨班级的共同课程,请直接跳过。只要不同班级的学生需要**一起上同一门课程**(多个班级的拉丁语选修、跨班级选修课、专业方向课等),就需要这一步。 #### 对齐 适用于**所有**类型的课表,但对结构相同的平行班级的**重复性**课表(周课表/周期课表)尤其适用。参见参考页面:[小组对齐](#page-core-concepts.alignments)。 要点: - 先在每个相关班级中创建一个名称相同的**小组**(8年级1班、8年级2班、8年级3班中都有“拉丁语选修”)。 - 然后在“小组对齐”选项卡中,点击 添加小组对齐,把三个班级的小组关联起来。 - 检查已对齐的小组之间**授课小时数是否相同**(否则Omniscol会给出不一致的诊断)。 #### 教学小组组合 参见参考页面:[教学小组组合](#page-core-concepts.groups-of-groups)。 要点: - 打开“教学小组组合”选项卡。 - 选择成员小组(来自同一班级或不同班级),创建教学小组组合。 - 然后把课程指定给该教学小组组合——它们会显示在所有所属班级中。 - 可随时修改(添加/移除成员小组)。 #### 为一个课时直接指定多个小组 还有一个快捷方式,可以**为一个课时直接指定多个小组**,而无需创建有名称的教学小组组合。 这种方式适合**临时**或试探性的需求: - 在课时的小组选择器中勾选多个小组; - 该课时随即由这些小组共享,而不会创建专门的有名称的实体; - 之后您可以改回单个小组,或者在需求变得长期时,把它正式整理为教学小组组合。 不过,它比有名称的教学小组组合**更不易读**,也**更难重复使用**:明确的业务意图会丢失,也更难在多个课时上找到、重新编辑或重新应用同一个分组。 #### 何时使用哪一种 | 情形 | 工具 | | --- | --- | | 周课表/周期课表中重复出现的共同课程 | **对齐** | | 临时或会变化的共同课程 | **教学小组组合** | | 组成可能变动 | **教学小组组合** | | 临时需求,不需要有名称的结构 | **直接指定多个小组** | | 已最终确定、不再变动的配置 | **对齐**或**教学小组组合** | #### 常见陷阱 - **已对齐的小组之间小时数不同。** 如果一个小组有3小时拉丁语,另一个只有2小时,对齐就会给出诊断。要么统一小时数,要么取消对齐。 - **三个已对齐的班级中,只有2个班级有共同课程。** 如果希望其中一个班级在该时段有独立的课程,就必须复制它的小组,并取消该副本的对齐。 - **学生重复注册**(例如某位学生在8年级1班上拉丁语,却注册在8年级2班)。解决办法:在8年级1班*和*8年级2班中都创建“拉丁语选修”小组,两个小组都包含这位学生,然后再进行对齐。 #### 接下来 下一步:[分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 操作步骤 — 创建跨班级对齐 1. **对齐**声明:**不同班级**的多个小组必须在同一时间、同一间教室、由同一位教师上同一门课程。典型情形:8年级1班、8年级2班、8年级3班的拉丁语选修。 2. **前提**:先在**每个相关班级**中创建一个**逻辑名称相同**的小组(8年级1班、8年级2班、8年级3班中都有`拉丁语选修`)。参见[第4步——创建班级及其小组](#page-timetables.creating-classes)。 3. **“小组对齐”选项卡** → 点击 添加小组对齐。选择相关班级的小组(`拉丁语选修 8年级1班`、`拉丁语选修 8年级2班`、`拉丁语选修 8年级3班`),然后确认。 4. **检查授课小时数**:已对齐的小组之间必须相同(例如各组都是3小时拉丁语)。否则Omniscol会给出不一致的诊断。 5. **日历课表**:建议改用[教学小组组合](#page-core-concepts.groups-of-groups),它更灵活(可事后修改,添加/移除小组时无需复制)。使用专门选项卡上的 添加教学小组组合 按钮。 如果需求是**临时**的,您也可以在小组选择器中直接为课时指定多个小组,而无需创建有名称的教学小组组合。 6. **下一步**:[分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 另请参阅 - [小组对齐](#page-core-concepts.alignments) - [教学小组组合](#page-core-concepts.groups-of-groups) - [共享课程](#page-glossary.transverse-course) - [小组对齐](#page-glossary.alignment) - [教学小组组合](#page-glossary.groups-of-groups) ### 3.11 第6步——分配课时数并创建课时 *Source: `help/zh-cn/timetables/hour-distribution.md` · id: timetables.hour-distribution · Audience: admin · Updated: 2026-09-23* 您已经在每个班级上声明了各科目的授课小时数(第4步)。现在要把这些小时数分解为一节节**单独的课时**。 界面分为两部分: - **左侧**:班级及其**课程**的列表(班级的各科目,可按类型细分),每门课程带有已创建小时数的动态计数器。 - **右侧**:为所选班级创建的课时。 #### 三种显示模式 右侧面板有**三种模式**,通过该面板左上角的选择器切换。每种模式各有用处,切换时**不会丢失正在进行的工作**。 ##### 便签(默认) 课时以**卡片**形式呈现,按科目分类,或按日期分类(日历类型的课表)。本页其余部分详述的就是这种模式:双击创建,拖动边框调整时长,点击卡片上的图标设置属性。 - **优点**:非常直观;最适合**创建**课时、分解授课小时数、通过拖动调整时长,以及直接在卡片上处理复杂课时(交替、连堂……)。 - **缺点**:不便于一次对**大量**课时进行操作、对全局视图做精细筛选、查看安排情况以及快速安排课时。 ##### 课表(调课) 课时以接近课表的布局显示,随时可以**批量调课**。 - **选择**:点击选中一节课时并打开交互式详情。 - **多选**:**Shift+点击**可将选择扩展为一个**范围**。选中的课时随后在同一个详情窗口中**一起**编辑(批量时长、共同属性……)。 - **动态筛选**和**显示日期的选择**可以把显示范围收窄到您正在处理的内容。 - **“待分配”筛选**:单独列出**待分配教室**或**待分配教师**的课时,以补全缺失的指定;警示标记会提示尚待补全的内容。 - **日期 / 实体切换**会根据您要比较的内容,改变日程表的坐标轴方向。 - **优点**:手动安排非常高效,可交叉查看(例如班级+教师),可调整大量课时,有针对性的筛选便于处理缺漏,直接在日历上快速**批量**编辑。 - **缺点**:创建初始课时不如便签直接,不能创建复杂课时,批量视图和编辑的精细筛选较少。 ##### 列表 课时的**表格视图**:**每节课时一行**,**每项信息一列**(状态、班级、科目、时长、位置、交替周、教师、小组、教室、人数、资源、备忘)。 - **排序**:**每一列**都可排序——点击表头按该列排序,再次点击则反转顺序(升序 / 降序)。 - **按列筛选**:每个表头下方有一个**多选下拉菜单**用于筛选该列(组合列如日期+时间,有时有**两个**菜单;人数列有区间输入框 `>=10, <5, 10-20`)。**同一个菜单**中的多个值按**或**组合,但若是不同类型的值(例如教室的标签、视频会议、容量和名称),则按**与**组合;设在**多个列**上的筛选按**与**叠加。有一个按钮可重置所有筛选。 - **分页**:数据量大时列表会分页;每页大小会**自动调整**(从几百行到几千行),以保持流畅。 - **简化的批量编辑**:勾选所需的课时(选择列),然后使用该列**表头的操作按钮**(时长、教师、小组、教室……),把设置**一次性**应用到整个选择。 - **教室自动分配**:选择一组**课时**和一组**教室**;算法会给出**最优分配**(人数、教室约束、可用时间),您可以**逐行调整**后再确认。参见[教室自动分配](#page-timetables.auto-room-assignment)。 - **优点**:可排序的总览、**按列精细筛选**、**批量**编辑和教室分配。 - **缺点**:时间维度的直观信息不如另外两种模式,不能创建复杂课时。 #### 创建一节课时 *课时*是一门**课程**的单次具体课时(包括它的科目、时长,有时还有小组,通常有教师和教室),之后再安排到课表中。 选择一个班级,然后**双击一门课程**:系统会按默认值创建该科目的一节课时(时长 = 班级的时间单位,课程的教师,必要时使用默认教室)。它创建时**没有位置**,归入**尚未安排的课时**,等待算法或手动安排。 双击在三种模式下都有效;课程列表只是位置不同:便签模式下在中央,课表和列表模式下则在**左侧面板中每个班级的下方**。 之后要**设置**该课时(时长、小组、教师、教室、资源),界面取决于它的显示方式: - **只要它还是卡片**——在便签模式下,或在课表视图中尚未安排时——拖动**下边框**调整时长,点击卡片上的**图标**设置属性。 - **一旦安排到日历上,或在列表中**,设置通过**下拉菜单**进行:*课时编辑*详情(点击日历上的课时),或列表中的行菜单和列菜单——后者还支持**批量**编辑。 #### 分解授课小时数 例如:一门数学课每周4小时,可以分解为: - 4节1小时的课时,或 - 2节2小时的课时,或 - 1节2小时+ 2节1小时的课时。 由您根据教学节奏选择。课程的计数器会持续跟踪您的进度(见下文)。 ##### 自动分配 操作菜单提供**自动分配**,可一次补足每门课程**缺少的小时数**:它会添加所选时长的课时(网格的1或2个时段,日历模式下为3和4个——因此以小时计的数值取决于课表的时段时长),若余数不是整数,则以一节较短的课时收尾。它会保留已创建的课时,设置默认的教师和教室,并让所有课时都**保持未安排**状态。 它只对**可见的课程**起作用:可与按科目或类型的**筛选**(筛选)配合使用,例如只分配“讲授课”。在**列表**模式下,它一次处理**所有班级**;在其他模式下,处理**所选班级**。 #### 每门课程的小时计数器 左侧的每门课程都带有一个计数器,将**已创建的小时数**与第4步声明的**目标授课小时数**(例如 `3 h / 4 h`)对照。进度由**卡片的外观**体现: - **不足授课小时数**:外观正常——还有小时数需要创建。 - **恰好达到授课小时数**:卡片**变淡**(降低不透明度),表示已完成。 - **超过授课小时数**:**红色边框**——您创建的小时数过多。 计数器的小圆标则直接采用该科目的**颜色**(因此可能是绿色、蓝色……,与进度无关);悬停时,卡片会以界面的强调色加下划线。悬停还会显示一个气泡,详细列出已创建课时的**分类**(时长、类型、交替周、草稿 / 已取消)。 ##### 子小组与平衡指示器 当一门课程被拆分为**班内分组**(多个子小组**同时**上课,通常是分班上课)时,计数器**不会**乘以小组数:一个班内分组只计**一次**——否则总数会显示为 `n × 授课小时数`,这没有意义。 接下来要检查的是所有子小组是否得到相同的授课小时数:这就是课程右侧出现的图标[scale-balanced]的作用。 - **绿色天平**——*班内分组中的小组处于平衡状态*:所有子小组的小时数相同。 - **橙色天平**——*班内分组中的小组处于不平衡状态*:某个子小组的小时数多于或少于其他子小组。 悬停在图标上会列出**各小组的详情**(每个子小组的小时数),可以立即找出需要补足的那个。 #### 复制课时 有两个层级的复制。 **快速克隆。**图标复制——便签卡片上和列表的每一行都有——会在**临时区域**(未安排)创建该课时的**一个副本**,包括所有属性。适合连续创建相同的课时。 **高级复制。**在课时详情(*课时编辑*弹窗)中,带箭头的复制按钮会打开一个丰富得多的菜单,主要用于**课表 / 日历**视图。首先选择复制**几份**(1到999)——在日历类型的课表上也可以选择**直到某个日期**——然后选择**如何**安排: - **在临时区域添加课时**——副本保持未安排状态。 - **相同时段**——在同一时段重复该课时。 - **下一个空闲时段**——自动查找与时长兼容的时段。 - **后几天** / **前几天**——移到相邻的日子。 - **后几周** / **前几周**——*(仅日历模式)*逐周顺延。 - **选择时段**——由您自己在日程表上指出空闲的时段。 在按天或按周的选项中,“空闲”按钮会把查找限制在未被占用的时段内。在日历模式下,如果启用了跨课表比较,这种查找甚至可以延伸到当前课表之外。 #### 备忘 您可以通过图标评论给课时附加**备忘**(自由评论)。可以添加多条备忘,具有不同的**可见级别**: - 仅管理员, - 管理员+教师, - 所有人(学生可见,信息显示屏上也可见)。 备忘会显示在课表上悬停于课时时出现的气泡中。 #### 复杂课时 对于复杂的配置,参见专门的页面:[复杂课时](#page-core-concepts.complex-lessons)。概要如下: - **交替**(A/B周)——课时右上角的添加一周,用于添加一个交替周。 - **连堂**(连续)——把一节课时拖放到另一节下方。 - **关联**(半个小组交替)——出现在两节连堂课时之间的按钮。 - **协同教学**(同一节课时有多位教师)——在分配教师上选择多位教师。 #### 批量操作 右上角的操作菜单可进行批量操作: - **取消所有已排课时**(已锁定的除外), - **解锁所有已排课时**, - **删除所有已配置教室**, - **指定预设教室**(班级或教师的默认教室,特殊教室除外), - 将课时在1或2个时段内**自动分配**, - **表格导入 / 导出**(参见[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import)), - **删除所有课时**(所选班级)⚠。 #### 动态错误检测 每次修改时,Omniscol都会检查一致性,并在屏幕顶部以及相关的班级 / 课时上显示警示。参见[诊断](#page-glossary.diagnostic)。 在日历课表上,这项检查还会考虑在相同日期发布的其他课表以及关联账户:参见[与另一份课表的冲突](#page-timetables.conflicts--other-timetable)。 #### 保存 ⚠ 删除课时是**即时且永久的**(除非您尚未保存)。请通过保存定期保存。 此界面没有全局的撤销 / 重做功能。保存之前,请再检查一遍删除和批量操作。 #### 接下来 下一步:[自动生成](#page-timetables.generation)。 #### 操作步骤 — 分配一门课程的课时数 1. **您已经在第4步中为各班级声明了每门课程的授课小时数。**这一步把这些小时数**分解**为单独的课时(一节课时 = 一个时段,之后由算法或手动安排)。 2. **在左侧选择一个班级。**右侧面板显示已为该班级创建的课时,按课程分组。每门课程的计数器将已创建的小时数与目标授课小时数(`3 h / 4 h`)对照:达到授课小时数时卡片变淡,超过时变为红色边框。 3. **双击一门课程**,按默认参数(时长、类型)添加一节课时。拖动课时的**下边框**调整时长。点击卡片中的**图标**修改小组、教师、教室、资源。 4. **按您的意愿分解授课小时数**:一门4小时的课程 = 4节1小时的课时,或2节2小时的课时,或混合。课程卡片在恰好达到目标授课小时数时变淡。在班内分组(子小组同时上课)中,绿色 / 橙色的图标[scale-balanced]会提示所有子小组得到的授课小时数是否相同。 5. **要连续创建相同的课时**,先创建第一节,然后**复制**:通过复制快速克隆到临时区域,或在详情中使用高级复制(同一时段、相邻的日子 / 周、空闲时段……),尤其适用于日历视图。 6. **复杂课时**(A/B交替、双节连堂、轮换关联、多位教师协同教学):参见课时卡片上的专用图标以及页面[复杂课时](#page-core-concepts.complex-lessons)。 7. **下一步:**[自动生成](#page-timetables.generation)。 #### 另请参阅 - [复杂课时](#page-core-concepts.complex-lessons) - [通过表格批量导入课程](#page-timetables.mass-import) - [课程](#page-glossary.course) - [课时](#page-glossary.lesson) ### 3.12 课时分配规则 *Source: `help/zh-cn/timetables/distribution-policy.md` · id: timetables.distribution-policy · Audience: admin · Plan: premium · Updated: 2026-09-14* > **Premium** > _Premium_ 一门课程带有学生视角的授课小时数:例如本科一年级的24小时财务分析。要编排课表,就得把这些小时数转化为课时;如果班级采用班内分组,这24小时还要按需要授课的小组数量重复相应的次数。 课时分配规则是这一小时数与具体课时之间的**可选**环节。在任何课时尚未存在之前,它就描述了课表应当包含的内容: > A组 · 王老师 · 4节课,每节2小时 这就是**预排课**。在许多学校,课表并不是由排课的人来决定的:由教务部门确定培养方案,排课员照此执行,几乎没有调整余地。这条规则就是把这一决定明确写下来的地方,紧挨着它所针对的课程。 规则设定后有三种用途: - 它**指导课时的创建**:在[分配课时数并创建课时](#page-timetables.hour-distribution)界面,规则所描述而尚未创建的课时,一次操作即可创建,并带上授课对象、授课教师、教室和时长; - 它**实时检查差异**:在您操作的过程中,指示器会把规则的预期与课表的实际内容进行比较,任何偏差都会提示; - 它**修正差异**:点击调整匹配,即可让偏离的课时回到规则要求的条件上,无需删除或重新创建。 #### 它只描述划分,不负责排课 规则只做**陈述**:多少节课、每节多长、面向谁。它自己不会创建任何课时,也不会把任何课时放到时间网格上。 排课工作**只在[分配课时数并创建课时](#page-timetables.hour-distribution)界面进行**:课时在那里创建、调整和安排。规则只是告诉该界面应当包含什么,并在不符时发出提示。 #### 规则所处的位置 ```mermaid flowchart LR M["科目
教学门类本身
例:财务分析"] C["课程
某班级所学的科目
授课小时数、教师"] subgraph P["课时分配规则(可选)"] L1["规则1
A组 · 4 × 2小时"] L2["规则2
整个班级 · 1 × 3小时"] end S["课时
课表中
实际存在的课时"] M -->|开设给一个班级| C C -->|附带自己的规则| P L1 -->|预期课时| S L2 -->|预期课时| S S -.->|回头衡量差异| P ``` 规则属于**课程**,也就是开设给某个班级的科目。学习同一科目的两个班级,各有各的规则。按类型细分的课程(讲授课、习题课)算作不同的课程,因此规则也各自独立。 #### 打开一门课程的规则 在课表中打开一个班级,进入其课程标签页。每门课程可展开查看各项设置;其中的课时分配规则项通过按钮课时分配规则打开编辑器。 编辑器为**每一系列预期课时列出一条规则**。表格底部有一行输入行:填写后点击添加即可添加。每条已保存的规则都可以通过行末按钮复制或删除,点击同意按钮即可保存全部规则。 #### 规则的各列 代码——这些课时在学校编码体系中的代码。可选,可自由填写:当两条规则描述的是同一教学模块按两种节奏拆分,或是由多个小组合上的教学时,可以使用相同的代码。 小组——班级中的一个或多个小组。留空时等同于无小组:课时面向整个班级。同时指定多个小组,则与课时上一样,合成一个授课对象。 教师和教室有三种状态,与课时上的相同: - **留空表示不作要求**:规则对此不作规定,由它创建的课时在这一方面是自由的,之后可以像任何课时一样补充完整; - 无教师和没有教室要求课时不带教师或教室; - 选定一个列表,则要求**恰好**是列表中的这些。 课时分配——课时的数量及每节的时长:`4 × 2小时`。同一条规则只描述时长相同的课时;授课小时数若拆分为不同时长,则需用多条规则声明。 重复——期望的节奏:例如每周两次,或每三周一次。**这是给自动生成的指示**:告诉它如何把课时分散到各周。节奏不参与差异检查,差异检查只判断课时是否存在。 这一列由两项设置分两个层级控制。班级有重复课时:其课时按每周的固定模式重复,而不是逐节单独安排,这项设置只存在于日历课表中。该班级的某门课程可以通过不参与重复退出:此后它的自动安排不再遵循任何模式。因此,这一列只出现在重复班级的重复课程上;在其他情况下,规则仍然说明有多少节课、每节多长,但不涉及节奏。 自动让节奏根据**课时数与教学周数的比值**推算:十二周内的八节课,就是每三周两节。 **请注意此节奏与所要求的课时数保持一致。**如果节奏要求的课时数多于规则本身包含的课时数,就无法实现:此时数字会变红提示。 评论——写给将要安排这些课时的人的自由文本:“U形教室布置”“尽量安排在上午”。有评论时,按钮评论会显示为已填写状态。将鼠标悬停即可阅读评论。 ##### 让规则暂时休眠 要求**0** 节课的规则处于**休眠**状态,以橙色标示:它不预期任何内容,也不报告任何差异,但仍保留小组、教师、时长和代码,以备日后使用。这是暂停一个系列而不丢失其描述的办法。 ##### 在电子表格中录入 图标电子表格可将列表切换为电子表格:每条规则一行,每项信息一列。这一切换用于一次性从电子表格粘贴整套规则,而不必逐条录入。切回列表即可使用下拉菜单和复选框:两种视图操作的是同一套规则。 #### 查看差异 在课时分配界面,每门课程的小时计数器下方都有一个合规指示器。它的颜色概括了当前情况: | 颜色 | 含义 | | --- | --- | | 绿色 | 所有预期课时都已存在;每节课时都对应一条规则。 | | 橙色 | 差异不超过预期小时数的10%,或存在不对应任何规则的课时。 | | 红色 | 差异超过预期小时数的10%。 | 一节课时只有**完全**符合一条规则时才算与之**对应**:小组、教师、教室和时长都相同。只要其中一项不同,就会被计为差异。 悬停时会按规则逐条显示详情:每条规则的要求、实际达成的情况,以及评论(如有)。如有需要,随后的几行会按小组汇总**没有对应规则**的课时,也就是规则没有描述的课时。 同样的差异也会出现在课表的**诊断面板**中,标题为与课时分配规则的差异。无需逐个班级查看,在这里就能找到(参见[冲突与诊断](#page-timetables.conflicts))。 在这个面板中,每一行都注明班级和课程。点击其放大镜[magnifying-glass],可以逐节课时查看差异,形式与下文所述的窗口相同。偏离规则的课时会与最接近的预期课时并排显示,二者的差别以颜色标出。多出的课时标有**+1**。没有任何课时可替代的预期课时排在最后,按规则计数:缺少两节课时就是**−2**。点击某节课时,即可在课表中显示它。 #### 创建、调整匹配、删除 点击指示器即可进行操作。**只要该课程尚未创建任何课时**,就无须取舍:规则所描述的全部课时会立即创建。**一旦已有课时**,就会打开一个窗口,针对每条规则提供以下操作: - 创建缺少的课时,带上规则要求的小组、教师、教室和时长; - 调整匹配偏离预期条件的现有课时:让它适配规则,而不是重新创建。候选课时以折叠形式给出,最接近的排在最前,并显示将发生的变化; - 删除在规则中没有对应项的课时。 删除项默认不勾选;同一节课时不能同时被调整匹配和删除。 #### 自动分配遵循规则 分配界面的操作菜单提供自动分配,可按一个、两个或三个时段生成课时。对于带有规则的课程,以规则为准:无论按钮上写的时长是多少,创建的课时都由规则描述。没有规则的课程则按所要求的时长处理。 #### 在课时上查看代码 在分配界面的便签视图中,课时卡片会显示它所对应规则的代码——前提是它只对应**一条**规则。 这个代码并不保存在课时中:每次都会根据课时的内容重新读取。修改课时的小组、教师、教室或时长,显示的代码也随之改变;如果没有任何规则再描述它,代码就会消失。两条代码不同的规则都可能认领它?此时卡片什么也不显示,而不是替您做选择。 #### 操作步骤 — 声明一门课程的规则 1. **在课表中打开班级**,进入其课程标签页。展开相关课程,打开它的课时分配规则。 2. **在输入行中描述第一个系列**:目标小组(整个班级则不填),规则有要求时填写教师和教室,然后是课时数及其时长。 3. **添加规则**,之后对授课对象、时长或教师各不相同的每个系列重复操作。一门24小时的课程,可以只有一条规则,也可以有五条。 4. **补充对排课员有帮助的内容**:教学模块的代码,以及说明各列无法表达的内容的评论。 5. **点击“同意”。**该课程现在带有它的规则了。 6. **进入[分配课时数并创建课时](#page-timetables.hour-distribution)界面**,查看该课程的指示器。点击它,即可创建缺少的课时、调整匹配有偏差的课时,或删除没有对应项的课时。 7. **学年中途再回来查看。**只要指示器保持绿色,已编排的内容就与预期一致。 #### 另请参阅 - [分配课时数并创建课时](#page-timetables.hour-distribution) - [冲突与诊断](#page-timetables.conflicts) - [通过表格批量导入课程](#page-timetables.mass-import) - [课时分配规则](#page-glossary.distribution-policy) - [课程](#page-glossary.course) - [课时](#page-glossary.lesson) ### 3.13 教室自动分配 *Source: `help/zh-cn/timetables/auto-room-assignment.md` · id: timetables.auto-room-assignment · Audience: admin · Updated: 2026-08-08* **教室自动分配**可以**一次性**为一组选中的课时安排教室。您选择一组**候选教室**, 算法给出最优的安排方案,您**检查后再确认**,必要时可逐行调整。 这是一个**仅用于安排教室**的工具。它不会在时间上移动课时、不会修改课时时长、 不会安排资源,也不会重新运行完整的课表生成。如果希望在**生成过程中**就安排教室, 请参见[自动生成](#page-timetables.generation)。 #### 在哪里找到 该工具位于[分配课时数并创建课时](#page-timetables.hour-distribution)界面的**列表模式**中(表格视图,每个课时一行)。 1. 以**列表模式**显示课时。 2. **勾选**至少两个课时(选择列)。如有需要,可使用**排序**和**按列筛选** 找出要处理的课时,例如**尚未安排教室**的课时。 3. 打开表头的批量教室操作 分配教室。 4. 在教室选择器中,启用自动分配教室模式。 **远程**或**自主学习**的课时(取决于其[课时的授课形式](#page-glossary.lesson-modality))会被忽略:它们不需要实体教室。**混合**课时仍会被处理。 教室已**锁定**的课时请**不要选中**:该工具不会强行突破锁定。 #### 选择候选教室 在自动模式下,选择器会按**校区**再按**教学楼**分组显示教室,并提供三级复选框: - 勾选一个**校区**,会选中其所有符合条件的教室; - 勾选一栋**教学楼**,会选中该楼的所有教室; - 勾选一间**教室**,则单独添加该教室。 已分配给选中课时的教室会**预先勾选**。如果教室的**专业教室类型**与所有选中的课时都不匹配, 或者对所有匹配的课时来说**都太小**,该教室会被**禁用**。当教室容纳不下任何匹配的课时时, 容量显示为**红色**;只能容纳其中一部分时,显示为**橙色**。 确认所选教室后,系统开始计算。 #### 算法的处理方式 算法根据所选的教室,为**每个课时安排一间教室**,遵守**硬性规则**,并优化其余方面: - 课时的科目所要求的**专业教室类型**; - 教室**容量**与课时人数是否匹配; - 教室在该时段的**既有占用**:其他课表或其他关联账户的课时、事件、 教室的时间限制、共用的[大教室(多个课时同时进行)](#page-glossary.large-room); - 班级的**优先使用的教室**:详情中带有某个 [单位](#page-timetables.sites-rooms--campus) 或某个标签的教室,会比其他教室优先尝试; 如果这些教室都已被占用,算法会继续选择一间合适的教室; - 优先选择课时所属参考**校区**的教室; - **交替周**:永远不会在同一周出现的两个课时,可以重复使用同一间教室。 算法可以在选中的课时之间**重新调整教室**,以便更好地安排,并优先选择**最小的合适教室**。 如果当前教室已经合适,而换成另一间只有微小的改进,算法会**保留**当前教室,避免无谓的变动。 如果所选教室中**没有任何一间**合适,该课时将**无解**。 #### 检查、调整、应用 计算完成后会打开**预览窗口**:窗口打开期间,实际课表**不会被修改**。 每一行都带有**状态**——已安排、未变化、无解或已手动调整—— 以及**原有**教室和**建议**教室。 - **调整某一行**:点击其建议教室,打开常规选择器。手动选择**不受**最初候选教室范围的限制; 该行状态变为“已调整”,所有行的冲突会立即重新计算。 - **重置**:一个按钮可以把已调整的行恢复为算法的建议。 - **取消勾选**某一行,会将其**排除**在应用范围之外。 - **确认**会把勾选的行应用到课表;**取消**则关闭窗口,不做任何修改。 应用之后,被修改的课时会**闪烁**,并显示汇总,列出**已修改、未变化和无解的课时数**。 #### 注意事项 - 原本有**多间教室**的课时,经自动分配后可能只保留**一间**。 - **尚未排定时段**的课时也可以获得教室(依据所选教室、专业教室类型、容量和校区), 但此时无法检查该课时的时间冲突。 - 如果只想**安排默认教室**(班级或教师的教室,不含特殊教室)或**清除**已有的教室安排, 操作菜单提供了专门的批量操作——参见[分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 另请参阅 - [分配课时数并创建课时](#page-timetables.hour-distribution) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [专业教室类型](#page-core-concepts.classroom-specializations) - [大教室](#page-glossary.large-room) ### 3.14 第6步(补充)——通过表格批量导入课程 *Source: `help/zh-cn/timetables/mass-import.md` · id: timetables.mass-import · Audience: admin · Updated: 2026-06-02* 如果您已经有一份表格形式的课程清单——学校信息系统的导出文件、事先在Excel中准备好的日程,甚至是其他软件(如Hyperplanning或Aurion)的导出文件——就可以直接**复制粘贴**到Omniscol中。 #### 进入导入 在菜单 操作(位于课时分配界面)中,选择**“电子表格 - 导入/导出…”**。如果尚未创建任何班级,界面上也会有一个直接链接。 导入分为**四个步骤**。 #### 第1步——粘贴表格 会打开一个可编辑区域,其中有Omniscol**预先定义的列模板**。各列按位置确定类型(例如第3列为科目);您可以**调整模板中列的顺序**,使其与源表格的顺序一致,这样从Excel或Google Sheets复制粘贴就很顺畅,无需改写您的文件。 可识别的字段: - **班级** + **科目**(至少需要这两项,课程才有效), - **时长**,或**开始时间 + 结束时间**(预先排入课表的课时还需要**星期几**), - **小组**(多个小组之间可用任意分隔符), - **课时类型**(习题课、实验课、讲授课等), - **教师**(可用任意分隔符分隔多位教师), - **校区** + **教室**(一个课时可以有多间教室, 参见[多教室](#page-glossary.multi-room)), - **资源**, - **交替周**(格式为 `A/B`、`1/2` 等), - **评论**。 您也可以导入**已创建的课程清单**(即导出的内容),以便在Excel中修改后重新导入。 #### 第2步——核对日程和校区 Omniscol会显示识别出的时间(仍可编辑)。如果识别出多个校区,您可以将归属有误的班级、教室和资源**拖放**到正确的校区。如果多出了不需要的校区,将其清空即可,它会自动消失。 #### 第3步——消除歧义 分析导入的值之后,表格会重新出现,并在有歧义的字段上提供**下拉菜单**。请检查并修正系统给出的对应关系。 例如,需要在这里确定: - “数学”究竟指哪一个科目(带不带类型)? - “王老师”是三位王老师中的哪一位? - “A102”是北京校区的A102教室、上海校区的A102教室,还是其他? #### 第4步——创建未知的对象 如果导入发现了数据库中尚不存在的对象(班级、小组、教学小组组合、教师、自定义科目、课时类型、校区、教室、资源等),最后一步会要求您: - 在课表中**确认创建**, - 对于**自定义科目**和部分**教师**,如有需要,可请求在 管理 模块中创建,使其在全校范围内可用。 #### 局限 导入可以自动完成准备工作,但不能代替人工核对: - **复杂课时**(多重交替、连堂、关联)有时不能完全还原,需要预留一轮手动收尾。 - 对于非常特殊的内部命名体系,某些列仍会有歧义,您将在第3步中确定。 - 如需从特定软件(Aurion、ASC等)进行**专门的迁移**,有[专用适配器](#page-migration.overview)。 #### 操作步骤 — 准备并导入课程 1. **点击导入之前**,请花10分钟准备源文件。文件整洁,导入就不用来回修改。在Excel或Google Sheets中,删除合并的行、多行表头和小计。**一行 = 一个课时。** 班级、科目、教师、小组、校区、教室和资源的名称要保持一致。 2. **打开导入界面**:在课时分配界面,依次选择菜单*操作 → 电子表格 - 导入/导出…*。调整模板中列的顺序,使其与您的表格顺序一致,然后将表格**粘贴**到可编辑区域。这是第1步。 3. **第2步——核对日程和校区。** Omniscol会显示识别出的时间和推测出的校区。如有需要,把班级、教室和资源拖放到正确的校区,或者清空多余的校区使其消失。 4. **第3步——消除歧义。** 表格重新出现,有歧义的字段带有下拉菜单:确切的科目、同名教师、同名教室等。由您在这里确定。 5. **第4步——创建未知的对象。** 根据您的文件,确认建议创建的对象:班级、小组、教学小组组合、教师、科目和类型、校区、教室、资源。对于自定义科目和部分教师,您也可以请求在 管理 模块中创建。随后课程会被导入课表。 6. **完成后**,您会得到一份部分配置好的课表。对于导入不一定能完全还原的复杂情形(多重交替、连堂、关联),请预留一轮手动收尾。从其他软件迁移的方法,参见[从其他软件迁移——概览](#page-migration.overview)。 #### 另请参阅 - [为批量导入准备数据](#page-getting-started.preparing-data) - [从其他软件迁移——概览](#page-migration.overview) - [上一步——分配课时数并创建课时](#page-timetables.hour-distribution) - 下一步——[自动生成](#page-timetables.generation) ### 3.15 第7步——自动生成 *Source: `help/zh-cn/timetables/generation.md` · id: timetables.generation · Audience: admin · Updated: 2026-10-01* 创建课时之后,您需要把它们安排到时间网格上。编排课表在实践中是一个**循环**,而不是一次性的操作: 1. **手动安排少量课时**——固定不可更改的课时,或锁定强约束(定期外聘授课、考试、校准); 2. **生成**(全部或部分),让算法在约束条件下安排其余课时; 3. **在边缘做调整**——修正个别情况、移动某节课时、改变主意; 4. 而且**可以反复进行**:随时重新生成(新增了课时,或者——在日历模式下——按日期区间、按班级批次或单位批次生成)。 也可以**完全手动**完成一切,不使用生成。手动安排(安排、移动、锁定,逐节或批量)有专门的页面:[手动安排](#page-timetables.manual-placement)。整体流程参见[模块概览](#page-timetables.overview)。 本页介绍的是**自动生成**。 #### 生成负责安排课时,不负责创建课时 生成算法处理的是已经存在的课时。它为课时寻找时段和教室。教师则是您已经指定给课程的那些:算法不会替换他们,也不会另行指派,只是拒绝他们没有空的时段。 因此需要遵循以下顺序: 1. 为每个班级**声明科目及其授课小时数**:这就是*课程*,一行授课小时数; 2. 在[分配课时数并创建课时](#page-timetables.hour-distribution)这一步,**根据小时数创建课时**——生成算法安排的正是它们; 3. **然后再生成**。 在创建课时之前就打开生成标签页,会遇到一个无法点击的按钮:没有任何东西可安排,检查界面会显示**没有定义的课时**。 #### 生成按钮为什么是灰色的 按钮反映的是它正上方在检查中标签页上显示的诊断。分三种情况: - **没有警示,或只有警告**——按钮仍可使用,外观稍淡。警告(黄色)提示的是风险,而不是不可能;蓝色仅作提示。 - **存在阻断性警示(红色)**——主按钮被禁用。仍可通过更多选项启动计算,但风险自负:生成算法看不到该警示所指出的问题,仍会生成一份课表,后果由您自行承担。最好还是先排除警示。 - **存在致命警示**——按钮**和**选项菜单都被禁用。缺少了计算赖以进行的数据:没有课时、没有可用的班级(班级同时具有校区*和*课时才算可用),或者所使用的校区没有定义时间网格。尚未创建任何校区的学校就属于这种情况:没有校区,就没有可用的班级。 在最后这种情况下,统计项**已设置的班级数量**会变红。 每条警示都会在列表中清楚地标出名称,以及相关的班级、校区或教师。严重程度的分级及其解读,参见[冲突与诊断](#page-timetables.conflicts);生成未能完成时的排查,参见[诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 适用范围 自动生成适用于[周课表](#page-glossary.weekly-timetable)、[周期课表](#page-glossary.cyclic-timetable)和[日历模式](#page-glossary.calendar-mode)。在日历模式下,课时被安排在真实日期上,选项还可以限制要生成的日期范围。 #### 准备工作 点击生成课表之前: - 展开**生成**标签页(在日历课表上名为检查中),查看全局统计; - 排除**阻断性警示**(红色)——参见上一节关于灰色按钮的说明; - 查看**警告**(黄色)——它们不会阻断,但提示风险(可用时间限制过多、容量接近上限等)。 界面还会显示: - 已创建课时数与已安排课时数, - 已录入的授课小时数与教师的服务时间, - 至少分配给一门课程的小组(用于发现被遗漏或闲置的小组)。 #### 启动 点击生成课表。Omniscol会启动一个专用的并行计算环境。所需时间取决于课表规模、约束数量和所选的选项。学校一侧无需管理排队;初始化通常需要十秒左右,计算才真正开始。 计算**上限为二十分钟**,但实际上远远用不了这么久:约200门课程的课表通常在二十秒左右就能得出结果——算法几乎是瞬时的,耗时主要在机器的启动上——约600门课程则大约需要一分钟。对于接近这一上限的超大型学校,Omniscol团队可以应要求提高计算机器的性能。 #### 生成选项 默认情况下,生成会安排所有已创建但尚未安排的课时。如果能改善课表,它也可以移动已经安排的课时。已锁定的课时保持原位。 选项菜单尤其可以: - 在三种方式中选择教室的处理:默认为优化分配,或仅检查,或完全忽略教室; - 只选择某些班级或某些科目; - 将日历课表限定在目标日期窗口内; - 忽略已分配的教室或当前的安排; - 只分配教室,而不重新计算整个安排; - 启动不做优化的快速生成; - 当课表使用子时段时,允许在时间网格的子时段上灵活安排。 高级优化参数还可以用来减少空档、避免同一科目的两节课时排在同一天、均衡分布课时、设定小时数的最小值或最大值,或选择教师到校的天数。各国的做法不同:在法国,有些学校希望减少教师到校的天数;在另一些情况下,则可能相反,希望把这些天数分散开,例如为了在校内安排其他工作。 #### 日历模式特有的选项 在日历模式下,高级选项可以把生成限定在比课表总范围更短的**目标日期窗口**内。这对只生成学年的一部分很有用:先试一个月、逐步构建一个学期,或接着处理已经准备好的时段。 另一个重要选项是针对班级的**课日紧凑**。默认情况下,生成算法倾向于在可用的日子里取得均衡;如果您只生成学年中的一部分课时,这种做法可能会人为地把课摊得很开。紧凑选项可以要求集中安排: - 集中在窗口的开头; - 集中在窗口的末尾; - 对开头或末尾没有偏好,但尽量让课日保持紧凑。 #### 日历课表上的重复:先排标准周 日历课表逐节为课时标注日期。然而有些培养项目并非如此:周一10:00的课,尽可能每周都会出现。班级通过重复课时来声明这一点;该班级的某门课程则通过不参与重复退出。**系统不做任何猜测**:没有这一声明,生成就把每节课时安排在各自的日期上,无论它们之间多么相似。[分配规则](#page-timetables.distribution-policy)是可选的:重复本身就有效;如果有明确的规则,则指明算法应尽量遵循的节奏。 课表中只要有一个班级是重复的,生成就分三个阶段进行。 1. **先排标准周。**课时被归并为若干系列。分两种情况: - 课程带有课时分配规则:算法为了遵循该分配,把课时归并到各个系列中,这些系列可能带有明确的重复意愿; - 否则,系列由系统推断:同一科目、同一小组、相似的节奏——时长和教师相近。 属于同一班内分组的小组保持分开,因为同时上课的两个小组要占用两个时段。单独一节同类课时不构成系列。 随后,每个系列在一个虚拟周中寻找自己的位置,就像在周课表上一样。**生成会在这里读取规则所要求的节奏**:规则的重复列表示每周两次或每三周一次;自动则让节奏根据课时数与教学周数的比值推算。一门每周上四次的课程,在标准周中占用四个时段。这个理论周已经考虑了日历方面的约束:固定的课时、特定日期或时段上的不可用情况。多个系列也可以依次占用同一个时段。 2. **在日历上展开。**找到的这一周随后在班级的日期区间内重复:班级有日期窗口时用它,否则用课表的整个时期。系列中的每节课时在此获得自己的周、日和时段。冲突按日期逐一检查;当准确的位置已被占用时,算法选择最接近的方案。 3. **由普通的日历生成完成收尾**,不再使用重复。标准周未能确定日期的课时不会被强行安排:这些课时并入非重复课时的批次,由它再来安排。 #### 生成是如何工作的 了解生成算法的逻辑,有助于预判它会安排什么、会舍弃什么,以及如何引导它。它追求**两个目标,并按此顺序**: 1. **全部排进去**——绝对优先:在遵守硬约束的前提下,安排*所有*课时。 2. **优化质量**——全部排进去之后,减少空档、平滑各个课日、尽量满足偏好。 它从干净的状态开始(**已锁定**的课时保持原位,其余的重新安排),并**从最难的课时到最容易的课时**依次安排。难度主要取决于**约束的严格程度**:教师每周只有一个下午有空的课程,或者需要连续安排的**四小时整块课时**,都排在最前。难度相同时,它会交替安排各科目,并让**较少见的科目先于较常见的科目**,以便公平地分配各科目的机会。 ##### 无法全部排下时:取舍 如果课表约束过多、无法全部排下,生成算法**不会放弃**:它会选出需要**搁置**的最少一批课时,使其余课时能够排下,然后优化这份部分课表。被舍弃的课时留在待安排的便签栏中。由于排序已优先处理最难、最少见的课时,被放弃的往往是**容易且数量多**的课时:授课小时数很大的科目的第5个小时,先于稀有科目的唯一一个小时。 这些取舍的主动权仍在您手中:**锁定**绝不能移动的课时——它们优先安排,不会被舍弃——并尽可能**放宽过度约束**(开放时段、可用时间),让整体能够排下。 ##### 硬约束与软约束 并非所有约束都同等重要: - **硬约束**——绝不违反:**占用**(同一教师、班级、小组、教室或资源不能在同一时刻被用两次)、教师、班级、教室、课程或小组上标记为**不可用**(黑色)的时间范围、该时段**没有空闲的教室或资源**、**休息日**、**已锁定的位置**和**对齐**。 - **软约束**——其余一切,生成算法可以**违反**,代价是一定的惩罚,以便把所有课时排下:标记为**不希望**(红色——应避免,但并非禁止)的时间范围,以及优化偏好(紧凑、均衡、按天集中……)。*高*优先级的约束比*低*优先级的权重更大,但没有一条是阻断性的。当这是避免舍弃任何课时的代价时,生成算法还会尝试个别放宽(在网格的子时段上安排……)。 ##### 只检查,不优化 **快速生成**选项(不优化)会运行一次简化的计算,主要回答一个问题:*能全部排下吗?*在投入完整优化的时间之前,可用它测试某个配置是否可行。 #### 结果 - **绿色横幅**:生成成功。所要求范围内的课时已经安排完毕,可以检查结果。 - **红色横幅**:没有找到完整的解。计算出的最佳课表仍可查看,未安排的课时会出现在便签栏中,供您诊断。 参见[诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 合并或复制 生成成功后,Omniscol提供两个选项: - **将结果合并到当前课表中**(新的安排取代现有的安排)。 - **将结果保存到新课表中**(当前课表保持不变,优化后的结果成为一份新课表)。 如果您打算以后重新生成(例如逐步构建),**请不要合并**:否则已经安排的课时会成为新一轮生成的起点。 #### 重新生成前锁定课时 对已经安排的课时,使用位置**锁**将其锁定。下一次生成不会移动它,而是围绕它调整其他课时。这很适合固定“不可更改”的课时(固定的外聘授课、已定日期的考试、手动校准……)。完整说明参见[锁定课时](#page-timetables.lesson-lock):批量锁定、对诊断的影响(红色 → 橙色)、算法的行为。 #### 将课表导出为JSON 按钮[download]只导出**当前课表**,格式为JSON。这不是[导入与导出](#page-admin.import-export)中介绍的账户完整导出。 典型用途: - 删除前保留草稿或方案的记录; - 在重大调整之前归档中间状态; - 在寻求支持时,把这份课表提供给Omniscol团队。 与学校账户的完整JSON导出一样,重新导入不是学校一侧可以自由使用的常规功能。 #### 接下来 最后一步:[发布课表](#page-timetables.publication)。 #### 操作步骤 — 启动自动生成 1. **自动生成**会在遵守数十项约束(可用时间、容量、对齐、专业教室类型、交替)的前提下,把课时安排到时间网格上。适用于周课表、周期课表和日历课表。 2. **检查生成标签页。**全局统计显示在这里:已创建与已安排的课时、已录入的授课小时数与教师的服务时间、阻断性警示(红色)、警告(黄色——提示但不阻断)。 3. **启动前先排除红色警示。**只要还有红色警示,生成就无法启动——除非通过“更多选项”菜单强制启动,但不建议这样做。黄色警告需要您自行权衡,但不会阻止生成。 4. **按需设置生成选项**:要分配的教室、仅检查或忽略;指定的班级或科目;不做优化的快速生成;忽略已分配的教室或当前的位置。在日历模式下,高级选项还可以限制所生成的日期窗口,并把课时集中在时期的开头、末尾,或不设偏好。 5. **点击生成课表。**处理在后台运行;界面显示生成的状态,结果可用时即可查看。 6. **对结果满意时保存。**课表就安排好了。下一步:检查可能存在的冲突,手动调整个别情况(参见[手动安排](#page-timetables.manual-placement)),然后发布。 7. **接下来:**[发布课表](#page-timetables.publication)。 #### 另请参阅 - [手动安排](#page-timetables.manual-placement) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) - [生成算法](#page-glossary.solver) - [检测并解决冲突(生成时)](#page-timetables.conflicts) ### 3.16 第8步——发布课表 *Source: `help/zh-cn/timetables/publication.md` · id: timetables.publication · Audience: admin · Plan: standard · Updated: 2026-06-13* ⚠ 这一步**常被遗忘**:生成的课表**不会自动发布**。发布之前,它只是草稿,一个试验区——只有管理员能在课表管理模块中看到。 课表发布后,其中的课时会供给所有其他模块,包括所有获授权用户都会查看的[课表](#page-schedules.consult-and-filter)模块。 #### 如何发布 在课表管理模块的首页: 1. 在**顶部的时间轴**中选择相关的**学年**。默认显示**当前学年**。如果您在为下一学年做准备,请点击**时间轴的右箭头**切换到下一学年(N+1)——否则您会试图在当前学年的周次上发布,而这些周次已经分配给了现行课表。时间轴的一般概念参见 [时间轴与时间导航](#page-core-concepts.timeline-navigation)。 2. 点击课表发布 (课表发布)。 3. 出现一个网格:每行是一份课表,每列是一周。 4. 为每份课表**选择适用的周次**(在横幅上点击或拖动)。按钮 添加时间段可为课表再增加一个时间范围。 5. 用保存保存。 #### Standard账户:每周一份课表 使用Standard账户时,每周**只允许一份发布的课表**。如果您想发布两份不同的课表,它们的时间范围必须互不重叠(例如第一学期与第二学期)。 > _Option: 同时发布多份课表_ #### 同时发布多份课表 如果您的账户具备此功能(Premium已包含),就可以在相同的周次上**并行发布多份课表**。系统会动态合并视图:如果两份已发布的课表共用同一位教师或同一间教室,这位教师或这间教室的合并课表中会显示两份课表的课时。 典型用法:用一份周课表安排每周重复的公共基础课程,再用一份日历课表安排零散的大师课。 #### 日历课表:发布只有两种状态 [日历模式](#page-glossary.calendar-mode)的课表不按周次范围发布(其课时已各自带有日期)。发布只有两种状态——课表要么已发布,要么未发布。 #### 周课表 / 周期课表:按时间范围发布 对于周课表和周期课表,您需要添加**一个或多个**发布时间范围,然后保存。正在进行的修改会显示为:新增部分带斜线填充,删除部分呈半透明。 #### 交替周:哪些课时落在哪些日期 含交替周的课表发布后,每个实际的周只保留其在周期中的序号与**周次计数**相符的那个课时。假期可能会让这个计数错位:[学年](#page-admin.school-year)页面的**时间轴**可让您强制指定从哪里重新从A周开始计数,使每个日期都能保留正确的交替课时。 #### 发布后分配学生 课表在当前学年发布后,您就可以**把学生分配到各自的班级和小组**: 1. 进入学生模块。 2. 选择相关学生。 3. 分配班级。 完成分配后,学生才能看到自己的个人课表——如果您是为下一学年做准备,则要等当前学年切换之后才能看到。 #### 操作步骤 — 分5步发布课表 1. **发布即让课表投入使用**:其中的课时会供给所有其他模块,包括所有获授权用户使用的课表。发布之前,课表只是草稿,一个仅管理员可见的试验区。 2. **检查顶部时间轴中显示的学年**。默认是当前学年。如果要在下一学年发布,请先点击**时间轴的右箭头**切换到N+1,再继续。 3. **点击课表发布**。出现一个网格:每行是一份课表,每列是学年的一周。 4. **选择**课表适用的**周次**。在横幅上点击或拖动。选中的周显示为彩色,其余仍为白色。 5. **保存发布**。课表立即投入使用:其中的课时会出现在所有获授权用户的课表模块中。 6. **下一步:把学生分配**到各自的班级和小组。只有在首次发布之后才能进行这项分配。之后,学生就能看到自己的个人课表。 #### 另请参阅 - [课表发布](#page-glossary.publication) - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [准备下一学年](#page-timetables.next-school-year) ### 3.17 同时发布多份课表 *Source: `help/zh-cn/timetables/multiple-active-timetables.md` · id: timetables.multiple-active-timetables · Audience: admin · Options: multiple-active-timetables · Updated: 2026-09-23* > **Option: 同时发布多份课表** 在Standard套餐下,同一时期内**只能发布一份课表**。这足以满足初中或高中的常规运作。 但在某些场景中,典型的如高等教育、模块化培训、设有多条学习路径的学校,需要**并行发布多份相互补充的课表**。 Premium账户默认包含这项功能。 在一些混合型学校账户中,例如初中与高中合设,或小学、初中、高中合设且课表确实相互独立的情况,Omniscol可以专门为其开通这项功能。 届时会根据实际需求调整方案和计费。 #### 为什么需要并行多份课表 几种典型场景: - **公共基础课 + 专业方向** — 一份周课表覆盖公共基础课(各年级共有的科目),各专业方向或学习路径的课表叠加其上,并带有各自的约束。 - **常规课表 + 日历课表** — 一份常规周课表承载大部分课程,一份日历课表承载有明确日期的课时(讲座、考试、答辩)。 - **多个校区** — 每个校区一份课表,由本地管理;对于在校区之间往返的学生,查看时再合并。 - **学制不同的培养项目** — 例如一个为期18个月的EMBA项目、一个按日历学期运行的本科项目和一个按周安排的预科班,教师和教室则共享。 没有这项功能,这些情况只能把全部复杂性塞进同一份课表,很快就会难以维护。 #### 工作方式 您像往常一样在 课表管理 模块中创建多份课表。在按周**发布**时,发布界面允许在相同的周上选择多份课表,而不只是一份。 在使用端(门户、信息显示屏、iCal、API),发布在同一周的课表会被**动态合并**:学生可以看到所有与自己相关的课时,无论这些课时来自哪份课表。 在同一账户内,并行发布的课表共享相关资源的占用情况:教室、教师,以及在适用时的班级。这样可以避免同一位教师或同一间教室被两份已发布的课表重复预订。 班级由多份课表共用的情况也存在,但相对少见,并且很大程度上取决于教学组织方式。 #### 跨课表冲突检测 两种机制互为补充,取决于您在哪里工作。 ##### 构建课表时 在 课表管理 模块中构建或调整课表时,按钮 同步(位于调课工具栏,也位于日历课表编辑的工具栏,作用于**共有日期**)会将您的工作与**其他已发布的课表**进行比对。 它会自动纳入**日期与当前课表重叠**、并且至少共有一位**教师**、一间**教室**或一个**班级**的课表,无论是本账户内的课表,还是来自**[关联账户与共享资源](#page-integrations.linked-accounts)**的课表。 因此只要存在共同资源,它就会自动启用(橙色表示已启用)。这种自动关联针对的是**带日期的(日历)课表**。 有一个很实用的例外:它会**忽略当前课表的简单副本**(课时完全相同)。这样您可以在**复制出来的草稿**上工作,而不会与自己产生冲突。 这些课表的占用情况随后会进入冲突引擎: - 如果教师或教室在别处已被占用,可用于放置的**候选时段**(彩色圆点)会变为橙色或红色; - **诊断**会指出跨课表的重复预订。 在冲突详情中,来自另一份课表的课时会在班级名称之后显示图标 [calendar-days],其后是该课表的名称。来自关联账户的课时则显示图标 [building-columns],其后是该账户的名称。 按钮的下拉菜单列出了被纳入比对的课表和账户:取消勾选您不想监控的项目,例如当您接受某处重叠时。 ##### 查看时(运行中的课表) 课表发布后,会合并为一份**运行中的**课表,也就是Omniscol中的查看视图(课表 模块),以及所有使用课表的地方(门户、信息显示屏、iCal、API)。 课表之间的冲突在这里一目了然:如果一位教师(或一间教室)在同一时间有两个课时,分别来自两份已发布的课表,它们会在合并后的网格上叠加显示。 这正是合并的逻辑:它呈现的是实际运行的课表,**包含所有类型**(周课表和日历课表也在内)。在调课视图中,这会产生冲突。 无论哪种情况,解决方式都属于日程安排:根据具体情况移动、调整或接受冲突。 #### 识别不同课表中的同一个班级、教室或资源 在同一账户的不同课表之间,同一个班级、同一间教室或同一项资源可能带有不同的内部标识,例如在导入或复制之后。Omniscol根据它们的身份进行匹配: 1. **外部标识** — 当两者都带有同一外部软件(ERP、学籍管理软件)的标识时,仅以它为准。标识相同,即为同一实体,即使名称已更改;标识不同,即为两个不同的实体,即使名称相同; 2. 否则按**名称**匹配,要求完全一致(大小写、重音和空格都计算在内)。 教室或资源在对应的校区中查找,校区的识别方式相同。小组在对应的班级中查找:先看外部标识,再看名称,最后看代码。教师以账户为准:同一位教师在所有课表中都会被识别为同一人。 这种匹配用于跨课表冲突检测。在 课表 模块的筛选器中,一个出现在本学年多份课表里的班级也只算一个条目;它的课表汇集了各份课表中的课时。 如果两个不同的班级在不同课表之间被报告为冲突,而又没有共同的教师或教室,说明它们被识别成了同一个班级:它们的外部标识或名称相同。请在源软件中更正标识,或者把它们的名称区分开。 在关联账户之间,匹配遵循其他规则:参见 [关联账户与共享资源](#page-integrations.linked-accounts)。 #### 操作步骤 — 并行发布一份常规课表和一份日历课表 1. **典型的混合场景**:一份常规的**周**课表承载大部分课程,另有一份**日历**课表承载有明确日期的课时(特邀讲座、考试、答辩)。 2. **前提**:在 课表管理 模块中创建两份课表,一份周课表放常规课程,一份日历课表放有日期的课时。分别独立配置。另请参见 [日历模式](#page-timetables.calendar-mode)。 3. 如果使用生成功能,请**分别对每份课表运行生成**。先检查每份课表自身的冲突。 4. 在需要的周上**发布周课表**(通常是整个学年)。参见[第8步——发布课表](#page-timetables.publication)。 然后在**相同的周**上**发布第二份课表**(日历课表)。发布界面允许并行发布多份课表(而Standard套餐只能发布一份)。 5. **检查合并结果**:打开学生或教师门户,两份课表的课时会出现在同一个网格上,动态合并。iCal、API、信息显示屏看到的内容也是一样的。 6. **跨课表冲突**:周课表与日历课表之间的重叠,主要体现在**合并后的运行中课表**上(查看界面、门户)。如果一场讲座(日历课表)与常规课程(周课表)的时段重合,且教师或教室相同,两个课时就会在那里叠加显示。 解决方式与普通冲突相同:移动、调整或接受。 #### 另请参阅 - [第8步——发布课表](#page-timetables.publication) - [日历模式](#page-timetables.calendar-mode) - [关联账户与共享资源](#page-integrations.linked-accounts) - [Omniscol的套餐与选项](#page-overview.plans-and-options) ### 3.18 手动安排课时 *Source: `help/zh-cn/timetables/manual-placement.md` · id: timetables.manual-placement · Audience: admin · Updated: 2026-06-23* **手动**安排课时,就是由您自己为课时选定时段,而不是交给算法决定。这几乎总是与 [自动生成](#page-timetables.generation)配合使用:构建课表是一个**循环**(先排几个课时 → 生成 → 调整),详见 [模块概览](#page-timetables.overview)。 #### 何时手动排课 - **生成前先固定不能变动的课时**:指定日期的授课活动、考试、已定好的时间。先把它们排好(通常还要**锁定**,参见 [锁定课时](#page-timetables.lesson-lock)),让生成围绕它们来构建。 - **生成后做局部修正**:移动某个课时、处理个别特殊情况、改变对某个时段的想法。 - **完全手动构建**:课表规模较小,或者您更愿意全程亲自掌控(见下文)。 #### 操作方式:先点图钉,再点彩色时段 安排课时**从来不是拖放**。点击课时的定位按钮(图钉,排入课表)——位于便签卡片、列表行,或者(课时已排入时)其详情中 (排入课表)。随后Omniscol会显示**所有可选时段**,并按冲突程度着色: - **绿色**:无冲突; - **黄色**,然后是 **橙色**:轻度到中度冲突(会显示原因); - **红色**:阻塞性冲突。 各级别的详细说明和完整的检测列表见 [冲突与诊断](#page-timetables.conflicts)。 时段会同时显示在班级**以及**相关教师的课表上,并附有已排入的其他课时,帮助您选择。**点击选定的时段**即可把课时排入其中。要移除课时,请双击已排入的课时(它会回到未排课时区域,而不会被删除)。 #### 批量排课——日程表视图 点击 网格:会显示班级/教师的日程表,方便连续排课。操作方式不变:点击课时的图钉 [thumbtack],再点击某个彩色时段。在日历课表模式下,用它来落实指定日期,或在局部调整生成结果,尤其方便。 #### 锁定以固定手动安排 默认情况下,手动排入的课时仍可能被下一次生成移动。要让它**不再移动**,请锁定其位置(挂锁):生成随后会围绕它来构建。详情(批量锁定、对诊断的影响)见 [锁定课时](#page-timetables.lesson-lock)。 #### 全部手动完成(不使用生成) 您完全不必运行生成。对于规模较小的周课表,或者排课受人为选择的限制很大时,您可以逐个(或在日程表视图中批量)安排**每个课时**,完全不进行生成。实时诊断始终有效:冲突(教师、教室、班级、资源)会随时提示,与生成时一样。之后照常发布即可。 对于脱离时间网格的课时(明确的时间、时间延长的考试),参见 [脱离网格的课时](#page-timetables.off-grid-lessons)。 #### 接下来 课表排定之后——无论是手动、生成,还是两者结合——就可以 [发布课表](#page-timetables.publication)。 #### 另请参阅 - [自动生成](#page-timetables.generation) - [锁定课时](#page-timetables.lesson-lock) - [脱离网格的课时](#page-timetables.off-grid-lessons) - [分配课时数并创建课时](#page-timetables.hour-distribution) ### 3.19 编辑课时 *Source: `help/zh-cn/timetables/lesson-edit.md` · id: timetables.lesson-edit · Audience: admin · Updated: 2026-06-12* 课时创建完成后(参见 [分配课时数并创建课时](#page-timetables.hour-distribution)),您可以逐个调整它的**字段**:科目、小组、教师、 教室、资源、时长、评论,以及(视您的套餐而定)状态和授课形式。本页汇总课时的 **全部字段**以及修改方法。 #### 在哪里编辑课时 同样的字段有**三种方式**可以设置,取决于课时分配的显示模式(参见 [三种显示模式](#page-timetables.hour-distribution)): - **便签**:每张课时卡片带有一排**图标**(每个字段一个);点击图标即可打开相应的选择器。 - **调课**:点击某个课时会打开**课时详情**,汇总这些字段;多选后可批量编辑。 - **列表**:**每个字段一列**,勾选课时后可在列标题处批量编辑。 无论走哪条路径,修改的都是**同一个课时**:各模式下的值保持一致,在您保存之前不会发布任何内容。 #### 标准字段 所有套餐均可使用: - **科目** 编辑:课时所属的科目,从该班级已设置的科目中选择。 - **小组** 分配小组:班级进行了班内分组时,该课时涉及的小组或子小组。 - **教师** 分配教师:一位或多位教师。同一课时选择**多位**教师即为**协同教学**(参见 [复杂课时](#page-core-concepts.complex-lessons))。 - **教室** 分配教室:选择课时的主教室;高级选项视账户已启用的功能,详见下文。 - **资源** 分配资源:课时占用的设备(投影仪、平板电脑等),并检查可用性。 - **时长**:(在便签模式下)拖动卡片的**下边框**即可延长或缩短课时。 - **位置与锁定** 排入课表:固定课时,使自动生成不会移动它(参见 [锁定课时](#page-timetables.lesson-lock))。 - **评论** 评论:自由填写的内容,带有可见性级别(参见 [评论](#page-timetables.hour-distribution))。 #### 教室与安排 安排教室 分配教室 对所有套餐开放:可在列表中选择教室,也可以让**自动模式**推荐合适的教室(根据容量、标签、可用性)。 列表保持**稳定的顺序**:您常用的教室排在最前,其余按字母顺序排列;列表会标出合适的候选教室,但不改变它们的位置: - **星标**表示当前最合适的教室,**半星**表示其后的候选。将鼠标悬停其上,可以看到它们的区别:校区、使用率、专业教室类型,以及(如有)班级的偏好; - 教室的某个[单位](#page-timetables.sites-rooms--campus)或某个 标签 上出现**绿色标记**,表示它符合班级的 优先使用的教室。这与专业教室类型采用同一套颜色,符合课时要求时显示为绿色; - 教室相对人数过小时,**容量**会先变橙色,再变红色。 星标只出现在班级优先使用的教室中。当另一间教室与人数明显更匹配时,半星可以落在优先教室之外:例如为25名学生选定了一间60座的教室时,半星会指向仍然空闲的30座教室。 > _Premium_ #### 课时的高级功能 ##### 课时状态 **状态** 状态 表示课时处于排课流程的哪一环节,共有四个值: - **已计划**:已排入课表的课时的常规状态。 - **草稿**:课时被**隐藏**,并且**被自动生成忽略**:适合先准备好课时,暂不强加到课表上。 - **已取消**:课时**显示为已取消**但仍保留备查;它**会被生成忽略**。 - **已完成**:课时**已上完**,会计入仪表盘和计费。该状态在日历课表中提供,因为只有在这类课表中,跟踪课时的实际开展才有意义。 状态属于**整个课时**(而不是交替周的某个变体)。可以逐个课时修改,也可以在列表模式下**批量**修改。 ##### 授课形式 **授课形式**说明课时如何开展: - **线下**; - **远程**; - **混合**; - **自主学习**。 授课形式在教室选择器中选择,位于教室安排旁边。它有实际影响:**远程**或自主学习的课时**不需要教室**,生成时也不会为其要求教室。课时的图标会反映所选的授课形式。 ##### 多教室 同一课时可以安排**多间教室**:按住 **Shift ⇧** 并点击即可扩展选择。适用于一个班级分到相邻的两间教室,或者课时占用一个打通的空间。所选教室都会被预订,并参与冲突检测。 ##### 自定义时长与时间 除了从网格读取的时长之外,课时还可以带有**自定义时长**(用于仪表盘的实际时长,用于计费的计入时长)以及**脱离时间网格的时间**(明确的开始和结束时间)。这些设置以及脱离时间网格的班级,详见专页: [脱离网格的课时](#page-timetables.off-grid-lessons)。 #### 同时编辑多个课时 要将同一个值应用到一批课时: - 在**调课**模式下,**Shift+点击**可将选择扩展为一个范围;此时共用的详情会同时编辑所有课时; - 在**列表**模式下,勾选所需课时,然后使用该列**标题处的操作按钮**(时长、教师、小组、教室、状态等)。 这是最快捷的方式,例如将一批课时切换为 **草稿**,或为它们指定同一间教室。 #### 删除课时 点击图标 删除 即可移除课时。保存时删除才会**生效且无法恢复**:保存前请再检查一遍删除的内容,因为此界面没有整体撤销功能。 #### 操作步骤 — 更改课时状态 1. 打开班级的课时分配 ([第6步](#page-timetables.hour-distribution))。 2. 点击课时的**状态**图标 状态(或在调课模式下打开其详情)。 3. 选择所需状态,例如选择 **草稿**,使其不参与生成。 4. 要处理一批课时,请切换到**列表**模式,勾选课时,并在列标题处应用该状态。 5. **保存**以发布更改。 #### 另请参阅 - [分配课时数并创建课时](#page-timetables.hour-distribution) - [脱离网格的课时](#page-timetables.off-grid-lessons) - [锁定课时](#page-timetables.lesson-lock) - [复杂课时](#page-core-concepts.complex-lessons) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [检测并解决冲突(生成时)](#page-timetables.conflicts) ### 3.20 脱离时间网格的课时和班级 *Source: `help/zh-cn/timetables/off-grid-lessons.md` · id: timetables.off-grid-lessons · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ **脱离时间网格的课时**是指带有明确开始和结束时间的课时,而不严格遵循网格中某个时段的边界。周课表、周期课表和日历课表都支持这项功能。 **脱离网格的班级**是一项独立的设置:它是班级的属性,适用于日历课表类型的课表。 #### 自定义时间的课时 当某个临时课时恰好不落在网格上时,可以使用自定义时间:从 `08:30` 开始的考试、晚间的授课、跨越课间休息的课时、早于实际上课时间开始的预订。 该课时仍会显示在课表中,并继续参与冲突检测。只要自定义时间占用了某个时段,该课时涉及的所有实体,包括教师、教室、班级、小组或资源,都视为已被占用。 在自动生成中,该课时被视为不可移动:其位置会自动锁定。 #### 何时使用事件而不是课时 如果需求不属于课表中的课时,请改用[临时事件(课表之外)](#page-schedules.events):例如会议、简单的预订、教室维护、无需计入授课小时数的特殊日。 如果授课小时数需要与某个课程、科目、班级、教师、小组或教学仪表盘保持关联,请保留为课时。 #### 脱离网格的班级 脱离网格的班级适用于这样的培训项目:其全部课时都必须以精确的时间存储,与校区的网格无关。该设置在创建或修改班级时配置,仅限日历课表类型的课表。 典型情形:继续教育项目使用与全日制教育相同的教室和教师,但上课时间却大不相同。此时可以把该班级配置为脱离网格,并设置默认的时间步长,例如一刻钟。 在这种模式下,班级的课时直接带有各自的开始和结束时间。它们会**占用**相关的教师、教室、班级、小组和资源:与其他课时重叠时会被标记为**冲突**,手动安排时不会被阻止,但自动生成不会在存在冲突的时段上安排任何课时。 #### 自定义时长 一个课时还可以带有自定义时长: - **计算时长**:根据开始和结束时间推算出的时长; - **实际时长**:在仪表盘中优先使用的时长; - **计入时长**:用于教师计费或薪酬的时长。 示例:对于一场考试,您可以在考试前后预订教室,同时在 仪表盘 中只统计考试的实际时长。对于监考教师,如果学校同时补偿批改试卷的工作,计入时长可以更长。 #### 注意事项 - 自定义时间的课时可能与课间休息或通常空闲的时段重叠;请确认这确实是您的本意。 - 由于课时在生成时被锁定,它可能对其周围的自动安排形成很强的限制。 - 脱离网格的班级具有结构性影响:必须在批量创建该班级的课时之前选定。 - 一旦存在明确的时间或脱离网格的班级,**复杂课时**(交替周、连堂课、关联课时)就会被**停用**:这种情况下该功能不可用。 #### 操作步骤 — 创建自定义时间的课时 1. 在课表中安排或打开该课时。 2. 打开该课时的自定义时间编辑。 3. 输入开始时间和结束时间。 4. 检查相关教师、教室、班级、小组和资源的冲突。 5. 如有需要,重新运行生成:该课时保持锁定,算法会围绕它安排其余内容。 #### 另请参阅 - [时间网格、时段与时长](#page-core-concepts.timetable-grid) - [常规设置](#page-timetables.general-settings) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) - [自动生成](#page-timetables.generation) - [临时事件](#page-schedules.events) ### 3.21 锁定课时的位置 *Source: `help/zh-cn/timetables/lesson-lock.md` · id: timetables.lesson-lock · Audience: admin · Updated: 2026-06-13* **锁定课时**指锁定它在课表中的**位置**。该课时仍会参与生成,但自动生成不能再移动它。 锁定的标志是一把**合上的挂锁** [lock]。相反,**打开的挂锁** [unlock] 表示该位置仍可能被生成或调课操作移动。 请注意区分:**定位**图标 [thumbtack] 用于把课时排入课表,它负责打开或启用排课,并不是锁定的标记。 #### 何时锁定课时 典型情形: - **外聘教师**的上课时间是固定的。 - **已定日期的考试**,时段或教室已经确定。 - **校外活动或参观**安排在明确的时段。 - **使用外部教室、时间固定**(体育馆、游泳池等):可以通过锁定实现,但更好的做法通常是使用**教室的时间限制**,它能引导生成,而不必逐个固定课时。 - **[自由组](#page-core-concepts.free-groups)的课时**,手动排在主课时旁边。 - **上一次生成得到的位置**,您希望在重新进行范围更大的生成之前保留下来。 #### 如何锁定 1. 如果课时尚未排入课表,请先将其排入课表。 2. 打开课时的位置详情。 3. 启用**合上的挂锁**以锁定位置。 4. 确认课时的位置上显示了挂锁。 要释放位置,请使用**打开的挂锁**。之后课时就可以被生成或某些调课操作移动。 #### 批量操作 在课时分配界面中,菜单 操作 还提供全局操作: - 锁定所有已排课时 锁定已排入课表的课时; - 解锁所有已排课时 解除锁定,但保留位置; - 取消所有已排课时 解除锁定并移除位置。 如果您想在一次全新的生成之前,从尚未排入课表的课时重新开始,最后一项很有用。 #### 对生成和诊断的影响 被锁定的课时对生成来说仍是一项强约束,其他课时必须围绕它来安排。 重要的后果是:如果您把课时锁定在一个约束很多的时段,Omniscol会遵从这一决定。冲突或警告仍会显示,但锁定表明该位置是有意为之。因此在诊断中,由已锁定课时引发的问题会从阻塞性提示(红色)降为警告(橙色):Omniscol会指出这一点,但不再把它作为必须修正的阻塞项。 #### 请勿混淆 - **课时位置锁定**:生成期间,课时保持其时段不变。 - **协作锁**:与多位管理员同时编辑相关的机制。参见 [管理员协作](#page-core-concepts.collaboration)。 - **锁定为无教室的位置**:特殊情形,课时需要保持不被自动指定教室,通过 锁定 实现。 #### 良好习惯 - 重新生成之前,请检查已锁定的课时:固定位置过多会缩小优化的余地。 - 测试阶段结束后,解除不需要保留的锁定。 - 对于自由组,请先手动排入课时,再锁定其位置。参见 [自由组](#page-core-concepts.free-groups)。 #### 另请参阅 - [自动生成](#page-timetables.generation) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) - [自由组](#page-core-concepts.free-groups) - [检测并解决冲突(生成时)](#page-timetables.conflicts) - [生成算法](#page-glossary.solver) ### 3.22 检测并解决冲突(生成时) *Source: `help/zh-cn/timetables/conflicts.md` · id: timetables.conflicts · Audience: admin · Plan: standard · Updated: 2026-09-23* Omniscol会在课表**准备**期间以及每次**手动安排**课时时**持续**检测冲突。诊断把**阻塞性冲突**、**未满足的约束**和需要您裁决的**警告**区分开来,并用**颜色**标示严重程度:安排课时时体现在候选时段和选择列表上,诊断面板中则体现在每一行上。**自动生成**是一项独立的计算(生成程序在约束下安排课时,或者让某个课时留作未安排):它的诊断见 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 诊断检查的内容 - **占用(重复预订)**——同一位教师、班级、小组、学生、教室或资源不能同时用于两个时间重叠的课时,除非已明确建模(兼容的小组、班内分组、大教室)。 - **可用时间与时间限制**——处于已声明的不可用时段,或未满足时间限制(教师、班级、小组、教室、课程、校区),按约束的优先级分级。强制设定的日期窗口则始终为阻塞性。 - **容量与服务时间**——教室超员、所需资源数量超出库存、教室不合适(容量、专业教室类型、校区),或教师的服务时间超出。 - **时间网格溢出**——待安排的课程小时数超出或接近网格中开放的时段数,针对某位教师或整个班级。 - **地点与往返**——教师或班级在两个校区之间的路程时间不足,或两个已声明不兼容的科目被安排在同一时间。 - **日历课表**——课时被安排在缺勤(教师或班级)、休息日/假期或不兼容的事件上。 - **建模**——对齐被破坏(对齐的小组没有共同课时)、同一班内分组或同一对齐中各小组的课时数不一致、缺少教师或教室,或配置不完整(生成前所需的校区、时间网格、参数)。 #### 与其他课表的冲突 在 课表管理 模块中,无论是调课模式还是编辑日历课表,诊断还会把当前课表与相同日期已发布的其他课表以及关联账户进行比对:这些课表由菜单 同步 勾选。某位教师、某个班级或某间教室已被其中一份课表占用时,即使当前课表在该时刻没有其他课时,也会产生冲突。 在冲突详情中,来自其他课表的课时会在班级名称之后显示图标 [calendar-days],后面是该课表的名称。来自关联账户的课时则显示图标 [building-columns],后面是该账户的名称。Omniscol通过外部标识符识别不同课表中的同一个班级、教室或资源,没有外部标识符时则按名称识别:参见[如何在不同课表之间识别同一个班级](#page-timetables.multiple-active-timetables--same-entity)。 #### 严重程度级别 同一套严重程度标尺——绿、黄、橙、红——会为编辑界面的多个位置着色。 **在候选时段上**,即您安排课时时(参见 [手动安排](#page-timetables.manual-placement))。**在选择列表的每个选项上**:为课时选择教师、教室、资源、小组或参与者时,每一项都带有一个日历图标,按其在目标时段的级别着色——实体空闲为绿色,被占用为红色——悬停可查看详情。只有**红色**不可用(已占用、封闭时段)会阻止选择;过小或专业类型不符的教室仍可选择,但会给出警告。 | 颜色 | 含义 | | --- | --- | | **绿色** | 没有冲突——实体空闲(或资源未超出上限) | | **黄色** | 轻微不便,非阻塞性(中等优先级的时间限制、已被完全代课的缺勤、教室合适但不够理想) | | **橙色** | 硬约束(高优先级的时间限制、教室坐满至容量的110%、服务时间达110%、校区之间路程时间过短、不兼容的科目、休息日) | | **红色** | 阻塞性冲突(重复预订、必须满足的时间限制或强制日期窗口、教室超过容量的110%、缺勤未被覆盖、对齐被破坏) | **在诊断面板中。** 列出的每个问题都带有一个级别,筛选器沿用该级别。面板把橙色和黄色合并为一个“重要”级别,并为非阻塞性信息增加一个“建议”级别: | 级别 | 含义 | 对应的时段颜色 | | --- | --- | --- | | **红色** | 阻塞冲突 | 红色 | | **黄色** | 未满足的约束/警告 | 橙色 + 黄色 | | **蓝色** | 建议/接近极限 | 网格压力、班内分组 | 启用选项 阻止冲突选项(硬约束) 时,Omniscol会阻止会产生硬约束冲突的选择;否则警告仍会显示,由管理员自行裁决。 ##### 溢出与网格压力 Omniscol会持续把**待安排的课程小时数**与网格中**开放的时段数**进行比较——针对每位教师(按班级和校区)以及每个完整的班级。提示信息会同时给出两个数值,例如“18 h / 16 h”。按填充程度分为三档: | 档位 | 填充程度 | 解读 | | --- | --- | --- | | **蓝色**——压力 | 网格填充90%–100% | 很快会达到上限;安排已经比较紧张 | | **橙色**——轻度溢出 | 100%–110%(小时数多于时段数,最多110%) | *很可能*无法得到有效课表 | | **红色**——严重溢出 | 超过110% | *几乎肯定*无法得到有效课表 | 只有至少配置了一个校区才会执行此计算,网格填充低于90%时不会有任何提示。它衡量的是所需小时数与可用时段数的对比——请勿与教师的**服务时间超出**(已授课小时数与合同小时数的对比)混淆,后者使用相同的颜色,但属于另一项独立的检测。 ##### 全部检测项 | 检测项 | 筛选类别 | 级别 | | --- | --- | --- | | 教师、班级或小组已被占用 | 冲突 | 红色 | | 教室已被占用 | 冲突 | 红色 | | 对齐被破坏(对齐的小组没有共同课时) | 冲突 | 红色(仅教室或资源不同时为橙色) | | 未满足时间限制(教师、班级、小组、教室、课程、校区) | 时间限制 | 必须→红色,高→橙色,中→黄色(日期窗口→始终为红色) | | 教室超员 | 容量 | 不超过容量的110%为橙色,超过则为红色 | | 资源超量 | 容量 | 橙色 | | 教室不合适(容量、专业教室类型、校区) | 容量 | 黄色——可强制 | | 教师服务时间超出 | 容量 | 不超过110%为橙色,超过则为红色 | | 网格溢出/压力 | 网格溢出 | 蓝色→橙色→红色(见上文) | | 校区之间路程时间不足(教师、班级) | 距离 | 橙色 | | 不兼容的科目安排在同一时间 | 兼容性 | 橙色 | | 允许的教室中没有可用教室 | 缺少教室 | 黄色(一间都没有则为红色) | | 缺少教师(课程没有指定教师) | 缺少教师 | 黄色 | | 缺少教室(课时已安排但没有所需的教室) | 缺少教室 | 黄色 | | 班内分组中各小组的课时数不一致 | 班内分组 | 蓝色(仅供参考) | | 对齐的小组之间课时数不一致 | 对齐 | 红色(阻塞性配置) | | 教师在其课程时缺勤 | 缺勤 | 未覆盖→红色,已代课→黄色,部分(协同教学)→橙色 | | 班级缺勤 | 缺勤 | 红色 | | 课时被安排在休息日/假期 | 日历 | 橙色(有时强制为红色) | | 配置不完整(校区、时间网格、参数) | — | 生成前阻塞 | ##### 从警示跳转 面板中的每一行都**可点击**:放大镜 [magnifying-glass] 会直接转到相关的课程、小组或班级——这是梳理冲突上下文最快的方式。对于**小组**冲突(班内分组、对齐),图标 [link] 只保留相关联的小组,在原始诊断不够清楚时,能让约束一目了然。 > _Premium_ #### 筛选诊断 按钮 诊断筛选(警示三角形,位于面板顶部)会打开一个菜单,只保留对当前分析有用的警示。只要还有筛选条件生效,图标就会变为橙色。您可以设置: - **级别**——显示或隐藏红色(阻塞性)、黄色(重要/需核对)、蓝色(建议/接近极限)。 - **实体**——班级、教师、教室、资源、小组,以及日历事件的类型(事件、假期、缺勤)。 - **年级**、**单位**、**校区**——限定到某个范围。单位用于筛选组织层面的实体(办学点、院系、中心);校区则针对实际的物理地点。 - **原因**——开启或关闭每一类检测:时间限制、冲突、容量、距离、缺少教师、缺少教室、兼容性、班内分组、对齐。 - **区间**(日历课表)——限定为接下来的几周或几个月,并隐藏过去的部分。 - **行为**——阻止冲突选项(硬约束) 会主动阻止会产生硬约束冲突的安排。 - **重置**——重新显示全部内容。 筛选并不能解决冲突:它只是隐藏对当前分析没有帮助的内容。 #### 解决冲突 最常见的修正方式有: - 移动课时; - 更换教师、教室或资源; - 调整过强的约束; - 更正误填的不可用时间或缺勤; - 创建或更正小组、班内分组或对齐; - 添加兼容的教室、容量或专业教室类型; - 在重新运行生成之前,锁定必须保持不变的课时。 如果生成找不到完整的解,它可能返回一份不完整的课表:未安排的课时会留在待安排课时的便签栏中。先处理优先级最高的诊断,然后重新运行生成,或手动安排剩余的课时。 #### 需要裁决的情形 有些提示对应的是业务决策,而不是录入错误。例如: - 考试使用一间主教室和一间延时考试教室; - 声明的容量大于录入的座位数,因为学校清楚部分报名者不会到场; - Omniscol中未建模的附属教室。 遇到这些情形,只要可能,最好把情况明确建模:多教室、调整后的小组、修正后的容量,或单独的事件。刻意保留一条警示,应当是团队知情的决定,而不是长期存在的噪音。 #### 操作步骤 1. 打开课表的诊断。 2. 如有需要,按级别、单位、校区、实体或问题类型筛选。 3. 先处理阻塞性冲突。 4. 打开问题详情,找出涉及的课时和资源。 5. 修正课时、约束或建模。 6. 重新运行诊断或生成,确认问题已消失。 #### 另请参阅 - [冲突](#page-glossary.conflict) - [诊断](#page-glossary.diagnostic) - [单位](#page-glossary.campus) - [自动生成](#page-timetables.generation) - [手动安排](#page-timetables.manual-placement) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) ### 3.23 诊断课表生成失败的原因 *Source: `help/zh-cn/timetables/diagnosing-generation.md` · id: timetables.diagnosing-generation · Audience: admin · Updated: 2026-06-24* 当生成程序无法**全部排入**时,生成就“失败”了:它会给出找到的最佳不完整课表,被迫**舍弃**的课时留在待安排便签栏中(一条红色横幅会概述阻塞原因)。问题几乎总是**约束过多**:课时相对于开放的时段太多,或者约束过紧,无法相互嵌合。解决办法是**放宽**可以放宽的部分——这正是本页的主题。要了解生成程序如何确定优先级、会舍弃什么,参见 [自动生成](#page-timetables.generation);要了解已排好的课表上的冲突目录,参见 [冲突与诊断](#page-timetables.conflicts)。 #### 诊断是线索,而不是结论 当某个课时无法安排时,Omniscol会突出显示在多次尝试中**造成问题最多的实体**——“这位教师的时段不够”“这个班级排不进它的网格”。**这只是启发式的结果**:被标出的实体是在各次阻塞中出现最频繁的那个,不一定就是唯一的原因。各项约束**相互交叉**——在别处放宽一点,可能就全部解开了。因此请把这条提示当作**排查方向**:真正的办法往往是**缓解整体的过度约束**(多开一些时段、放宽可用时间),而不是一味盯着被指出的实体。 #### 最常见的原因 ##### 1. 可用时间设置过严 某位教师把太多时间范围标记为**不可用**,剩下的时段不足以安排他的课时。 **诊断**:查看相关教师的可用时间界面。数一数空闲时段,并与他的授课小时数对比。 **解决办法**: - 放宽部分时间范围(从黑色改为红色——不希望但并非不可能), - 重新分配课程(把一部分交给另一位教师), - 如果可用时间可以协商,与这位教师沟通。 ##### 2. 没有兼容的教室 某个科目需要某种**专业教室类型**,但没有创建对应的教室,或者所有对应教室在仅有的可选时段上都被占用。 **解决办法**: - 在合适的教室上创建缺少的专业教室类型, - 降低对专业教室类型的要求, - 增加教室。 ##### 3. 容量不足 小组/班级的人数超过所有候选教室的容量。 **解决办法**: - 指定更大的教室, - 为同一个课时指定[多教室(一个课时占用多间教室)](#page-glossary.multi-room)(总容量是各教室容量之和), - 拆分班级/小组。 ##### 4. 对齐在结构上无法实现 对齐的各小组课时小时数不同,或者所属班级的时间网格不兼容,或者参与对齐的教师同一时间只能在一个地方。 **解决办法**: - 统一对齐各小组的课时小时数, - 取消对齐,改为每个班级各设一门课程, - 检查对齐班级所在的校区在目标时段上是否共用同一个时间网格。 ##### 5. 相对于网格,课时太多 当某个班级或某位教师的小时数明显多于开放的时段数时,会有**预先发出的警告**(**生成** 选项卡,小时数与时段数的计数器)。更隐蔽的情形是:单独来看没有明显溢出,但教师与班级之间各项约束的**累积**——以及它们的**交叉**——最终就排不下了。 **解决办法**: - 减少已录入的授课小时数, - 扩大时间网格(例如开放周三下午), - 放宽部分不可用时间,重点放在**许多实体同时回避的时间范围**:叠加起来会把网格占满。 ##### 6. 不兼容规则太多 堆叠大量“X不能排在Y之后”的约束,可能导致整个系统无解。 **解决办法**:用更柔和的**教学比重**取代部分不兼容规则。 ##### 7. 教室不够(瓶颈) 非常常见:即使每间教室都合适,它们的**数量**也不足以同时容纳需求。课时堆在相同的时段上,教室不足成为阻碍整体排入的**瓶颈**。 **解决办法**: - 增加教室(或在班级之间共用教室), - 通过扩大时间网格来分散需求, - 减少把课时集中在少数时段的约束。 ##### 8. 多个校区:路程时间占用了小时数 有多个校区时,各校区之间的**路程时间**会减少教师(或班级)实际可用的时段:换校区要花时间,这段时间就不能再用来安排课时。有效的可用时间收紧,问题也变得更复杂。 **解决办法**: - 把一位教师当天的课时集中在同一个校区, - 核对已声明的校区之间路程时间, - 限制同一天内跨校区往返。 #### 重新运行生成前的检查清单 - 所有班级都已指定校区? - 所有班级都已有科目和教师? - 课程中用到的所有小组都有理论人数或可管理的容量? - 所有教师的可用时间都已确认? - **生成** 选项卡中没有严重(红色)警示? #### 内置的诊断工具 - **生成选项卡**——*事前*:统计数据(按教师、班级、校区的课时数/小时数)和警告(小时数与时段数的对比、启动前需要修正的严重警示)。 - **未安排的课时**(便签,位于右侧)——*失败之后*:不完整生成的输出。每个课时上的安排按钮(图钉)会通过彩色时段,显示为什么没有合适的位置。 - **遗漏小组检测**:已定义但没有任何课程的小组。 #### 操作步骤 — 诊断课表生成失败的原因 1. **生成失败时**,Omniscol会显示红色横幅,保留不完整的课表,并把没能排入的课时放到右侧的**便签栏**中。 2. **阅读横幅**:它给出的是一个**方向**(启发式,参见上文),而不是结论。 3. **从未安排的课时入手,而不是从“冲突”入手。** 生成从不制造冲突:它只是把排不进去的内容放在一边。从便签中取一个课时,点击它的安排按钮(图钉,排入课表)。 4. **查看彩色时段。** Omniscol会显示所有候选时段;对于无法安排的课时,它们全部被阻塞。请按三种常见的阻塞原因的顺序找出**原因**:**教师**被占用或不可用,**班级**(或小组)被占用,或者**没有**空闲且兼容的**教室**。把鼠标悬停在时段上即可看到原因。 5. **放宽造成阻塞的约束**——视情况而定:放宽可用时间、增加或腾出教室、统一对齐、扩大时间网格(参见上文各项原因),然后重新运行。 6. **重新运行之前**,对照上面的检查清单(已指定校区、科目和教师已就位、人数已填写、可用时间已确认、**生成** 选项卡中没有严重警示)。 #### 另请参阅 - [自动生成](#page-timetables.generation) - [冲突与诊断](#page-timetables.conflicts) - [诊断](#page-glossary.diagnostic) - [冲突](#page-glossary.conflict) - [特殊情况与高级配置](#page-faq.edge-cases) ### 3.24 显示、复制、重组课表 *Source: `help/zh-cn/timetables/visualize-duplicate.md` · id: timetables.visualize-duplicate · Audience: admin · Updated: 2026-06-25* 学校往往有**多份课表**,处于不同阶段:当前学年已发布的课表、为下一学年准备的草稿、用来探索调整方案的测试方案。本页说明如何管理这些不同版本而不致混淆,以及课表生成之后**显示**和**重组**两个页面的用途。 #### 查看课表列表 课表管理模块打开后显示账户的课表列表:包括已发布的和草稿。每份课表可以看到: - **名称**(`2026-2027学年`、`2027秋季学期草稿`、 `6年级、7年级合班方案`), - **状态**(已发布或未发布), - 已发布的**周次范围**(如有), - **快速统计**(班级数、课程数、教师数)。 可用的操作包括打开、复制或删除课表。已发布的课表不能删除。 #### 查看已生成的课表 按钮显示以**只读**方式打开课表:您查看的是最终课表,但无法修改。在以下情况下,最适合用这个页面:发布前**通读**、**检查**某一周或一连串课时的衔接、在不开放编辑功能的前提下**展示**课表、**导出**或**分享**。 ##### 无风险的检查 该页面沿用课表常用的显示引擎,但处于**安全**模式:不能移动课时,不能保存,也不会误改。您可以使用显示筛选器、日期选择器和各种显示方式(网格、列表、电子表格、日程表、日、月、分屏——详见 [课表的显示方式](#page-schedules.schedule-display)),还可以一次关闭并排打开的多个日历。 ##### 交替周与各个变体 当课表含有**交替周**时,这一点尤其有用:您先显示**全部周**的视图,再通过专用选项卡(A/B、1/2等)逐个查看**各个变体**。要检查按周重复的课表在所有变体上是否一致,这通常是最简单的办法,而且没有编辑工具的干扰。 ##### 以只读方式分享 在此页面中,您可以打开**分享**功能:通过网页链接,把完整的理论课表以只读方式提供给第三方(外部合作方、校领导、校区负责人),无需开放Omniscol账户的访问权限。日历课表还提供 **iCal** 链接。详见[通过公开链接分享课表](#page-schedules.share-link)。 ##### 导出(PDF、Excel、打印) 查看页面是导出所显示课表文件的自然入口: - 以PDF格式导出数据,生成 **PDF**, - 以Excel格式导出数据,导出为 **Excel / XLSX**, - 打印,用于**打印**。 对于班级课表和教师课表,这通常是生成可直接发放的规范文档的最便捷方式。 #### 快速重新组织已定稿的课表 按钮重组以**快速编辑**模式打开同一份课表。目的不是重做整个课表,而是在已经完成的课表上快速修正个别特殊情况。 典型情况: - 移动一个已生成的课时, - 更换教室、时段或临时安排, - 添加一个单独的课时, - 修正少量遗留的冲突,而不必重走整个**课时分配 → 生成**流程。 在这个页面中,您可以看到网格、筛选器、可用时段面板、按钮添加, 以及用于保存修改的按钮保存。 如果修改变成**结构性**的(班级、小组、科目、授课小时数、全局约束),请回到课表的各个构建步骤,或者复制课表,在草稿上操作。 #### 复制课表 三种典型情况: - 基于已发布的课表**准备下一学年**——参见 [准备下一学年](#page-timetables.next-school-year)。 - 基于已发布的课表**创建测试方案**,无风险地探索结构性调整(班级合并、 校区重组、新增专业方向)。 - **从账户中保留的旧课表重新开始**——以往年的结构为基础,为新学年建立课表。 操作复制 会打开一个对话框。创建出的副本始终是**未发布的草稿**:只有您明确发布它之后,其中的课时才会供给其他模块。对话框中显示一棵**默认全部勾选**的复选框树:全部保持勾选,得到的是一模一样的副本;取消勾选某一项,副本中就会去掉相应的内容。 ##### 选择要保留的内容 这棵树与课表的结构一致;取消勾选某个分支,就会重新构建该部分: - **校区**——连同其教室和资源。取消勾选校区,也会去掉课程课时上带有的教室和资源,**以及课时的位置**:这样副本的网格需要重新安排。 - **教师**——课表的教师库。取消勾选教师库,同时会去掉教师—班级—科目的安排,以及课程课时上带有的教师。 - **班级**——连同其小组、时间限制、不兼容规则和课时分配。每个子分支都可以单独取消勾选:小组、班级的时间限制、不兼容规则,或课程课时的细节(小组、教室、资源、授课形式、评论、位置……)。 - **课时位置**——只取消勾选这一项,副本保留全部结构,但**网格是空的**:这是复制一份备课内容、从零开始重新生成的规范做法。 依赖关系会自动处理:例如,您不能在移除所有校区的同时,仍保留课时上的教室。而且无论取消勾选到哪一级,Omniscol都会清理变成孤立的引用——例如指向已移除校区的班级。 ##### 转换课表类型 > _Premium_ 同一个对话框还可以将副本**转换**为与原课表不同的类型。选择器只提供另外**两种**类型。转换时会按新的形式重新调整课时。 - **转为日历课表**(从周课表或周期课表)——您需要指定一个**时间段**(开始和结束日期)。每个重复的课时会**展开为时间段内每个对应工作日各一个带日期的课时**;法定节假日、停课和缺勤的日子会被跳过。各科目的授课小时数会按时间段的周数调整,交替周则逐日解析到正确的变体(A/B、A/B/C……)。 - **转为周期课表**——您需要指定以工作日计的**周期长度**;每个位置成为周期中的一个日序号。 - **转为周课表**(从周期课表或日历课表)——每个课时回到它所在的**星期几**。 转为周课表或周期课表有意做了简化:原本落在同一个星期几的多个课时会合并到同一个时段,日历课表中带日期的可用时间也不会保留。只有在确实需要明确日期时,才选择转为日历课表。 > _Premium_ ##### 平移日期(日历课表) 对于**日历**类型的课表,复制时可以将**所有课时**重新对齐到新的开始日期——便于在下一学年重现同样的安排。勾选平移选项,填写新的开始日期,Omniscol就会平移时间段,并重新对齐每个课时。 原则是:Omniscol **保持上课日的先后顺序**。原时间段的第N个上课日,成为新时间段的第N个上课日——重新对齐依据的是工作日,而不是单纯的日历日期。 因此,课时可能会**改到另一个星期几**,原因有两个。首先,新的开始日期不一定与旧的落在同一个星期几:如果原来从周一开始,新的从周三开始,一切都会后移两天。其次——也是最常见的情况——两个时间段的法定节假日和停课日并不重合。落在新时间段之外的课时会**变回未安排位置的状态**:课时及其全部细节都会保留,只丢失位置。 #### 在Omniscol中重新组织学校 对于结构性的调整(从传统班级制转为小组制、合并 年级、开设新校区),请在专门的**草稿课表**上操作: 1. 将已发布的课表复制为`2027-2028调整方案`。 2. 在草稿中修改结构(班级、小组、校区)。 3. 运行诊断和生成,评估可行性。 4. 反复调整,不影响正式账户。 5. 方案确认后,可以切换为发布。 好处是:只要方案仍是草稿,最终用户(学生、教师)就什么也看不到。只有管理员可以访问草稿。 #### 删除不再需要的草稿 未发布的课表可以在列表中删除。如果想在删除前留存记录,请先打开课表,再通过[download]将其导出为JSON。详见 [自动生成](#page-timetables.generation)。 已发布的课表不应直接删除:如果确实需要让它退出使用,请先在发布网格中取消发布。 #### 操作步骤 — 基于已发布的课表创建测试方案 1. **要在不影响正式账户的情况下探索调整方案**(班级合并、新校区、改为小组制):请在从已发布课表复制出来的**方案草稿**上操作。草稿期间,用户什么都看不到。 2. **打开课表管理模块**:列表显示账户的课表,以及各自的已发布/未发布状态、周次范围和快速统计(班级、课程、教师)。 3. **在已发布的课表上点击[copy]复制**。在对话框中勾选要保留的内容——**校区**(教室、资源)、**教师**、**班级**(小组、可用时间)、**课程**及其细节。做方案时,通常保留结构和课程,同时取消勾选需要重新安排的教师。 4. **起一个一目了然的名称**:`2026-2027第一学期`、`2027第三季度`、 `上海新校区测试`、`选修课分组调整`。名称越明确,三个月后越不容易混淆。 5. **在草稿中修改结构**:创建或合并班级,添加校区,重新组织小组。**运行生成**,评估可行性。放心地反复调整——对已发布的课表没有任何影响。 6. **方案确认后**,切换为发布(参见 [发布课表](#page-timetables.publication))。否则,保留为草稿,或在删除前导出为JSON。 #### 另请参阅 - [课表管理模块概览](#page-timetables.overview) - [课表的显示方式](#page-schedules.schedule-display) - [通过公开链接分享课表](#page-schedules.share-link) - [准备下一学年](#page-timetables.next-school-year) - [发布课表](#page-timetables.publication) ### 3.25 准备下一学年 *Source: `help/zh-cn/timetables/next-school-year.md` · id: timetables.next-school-year · Audience: admin · Plan: standard · Updated: 2026-06-25* 下一学年的课表可以在开学前六到九个月开始构建,与当前的运行并行进行。做法是复制已发布的课表生成一份草稿,然后在草稿上工作,而不改动已发布的课表。 #### 需要沿用的三类内容 需要从当前学年沿用到下一学年的有三类: 1. **结构** — 校区/教室、班级、小组、班内分组、对齐、教学小组组合。每年通常可以沿用80%至90%,仅需少量调整。 2. **课时** — 需要安排的课时清单(科目、班级、教师、时长、每周出现次数)。可沿用70%至80%,再根据培养方案的变化调整。 3. **教师-班级-科目的指定关系** — 谁教什么。变动较大(教师离职、新教师到岗、服务时间调整)。 #### 开始复制 在 课表管理 模块中,对将作为基础的课表使用操作 复制。对话框默认全部勾选;取消勾选您希望重新构建的内容: - **校区** — 连同其教室和资源。 - **教师** — 教师在课表中的指定关系;其可用时间随之保留。根据您的做法,对于重复型课表,您也可以选择重新向教师收集新学年的可用时间,而不沿用旧的。 - **班级** — 连同其课程、小组、对齐、可用时间和不兼容规则。 - **课时**(课时分配) — 可选择保留哪些细节:教师在课时上的指定、小组、教室、资源、位置。通常需要逐项复查,因为教师和学生都会有变动。 创建出的草稿尚未发布:不会影响当前学年已发布的课表。对于周课表或周期课表,之后在发布网格中按下一学年的周进行发布。 复制时还可以顺带**平移课时的日期**(针对日历课表),或**转换课表类型**:这两个选项及其效果,尤其是课时的重新对齐和合并,详见 [显示、复制、重组](#page-timetables.visualize-duplicate)。 #### 在草稿上工作 准备好的课表会在列表中显示为草稿。请用清楚的名称为它重命名,例如 `2027-2028学年上学期`。您可以: - 打开它修改班级,添加新教师,移除离职的教师, - 向在岗教师收集新学年的可用时间(通过 管理 模块批量发送), - 运行自动生成来验证可行性, - 花上几个月从容地反复调整。 #### 开学时发布 当草稿课表准备就绪、新学年到来时,在需要的周上将它**发布**。参见[第8步——发布课表](#page-timetables.publication)。 草稿成为已发布的课表,旧课表仍可作为历史记录查看。 #### 操作步骤 — 准备下一学年(N+1) 1. **与当前运行并行启动N+1**:Omniscol会把草稿与当前课表隔离开。您可以放心地花几个月反复调整,不会破坏任何内容。 2. **前提**:在[管理 → 学年](#page-admin.school-year)中创建N+1学年,并设置好日期和假期。在该学年的周上发布时需要用到它。 3. **在 课表管理 模块中**,对参照课表使用操作 复制。默认全部勾选;取消勾选将重新构建的内容: - **校区**、教室和资源。 - 指定到该课表的 **教师**(其可用时间随之保留) — 通常需要复查,甚至为新学年重新收集。 - **班级**、小组和对齐 — 可沿用80%至90%。 - **课时** 及其细节(指定关系、教室、位置等) — 需要复查,教师和学生都会有变动。 4. **草稿创建完成**。请清楚地为它重命名,打开后调整班级(新生入班、离班、合并),添加新教师并移除离职的教师。 5. 通过 管理 模块批量发送,**向在岗教师收集可用时间**。**运行自动生成**,尽早验证可行性,并围绕约束、课时数和教师反复调整。 6. **开学前准备就绪后**,在需要的周上**发布**草稿(参见[第8步——发布课表](#page-timetables.publication))。草稿成为N+1学年已发布的课表,旧的N学年课表仍可作为历史记录查看。 ⚠ 别忘了点击时间轴的**右箭头**,或通过选择器切换学年,否则您仍停留在N学年(参见 [时间轴与时间导航](#page-core-concepts.timeline-navigation))。 #### 另请参阅 - [学年与假期](#page-admin.school-year) - [课表管理模块概览](#page-timetables.overview) - [第8步——发布课表](#page-timetables.publication) - [显示、复制、重组](#page-timetables.visualize-duplicate) --- ## 4. 仪表盘 ### 4.1 仪表盘模块概览 *Source: `help/zh-cn/dashboard/overview.md` · id: dashboard.overview · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-06-25* **仪表盘**模块(左侧菜单中的图标 [gauge-high])汇集了基于实际运行课表计算的统计数据(即已实际排定并发布的课时,并已计入[缺勤](#page-glossary.absence)和[代课](#page-glossary.substitution))。 它是一个**报表**和**管理决策**工具:每位教师授课多少小时、教室的使用情况如何、每个班级各科目的小时数是多少、每名学生到校多少天。 #### 可用的统计指标 共有六个分析维度,通过模块中的选项卡访问: - 教师:所授科目、班级数、计入的小时数、超时小时数、已取消课时。 - 教室:占用小时数、开放天数、每天小时数、容纳的学生人数。 - 资源:使用小时数、使用天数、每天的使用数量。 - 科目:授课小时数、天数、课时数、按班级的明细。 - 班级:总小时数(含各小组所占比例)、天数、按科目和按教师的明细。 - 学生:课时数、小时数、到校天数、按科目的明细。 #### 分析时间段 可按**周**、**月**、**学年**或**自定义日期范围**筛选。顶部的时间轴用于在不同时间之间切换。 #### 导出 点击 打印 按钮会打开一个表格,可复制、打印,也可导出为CSV。如需转发这些数据,参见[分享链接](#page-glossary.share-link)。这里不提供iCal链接:仪表盘模块只包含统计数据,不含带日期的课时。 #### 分享 点击 分享 按钮会生成该时间段统计数据的公开只读链接。适合外部审计人员、没有Omniscol账户的教学负责人等。 #### 另请参阅 - [仪表盘](#page-glossary.dashboard) - [状态](#page-glossary.lesson-status) - [查看和筛选](#page-schedules.consult-and-filter) - [课表管理](#page-timetables.overview) ### 4.2 使用表格和图表 *Source: `help/zh-cn/dashboard/tools-and-filters.md` · id: dashboard.tools-and-filters · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-05-18* **仪表盘**的每个标签页都由表格和图表组成。表格用于核对明细,图表用于快速查看分布情况或极值。 #### 搜索与图表 搜索会筛选表格中的行。图表会根据当前可见的行重新计算:如果您搜索某个科目、校区或教师,图表就只反映这一范围。 搜索不区分大小写和重音,并会忽略多余的空格。同一次搜索中输入多个词,表示这些条件需要同时满足。用逗号可以搜索多个可选项。 示例: - `数学 王` 显示同时包含 `数学` 和 `王` 的行。 - `阶梯教室, 实验室` 显示符合其中任意一个词的行。 - `东校区 >50` 可用于教室列表,筛选出东校区中容量超过50个座位的教室。 #### 列排序 点击可排序的列标题即可重新排列表格:名称按拼音顺序,计数按数值顺序,时长按时间顺序。再次点击同一个列标题可反向排序。 导出前先排序很有用:例如,您可以把超时最多的教师、使用最频繁的教室或小时数最多的班级排在最前面。 #### 复制图表 要在文档、邮件或演示文稿中使用图表: 1. 如有需要,先筛选表格; 2. 确认图表显示的范围正确; 3. 在图表上点击鼠标右键; 4. 在浏览器中选择**复制图片**。 复制出的图表与屏幕上显示的状态一致。 #### 导出或分享 点击打印按钮,可打开针对当前表格的复制、打印或导出选项。根据标签页的不同,导出可用于准备交给财务的Excel文件、向教学负责人发送统计明细,或保留记录以备审计。 点击分享按钮,可创建只读的分享链接。收件人可以查看该时间段的统计数据,但不能修改课表。 #### 另请参阅 - [搜索和筛选](#page-core-concepts.search-and-filter) - [教师统计](#page-dashboard.teachers) - [教室统计](#page-dashboard.classrooms) ### 4.3 教师统计 *Source: `help/zh-cn/dashboard/teachers.md` · id: dashboard.teachers · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-06-13* 教师标签页汇总所选时间段内实际计入的时长。它可用于服务时间跟踪、薪酬准备、财务导出和代课核对。 #### 主要指标 - **计入时长**:用于行政跟踪的时长,并根据学校的安排,用于薪酬核算。 - **超时**(超时):来自缺勤管理模块中的代课,或在按周重复的课表的某个有日期的课时上手动添加的时长。 - **已取消课时**(已取消课时):因缺勤而扣除的时长,或在按周重复的课表中手动删除某个有日期的课时而扣除的时长。 - **班级和科目**:教师在所选时间段内的教学范围。 - **课时类型**:在课程已标明类型时,按课时类型列出的小时数明细。 通过超时和已取消课时,可以区分计划服务时间和所选时间段内实际完成的服务时间。 #### 按课时类型查看明细 当时长的计入方式取决于教学形式时,按课时类型查看明细会很有用:讲授课、习题课、实验课、辅导、工作坊,或学校设置的任何其他类型。 这份明细有助于核对应付时长、校内的计酬规则,以及向财务部门或审计机构提供佐证的需要。 #### 导出、分享与财务 表格可以复制、打印或导出,以便在Excel或财务工具中处理。只读的分享链接可以在不开放课表编辑权限的情况下发送一份统计明细。 如需与财务软件长期对接,可以通过ETL数据流或专门的集成,按学校要求的格式读取这些统计数据。 > _Premium_ 在**Premium**账户上,导出此表格时会增加两列,数据来自对课时的精细跟踪:**实际时长**(实际授课的时长,与计入时长不同)和 **已完成**(被标记为已完成的课时的时长)。这有助于对照计划服务时间、计入服务时间和实际完成的服务时间。相反,处于 **草稿** 或 **已取消** 状态的课时不计入这些数字。参见[状态](#page-glossary.lesson-status)。 #### 核对要点 在将这些数字用于薪酬之前,请确认时间段正确、缺勤已经审核通过、代课已正确登记,并且新增或删除的有日期的课时与实际运行情况相符。 #### 另请参阅 - [缺勤跟踪与导出](#page-absences.statistics) - [状态](#page-glossary.lesson-status) - [使用表格和图表](#page-dashboard.tools-and-filters) - [仪表盘模块概览](#page-dashboard.overview) ### 4.4 教室统计 *Source: `help/zh-cn/dashboard/classrooms.md` · id: dashboard.classrooms · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-06-13* 教室选项卡分析所选时间段内教室的实际使用情况。它可用于找出使用不足的教室、使用过度的教室,以及各校区或教学楼之间的不均衡。 #### 统计指标 表格主要显示课时数、占用小时数、使用天数、每天小时数和容纳的人数。填写了相关数据时,校区、教学楼、专业教室类型和标签等列,便于按区域或教室类型进行分析。 图表有助于直观呈现占用情况的分布、小时数以及使用率的差异。 #### 使用不足与使用过度 教室的实际使用人数远低于其容量,可能意味着安排不当、专业教室没有充分利用,或者可以重新平衡。使用率低于容量25%的教室,通常值得核查。 反之,教室的使用人数超过其容量,则意味着运行风险:人数过多、教室安排不当,或者容量数据需要更正。 #### 教学楼分析 借助该选项卡,您可以回答以下问题: - 哪些教学楼的占用最集中; - 哪些教室使用率仍然很低; - 哪些专业教室类型缺少,或者规模过大; - 哪些校区可以重新调整。 如需更细致的分析,例如把占用小时数与教学楼的开放时间或可上课的时间范围进行对比,学校可以导出表格,在外部工具中继续处理,也可以通过接入[MCP](#page-integrations.mcp)的外部AI智能体查询账户,具体取决于用户档案、权限和开放的工具。 #### 筛选教室 搜索支持容量比较符(`>50`、`<=100` 等),也支持校区、教学楼、专业教室类型或标签等搜索词。图表会根据筛选后的教室重新计算。 #### 另请参阅 - [搜索和筛选](#page-core-concepts.search-and-filter) - [使用表格和图表](#page-dashboard.tools-and-filters) - [第2步——校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 4.5 科目统计 *Source: `help/zh-cn/dashboard/subjects.md` · id: dashboard.subjects · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-05-18* 科目标签页显示教学小时数在所选时间段内的分布:总体分布、按班级分布、按教师分布,以及在已填写课时类型时按课时类型分布。 #### 可以核对的内容 - 每个科目的总小时数; - 按班级的分布; - 按教师的分布; - 各课时类型所占的比例,例如实验课、习题课、讲授课或工作坊; - 学校使用的其他授课形式(如有)。 #### 教学分析 通过这个视图,您可以核对实际排入课表的小时数是否与培养方案、培养计划的要求以及各类教学的预期比例保持一致。 它尤其适合回答这样的问题:已经安排了多少小时的实验课,哪个班级在某个科目上分到的课时最多,或者哪些教师在所选时间段内承担了某个科目。 #### 图表与筛选 通过搜索,可以单独查看某个科目、班级、教师或课时类型。图表会根据当前可见的行重新计算,因此在复制或导出之前,可以很快得到一个有针对性的视图。 #### 另请参阅 - [班级统计](#page-dashboard.classes) - [教师统计](#page-dashboard.teachers) - [使用表格和图表](#page-dashboard.tools-and-filters) ### 4.6 班级统计 *Source: `help/zh-cn/dashboard/classes.md` · id: dashboard.classes · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-05-18* 班级选项卡汇总各班级在所选时间段内的授课小时数。它可用于核查实际的教学负荷、各科目的分布,以及认证或评估时要求提供的证明材料。 #### 统计指标 该页面主要可以查看: - 班级的总小时数; - 填写了小组信息时,学生的理论人数和实际人数; - 上课天数; - 按科目的分布; - 按教师的分布; - 按课时类型的明细; - 涉及的小组和子小组。 #### 认证与评估 班级统计有助于记录某个培养方案中实际开设的授课小时数。当学校需要证明教学的小时数、形式和分布时,例如应对国内的专业认证与教学评估(如工程教育专业认证),或国际上的AMBA、EQUIS和AACSB认证,这些统计会很有用。 #### 数据质量 统计的准确性取决于课表中班级、小组、科目、课时类型以及教师授课安排的质量。小组信息填写完整,才能得到相关学生实际上课小时数的更可靠数据。 #### 另请参阅 - [科目统计](#page-dashboard.subjects) - [教师统计](#page-dashboard.teachers) - [使用表格和图表](#page-dashboard.tools-and-filters) ### 4.7 学生与资源统计 *Source: `help/zh-cn/dashboard/students-resources.md` · id: dashboard.students-resources · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-05-18* 学生和资源两个标签页是对仪表盘分析的补充。它们比教师、教室、科目或班级视图针对性更强,但同样适合用来核对运行数据。 #### 学生 学生标签页按学生显示所选时间段内跟踪的课时、时长和天数。如果班级、小组和子小组填写正确,统计结果会更准确地反映每名学生实际涉及的小时数。 缺勤会在专门的列中统计,包括缺勤的小时数、课时数和天数。通过这个视图,您可以发现需要核实或跟进处理的个别情况。 #### 资源 资源标签页用于跟踪实物资源的使用情况:使用小时数、使用天数和每天占用的数量。它主要用于确认共享设备确实在被使用,并找出使用较少的时间段或资源。 #### 使用方法 与其他标签页一样,搜索会筛选当前可见的行,图表会随显示范围自动调整,数据可以复制、打印、导出,或以只读方式分享。 #### 另请参阅 - [班级统计](#page-dashboard.classes) - [班级和学生缺勤](#page-absences.class-and-student-absences) - [使用表格和图表](#page-dashboard.tools-and-filters) --- ## 5. 日常使用(课表模块) ### 5.1 查看和筛选课表 *Source: `help/zh-cn/schedules/consult-and-filter.md` · id: schedules.consult-and-filter · Audience: admin/teacher/student/staff · Plan: standard · Updated: 2026-09-23* **课表** 模块(左侧菜单中的 [calendar-days] 图标)是日常查看课表的界面。它显示所选时间段内已发布的课表,并提供各种实用的筛选和视图。 #### 可用的筛选条件 - **班级**、**教师**、**小组**(可选择是否包含整个班级), - **教室**、**资源**, - **教师教授科目**、**教学团队**(某个班级的所有教师)、**科目**, - **课时类型**(习题课、实验课、考试、讲授课等),如已配置, - **学生**(前提是已录入学生并将其分配到班级)。 当一学年中发布了多份课表时,出现在其中多份课表里的班级在筛选条件中只算一项:它的课表汇集了每一份课表中的课时。Omniscol会通过外部标识符识别[不同课表中的同一个班级](#page-timetables.multiple-active-timetables--same-entity),没有外部标识符时则按名称识别。 您可以**依次叠加多份课表**:方便同时查看某个班级和某位教师,或并排查看多个班级。 #### 视图 显示组件结合了两个层面: - **呈现方式**:**网格**、**列表**或类似电子表格的**表格**; - **时间组织方式**:**周**、**日**、**月**、**日程表**(以及**按小时的日程表**)或**分屏**。 网格是标准的日历视图。表格则用于把当前视图以更接近电子表格的格式呈现,它不是基础视图。 参见 [课表的显示方式](#page-schedules.schedule-display)。 #### 时间轴与导航 顶部的**时间轴**显示: - **假期**,以灰色横条表示, - **所选时间段**(周、月,有时是学年),以绿色区域表示,并叠加显示日期, - **导航**:键盘的左右键、智能手机上的滑动,或 `◀ ▶︎` 按钮。 时间轴**两端**的 `◀` 和 `▶︎` 按钮可用于**切换学年**。 #### 缓存与性能 Omniscol大量使用浏览器缓存。只有在您切换周时,应用才会重新加载课表;再次点击当前周会**强制刷新**。 因此,即使在2G(Edge)网络下,Omniscol也能正常运行,在网络短暂中断时也能继续工作(请求会在网络恢复后重新发送)。 #### 编辑模式 按钮 调课 用于切换到编辑模式:参见 [临时调整](#page-schedules.ad-hoc-changes)。 #### 导出与分享 - 打印:打印当前所选内容(或通过浏览器另存为PDF)。 - 分享:打开分享窗口:公开的[网页链接](#page-glossary.share-link)、[iCal](#page-glossary.ical) 订阅,或JSON格式(API),具体取决于您的权限。 #### 另请参阅 - [临时调整](#page-schedules.ad-hoc-changes) - [冲突与诊断](#page-timetables.conflicts) - [课表的显示方式](#page-schedules.schedule-display) - [状态](#page-glossary.lesson-status) - [打印与分享](#page-schedules.print-and-export) ### 5.2 课表的显示方式:网格、列表、电子表格、日程表、月、分屏 *Source: `help/zh-cn/schedules/schedule-display.md` · id: schedules.schedule-display · Audience: admin/teacher/student/staff · Plan: standard · Updated: 2026-06-26* 本页介绍Omniscol中**课表的通用显示方式**。您可以在 **课表** 中看到它;在 **课时分配** 界面切换到**课表**视图时也是如此;**课表管理** 的 **显示** 和 **重组** 界面同样使用它;其他使用同一显示引擎打开课表日历的界面也一样。 同样的课时可以用多种形式呈现,而显示的数据不变:改变的只是显示方式,不是课表本身。 #### 切换显示方式 切换视图的图标附在**每个已显示的课表**上。要让它们出现,请**将鼠标悬停在课表标题上**:标题栏随即显示视图切换图标。点击您需要的那个: - [calendar] 切换为**网格**,[table-list] 切换为**列表**,[table] 切换为**电子表格**(仅限管理员,且仅在电脑上可用); - 在**按小时显示的日程表**上,[up-down] 可以**互换日期和列**。 标题栏还提供分享和关闭日历的按钮。每个课表各自保留自己的显示方式,因此在叠放的多个日历中,您可以让一个以列表显示,另一个以网格显示。 #### 同一课表的三种呈现方式 第一层切换针对同一批课时的**呈现方式**。 ##### 网格 **网格**(网格视图)是标准的日历视图:日期为列,时段或小时为行,课时放在各自的格子里。按周逐周查看课表时,它是首选视图。 它尤其适合: - 一眼发现空档、重叠和每天的时间跨度, - 直观比较某个班级、某位教师或某间教室, - 在熟悉的时间坐标中修改或查看课表。 ##### 列表 **列表**(列表视图)按时间顺序把课时一条条排列出来。 它尤其适合: - 在小屏幕上快速浏览较长的时间段, - 配合筛选查找某个具体课时, - 依次核对时间、教室和任务。 ##### 电子表格 **电子表格**是当前视图的**类电子表格呈现**。它可用于核查、打印、把数据复制到电子表格软件,或者(视界面而定)直接导出文件。它**不是**标准的日历视图。 视情况不同,它可能呈现为: - 以表格形式展示的“日期 × 时段”网格, - 或者在源显示方式已是列表时,每行一个课时。 它尤其适合: - 管理核查, - 复制粘贴到电子表格软件, - 在界面提供时,直接导出为 **PDF**、**CSV** 或 **Excel / XLSX**, - 逐行检查。 #### 时间范围:周、日、月 第二层切换针对**显示的时间段**。 - **周**:多数情况下的默认视图。 - **日**:与标准网格逻辑相同,但收窄到单独一天,便于更仔细地查看课时密集的一天。 - **月**:长周期视图。在日历模式下,显示为月度矩阵网格;在电子表格模式下,则仍以表格形式呈现相同内容。 选择显示的日期 选择器还可以让您在相关视图中隐藏或显示某些日期。 #### 日程表 **日程表**通过筛选菜单创建:它把多个对象或多个日期并排放在同一视图中,便于整体分析。根据您想阅读的维度,有两种形式: - **增加日程表概述**(图标 [table-cells])每行放一个**对象**(班级、教师、教室、科目),每天的小时作为列——适合在同一天内比较多个对象。 - **增加按小时显示的日程表**(图标 [table-columns])把**小时放在纵轴**(按时间比例),并为**每个对象每天各设一列**——适合在真实的时间刻度上查看占用情况和课时衔接。需要时,[up-down] 按钮可以互换日期和列。 日程表尤其适合: - **同一天并排显示多个对象**, - **为一个或多个对象显示多天**, - 按月查看占用情况, - 检查课时的衔接、过渡或可用时间。 它是日历网格的补充,回答的是不同的问题:当您需要分析一组对象或一组日期时,请选择它。 #### 分屏 分屏 功能会打开**分屏**:两到四个课表并排显示,每个课表保留自己的筛选条件和显示方式。 它适合: - 比较两个班级或两位教师, - 安排共同课时或共同监考, - 确认两边是否同时有空闲时段。 #### 切换显示方式后保持不变的内容 在各种显示方式之间切换不会改变课时。您看到的仍是同一份数据,并且视情况保持: - 相同的对象筛选, - 相同的所选时间段, - 相同的可见冲突或缺勤, - 相同的打印、导出或分享操作(取决于用户的权限)。 #### 操作步骤 — 根据任务选择合适的显示方式 1. **快速查看课表**:从**网格**开始。它是标准的日历视图,最适合查看一周的课时。 2. **逐个浏览课时**:切换到**列表**。适合小屏幕,或查找某个具体课时。 3. **以电子表格方式复制、打印、导出或核查**:使用**电子表格**。它是当前视图的表格化呈现,不是课表的基础视图。 4. **聚焦某一天**:选择**日**范围。 5. **纵览若干周或若干日期**:切换到**月**,或根据要解决的问题打开一个**日程表**。 6. **在同一视图中交叉查看多个对象或多个日期**:添加一个**日程表**(需要小时刻度时,添加**按小时显示的日程表**)。 7. **比较两个独立的课表**:使用**分屏**。 #### 另请参阅 - [查看和筛选](#page-schedules.consult-and-filter) - [显示、复制、重组](#page-timetables.visualize-duplicate) - [课表显示模式](#page-glossary.schedule-view-mode) ### 5.3 已发布课表的临时调整 *Source: `help/zh-cn/schedules/ad-hoc-changes.md` · id: schedules.ad-hoc-changes · Audience: admin · Plan: standard · Updated: 2026-06-26* Omniscol不仅是开学前的课表生成工具,也是一个日常运营工具,可以在全年中随时处理各种日常调整。 #### 激活编辑模式 点击 调课。所有已打开的日历都会切换到调课模式,之后新打开的日历也可以直接编辑。 使用顶部的时间轴切换到要修改的那一周。 #### 修改课时 点击某个课时,会出现一个面板(您可以移动它,也可以将其设为半透明),其中列出所有可修改的属性: - 教师, - 小组(如有), - 资源, - 教室(参见[多教室](#page-glossary.multi-room)), - 备忘。 #### 同时修改多个课时 在调课模式下,按住 **Shift并点击**多个课时即可同时选中它们(选中两个及以上时会高亮显示)。此时面板变为**共用详情**:您在其中设置的教室、教师、资源、备忘或时长,会在保存时应用到**所有选中的课时**,非常适合一次性为一批课时更换教室。参见 [编辑课时](#page-timetables.lesson-edit)。 与其逐个点击课时,不如使用详情中的 选择 菜单,一次点击即可**扩大选择范围**: - 按**时间窗口**:整个**日**、**周**或**月**(取决于课表类型); - 按**相似性**:**后续相似课时**(同一班级、科目、小组和时段,即某门课程的重复课时); - 按**班内分组**:属于同一班内分组的小组的课时。 每个选项都会显示它将新增的课时数量,另有一个开关可以将范围限定在当前日程表,或扩展到所有已打开的日历(**全部**)。 旁边的**复制**菜单([copy])可以复制选中的课时:复制成多份,或在日历课表上复制到指定日期。具体用法参见 [分配课时数并创建课时](#page-timetables.hour-distribution)。 #### 分离或删除课时 要将课时从网格中**分离**,请点击面板中的 [scissors] 图标,或双击该课时。课时会进入右侧的未排课时区域,您也可以在那里继续修改它。 要**删除**课时,请打开其面板并点击 删除:分离会把课时保留在待重新安排的区域,而删除会将其从课表中移除。与所有修改一样,删除也会出现在修改记录中,您可以在那里撤销(见下文)。 #### 移动课时 打开课时,点击其定位按钮(排入课表,图钉):可选的时段会以彩色圆点显示(根据冲突情况从绿色到红色)。点击新的时段即可。 要跨周移动,有两种方式: - **月视图**:同时查看多个周,然后将课时重新安排到所需的时段; - **分离、切换周、重新安排**:先取出课时,切换当前周,再重新安排。 #### 与日历课表的区别 在[日历课表](#page-glossary.calendar-mode)上,修改会**直接作用于该日期的课时**(该日期的课时本来就是独立的)。 在[周课表](#page-glossary.weekly-timetable)或[周期课表](#page-glossary.cyclic-timetable)上,临时调整**不会**破坏标准周,而是作为所涉日期上的例外记录保存。其他周仍然沿用标准周。 #### 查看和撤销修改 按钮 变更查看 会列出该时间段内当前的修改。您可以逐条撤销。 在**周课表或周期课表**上,临时调整会作为其日期上的例外记录保存,您可以**随时**在这份记录中撤销。 ⚠ 但在**日历课表**上,修改会在保存时**永久固定**:请在**保存之前**撤销。 这些修改只针对**某个具体日期**,不涉及课表的结构。结构(班级、小组、**标准周**)要在**构建课表**时修改,而不是在这里。因此,编辑**过去**的日期只会更正该日期的历史记录,请在了解后果的情况下操作。 #### 冲突检测 编辑模式下的冲突检测与 课表管理 模块中一样:只要您移动或修改课时,Omniscol就会实时检查重复预订、超出容量、时间限制和缺勤。 在日历上,有冲突的课时带有**彩色双层边框**:红色表示必须解决的冲突,橙色或黄色表示需要权衡的不便。详细信息(冲突类型、涉及的课时,例如缺少教室)会在鼠标悬停于课时时显示在**提示框**中。 冲突类型的完整列表、严重程度以及诊断面板,参见 [冲突与诊断](#page-timetables.conflicts)。 #### 另请参阅 - [查看和筛选课表](#page-schedules.consult-and-filter) - [冲突与诊断](#page-timetables.conflicts) - [临时事件](#page-schedules.events) ### 5.4 临时事件(课表之外) *Source: `help/zh-cn/schedules/events.md` · id: schedules.events · Plan: premium · Updated: 2026-08-07* > **Premium** > _Premium_ **临时事件**是不属于课表常规结构的课时:一次特别的会议、一次校外活动、一场全天考试、一个开放日、一次班级评议会。您不必改动常规课时的结构,只需创建一个带日期的事件,把它**叠加**在网格的指定时间段上。 创建临时事件的功能适用于 **Premium** 账户。 #### 何时创建事件,何时创建课时 - **常规课时**:全年每周重复(或隔周重复)。在 课表管理 模块中管理,并纳入自动生成。 - **临时事件**:发生在带日期的时间段内,没有常规的重复规律。直接在 课表 模块中管理。 经验法则:如果您会把它手写在日历上,而不是写进每周网格,那它就是一个事件。 #### 创建事件:事件日程 事件不是在独立的表单中录入的,而是像在日历中一样,**直接在日程上绘制**。在事件网格上,**点击并拖动**即可在某一天上划出一个时间段(绘制时会显示预览)。松开鼠标后,会在所选区域旁打开详情,日期和时间已**预先填好**,您只需补充: - **标题**:`6年级2班班级评议会`、`参观博物馆`、`11年级语文模拟考试`。 - **开始**和**结束**:日期、开始时间、结束时间。 - **参与者**:班级、小组、教师、学生,或以**自由文本**填写的参与者。 - **地点**:Omniscol中已有的教室,或以**自由文本**填写的地点。 - **资源**:如有需要,可预订设备或资源。 - **科目**和**标签**:用于关联并日后查找该事件,见下文。 - 视频会议链接:可选,用于远程参加事件。 - **评论**:随事件一起显示的自由备注。 - **颜色**:便于在网格中区分的视觉辅助。 鼠标选择的范围**限制在同一天内**。 ##### 日程在哪里 - **在 课表 模块中。** 显示 **事件** 筛选:只有在**调课**模式下,日程才可编辑(鼠标绘制才会生效);在普通查看模式下,它是只读的。 - **在编辑日历类型的课表时。** 只有**日历课表**才提供 **事件** 筛选;周课表的网格上不会出现它。 #### 科目和标签 有两个字段用于把事件关联到更大的范围,并便于日后查找。 **科目。** 一个事件可以关联一个或多个科目:例如计入信息学模块的一场讲座,或归属于某个培养方案的一次答辩。这样,当您按该科目筛选时,该事件会与课时一起出现在课表中,其标题也会带上科目,便于一眼识别。 附在事件上的科目**不占用任何小时数**:它既不计入该科目的授课小时数,也不计入教师的服务时间。事件仍然是事件;关联只是说明它与什么相关,而不是用来授课。 **标签。** 您可以用自己的词语为事件打标签,如 `外出`、`评审`、`无需签名`,并在不同事件之间重复使用:系统会提示已用过的标签,避免同一个意思出现十种写法。 标签本身不会触发任何操作。它用于分类,更重要的是用于决定哪些内容从Omniscol导出:连接到外部工具的连接器可以按这些标签过滤,例如发送除您标记为 `无需签名` 之外的全部内容。 #### 即时保存,与课表并行 事件会在您确认详情后**立即单独保存**:创建、移动或删除事件,都会马上触发各自的保存(并以通知确认)。您**不需要**使用调课或课表编辑中的全局**保存**按钮,事件已经保存好了。反过来,保存调课或课表的课时分配时,针对的是**课时**而不是事件:这是一个并行的子系统,随时持久保存。 #### 与课表中课时的冲突 事件引用的是与课表**相同的对象**:教师、班级、小组、教室、资源,因此Omniscol能够检测它与常规课时的重叠。填写详情时,每位参与者以及每间教室或每项资源,都会与该时间段内已安排的内容进行比对: - 对于**教师**、**班级**或**小组**,事件会与课时**以及其他事件**进行比较; - 对**教室**和**资源**,则检测该时段是否已被占用。 这些检查会为选择器中的可用时间提示提供依据,并在调课视图中作为冲突显示出来。事件叠加在网格之上:它会**提示**冲突,但不会自行腾空与之重叠的课时。请另行处理这些课时(移动、临时调整、缺勤等)。 #### 参与者:所有人,或任何人 除了明确指定的参与者外,还有两种特殊的参与者,它们在冲突方面的表现不同: - **所有人**:事件涉及**全校**,属于**必须参加**。它显示在所有课表中,并且**与现有课时产生冲突**:适用于开放日,或真正需要全校参与的事件。 - **任何人**:事件对有意愿的人开放,属于**自愿参加**。它同样显示在所有课表中,但**不产生任何冲突**:适用于不应占用任何人网格的可选活动。 两者都会显示在所有课表中;只有**所有人**会产生冲突,因为它要求必须到场。 #### 在课表中的投影 事件创建后,会被**投影到每一份相关的课表中**:它出现在每位参与的教师、班级、小组和学生的课表中,也出现在所选的每间教室和每项资源的课表中(**所有人**和**任何人**则出现在所有课表中)。这是同一个事件的多个视角,因此在班级、教师和教室的课表中都看到它是正常的,并不是重复。 事件没有“类型”字段:它与常规课时的区别在于标题、日期、参与者以及可能设置的颜色。 #### 移动、定位、自由设置时间 在事件日程上,与课时不同,事件可以通过**拖放来移动和调整大小**。 日程**显示的时间范围**跟随学校的**开放时间**:从已配置的最早开放时间延伸到最晚关闭时间;如果未设置,则默认为07:00 – 20:00。 详情中还有一个**图钉**按钮:它会切换到按空闲时段安排的方式,点击选定的时段后,其日期和时间会带回详情中,这是鼠标绘制之外、更精确地确定事件时间的另一种方式。 最后,开始和结束时间**完全自由**:不必落在网格的时段上。即使常规课时都固定在整齐的时段上,事件也可以从9:50开始、到11:34结束:这正是把事件叠加在网格之上的意义所在。 #### 修改或取消 事件的修改方式与创建时相同:调整时间、更换教室、添加或移除参与者。 #### 操作步骤 — 创建临时事件 1. **临时事件**叠加在网格上,占据一个带日期的时间段:班级评议会、外出活动、模拟考试、开放日、会议。无需建立常规的重复规律。 2. **在事件日程上点击并拖动**,划出时间段(在调课模式下)。详情打开时日期已预先填好;请填写标题(`6年级2班班级评议会`、`参观博物馆`)。 3. **选择参与者**:相关的班级、小组、教师,如有则选择学生,或添加自由参与者。 4. **如有需要,添加地点、资源、视频会议链接和评论。** 这些字段只描述事件,不会改变常规课时。 5. **保存。** 事件会出现在相关的课表中。如果Omniscol提示与常规课时有冲突,请在调课视图中修正相关课时。 #### 另请参阅 - [脱离网格的课时](#page-timetables.off-grid-lessons) - [临时调整](#page-schedules.ad-hoc-changes) - [查看和筛选课表](#page-schedules.consult-and-filter) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) ### 5.5 打印与分享 *Source: `help/zh-cn/schedules/print-and-export.md` · id: schedules.print-and-export · Plan: standard · Updated: 2026-06-25* 在 课表 模块中可查看的所有课表,都可以以多种格式**打印**或**分享**。选择哪种格式取决于接收对象:离线使用选纸质打印,邮件发送选PDF,电子日历选iCal,直接查看选网页链接。如果要在电子表格中对授课小时数做数据分析,**仪表盘** 会汇总小时数并导出为CSV / XLSX。 #### 打印 按钮 打印(位于视图顶部)会打开打印预览,版面已针对纸张优化: - 课时是**镂空**的:Omniscol只在白色背景上打印它们的**彩色轮廓**,既节省墨水,又保留颜色的视觉标识, - 页边距、方向和尺寸已适配A4 / Letter纸张, - 页眉包含学校名称、所查看课表的名称(学生、班级、教室等)和日期范围。 预览使用浏览器的打印系统,因此浏览器能做的一切(原生PDF导出、选择打印机、双面打印等)都可以使用。 #### 导出为PDF Omniscol提供**专用的PDF导出按钮**,可将课表排版得整洁美观。最完整的一个位于 课表管理 的 显示 界面(参见 [显示、复制、重组](#page-timetables.visualize-duplicate))。课表的**表格**视图(参见 [课表的显示方式](#page-schedules.schedule-display))也提供PDF导出,同时还有CSV和Excel。 此外,在大多数现代浏览器中,打印功能都可以输出PDF(`Microsoft Print to PDF`、`另存为PDF`、`打印到文件`)。 最佳实践:一次性的沟通(例如向家长发送某一周的课表)使用PDF,持续性的沟通则使用分享链接(PDF是固定的,而链接会随修改同步更新)。 #### 在电子表格中分析(CSV / XLSX) 有两种方式可以进入电子表格。**在查看界面中**,将课表视图切换为**表格**(参见 [课表的显示方式](#page-schedules.schedule-display)):这种类似电子表格的呈现方式可以打印、复制粘贴,也可以直接导出为 **CSV**、**Excel / XLSX** 或 **PDF**。**如果要对授课小时数做汇总分析**,请使用 **仪表盘**,它会按所选时间段,按教师、科目、班级或教室计算小时数,并提供同样的 **CSV**(通用)或 **XLSX**(为Excel预设格式)导出。 此类电子表格导出的典型用途: - 统计每位教师、每个科目、每个班级实际完成的授课小时数; - 为外部人事工具(薪资、工时跟踪)提供数据; - 发现计划服务时间与实际服务时间之间的差异。 参见 [使用表格和图表](#page-dashboard.tools-and-filters) 和 [教师统计](#page-dashboard.teachers)。 如需以机器可读的格式获取课时本身,分享功能提供 **JSON(API)** 格式;参见 [通过公开链接分享课表](#page-schedules.share-link)。 #### 导出为iCal 若要与电子日历(Google日历、Apple日历、Outlook)动态共享课表,请使用 **iCal订阅**,而不是一次性导出。接收者可以持续看到修改。参见 [iCal——订阅与动态链接](#page-integrations.ical)。 分享窗口还会显示一个可直接扫描的**二维码**:接收者用手机对准电脑屏幕,即可订阅日历,无需输入地址。 如果您仍然需要一个固定的 `.ics` 文件用于归档,也可以在分享窗口中进行一次性导出。 #### 导出前先筛选 导出遵循当前视图中**已启用的筛选条件**:如果您按某个班级或某个日期范围筛选,导出内容就只包含这个范围。如需导出更大的范围(全年、所有班级),请在开始导出前相应调整筛选条件。 #### 操作步骤 — 打印或分享课表 1. **在查看界面中有两种输出方式**:打印(PDF)用于固定内容的分发,分享(网页、iCal、JSON)用于动态分发。在电子表格中做数据分析则要通过 仪表盘 模块。 2. **先筛选**视图,确定所需范围:班级、教师、教室、日期范围、课时类型。打印和分享都遵循已启用的筛选条件:筛选范围越窄,输出就越窄。 3. **要导出PDF**(邮件发送、归档):最完整的是 显示 界面的PDF导出(参见 [显示、复制、重组](#page-timetables.visualize-duplicate));在查看界面中,按钮 打印 会打开打印预览(课时镂空,页眉含学校名称、课表名称和日期范围),也可以从中输出PDF。 4. **在浏览器的打印对话框中**,选择**另存为PDF** / **Microsoft Print to PDF** / **打印到文件**。PDF是固定的:它不会跟随课表日后的修改。需要动态内容时,请优先使用**分享链接**(参见[通过公开链接分享课表](#page-schedules.share-link))。 5. **要在电子表格中分析**:将课表切换为**表格**即可直接导出(CSV / XLSX / PDF,参见 [课表的显示方式](#page-schedules.schedule-display)),或打开 **仪表盘** 模块查看汇总的小时数(按教师 / 科目 / 班级统计),再导出为CSV或XLSX(参见 [教师统计](#page-dashboard.teachers))。 6. **要使用电子日历**,请优先使用 **iCal订阅**而不是固定文件:接收者可以持续看到更新(参见 [iCal](#page-integrations.ical))。 #### 另请参阅 - [课表的显示方式](#page-schedules.schedule-display) - [显示、复制、重组](#page-timetables.visualize-duplicate) - [iCal——订阅与动态链接](#page-integrations.ical) - [通过公开链接分享课表](#page-schedules.share-link) - [导入与导出](#page-admin.import-export) ### 5.6 通过公开链接分享课表 *Source: `help/zh-cn/schedules/share-link.md` · id: schedules.share-link · Audience: admin/teacher · Plan: standard · Updated: 2026-05-15* **课表** 模块提供一个 分享 按钮,可为当前查看的课表生成带签名的URL。收件人打开网页链接,即可在不登录的情况下以只读方式查看课表。对于没有Omniscol账户的人——通常是学生家长、外部合作方或行政部门——这是传达课表最快的方式。 #### 分享生成的格式 根据所处的场景和您的权限,分享对话框可能提供多种URL: - **自适应网页**——可浏览的门户式显示,含周、日、列表视图, - **iCal `.ics` 订阅源**——用于在Google日历、Apple日历、Outlook中订阅, - **JSON(API)**——供开发人员和机器对机器的集成使用,前提是允许该格式。 收件人选择自己方便的方式:家长会打开网页或通过iCal订阅,开发人员则使用JSON。 #### 可以分享什么? 分享并不局限于课表查看界面:同一个 分享 图标出现在Omniscol的许多界面上。 **以只读方式**,您可以分享: - 某位学生或某位教师的**个人课表**, - 整个**班级**、某间**教室**或某个**科目**的课表, - 人员调度 模块的**值班表**, - **仪表盘**和**缺勤跟踪**, - 课表的**显示**和**重组**界面。 **以读写方式**——这是唯一的情形——您可以分享教师(以及员工)的**可用时间填报**界面:专用链接让每个人在到期日之前填写自己的可用时间,**无需Omniscol账户或密码**。这是唯一允许填写、而不只是查看的分享。 每个带签名的URL都包含所请求的范围和到期日期。 #### 创建链接 在查看界面的工具栏中点击 分享。对话框提供: - **到期日期**——所生成链接保持有效的截止日期。 - **Web、iCal和JSON选项卡**——是否显示取决于当前所选内容生成了哪些格式。 然后复制您需要的URL。对于网页和iCal链接,对话框还可以显示可打印的**二维码**。 #### 限制分享 临时使用时,请选择较短的到期日期。 链接归属于生成它的账户。要使某个账户生成的现有链接失效,可以采取以下实际措施: - 更改或重置该账户的密码; - 停用或删除该账户。 提示:对于由排课团队负责的分享,可以使用一个**身份明确的服务账户**(例如 `diffusion-planning`),而不是某位同事的个人账户。该账户将对所发出的链接负责;它的访问权限和密码应按管理员权限来管理。 网页链接均为只读,唯独上文所述教师**可用时间填报**的链接例外:它允许在到期日之前填写,但不会授予Omniscol账户的访问权限。 #### 安全 - 链接包含高强度的签名令牌。 - 它**只**授予对所分享内容(课表或界面)的访问权限,而不是整个账户。 - 有效期受您所选到期日期的限制。 - 如果生成链接的账户更改了密码,链接即失效,即使新密码与旧密码完全相同。 - 如果生成链接的账户被停用或删除,链接即停止生效。 - 任何持有该URL的人,在链接到期或失效之前,都可以查看所分享的范围。 #### 与受限的Omniscol账户有何区别 在团队之间共享数据时,例如提供给财务部门,这两种方式可能看起来互相竞争。 - **带签名的公开链接** = 无需身份验证,访问简单,分享快捷。 - **受限的Omniscol账户** = 专用身份验证,使用期限更长,需要管理用户账户,还可以选用[自定义角色](#page-admin.customroles)。 临时使用请优先选择链接,长期的规范化使用请选择受限账户。 #### 操作步骤 — 创建分享链接 1. **分享链接**让他人无需登录即可以只读方式查看课表。非常适合家长、外部合作方和行政部门。 2. 在 课表 模块中**打开要分享的课表**:学生、班级、教室、教师或科目。查看页面是起点。 3. 点击工具栏中的 分享。随即打开带有分享选项的对话框。 4. **选择到期日期。** 链接传播得越广,这个日期就应该越近。 5. **复制合适的格式。** 直接查看用Web,订阅日历用iCal,计划使用API集成则用JSON。URL可立即使用:打开它的人无需登录,即可以只读方式看到所分享的范围。 6. **如果出现不希望的传播**,请用另一个账户创建范围更小的新链接,并通过更改原账户的密码(必要时停用该账户)使其名下的链接失效。 #### 另请参阅 - [公开分享链接](#page-portal.share-links) - [iCal——订阅与动态链接](#page-integrations.ical) - [访客门户(公开链接)](#page-portal.guest-portal) --- ## 6. 缺勤与代课 ### 6.1 缺勤管理模块概览 *Source: `help/zh-cn/absences/overview.md` · id: absences.overview · Audience: admin/teacher/student/staff · Plan: standard · Updated: 2026-06-13* **缺勤管理**模块集中登记和跟踪会改变课表显示的缺席情况:教师、班级、学生,以及在启用人员调度模块时的员工。 #### 管理的对象 | 缺勤对象 | 对课表的影响 | | --- | --- | | **教师** | 缺勤教师是唯一授课者时,课时**被取消**,除非已指定**代课教师**(此时代课教师显示在被划掉的原任课教师旁边)。**协同教学**时,课时**照常保留**:仅移除缺勤教师,由其他授课者完成。 | | **班级** | 在相应时间段内,缺勤班级的课时从显示中移除。 | | **学生** | 班级的课时保持不变;缺勤只影响该学生的视图和跟踪记录。 | | **员工** | 仅在人员调度模块启用时可用;其处理方式与人员日程表中某个对象的缺勤相同。 | 学年中的学校假期不作为缺勤录入:它们在学年中管理。 #### 证明材料 本模块不提供**上传证明材料**的功能:课表管理不适合保存敏感数据(如医疗证明、职业秘密),它专注于排课。如果确实需要附上材料,请把它存放在您常用的存储空间,并把**链接粘贴到缺勤的备注字段**中。 #### 状态 - **已批准**:缺勤已确认,并体现在各类显示中。 - **待处理**:由相关用户提交的请求,需管理员审核。 - **已拒绝**:请求已被拒绝。 - **已中止**:请求已由申请人取消。 只有状态为**已批准**的缺勤才会产生效果:它们会改变课表的显示,标记受影响的课时(必要时标记为已取消),并计入缺勤**统计**和**导出**(参见[缺勤跟踪与导出](#page-absences.statistics))。其他状态——待处理、已拒绝、已中止——对课表没有任何影响。 #### 界面布局 模块按对象类型提供标签页: - **教师**:教师缺勤和代课管理。 - **班级**:班级缺勤,由管理员管理。 - **学生**:学生个人缺勤。 - **员工**:员工缺勤,需启用人员调度模块。 每个界面都会显示该时间段内的缺勤、其状态、在信息可用时受影响的课时、时间导航,以及供管理员使用的可导出列表。 #### 前提条件 - 相关学年至少有一份已发布的课表。 - 对于教师缺勤:教师必须已分配到课程。 - 对于学生缺勤:学生必须已分配到班级。 - 对于员工缺勤:必须启用人员调度模块。 #### 操作步骤 — 了解缺勤管理模块 1. 从主导航打开**缺勤管理**模块。 2. 选择与相关对象对应的标签页:教师、班级、学生,或员工(取决于已启用的模块)。 3. 点击申报缺勤打开表单:缺勤对象、日期、时间范围、原因、备注和状态(取决于您的权限)。 4. 对于已批准的教师缺勤,点击代课管理查看涉及的课时,并安排临时代课或设定代课规则。 5. 管理员可以使用电子表格按钮导出当前显示的表格。 #### 另请参阅 - [登记缺勤](#page-absences.declaring) - [代课规则](#page-absences.substitution-policies) - [缺勤](#page-glossary.absence) - [代课 / 替课](#page-glossary.substitution) ### 6.2 登记缺勤(管理员 / 教师 / 学生) *Source: `help/zh-cn/absences/declaring.md` · id: absences.declaring · Audience: admin/teacher/student/staff · Plan: standard · Updated: 2026-06-13* #### 谁可以登记? | 角色 | 为谁登记? | 初始状态 | | --- | --- | --- | | **管理员** | 教师、班级、学生或员工成员 | 默认为已批准,可修改 | | **教师** | 仅限本人 | 待处理 | | **学生** | 仅限本人 | 待处理 | | **员工** | 仅限本人,且人员调度模块已启用 | 待处理 | 班级缺勤属于管理操作:创建和修改的路由仅限管理员使用。 #### 表单字段 申报缺勤按钮用于打开表单,保存则使用添加。 - **实体**:管理员可见;其他角色只能登记自己的缺勤。 - **日期范围**:开始日期和结束日期。一天的缺勤请使用同一日期。如果界面未填写结束日期,Omniscol会把学年结束日作为技术上的边界:请勿以此来记录真正没有结束时间的缺勤。 - **时间范围**:默认为一整天,也可指定具体时段。 - **可选筛选条件**: - **班级**:把教师缺勤限定在某些班级。 - **科目**:只针对某一科目的课时。 - **任务**:用于员工缺勤,需启用人员调度模块。 - **原因**:从提供的列表中选择;管理员也可以输入自定义原因。 - **备注**:简短的自由文本。 - **状态**:只有管理员可以自由设置状态(默认为**已批准**)。对其他角色,请求的状态为**待处理**,等待管理员审核;不过申请人可以把自己的请求改为**已中止**状态以放弃该请求。 #### 操作步骤 — 首次登记教师缺勤 1. 打开缺勤管理模块的教师标签页。 2. 点击申报缺勤。 3. 如果您是管理员,请选择相关教师。教师本人登记缺勤时,无法使用选择其他教师的选择器。 4. 填写日期。如果只有一天,请把开始日期和结束日期设为同一天。 5. 保留**一整天**,或者在缺勤只涉及一天中的部分时间时,指定相应的时段。 6. 选择原因,如有需要再添加备注,然后点击添加保存。 7. 如果缺勤已获批准且涉及教师,请点击代课管理打开代课管理,以安排代课教师或设定代课规则。 #### 审核待处理的请求 当教师、学生或员工成员登记自己的缺勤时,请求处于待处理状态。管理员可以通过快捷操作已批准和已拒绝批准或拒绝,也可以打开详情进行处理。 #### 后续修改 - 管理员可以修改日期、时间、原因、备注和状态。 - 申请人可以修改属于自己的未来缺勤;修改后会重新进入待处理状态。 - 申请人可以放弃自己的请求。 #### 可见性 某个对象缺勤这一事实,可能会在课表中或缺勤管理模块中显示,具体取决于查看权限。原因、备注、创建元数据和状态的详细信息,并非对所有角色都以相同方式显示:非管理员用户不一定能看到他人缺勤的详情。 #### 另请参阅 - [代课规则](#page-absences.substitution-policies) - [单个课时的临时代课](#page-absences.single-lesson-replacement) - [缺勤](#page-glossary.absence) ### 6.3 代课规则 *Source: `help/zh-cn/absences/substitution-policies.md` · id: absences.substitution-policies · Audience: admin · Plan: standard · Updated: 2026-06-13* **代课规则**可以一次覆盖同一教师缺勤所影响的多个课时。当一条简单的规则就够用时,您不必逐个课时去选择代课教师。 #### 进入方式 在教师缺勤记录所在的行,打开 代课管理。 面板会显示该缺勤影响的课时,以及已保存的代课规则。没有代课教师的课时仍标记为受原任教师缺勤影响。 #### 两个层级的规则 ##### 临时代课 在某个具体课时上,指定代课教师 可以为该课时单独选择一位代课教师。这一指定的优先级高于长期规则。 ##### 长期规则 在面板的长期代课部分,通过按钮 指定代课教师 创建代课规则。每条规则需要填写: - **代课教师**; - 生效的**开始日期**和**结束日期**; - **时段**(如果规则并非全天适用); - 可选的**科目**; - 可选的**班级**; - 内部**备注**。 多条规则可以并存,按显示的顺序依次应用;如果优先级发生变化,请拖放调整顺序。 #### 查看面板 课时列表会显示每个课时由哪位代课教师负责。如果某条规则与该缺勤的任何课时都不匹配,面板会在这条规则上显示警告,请修改日期、时段、科目或班级。 #### 典型情形:长期缺勤的分担 对于持续数周的缺勤: 1. 先创建第一条规则,指定主要代课教师,不设科目或班级筛选。 2. 再添加一条针对性更强的规则,例如仅限某个科目或某个时段。 3. 如果要让最具体的规则优先生效,请把它排在通用规则之前。 #### 操作步骤 — 分担长期缺勤 1. 通过 代课管理 打开该教师缺勤记录。 2. 点击 指定代课教师。 3. 选择主要代课教师,设定生效日期,然后保存。 4. 如果部分课时需要由另一位代课教师负责,请再添加一条规则。 5. 检查受影响课时的列表,它们应显示预期的代课教师;未被覆盖的课时仍显示为无人代课。 6. 点击 分配 确认面板。 #### 另请参阅 - [登记缺勤](#page-absences.declaring) - [单个课时的临时代课](#page-absences.single-lesson-replacement) - [代课 / 替课](#page-glossary.substitution) ### 6.4 单个课时的临时代课 *Source: `help/zh-cn/absences/single-lesson-replacement.md` · id: absences.single-lesson-replacement · Audience: admin · Plan: standard · Updated: 2026-06-13* **临时代课**是为受教师缺勤影响的某一个课时指定代课教师。它在该缺勤的代课管理面板中设置。 这一机制不会移动课时,本身也不会创建通知,也不会提供多种取消方案。它只是在相关课时上增加一位代课教师;缺勤的原任教师仍显示为被代课教师。 #### 进入方式 1. 打开缺勤管理模块的教师选项卡。 2. 在相应的缺勤记录上,点击 代课管理。 3. 在受影响课时的列表中,对需要代课的课时使用 指定代课教师。 面板会显示该缺勤涉及的课时,以及已经设定的代课规则。 #### 临时代课的效果 - 所选代课教师只对这一个课时生效。 - 此操作不会修改该课时的教室、班级、日期和时间。 - 临时代课的优先级高于同一缺勤的通用代课规则。 - 如果没有指定代课教师,该课时仍然受教师缺勤的影响。 #### 选择代课教师 选择列表基于在相应时段有空的教师。确认之前,请手动核对所选教师与科目、校区以及学校内部安排是否相符。 #### 撤销临时代课 如果临时代课是误加的,请使用 [xmark]。该课时随即回到适用的长期规则;如果没有任何规则匹配,则保持无人代课。 #### 操作步骤 — 为课时安排代课 1. 新建或打开一条已批准的教师缺勤记录。 2. 点击 代课管理。 3. 在受影响课时的列表中找到要处理的课时。 4. 点击 指定代课教师,选择代课教师,然后点击 分配 确认面板。 5. 检查课时的显示:缺勤的原任教师应显示为划掉的状态,代课教师则出现在该课时上。 #### 另请参阅 - [代课规则](#page-absences.substitution-policies) - [登记缺勤](#page-absences.declaring) - [多日缺勤](#page-absences.multi-day) - [代课 / 替课](#page-glossary.substitution) ### 6.5 多日缺勤 *Source: `help/zh-cn/absences/multi-day.md` · id: absences.multi-day · Audience: admin · Plan: standard · Updated: 2026-06-13* **多日缺勤**是指带有开始日期和结束日期的缺勤。它可以覆盖一段连续的时间,而无需为每个课时单独登记一次缺勤。 随后,Omniscol会计算该时间段内涉及的课时。对于教师缺勤,这些课时可以不安排代课,可以由代课规则覆盖,也可以通过临时代课进行调整。 #### 登记时间段 在缺勤管理模块的教师标签页中: - 选择相关教师; - 填写开始日期和结束日期; - 保留一整天,或指定涉及的时段; - 选择原因; - 如有需要,添加备注; - 点击添加保存。 #### 处理受影响的课时 登记之后: - 打开代课管理; - 检查受该缺勤影响的课时列表; - 如果某种代课安排会重复出现,请用指定代课教师创建一条或多条规则; - 对于个别课时的例外情况,请对具体课时使用指定代课教师。 **代课规则**是为长期缺勤设计的机制。**没有筛选条件**的规则适用于该时间段内的**所有**课时;添加班级、科目、时段或日期,则只针对其中一部分。如果要**全部不安排代课**,请不要创建任何规则:缺勤教师是唯一授课者的课时,将在该时间段内被取消。 #### 重复时段的缺勤 如果缺勤只涉及一段较长时间内的某些时段(例如两个月内每周一上午),只需登记**一次**:指定较长的日期范围,再说明涉及的**时段**(必要时再加上班级或科目)。这样,Omniscol会在整个时间段内,只选出落在这些时段上的课时,无需逐次录入。 #### 跟踪与导出 通过缺勤表格,管理员可以使用电子表格导出当前显示的行。关于模块中的跟踪功能,请参见[缺勤跟踪与导出](#page-absences.statistics)。 #### 操作步骤 — 处理长期缺勤 1. 登记缺勤,填写开始日期和结束日期。 2. 如果缺勤没有占满每一天,请指定涉及的时段。 3. 保存登记。 4. 打开代课管理。 5. 添加所需的代课规则,然后检查受影响的课时列表。 6. 仅对必须偏离通用规则的课时使用临时代课。 #### 另请参阅 - [登记缺勤](#page-absences.declaring) - [代课规则](#page-absences.substitution-policies) - [单个课时的临时代课](#page-absences.single-lesson-replacement) - [缺勤跟踪与导出](#page-absences.statistics) ### 6.6 班级和学生缺勤 *Source: `help/zh-cn/absences/class-and-student-absences.md` · id: absences.class-and-student-absences · Audience: admin/teacher/staff · Plan: standard · Updated: 2026-06-13* 缺勤管理模块区分**整个班级**的缺勤和**学生个人**的缺勤。两者的登记方式相同,但对课表的影响不同。 #### 整个班级缺勤 典型情形:校外活动、研学旅行、集体实习、考试日。 班级缺勤由管理员负责管理。在班级标签页中,表单可填写: - 相关班级; - 日期范围; - 缺勤未覆盖全天时的时间范围; - 可选的科目,用于把影响限定在相关课时; - 缺勤原因; - 备注。 对于按周重复的课表,已批准的班级缺勤会在相应时间段内,从显示中移除该班级的课时。 #### 学生个人缺勤 典型情形:生病、就医、家庭原因、获准或未获准的缺席。 学生缺勤: - 针对所选学生; - 在该学生的课表上,把该时间段内的课时标记为**已取消**,但不会移除班级的课时,也不会移除教师的课时; - 可由管理员登记,也可由学生本人根据其权限登记; - 由学生本人登记时,进入待处理状态。 #### 可见性 管理员可以查看完整信息。其他角色根据各自权限只能看到受限版本:可以看到缺勤存在,但看不到原因、备注或审批元数据。 #### 操作步骤 — 登记班级缺勤 1. 打开缺勤管理模块的班级标签页。 2. 点击申报缺勤。 3. 选择班级、日期和时间。 4. 填写原因,如有需要再添加备注。 5. 保存。在已批准的时间段内,该班级的课时将从显示中移除;其他班级的课时保持不变。 #### 操作步骤 — 登记学生缺勤 1. 打开**学生**标签页。 2. 如果您是管理员,请选择相关学生。 3. 填写日期、时间、原因和备注。 4. 保存。如果请求由学生本人创建,则保持待处理状态,直至通过审核。 5. 一旦批准,该时间段内的课时会在该学生的课表上标记为**已取消**,并计入其跟踪记录和统计。班级中的其他学生不受影响。 #### 另请参阅 - [登记缺勤](#page-absences.declaring) - [缺勤跟踪与导出](#page-absences.statistics) - [多日缺勤](#page-absences.multi-day) - [临时事件](#page-schedules.events) ### 6.7 缺勤跟踪与导出 *Source: `help/zh-cn/absences/statistics.md` · id: absences.statistics · Audience: admin · Plan: standard · Updated: 2026-06-13* 缺勤情况可以在几个互补的位置查看:缺勤管理模块用于日常跟踪,**仪表盘**用于汇总统计,管理模块则用于查看学生的缺勤历史。后两处只统计状态为**已批准**的缺勤。 #### 缺勤管理模块中的跟踪 根据所选的选项卡和时间段,屏幕会显示: - 该时间段内缺勤的对象; - 各申请的状态及其计数; - 受状态为已批准的缺勤影响的课时; - 按周、月、学年或日期范围浏览; - 缺勤的表格列表。 对于教师缺勤,代课管理(代课管理)会补充受影响的课时和已安排的代课教师。 管理员可以通过 电子表格 导出当前显示的表格,内容包括对象、日期、时间、科目(如有)、缺勤原因、备注和状态(视权限而定),便于内部汇总,或在Omniscol之外做进一步处理。 #### 仪表盘模块中的统计 要查看**数量和比率**,请打开**仪表盘**。学生选项卡按学生汇总所选时间段内的缺勤**小时数**、**课时数**和**缺勤天数**,以及相应的**缺勤率**,可导出为CSV / XLSX(参见 [学生与资源统计](#page-dashboard.students-resources))。 在**教师**方面,教师选项卡反映缺勤对服务时间的影响:**已取消课时**一列统计被扣除的课时(未安排代课的缺勤会取消该课时),**超时**则统计额外增加的课时。每一列都会标明涉及的课时数,并提供详细列出这些课时的提示框(科目、班级、日期和时间);对于因缺勤而取消的课时,如果填写了缺勤原因,也会显示在其中。该选项卡同样可以导出为CSV / XLSX(参见 [教师统计](#page-dashboard.teachers))。 #### 管理模块中的历史记录 在管理模块中,**学生**和**教师**的详情都会汇总其本学年的缺勤,并提供各自的表格导出,便于做个别跟踪或沟通(学生可与家长沟通,教师可与本人沟通)。 #### 需要了解的限制 - 只有状态为**已批准**的缺勤才计入显示和统计;状态为**待处理**、**已拒绝**或**已中止**的缺勤仅供参考。 - 缺勤原因和备注可能会根据查看者的角色被隐藏。 #### 操作步骤 — 导出跟踪数据 1. 打开缺勤管理模块中相应的选项卡。 2. 选择要核查的时间段。 3. 如有需要,检查状态和受影响的课时。 4. 点击 电子表格。 5. 将导出的文件用于内部核查或进一步处理。 6. 如需按学生查看缺勤的**数量和缺勤率**,请打开仪表盘,进入学生选项卡(参见 [学生与资源统计](#page-dashboard.students-resources))。 #### 另请参阅 - [缺勤管理模块概览](#page-absences.overview) - [班级和学生缺勤](#page-absences.class-and-student-absences) - [代课规则](#page-absences.substitution-policies) - [学生与资源统计](#page-dashboard.students-resources) --- ## 7. 人员调度 ### 7.1 人员调度概览 *Source: `help/zh-cn/staffing/overview.md` · id: staffing.overview · Audience: admin/staff · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-13* > **Option: 人员调度** 人员调度模块用于**按任务**而不是按课时来安排员工:思考的是“谁在什么时间负责哪个岗位”,而不是“谁教什么”。当学校需要管理学生管理工作、看管、自习、考试或带队活动时,它是教学课表的补充。 #### 主要使用场景:学生管理与助理管理员 该模块最初是为满足学生管理团队的需求而创建的:学生管理老师、学生管理助理、看管人员等员工需要在一天中承担大量岗位,这些岗位与课时无关。 示例: - 看管走廊; - 把守校门,管理学生进出; - 负责接待; - 课间看管操场; - 午间看管食堂; - 负责自习和自习室; - 管理或看管图书馆、学生活动室或自习空间; - 带领学生外出,例如只交给有资质人员负责的体育校外活动; - 临时顶替课间空档; - 负责考试、竞赛或特殊日的现场组织。 任务描述的是对到岗人员的需求。它不像课时那样必须带有科目、教学培养方案或学生小组。网格通常比教学课表的时间网格细得多:在学生管理工作中,以十五分钟为单位很常见。一天之中需求可能变化很大:上课期间操场需要0人,中午需要3人,整个下午图书馆需要1人。 #### 模块的屏幕 ##### 网格 网格定义值班的时间框架:工作日、时段(通常比课表的时间网格更细)以及适用的时间段。在指定具体人员之前,它是工作的模板。校区及其距离也在同一处设置:用于提示相距较远的地点之间无法兼顾的任务安排。 参见[制作值班网格](#page-staffing.building-grids)。 ##### 任务分配 任务分配屏幕用于定义需要覆盖的岗位或任务:名称、所需人数和理想人数、优先级、校区、获授权的员工以及任务之间的兼容关系,例如在人手不足的安静时段,同一个人可以同时负责相邻的两条走廊。需求可以逐个时段变化。 参见[定义需要覆盖的任务](#page-staffing.assignments)。 ##### 排班 排班屏幕把员工安排到某一周或某个日期范围内的实际任务上。可以通过选择、拖动、复制和手动修正来安排。缺勤、不可用、冲突以及未获授权人员的安排都会以提醒的形式显示。 参见[安排员工](#page-staffing.planner)。 ##### 值班表 值班表为每个人提供其任务列表或一周的网格。可以根据权限和学校选择的分发方式打印、导出或分享。它会显示便于查看一周情况的合计,并保留缺勤或不可用的提示。 参见[值班表](#page-staffing.roster)。 #### 模块会检查什么 - 人员的可用时间; - 已登记的缺勤; - 已安排的工作量; - 每项任务的获授权员工; - 与其他任务或到岗安排的冲突; - 各校区、各时段需求的一致性,并考虑校区之间的距离。 员工调度是**手动**的:网格、提醒和修正工具会辅助您完成每一次安排,一切由您掌控。Omniscol不会自动安排员工。 #### 运营收益 收益主要来自集中管理: - 用共享的需求网格取代孤立的电子表格; - 可逐周修改的任务分配; - 复制稳定的周; - 缺勤直接显示在员工日程表中; - 可打印或分享的值班表; - 减少学生管理部门、被安排人员与行政部门之间的反复沟通。 在一所约有一千名学生的学校,使用反馈显示每周大约可节省20小时的行政工作。 > “我们选择Omniscol,是为了将学生管理部门的排班工作数字化(学生管理助理的工作安排)。事实证明这个方案直观、完整,完全符合我们的需求。每个人都能清楚地看到自己被安排在哪里。” > > — Jeanne Weeber,巴黎塞维涅初中(创办于1880年)副校长 #### 其他用途 - **考试看管**:期末考试、高考、竞赛,持续数天、涉及多间考场,并按科目确定监考人数。 - **自习与看管**:看管岗位随预计到场学生人数而变化。 - **蒙台梭利及主动式教学的带班**:需要覆盖的活动或工作坊,无需套用传统课程的结构。 - **活动组织与任务排班**:课后托管、寄宿管理,以及按任务组织的日程表。 - **带队外出**:学校旅行、教学外出、参观学校。 - **临时到岗**:家长接待、开放日、班级评议会。 #### 与课时的区别 课时包含一个科目、一个学生小组以及一位具备资质的教师。人员调度模块中的任务则包含一项**到岗需求**:这个岗位需要有人,此人要有合适的可用时间,必要时还要获授权承担该岗位。 正因如此,该模块使用需求网格、人员安排和值班表,而不是从科目、班级、教师的搭配出发。 #### 模块范围 开通人员调度模块的账户包括: - 人员调度模块:网格、任务、排班、值班表; - 面向可安排人员的缺勤管理模块; - 账户和角色所需的管理屏幕; - 全局搜索,依据账户权限而定。 #### 员工角色 **员工**角色是为学生管理团队(学生管理老师、学生管理助理、看管人员、勤务人员)设计的。根据账户权限,它可以访问人员调度模块、个人日程表和员工缺勤,但不会开放学校的全部全局设置。 同一位用户可以同时拥有多个角色:例如,参与主动式教学的教师可以既是教师,又是按任务排班的员工成员。 #### 另请参阅 - [制作值班网格](#page-staffing.building-grids) - [定义需要覆盖的任务](#page-staffing.assignments) - [安排员工](#page-staffing.planner) - [值班表](#page-staffing.roster) - [缺勤管理模块概览](#page-absences.overview) - [人员调度](#page-glossary.staffing) - [自习与看管(学校)](#page-k12.study-halls) ### 7.2 制作值班网格 *Source: `help/zh-cn/staffing/building-grids.md` · id: staffing.building-grids · Audience: admin/staff · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-26* > **Option: 人员调度** **值班网格**定义值班的时间框架:工作日、时段,以及它适用的年度时间段。这一步要**先于**指定人员——您先搭建框架,需要覆盖的任务随后在 任务分配 界面中描述,人员则在排班界面中填入。 结合每项任务上声明的需求,网格可以回答诸如“上午10点操场上要有几个人?”或“学生管理部门本周需要覆盖哪些时段?”这样的问题。 #### 创建网格 人员调度 的 网格 选项卡显示现有网格及其在全年中的分配情况。对每个网格,您需要填写: - **名称**——简短易认,例如 `标准周`、`期中考试`、`假期`; - **工作日**——例如标准周为周一至周五,考试周则可自行选择; - **时间网格**——网格的时段,由您自由定义。在学生管理工作中,常以一刻钟为单位,这些时段可以比教学课表的时间网格更细。 随后,网格分配 按钮把每个网格指定给它所覆盖的周或日期范围。 首次打开时会提供一个空网格。要创建更多网格,请用 复制 复制现有网格,重命名后再调整。 #### 定义任务及其需求 任务本身——名称、人数、校区、授权员工——在 任务分配 界面中定义:参见 [定义需要覆盖的任务](#page-staffing.assignments)。对每项任务,需求编辑器再逐时段在网格上设置需要多少人(0 = 无需求)。 需求可能随时间大幅变化:上课期间操场0人,中午食堂3人,整个下午图书馆1人。 #### 校区与距离 如果您的学校有多个校区,请在 网格 界面底部声明它们及其距离。当某项任务位于较远的校区,而同一个人在别处也有任务、两地之间的通勤时间不足时,系统会发出提醒。 #### 人手不足时的兼容 当可用人手少于理想人数时(常见于连续缺勤、考试期间),您可以在相邻任务之间声明**兼容**:这样同一个人可以同时承担两项任务。 典型示例:`2号走廊`和`3号走廊`可以合并——同一个人可以同时看管两处。请在 任务分配 界面的任务上声明,以便为安排人员时的取舍提供参考。 请勿用兼容来长期掩盖人手不足。兼容必须对应学校在实际工作中真正接受的情形。 #### 网格模板 如果每周的值班结构相同,可以**复制现有网格**作为起点。常见情形: - **标准周**——基准网格(从开学到学年结束)。 - **假期周**——任务较少,团队缩减。 - **考试周**——在日常任务之外增加阶梯教室监考。 - **特殊日**——开放日、外出活动、校内活动,或特别的会议和接待。 #### 安排人员前的一致性检查 在进入排班这一步之前,请把网格当作业务检查清单: - 任务是否覆盖了每个需要的时间段? - 需求相对于可用团队是否现实? - 跨校区的岗位是否考虑了通勤时间? - 授权员工的限制是否与真正有资质的人员相符? - 即使在人手不足时,任务之间的兼容是否仍可接受? 网格确认无误后,进入**安排**步骤。参见 [安排员工](#page-staffing.planner)。 #### 操作步骤 — 制作值班网格 1. **值班网格**描述全年值班的框架:工作日、时段、校区。 2. **创建网格。** 起一个简短的名称(`标准周`)。选择工作日,然后定义时段——值班员通常以一刻钟为单位。您也可以复制现有网格作为起点。 3. 用 网格分配 **把网格安排到全年**:每个网格覆盖其适用的周或日期范围(标准周、考试、假期)。 4. 如果学校有多个校区,请**声明校区**。校区之间的距离可用于提示不兼容的安排。 5. **保存网格**,然后在 任务分配 界面中逐时段描述任务及其需求。参见 [定义需要覆盖的任务](#page-staffing.assignments)。 6. **下一步:在排班界面中安排员工。** 参见 [安排员工](#page-staffing.planner)。 #### 另请参阅 - [人员调度概览](#page-staffing.overview) - [定义需要覆盖的任务](#page-staffing.assignments) - [安排员工](#page-staffing.planner) ### 7.3 定义需要覆盖的任务 *Source: `help/zh-cn/staffing/assignments.md` · id: staffing.assignments · Audience: admin/staff · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-13* > **Option: 人员调度** 任务分配 界面用于定义 人员调度 需要覆盖的任务或岗位。这是配置阶段:先描述需求,再到[安排员工](#page-staffing.planner)中安排具体人员。 随后通过 值班表 向员工**发布**(参见 [值班表](#page-staffing.roster))。 #### 一项任务包含什么 一项任务可以包含: - 清晰的名称:`门卫接待`、`操场`、`食堂`、`A阶梯教室考试监考`; - 要求的最少人数和理想人数; - 优先级; - 校区或地点; - 允许承担该任务的员工名单(留空 = 全体员工); - 与其他任务的兼容规则; - 在值班网格上逐时段设置的详细需求。 任务必须足够明确,才能在排班界面和发给员工的值班表中被看懂。 常见示例: - `2号走廊`; - `北门接待`; - `课间操场`; - `食堂`; - `B12教室自习看管`; - `A阶梯教室考试监考`; - `体育活动 市体育场`。 #### 需求与授权员工 需求说明某项任务在值班网格上的每个时段需要多少人覆盖(0 = 无需求),这是在任务的最少人数和理想人数之外的设置。授权员工名单限定了符合条件的人员:请只用于需要特定资质或能力的岗位——体育活动、特殊监考、特殊接待、进入某个校区。 这些信息避免把人员安排变成一份单纯的姓名清单:Omniscol会保持岗位、需求与获准承担该岗位的人员之间的关联。 对于敏感任务,请限制授权员工,而不要依赖口头交代:这样,一旦安排了未获授权的人员,排班界面就会提示。 #### 任务之间的兼容 如果学校允许,某些相近的任务可以由同一个人承担。例如:安静时段内相邻的两条走廊。 只有当兼容符合实际工作规则时,才声明兼容。兼容范围过宽会让日程表更难阅读,还可能掩盖人手不足的问题。应避免的情形:仅仅因为缺人,就把相距很远的岗位合并。 #### 导入与沿用结构 任务已经很多时,该界面提供模块内的导入和沿用结构工具,可以节省时间。导入后,请在进入排班界面之前,检查名称、需求和授权员工。 规范的导入应当生成被安排人员能直接读懂的名称。如果导入的是内部代码,请在发布前改名。 #### 为什么把任务与排班分开 这样的分离避免混淆两个决策: - **定义需求**:有哪些岗位,在哪里,遵循什么规则; - **安排人员**:由谁在某一周或某一时间段内承担这些岗位。 当结构变化不大时,这种分离让您可以重复使用同一批任务,只修改人员或例外情况。 #### 操作步骤 1. 打开 人员调度 > 任务分配。 2. 创建或导入需要覆盖的任务。 3. 检查团队可见的名称。 4. 填写需求、校区和授权员工。 5. 只声明实际接受的兼容。 6. 保存,然后打开排班界面指定人员。 #### 另请参阅 - [制作值班网格](#page-staffing.building-grids) - [安排员工](#page-staffing.planner) - [值班表](#page-staffing.roster) - [人员调度概览](#page-staffing.overview) - [缺勤管理模块概览](#page-absences.overview) ### 7.4 安排员工 *Source: `help/zh-cn/staffing/planner.md` · id: staffing.planner · Audience: admin/staff · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-13* > **Option: 人员调度** 排班屏幕用于指定由谁来负责值班网格中定义的任务。这是实际操作的工作屏幕:选择一周,填写单元格,处理提醒,然后保存。 #### 手动安排 对于每个时段和每项任务,您把可用的员工放入相应的单元格。Omniscol会提示需要核对的情况: - 人员缺勤; - 已登记的不可用或约束; - 人员已被安排在别处; - 人员未获授权承担该任务; - 需要留意的每周工作量。 排班屏幕是针对学生管理的实际情况设计的:可用时间不断变化的学生助理、考试周、早上才登记的缺勤、需要迅速补上的岗位,以及需要公平分工的团队。 安排是**手动**的:提醒、复制和修正工具会辅助您完成日程表的制作。Omniscol不会自动安排员工。 #### 查看提醒 颜色和提示框会说明某项安排为何需要核对:缺勤、不可用、同一时段有其他任务、人员未获授权,或超出服务时间。每周汇总可以带您回到相关的单元格。 提醒按严重程度分级:红色冲突需要立即修正;警告则表示需要根据学校的规定自行判断的情况。 #### 修正工具 排班屏幕主要提供以下功能: - 按周、按天浏览; - 根据需要显示一天或整周; - 在结构重复时把一周复制到另一周,并可按需筛选要复制的日期或任务; - 启用橡皮擦模式,擦除一个单元格、一行或一列; - 撤销最近的修改; - 保存更改。 在单元格中被锁定的人员,在之后的手动修正中保持不变。 #### 复制,而不是从头开始 当结构稳定时,复制上一周,然后只修改例外情况:缺勤、临时不可用、考试变动、外出活动或某个岗位增加人手。这是常用的方法,可以避免每周都手动重建整个学生管理的安排。 对于特殊的周,请使用相应的网格:假期、考试、开放日或人员缩减的时期。 #### 缺勤 在缺勤管理模块中登记的员工缺勤会纳入安排中。缺勤人员可能会在已安排的任务上显示提醒,从而帮助您找出需要补位的岗位。 缺勤让问题出现在合适的位置:管理员或协调人由此在知情的情况下重新安排任务。 #### 工作量 排班屏幕会按人员和按日计算服务信息,尤其是覆盖的时间段和时长。请借助这些信息,避免某个人承担过多时段,或让辛苦的任务总是集中在同一个团队身上。 #### 分享 可以根据账户可用的分享选项来分享排班屏幕。如需把个人日程表发给每个人,建议改用[创建并分享值班表](#page-staffing.roster),它更易阅读,也便于打印或分发。 #### 操作步骤 1. 打开人员调度 > 排班。 2. 选择要处理的周或日期范围。 3. 确认当前启用的是正确的值班网格。 4. 把人员安排到单元格中。 5. 处理可用时间、缺勤或人员未获授权的提醒。 6. 如果结构重复,请复制该周。 7. 保存,然后打开值班表进行分发。 #### 另请参阅 - [制作值班网格](#page-staffing.building-grids) - [定义需要覆盖的任务](#page-staffing.assignments) - [值班表](#page-staffing.roster) - [缺勤管理模块概览](#page-absences.overview) ### 7.5 创建并分享值班表 *Source: `help/zh-cn/staffing/roster.md` · id: staffing.roster · Audience: admin/staff · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-05-18* > **Option: 人员调度** 值班表显示所选时间段内安排给某个人或全体员工的任务。它用于在完成任务安排后分发日程表。 这个屏幕就是为了简单地回答这个问题:“我什么时候要在哪里,负责什么任务?” #### 两种视图 - **列表视图**:任务按日期和时间顺序排列,附带便于个人查看的信息。 - **网格视图**:以表格显示一周,时段为行,日期为列。 缺勤、不可用和有用的评论始终可见,以免分发出自相矛盾的值班表。列表视图会显示每天和每周的合计。 #### 打印与导出 值班表可以打印。网格视图还支持以易读的表格形式导出,并可在导出窗口中生成PDF。 根据学校的组织方式,值班表可以: - 打印后张贴; - 导出为PDF; - 在Omniscol之外通过电子邮件发送; - 由已登录的员工直接查看; - 在账户启用该选项时通过链接分享。 学生管理部门仍然经常使用打印;同一个屏幕也可以用来生成带姓名的PDF、把某个视图发给某个人,或让员工用自己的账户查看日程表。 #### 分享与日历 分享可以包含网页链接和iCal订阅,视可用的选项而定。与其他分享链接一样,请根据所发送的时间段设置合适的有效期。 对于发给个人的内容,在打印、导出或分享之前,务必确认所选的人员无误。 #### 全体员工或单个人 您可以查看某个人,也可以查看全体员工。个人视图适合发给个人;整体视图则更适合在发布前做内部核对。 #### 操作步骤 1. 打开人员调度 > 值班表。 2. 选择一个人或全体员工。 3. 选择时间段。 4. 选择列表视图或网格视图。 5. 检查缺勤和可能出现的提醒。 6. 按预定的分发方式进行打印、导出或分享。 #### 另请参阅 - [安排员工](#page-staffing.planner) - [定义需要覆盖的任务](#page-staffing.assignments) - [分享链接](#page-glossary.share-link) --- ## 8. 管理 ### 8.1 用户与角色 *Source: `help/zh-cn/admin/users-and-roles.md` · id: admin.users-and-roles · Audience: admin · Updated: 2026-08-07* 用户管理汇集了可以登录Omniscol的所有账户。主要视图包括管理员、教师、学生, 以及在启用人员调度模块时的员工。 #### 主要角色 | 技术角色 | 界面名称 | 用途 | | --- | --- | --- | | `admin` | 管理员 | 管理学校账户。 | | `teacher` | 教师 | 教师门户、可用时间、个人课表、本人缺勤。 | | `student` | 学生 | 学生门户、个人课表、本人缺勤。 | | `staff` | 员工 | 在人员调度模块中被安排任务的员工(需启用该模块)。 | 一个用户可以同时拥有多个角色。此时菜单会显示与其全部权限相对应的模块。 技术角色 `share` 用于某些签名链接。它不是普通的用户账户:它通过分享链接打开一个特定范围,通常为只读。 #### 可用界面 - 管理员:管理员账户。 - 员工:学校员工(需启用该模块)。 - 教师:教师和授课人员。 - 学生:学生、大学生或学员,视学校的用语而定。 - 所有用户:所有账户的汇总视图。 #### 通用字段 用户表单主要管理以下内容: - 名、姓和性别; - 出生日期; - 电子邮件和电话; - 外部标识/工号; - 登录名,按账户设置生成; - 角色; - 评论。 此外,还会根据角色显示附加字段:教师有服务工时、科目和外聘状态;学生有在班级和小组中的分配; 员工有服务设置。 #### 列表操作 根据所选角色,界面提供以下操作: - 导入数据:导入或批量修改; - 邀请用户:发送邀请; - 更改密码:设置密码; - 发送邮件:发送消息; - 分配班级和 小组:用于学生。 可见的操作取决于可用的API、账户类型以及当前登录用户的权限。 > _Option: 自定义角色_ #### 自定义角色 **自定义角色**选项为管理员账户增加受限的管理角色。借助它,可以为只需管理部分范围的账户排除某些模块或某些操作。参见 [自定义角色](#page-admin.customroles)。 如果要限制的不是操作而是数据——某个单位、某个专业或某份课表——同一选项还会开放 [范围](#page-admin.planning-domains),它像角色一样分配给账户,并与该账户的角色叠加生效。 #### 分享链接 公开链接和签名分享不一定需要创建用户账户。课表的网页链接为只读; 不过某些定向链接可以允许有限的操作,例如在到期日之前录入某位教师的可用时间。 #### 操作步骤 — 邀请一批用户 1. 打开与角色对应的界面:教师、学生、员工或所有用户。 2. 选择相关的行。 3. 点击邀请用户。 4. 确认每位用户都有登录名和电子邮件。 5. 发送邀请。用户随后通过收到的链接设置密码。 #### 另请参阅 - [架构与角色](#page-overview.architecture-and-roles) - [邀请并激活用户](#page-getting-started.inviting-users) - [自定义角色](#page-admin.customroles) - [范围](#page-admin.planning-domains) - [员工管理](#page-admin.staff) ### 8.2 管理员管理 *Source: `help/zh-cn/admin/admins.md` · id: admin.admins · Audience: admin · Updated: 2026-08-07* **管理员**页面是对拥有管理员角色的用户所做的筛选视图(角色表见 [用户与角色](#page-admin.users-and-roles))。该角色可以执行学校的各项配置操作:用户、课表、缺勤、设置、导入、导出和发布。 #### 创建管理员 在列表中使用 增加管理员。表单与用户表单相同: - 名和姓; - 性别; - 电子邮件和电话(如有需要); - 外部标识 / 学号或工号(如果学校使用); - 按账户设置生成的登录名; - 管理员角色; - 备注。 创建的账户已经带有登录名。要开通此人的访问权限,请在用户列表中打开其详情:您可以**设置密码** (密码)、**发送邮件**(发送邮件),以及**激活或停用**账户 (激活)。通过身份提供方登录(SSO)仍可作为替代方式,参见 [OIDC / SSO](#page-integrations.oauth2)。 #### 同时拥有多个角色 同一个账户可以拥有多个角色。例如,教学负责人可以同时是教师和管理员:既保留其教师门户,也可以进入管理页面。 自定义角色可以限制管理员能执行的操作。没有自定义角色时,管理员角色拥有全部权限。 如果要限制其操作所针对的数据范围,例如某个单位、某个专业或某份课表,可以在角色之外再为账户分配一个[排课范围](#page-glossary.planning-domain)。参见 [范围](#page-admin.planning-domains)。 #### 撤销管理员权限 要撤销管理权限,请编辑该账户并移除管理员角色。除非确有必要,请避免为同一个人创建第二个账户:一个用户可以同时拥有多个角色,正是为这种情况设计的。 在修改其他管理员的权限之前,请始终保留至少一个可正常使用的管理员账户。 #### 操作步骤 — 创建管理员 1. 打开管理员。 2. 点击 增加管理员。 3. 填写身份信息;如果打算向其发送邮件,请填写电子邮件,然后确认已选择管理员角色。 4. 保存。出于安全考虑,创建或修改任何管理员账户都需要输入**您自己的**管理员密码进行确认。 5. 如有需要,在列表中选择该账户,**设置密码**、**发送邮件**或**激活 / 停用**其访问权限,具体取决于您的部署方式。 #### 另请参阅 - [用户与角色](#page-admin.users-and-roles) - [自定义角色](#page-admin.customroles) - [范围](#page-admin.planning-domains) - [OIDC / SSO](#page-integrations.oauth2) ### 8.3 管理自定义角色 *Source: `help/zh-cn/admin/customroles.md` · id: admin.customroles · Audience: admin · Options: customroles · Updated: 2026-08-07* > **Option: 自定义角色** **自定义角色**用于限制管理员账户的权限。其原则是做减法:从一个管理范围出发,去掉该用户不应使用的模块或操作。 如果想把一部分管理工作委派出去,又不想授予全部全局权限,就启用这个选项。 #### 为什么不授予全部管理权限? 标准的管理员角色拥有学校账户的所有权限。对许多协调类岗位来说,这些权限过多: - 缺勤协调员需要查看和处理缺勤,但不应修改课表或全局设置; - 课表管理员需要编排课表,但不一定要进入导入/导出; - 人事部门可能需要修改教师详情,但不应触碰课程; - 技术部门可以查看教室、信息显示屏或资源,但不需要管理用户。 #### 表单提供的功能 **自定义角色**界面提供: - **角色名称**; - 按模块设置的权限; - 按操作设置的权限,具体取决于各模块开放的操作。 权限针对的是模块及其操作,而不是数据本身:自定义角色不会限制对某个班级、校区、科目或某个时期的访问。它界定的是用户能做什么,而不是能对哪些数据操作。 #### 自定义角色与排课范围 数据方面的权限由 [排课范围](#page-glossary.planning-domain) 负责。这两个概念回答不同的问题,需要配合使用: - 自定义角色决定管理员能执行**哪些操作**; - 排课范围决定管理员对**哪些数据**执行这些操作——哪些班级、哪些校区、哪些教室、哪些科目、哪些课表。 当协调员需要管理自己的单位、专业方向或学校,而不触及同事负责的部分时,由排课范围来承担这一限制。参见 [范围](#page-admin.planning-domains)。 #### 分配自定义角色 自定义角色创建后,会出现在用户详情的角色选择器中。您可以像分配其他角色一样,把它分配给管理员账户。 一个用户可以同时拥有多个标准角色和自定义角色,此时他获得的是各角色剩余权限的并集。 #### 典型使用场景 - **学生事务/值班人员**——拥有缺勤、人员调度 和课表查看的权限,但不能访问配置。 - **教学协调员**——拥有所需课表界面的权限,但没有全局设置的权限。 - **技术部门**——按允许的操作访问教室、信息显示屏或资源。 - **行政助理**——管理学生或教师,但不能访问敏感设置。 #### 可审计性 当启用日志选项且相关路由已记入日志时,使用自定义角色执行的操作会出现在日志中。参见 [活动日志](#page-admin.logs)。 #### 操作步骤 — 创建“缺勤协调员”角色 1. 在 管理 模块中打开**自定义角色**。 2. 创建一个名为“缺勤协调员”的角色。 3. 授权 缺勤管理 模块中所需的操作。 4. 如果协调员需要借助课表来了解缺勤的情况,请保留课表的查看权限,但去掉修改权限。 5. 排除不应访问的模块,尤其是 课表管理、全局设置,以及不属于其职责范围的导入/导出。 6. 保存,然后把该角色分配给相关的管理员账户。 7. 如果活动日志已启用,请通过 [活动日志](#page-admin.logs) 检查这些操作。 #### 另请参阅 - [范围](#page-admin.planning-domains) - [用户与角色](#page-admin.users-and-roles) - [管理员管理](#page-admin.admins) - [可见性限制](#page-admin.visibility-restrictions) - [活动日志](#page-admin.logs) ### 8.4 排课范围 *Source: `help/zh-cn/admin/planning-domains.md` · id: admin.planning-domains · Audience: admin · Plan: premium · Options: customroles · Updated: 2026-08-07* > **Premium · Option: 自定义角色** **排课范围**为管理员指定一个**管辖范围**——他负责管理的数据——以及**权限**——他可以在其中执行的操作。当一个账户在同一份课表中汇集了多个单位、专业方向或学校时,每位排课员只处理属于自己的部分,既不会迷失在整体中,也不会触碰他人的部分。 一位管理员可以获得一个或多个范围。只要他没有任何范围,就保留对账户的完全访问权:范围只约束您想要约束的账户,其余账户保持不变。 #### 范围还是自定义角色? [自定义角色](#page-admin.customroles)与范围回答的是两个不同的问题,二者可以组合使用: - 自定义角色决定管理员可以执行**哪些操作**——哪些模块,是查看、修改还是删除; - 范围决定他在**哪些数据**上操作——哪些班级、校区、教室、科目、课表。 自定义角色不区分不同的班级,范围则可以。您可以把两者同时授予同一个人:角色限定他的操作,范围限定他的工作领域。范围在Premium账户上启用,所用选项与自定义角色相同。 #### 打开范围 范围从管理员列表中管理。在 管理 中,打开 **用户**,进入管理员选项卡,然后点击 范围。 只有不受限制的管理员——即没有范围的管理员——才能打开此界面并分配范围。管理员账户本身的管理也由他负责:受范围约束的排课员不能创建或修改管理员账户。 #### 管辖范围:哪些数据 管辖范围在 筛选 部分中定义。它按维度组织,从最宽到最细: - **单位**和**科目**是横向筛选:无论针对哪份课表,它们都适用于排课员接触到的所有内容; - **课表**,以及其下的**校区**(及其**教室**)和**班级**(及其**小组**),则沿用课表的结构。 维度保持为 **全部** 时,不施加任何约束。若要限制它,请选择一个条件和一个值: - **等于**——精确值(某个校区、某个年级等); - **开头为**——前缀,当您的科目或班级代码体现了教学单元时很方便(`G7-`、`INF-` 等); - **包含**——标签中包含的某个值。 数值型条件,例如教室的容量,用 **≥** 和 **≤** 阈值取代上述几种形式——这样可以把大教室交给专门的排课员,或将其排除在某个范围之外。 每个条件都可以反过来用 **排除** 表示排除而非包含。**+** 按钮在同一维度中添加一个备选项(“或”)——多个校区、多个年级——不同维度之间则是叠加关系:一节课只有满足**所有**受约束的维度,才属于该管辖范围。 每个维度提供与之对应的条件: | 维度 | 条件 | | --- | --- | | 单位 | 名称 | | 科目 | 名称、代码、课时类型、科目分组 | | 课表 | 标签、已发布、开始日期和结束日期 | | 校区 | 名称 | | 教室 | 名称、教学楼、专业教室类型、标签、容量 | | 班级 | 名称、年级、校区 | | 小组 | 名称、代码 | 在筛选器顶部,眼睛图标会打开一个概览:概览 给出所涵盖对象的数量和一个样本,便于在保存前核对管辖范围。每一行也有自己的眼睛图标,用于单独检查某个维度。 #### 权限:哪些操作 权限部分提供两种应用管辖范围的方式: - **限制**——“只有筛选范围内的数据仍可修改,并按下方勾选的权限执行。”排课员可以查看全部内容,但只能修改自己的管辖范围,而且只能按所授权限修改。 - **隐藏**——“筛选仅预选显示内容:所有权限仍然保留。”管辖范围只是精简显示,不会收回任何权限:适合专注于自己的单位,同时保留对整体的操作权。 在 限制 模式下,由一个矩阵细分各项权限。其原则与自定义角色一样是做减法:默认全部授予,您取消勾选该范围禁止的内容。 有两个表格按修改、创建和删除阅读: - **对象**:课表设置(仅修改)、班级、教师、教室、科目和 校区; - **课时**:创建、修改和删除,以及在精细修改中,一节课在网格上的位置、教师、教室、授课形式、视频会议链接、状态、时段和评论。教室、授课形式和视频会议链接共用同一个窗口,但仍是三项独立的权限:把线下或线上授课的选择权交给某人,并不意味着开放教室的分配。 查看权限始终是开放的:范围限定的是您能写入什么,而不是您能看到什么。 #### 排课员能看到什么 排课员能看到完整的课表——这使他能发现自己的范围与同事范围之间的冲突——但班级、教室或科目的列表只显示属于他的对象。在有内容被过滤的地方,会出现 **由您的范围隐藏** 标记,点击即可查看被隐藏的内容以及由哪个范围隐藏。这就直接回答了“我看不到某间教室”的疑问:信息就在屏幕上。 如果某项操作超出了管辖范围,Omniscol会拒绝并说明原因:除了过滤显示之外,每次保存时还会再做一次校验。 #### 在课时界面中 被某项权限禁止的控件**保持可见但不可操作**,不会被隐藏:排课员能看到该功能存在,也清楚自己的权限边界。凡是可以修改课时的地方都是如此——网格上、课时详情中以及表格视图中。 操作菜单遵循同样的规则,逐项操作处理:批量移除教室取决于对教室的权限,自动分配取决于创建权限,删除所有课时取决于删除权限。此外,批量操作只作用于管辖范围内的课时:超出范围的选择会被**裁剪**,而不是整体拒绝,并会提醒排课员。 ##### 生成课表 生成需要单独的权限:许多受委托的排课员管理自己的课时,但从不启动生成。获得该权限后,计算范围会被**限定在管辖范围内**——排课员可以进一步缩小它,但不能扩大。这样才能保证结果可用:否则,一次生成若将某节课移到范围之外,保存时就会被拒绝,所有工作都将白费。 生成设置是一个例外:即使没有对课表设置的权限,只要有生成权限,也可以保存。 ##### 导入课时表格 排课员无权修改的列以只读方式显示:他可以读取数据,但不能更改。 班级、科目和小组是例外,因为它们不是普通字段:清空其中任何一个会删除该课时,更改则会把课时移到别处。因此,这三列只有在同时拥有创建、修改**和**删除权限时才可编辑。 如果有一行超出管辖范围,整个导入会被拒绝,并指出有问题的行。Omniscol提交的始终只是您录入的内容,绝不擅自改动:明确的拒绝胜过悄悄删减的导入。 #### 分配范围 范围在管理员的详情中分配,与角色类似。您可以分配多个范围:排课员的管辖范围随之叠加,各自保留自己的权限。范围是相加而不是融合——只要有一个范围涵盖某项操作,该操作即被允许。 创建、复制或删除范围都在同一界面完成:添加 添加范围,保存 保存。 #### 操作步骤 — 创建“北京分校”范围 1. 打开 管理 → **用户**,进入管理员选项卡,然后点击 范围。 2. 点击 添加,然后将范围命名为“北京分校”。 3. 在 筛选 中,对 单位 维度选择 等于,并填入该单位的值。其他维度保持为 全部。 4. 点击眼睛图标 概览 核对覆盖范围。 5. 保持 限制 模式。在矩阵中取消勾选该排课员不应执行的操作——例如删除班级。 6. 点击 保存 保存。 7. 在相关管理员账户的详情中分配该范围。 #### 另请参阅 - [自定义角色](#page-admin.customroles) - [用户与角色](#page-admin.users-and-roles) - [管理员管理](#page-admin.admins) - [可见性限制](#page-admin.visibility-restrictions) ### 8.5 教师管理 *Source: `help/zh-cn/admin/teachers.md` · id: admin.teachers · Audience: admin · Updated: 2026-05-15* **教师**界面列出了拥有教师角色的用户。根据学校的实际情况,也可称为 任课教师、授课人员或培训师。 在这个界面中,您可以创建账户,管理教师的信息、科目、可用时间,以及查看其课表。 #### 详情字段 教师详情包含用户的通用字段和教师专有字段: - 名、姓和性别; - 出生日期; - 电子邮件和电话; - 外部标识/工号; - 登录名; - 服务工时; - 任教科目; - 兼职教师或授课人员的外聘状态; - 可用时间和时间限制; - 评论。 **课表**标签页汇总了该教师在所有学年的完整课表,并在背景中显示合并后的可用时间。 这是一个查看视图:教学上的安排需要在课表中完成。 在教师详情中,**分享**按钮会打开分享界面,其中提供该教师专属的iCal订阅,适用于所有学年。 #### 任教科目 教师关联的科目用于筛选或准备排课安排。您可以从官方科目或自定义科目库中选择。 #### 可用时间 **可用时间**标签页让管理员可以录入或修正教师的可用时间。根据学校的设置, 录入方式可以是周课表模式、日历课表模式、混合模式,也可以关闭。 如果学校允许,教师也可以在自己的门户中录入可用时间。 #### 批量操作 在主列表中选择若干教师后,您还可以邀请他们、为他们设置密码或向他们发送消息,具体取决于账户已启用的功能。 您也可以事先对列表进行筛选。 **导入数据**按钮会打开一个类似电子表格的网格:您可以在其中一次添加、修改或删除多位教师,并导出 教师列表。其中有两列为只读,仅用于导出: - **可用时间**:以文本形式呈现,与保存时一致; - **班级**:教师有课的班级,根据当前学年已发布的课表汇总而成。 > _Premium_ 教师可以从外部系统同步: 同步会打开与该系统的匹配界面。参见[与外部系统同步](#page-integrations.extsync)。 #### 操作步骤 — 创建教师 1. 打开教师。 2. 点击添加教师。 3. 按照学校内部的规则,填写身份信息、电子邮件、登录名或外部标识。 4. 添加任教科目。 5. 如果学校使用服务工时,请填写服务工时。 6. 保存;如果希望教师登录,请再邀请该教师。 #### 另请参阅 - [用户与角色](#page-admin.users-and-roles) - [学生管理](#page-admin.students) - [科目管理](#page-admin.subjects) - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [外部授课人员(外聘教师、访问教师)](#page-higher-ed.external-faculty) ### 8.6 学生管理 *Source: `help/zh-cn/admin/students.md` · id: admin.students · Audience: admin · Plan: standard · Updated: 2026-05-15* **学生** 页面列出担任学生角色的用户。根据学校的不同,也称为学员或学习者。 此页面用于创建账户、跟踪账户状态,并按学年管理学生在班级和小组中的分配。 #### 详情字段 学生详情包含用户的通用字段: - 名、姓和性别; - 出生日期; - 电子邮箱和电话; - 外部标识 / 学号; - 登录名; - 评论。 法定监护人、证明材料和家长通知不属于学生详情的字段。 #### 班级和小组的分配 教学上的安排在学生的分配页签中管理。一条分配主要包含: - 主班级; - 所属学年; - 起止日期(如果该分配没有覆盖整个学年); - 所属小组,必要时可按周设置; - 需要处理的重叠情况。 在同一学年中,一名学生可以有多条分配,例如转班、部分时间就读或部分重读之后。 #### 批量操作 在主列表中选中学生后,您可以通过 **分配班级** 将他们分配到某个班级,或通过 **小组** 分配到小组(须属于同一班级),也可以邀请他们、设置密码、发送消息、在学生离校时停用账户,或永久删除。您可以事先对列表进行筛选,例如按所分配的班级筛选。 **导入数据** 按钮会打开一个电子表格式的网格:可以一次添加或修改多名学生,并导出名单(CSV、Excel、PDF)。每个学年有两列为只读,仅用于导出: - **班级**:学生在当前学年及之后学年所在的班级; - **小组**:学生在当前学年及之后学年所属的小组。 #### 部分重读和跨年级 部分重读,即学生的课程分布在两个年级,处理方法是在同一时期把他分配到相关的两个班级:他的课表会合并两个班级的课时。Omniscol不会检查两个班级之间的时间重叠,需要由您自行核对。 #### 操作步骤 — 创建并分配学生 1. 打开 学生。 2. 创建学生,或批量导入。 3. 打开其详情,再打开相应学年的分配页签。 4. 添加班级,核对日期,必要时再选择所属小组。 5. 保存分配。 6. 如果希望学生登录门户,请发送邀请。 #### 另请参阅 - [用户与角色](#page-admin.users-and-roles) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [导入与导出](#page-admin.import-export) ### 8.7 员工管理 *Source: `help/zh-cn/admin/staff.md` · id: admin.staff · Audience: admin · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-25* > **Option: 人员调度** **员工** 页面列出担任 **员工** 角色的用户。只有开通了 **人员调度** 模块的账户才会显示该页面:您在这里登记相关人员(监考人员、辅导人员、教育辅助人员等),之后为他们安排工作的地方是[人员调度模块](#page-staffing.overview)。 此页面用于创建账户、管理员工信息和服务工时。**任务的分配**(值班、监考、考试等)则在 人员调度 模块中完成,参见[定义需要覆盖的任务](#page-staffing.assignments)。 #### 详情字段 员工详情包含用户的通用字段,以及若干员工专有字段: - 名、姓和性别; - 出生日期; - 电子邮箱和电话; - 外部标识 / 工号; - 登录名; - **服务工时**(用于跟踪的基准工时); - 角色和评论。 在列表中可以打开员工**详情**(更多),逐个查看并补充这些信息。 #### 员工与 人员调度 模块 两者有意分开:**在这里**管理的是*人员*(员工名册),**在 人员调度 模块里**管理的是他们的*日程*:网格、任务和分配,参见[人员调度概览](#page-staffing.overview)。在此页面创建的员工,可被选为授权的负责人员,参见[定义需要覆盖的任务](#page-staffing.assignments)。 #### 列表操作 在列表中,点击 添加员工 可添加员工,点击 导入数据 可打开**批量**创建或修改。通过选择操作,还可以邀请员工、设置密码、激活账户或删除账户,具体取决于可用的接口。 #### 操作步骤 — 创建员工 1. 打开 员工。 2. 点击 添加员工。 3. 按学校内部的规定填写身份信息、电子邮箱、登录名或外部标识。 4. 如果学校需要跟踪服务工时,请填写**服务工时**。 5. 保存;如果希望该员工登录自己的门户,请再发送邀请。 6. 然后安排他的任务,参见[定义需要覆盖的任务](#page-staffing.assignments)。 #### 另请参阅 - [用户与角色](#page-admin.users-and-roles) - [教师管理](#page-admin.teachers) - [人员调度概览](#page-staffing.overview) - [定义需要覆盖的任务](#page-staffing.assignments) - [人员调度](#page-glossary.staffing) ### 8.8 科目管理(官方科目与自定义科目) *Source: `help/zh-cn/admin/subjects.md` · id: admin.subjects · Audience: admin · Updated: 2026-05-14* **科目** 页面用于管理学校的自定义科目;如果启用了通用科目库,还可以搜索所配置国家的官方科目。 #### 通用科目与自定义科目 - **通用科目**来自Omniscol为学校所在国家提供的科目库。只要该科目库没有被停用,就可以搜索并添加。 - **自定义科目**归学校所有,用于通用科目库中没有的本校名称、模块、选修课或教学单元。 #### 自定义科目的字段 | 字段 | 是否必填 | 作用 | | --- | --- | --- | | **代码** | 是 | 科目的简短编码,与名称配套使用(名称可能很长,高校尤其如此)。通常是官方编号,例如教育主管部门发布的科目代码,一般为大写字母和/或数字。 | | **名称** | 是 | 科目的完整名称,显示在课程选择器、课表和导出文件中。 | | **简称** | 否 | 用于在课表上显示的缩写,比全称更短。 | | **上级科目** | 否 | 将该科目归入另一个科目之下,用于建立科目的层级。 | | **科目分组** | 否 | 对科目进行分组。选择器会提供所在国家科目库的默认科目分组,以及账户自己的科目分组。 | | **颜色** | 否 | 用于视觉识别的颜色。创建时,您可以从一组屏幕上清晰易读的色调中选择;否则系统会根据名称自动计算一种颜色。 | 创建时需要同时填写代码和名称。一旦代码被您的导入、导出或与外部系统的交换所引用,请避免再修改它。 #### 批量创建和修改 点击 [table] 可以**批量**创建和修改自定义科目:在电子表格式的网格中,一次操作即可录入或替换多个科目。删除网格中的一行并确认后,对应的科目会从目录中移除:网格的内容会取代全部自定义科目。在这个网格中,颜色可以直接填写任意十六进制值,没有创建时提供的色调选择,因此显示效果可能不够清晰。 自定义科目即使已用于过去的或已发布的课表,也可以删除。这样您可以逐年清理科目目录,而不影响这些课表:每个班级都保留一份科目名称的本地副本(名称、简称、代码),课表也保留原先分配的颜色。因此科目从目录中删除后仍会继续显示。本地副本的原理参见 [完整数据模型](#page-integrations.data-model-full)。 > _Premium_ 如果已配置与外部系统的同步,点击 同步 即可打开与该系统的对应。参见 [与外部系统同步](#page-integrations.extsync)。 #### 课时类型 同一页面还会显示课时类型的简单列表。参见 [课时类型](#page-admin.lesson-types)。 > _Premium_ 课时类型也可以从外部系统同步:点击 同步 即可打开对应。参见 [与外部系统同步](#page-integrations.extsync)。 #### 操作步骤 — 添加科目 1. 打开 科目。 2. 对于通用科目,如果科目库可用,请使用科目库的搜索。 3. 对于学校自己的科目,请点击 **创建**(即 创建)。 4. 填写代码和名称(二者均为必填),然后根据需要补充简称、科目分组、上级科目或颜色。 5. 保存。该科目随即可在课程选择器和教师详情中使用。 #### 另请参阅 - [课时类型](#page-admin.lesson-types) - [教师管理](#page-admin.teachers) - [科目](#page-glossary.subject) ### 8.9 课时类型 *Source: `help/zh-cn/admin/lesson-types.md` · id: admin.lesson-types · Audience: admin · Updated: 2026-05-14* 在 **管理** 模块中,**课时类型**是附加在课时上的简短标签,用来区分`讲授课`、`习题课`、`实验课`、`考试`或`项目`等形式。课时类型是一份文字标签列表,没有关联的颜色或图标。 #### 在哪里管理 课时类型列表可以在 **科目** 界面和 **设置** 界面的 **课时类型** 部分管理。会用到的按钮有: - **创建**:添加新类型; - **保存**:保存列表。 显示顺序可以通过拖放来调整。 #### “课时类型必填”设置 课时类型必填 设置在 **设置** 界面中调整。启用后,录入课程(即课表中分配给某个班级的科目)时必须填写类型。如果您要把课时导出到要求提供这项信息的ERP,这个设置会很有用。 #### 最佳实践 - 保持列表简短而稳定。 - 不要随意重命名已在正式使用的类型,除非先检查过依赖它的导入和导出。 - 类型只用来区分教学形式,不要用它代替科目,也不要用它表示授课方式(线下/线上)。 #### 操作步骤 — 添加类型 1. 打开 **科目** 界面。 2. 在 **课时类型** 部分,点击 **创建**。 3. 输入类型的名称。 4. 如有需要,调整列表顺序。 5. 点击 **保存** 保存。 #### 另请参阅 - [课程、课时、课时类型](#page-core-concepts.lessons-and-types) - [科目管理](#page-admin.subjects) ### 8.10 学年与假期 *Source: `help/zh-cn/admin/school-year.md` · id: admin.school-year · Audience: admin · Plan: standard · Updated: 2026-06-26* 在 **管理** 模块中,**学年** 界面定义了课表、假期、缺勤和学生分配所依据的时间段。它也称为学术年度。 #### 创建学年 一个学年包含: - **名称**; - **开始日期**; - **结束日期**。 创建时,如果所选日期区间内有数据,Omniscol可以建议导入所配置国家的通用假期。您可以取消勾选与您无关的假期。 #### 当前学年 **当前学年** 选择器指明应用和门户默认显示的学年。更改该值会切换用户的默认上下文。它也是学生唯一能访问的学年。 请让当前学年始终是日常实际使用的学年。要准备下一学年,请先创建新学年,再处理相应的课表,不要过早将其设为当前学年。 #### 假期 每个学年包含一份假期列表: - 名称; - 开始日期; - 结束日期。 您可以逐个添加、修改、删除,也可以通过 **电子表格** 以表格方式管理。 #### 交替周 如果在常规设置中启用了交替周,界面会显示一条周次条,用于设置全年的交替安排。点击 **保存** 保存。 标签的格式(`A, B, ...`、`1, 2, ...` 或停用)在常规设置中设定。 **假期造成的错位**:如果假期前一周是A周,而您希望假期后从B周开始,请点击周次条上的相关周,创建一个**虚拟错位**。交替安排随即按后续日历重新对齐。 #### 操作步骤 — 准备下一学年 1. 打开 **学年** 界面。 2. 创建下一学年,填写名称、开始日期和结束日期。 3. 导入或手动录入假期。 4. 如果学校使用交替周,请进行配置。 5. 然后在 **课表管理** 模块中创建或复制课表。 6. 只有当用户需要默认看到该学年时,才更改当前学年。 #### 另请参阅 - [学年](#page-core-concepts.school-year) - [学年](#page-glossary.school-year) - [发布课表](#page-timetables.publication) - [准备下一学年](#page-timetables.next-school-year) ### 8.11 学校常规设置 *Source: `help/zh-cn/admin/parameters.md` · id: admin.parameters · Audience: admin · Updated: 2026-05-14* 在 **管理** 模块中,**设置** 界面包含学校的全局配置。部分设置会立即应用于整个账户,其余设置则作为今后新建课表的默认值。 #### 主要设置 在该界面中,您可以设置: - **学校名称**; - **时区**; - **当前学年**; - **班级年级**,通过 创建 添加; - **开放时间**,适用于使用 人员调度 的账户; - **教师可用时间的录入方式**; - **学生可见性限制**; - **教师可见性限制**; - **按角色的登录限制**; - **是否使用中间名**; - **姓名大小写规则**; - **登录名格式**; - **每周的第一天**; - **交替周的格式**; - **课时类型是否必填**; - **启用或停用通用科目库**; - **学校校徽**。 备份点配额和日志保留时长不属于本界面的常规设置,由Omniscol根据学校合同启用或调整。 #### 年级 **年级**用于按教学进度对班级分类:6年级、7年级、本科、硕士、第1年、第2年等。 年级属于账户的**常规**设置。您可以在本界面创建、删除和调整其顺序。之后,年级会用于班级、部分筛选条件以及多个诊断视图。 #### 可见性与登录设置 限制学生查看课表、限制教师查看课表 和 应用登录限制 这几项设置的说明见 [可见性限制](#page-admin.visibility-restrictions)。 #### 课时类型与通用科目 课时类型必填 设置决定录入课程时是否必须指定类型。通用科目设置则控制能否使用本国官方科目库。 #### 校徽 上传的校徽保存在账户中,界面会在适用的场合使用它,尤其是登录界面和应用内。 #### 操作步骤 — 配置账户 1. 打开 **设置**。 2. 检查学校名称、时区和当前学年。 3. 在创建课表之前,先配置年级、每周的第一天和交替周。 4. 根据学校的政策,设置可见性限制和登录限制。 5. 点击 保存 保存常规设置。 #### 另请参阅 - [配置学校账户](#page-getting-started.setup-school) - [学年与假期](#page-admin.school-year) - [科目管理](#page-admin.subjects) - [可见性限制](#page-admin.visibility-restrictions) - [高级设置与个性化](#page-admin.advanced-parameters) ### 8.12 高级设置与个性化 *Source: `help/zh-cn/admin/advanced-parameters.md` · id: admin.advanced-parameters · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ 在 **管理** 模块中,Premium账户的 **设置** 界面除常规设置外,还提供**高级**设置。本页介绍这些高级功能;基础设置请参见 [学校常规设置](#page-admin.parameters)。 #### 单位 **单位**用于按学校内部的组织方式对班级进行归类:办学点、学院、教学部门、培养方案,或学校自身的其他划分范围。这个概念是**可选**的,并且有别于校区:校区是实际存在的场所,有自己的时间网格、教室和通勤时间;而单位只是一个逻辑上的组织层级。 当地理位置与您的逻辑组织并不对应时,单位尤其有用:例如多个学院共用同一批教学楼,或同一集团的多所学校交叉共用多个校区。即使单位与校区相互重合,这一层级对筛选和分组仍然有用。 请使用 **创建** 只创建真正用于组织或筛选工作的单位。创建后,它们会出现在创建班级的界面和部分诊断筛选器中。 #### 翻译与术语的重新定义 在该界面中,您还可以**重新定义翻译**,让界面显示的词汇贴合您学校的用语。这一区域用于个性化界面中可见的文字,不会改变产品的功能结构。 有两种不同的机制: - 翻译替换规则:在一组文字中,把某个术语替换为另一个术语; - 翻译重新定义:直接替换某一条具体翻译的内容。 ##### 替换规则 替换规则用于一次性统一大量文字中的用词。典型示例: - 把“教师”替换为“讲师”; - 把“学生”替换为“学员”; - 使某些术语符合学校自己的习惯。 规则是**有顺序的**。顺序很重要:排在上面的规则先于后面的规则生效。在该界面中,您可以: - 输入源文本和目标文本,然后点击 **添加** 确认; - 预览受影响的文字; - 调整规则顺序; - 删除规则。 可用的选项用于指定替换的类型: - `Aa`:区分大小写; - 带下划线的 `ab`:完整匹配; - `.*`:正则表达式。 当您希望在多个界面中统一更改某个术语时,请使用规则。 规则会**在各自的区域中**保存:添加、删除和调整顺序都与页面上的其他设置分开保存。 ##### 完整键的重新定义 完整键的重新定义用于**逐条**更正或改写某段文字。 在该界面中,您可以: - 搜索现有的翻译; - 将其添加到重新定义列表; - 输入您自己的版本; - 保存或删除该重新定义。 当通用规则范围太大,或您想改写整句话而不只是一个术语时,请使用这种方式。 每条键的重新定义都**逐行**保存,各有自己的保存或删除按钮。 ##### 使用建议 规则和重新定义只用于个性化**显示的词汇**。它们不会改变底层的业务概念、内部标识符,也不会改变应用的行为。 建议: - 重复出现的改名,使用**规则**; - 个别例外或整句文字,使用**键的重新定义**。 请避免范围过大或含义模糊的替换,以免帮助内容、搜索或术语在不同界面之间前后不一致。 #### 操作步骤 1. 在 **管理** 模块中打开 **设置**。 2. 找到与您的需求对应的高级区域:单位或翻译重新定义。 3. 对于单位,请创建并排列适合您学校组织的名称。 4. 对于翻译,请根据修改的范围,在全局规则和单条重新定义之间选择。 5. 每个区域用各自的机制保存:规则保存在其所在的区块中,键的重新定义则逐行确认。 #### 另请参阅 - [学校常规设置](#page-admin.parameters) - [可见性限制](#page-admin.visibility-restrictions) - [单位](#page-glossary.campus) - [冲突与诊断](#page-timetables.conflicts) ### 8.13 可见性与登录限制 *Source: `help/zh-cn/admin/visibility-restrictions.md` · id: admin.visibility-restrictions · Audience: admin · Plan: standard · Updated: 2026-05-14* 在**管理**模块中,**设置**界面集中了几项有针对性的限制:学生的查看范围、 教师之间课表的隐藏,以及按角色阻止登录。 #### 学生端限制 限制学生查看课表参数用于设定学生可以看到已发布课表的未来周数(含当前周)。 您可以将其设为具体的周数,或设为**无限**。 这项限制针对向学生开放的时间窗口:每位学生可以查看已发布的课表,直到所选的截止时间。 #### 教师端限制 限制教师查看课表参数用于隐藏其他教师的课表。它作用于筛选器和查看视图: 教师可以看到自己的课表,但无法访问同事的课表。 #### 登录限制 应用登录限制参数用于阻止所选类别的用户登录:**教师**、 **员工**或**学生**。同时拥有多个角色的用户,只要其中至少一个角色仍被允许,就可以登录。 #### 操作步骤 — 限制学生的可见范围 1. 打开**设置**界面。 2. 找到限制学生查看课表。 3. 选择**无限**或一个周数。 4. 点击**保存**确认。 #### 另请参阅 - [常规设置](#page-admin.parameters) - [用户与角色](#page-admin.users-and-roles) - [学生门户](#page-portal.student-portal) - [教师门户](#page-portal.teacher-portal) ### 8.14 第二身份验证因素 (MFA) *Source: `help/zh-cn/admin/second-factor.md` · id: admin.second-factor · Audience: admin/staff/teacher · Plan: premium · Updated: 2026-10-21* > **Premium** > _Premium_ **第二身份验证因素**即使在账户密码已被他人获知时,也能保护该账户:输入密码之后,或通过贵校的身份提供方登录之后,用户还需证明自己持有一台专属于本人的设备——手机或电脑。 第二身份验证因素是Premium计划的选配功能,经您申请后由Omniscol团队开通。之后由学校自行选择适用角色以及可用的第二身份验证因素。 #### 启用第二身份验证因素 在 **管理** → **设置** 的 **安全** 部分,第二身份验证因素(MFA)所在行的 配置 按钮会打开配置: - 适用角色——需要验证第二身份验证因素的账户角色:管理员、员工、教师。未选择任何角色时,此功能不启用。学生无需验证第二身份验证因素。 - 可用的第二身份验证因素——账户可以注册的方式:通行密钥、身份验证应用或电子邮件验证码,至少选择一种。 - 记住浏览器——在验证第二身份验证因素时,可选择在您设定的天数内不再于此浏览器上询问,天数范围为1至90天。密码仍然需要输入。 按钮旁的标签会显示此功能是否已启用,以及适用于哪些角色。 保存此设置后,所选角色的账户若是在没有第二身份验证因素的情况下登录的,其会话将在下一次操作时中断:用户需要重新登录,并注册自己的。此前已授权的应用,例如通过MCP连接的助手,需要重新授权。 #### 登录时 输入密码后,所选角色的账户会进入第二步。 ##### 首次登录:注册第二身份验证因素 首次登录时,账户需要在学校接受的方式中注册一种第二身份验证因素: - 通行密钥——创建通行密钥按钮会在设备上注册一个通行密钥;之后每次登录都通过设备的指纹、面容或锁屏密码来确认; - 身份验证应用——用户用手机上的身份验证应用扫描二维码,然后输入应用显示的六位数验证码; - 电子邮件验证码——通过电子邮件接收验证码按钮会向账户的电子邮件地址发送一个六位数验证码,有效期十分钟。没有电子邮件地址的账户无法选择这种方式。 每个账户只注册一种第二身份验证因素;即使学校之后不再接受这种类型,账户仍保留已注册的方式。 **管理员**还会收到十个**备用码**,只显示一次。设备丢失时,每个备用码可代替第二身份验证因素完成一次登录:请妥善保存。 ##### 之后的登录 之后每次登录都会要求验证已注册的第二身份验证因素:通行密钥、应用的验证码,或系统自动发送的电子邮件验证码。管理员也可以输入备用码。 如果学校允许,会出现一个复选框,勾选后,在设定的天数内此浏览器不再询问。换用其他浏览器时仍会询问,重置之后的首次登录也是如此。 ##### 使用SSO时 通过身份提供方登录之后([OIDC / SSO](#page-integrations.oauth2)),登录页面上会显示同样的步骤:第二身份验证因素是在SSO之上额外增加的一层验证。 #### 重置第二身份验证因素 账户丢失了第二身份验证因素——例如更换了手机、删除了通行密钥——重置之后即可注册新的: - 重置单个账户:在该角色列表中,展开该账户所在行,点击 密码 旁边的 重置第二身份验证因素 按钮,列表为 管理员、教师或员工; - 重置所有账户:在第二身份验证因素配置的底部点击 重置所有账户的第二验证因素。 重置所有账户,以及重置管理员账户,都需要您确认自己的身份。账户会在下次登录时注册新的第二身份验证因素,已记住的浏览器也会被清除。账户已打开的会话不受影响:如需中断,请停用该账户。 丢失第二身份验证因素的管理员可以使用备用码登录,也可以由另一位管理员为其重置。最后一位管理员的第二身份验证因素,可由Omniscol支持团队重置。 #### 须知 - 电子邮件验证码是最薄弱的第二身份验证因素:重置密码也要经过同一个邮箱。如需更强的保护,请只接受通行密钥和身份验证应用。 - 通行密钥与创建它时所用的学校网址绑定:换到其他网址就无法使用。 #### 操作步骤 — 启用第二身份验证因素 1. 打开 **设置**,在 **安全** 部分,点击 第二身份验证因素(MFA)所在行的 配置。 2. 选择适用角色和可用的第二身份验证因素。 3. 如有需要,允许记住浏览器并设定天数。 4. 点击 保存 保存。 5. 通知相关人员:他们下次登录时需要注册自己的第二身份验证因素。 #### 另请参阅 - [首次登录](#page-getting-started.first-login) - [OIDC / SSO](#page-integrations.oauth2) - [用户与角色](#page-admin.users-and-roles) - [常规设置](#page-admin.parameters) ### 8.15 导入与导出 *Source: `help/zh-cn/admin/import-export.md` · id: admin.import-export · Audience: admin · Updated: 2026-06-03* 在 **管理** 模块中,**导入/导出** 界面集中了账户的数据传输操作:JSON导出、aSc数据交换、备份点、与外部系统的同步,以及账户已启用的API选项。视所在国家而定,还可能提供基于标准协议的数据交换。对于隶属法国国民教育部的学校,法国特有的数据交换(STS、UnDeuxTemps、École Directe)请参见 [admin.french-formats](#page-admin.french-formats)。 #### 导出JSON 点击 **下载** 按钮,会导出账户的完整JSON文件。该文件包含账户的数据,应作为敏感的备份文件妥善处理。 所有管理员都可以使用JSON导出。如需限制访问权限,需要启用 [自定义角色](#page-admin.customroles) 选项。 #### 导入JSON 完整的JSON导入使用与导出相同的格式。它仍然仅限Omniscol团队在提供支持时使用:重新导入数据由团队应Omniscol的要求执行,而不是管理界面中的常规操作。 如需恢复账户,请优先使用备份点(如已启用);如确有必要重新导入JSON,请联系Omniscol。 在进行任何具有破坏性的导入之前,如果备份点功能已启用,请先创建一个备份点。 #### aSc Timetables 该界面还包含aSc Timetables部分: - 导入aSc的XML文件; - 带选项的aSc XML导出。 这种数据交换针对的是完整的aSc文件。如果要通过表格添加课程,请改用 [通过表格批量导入课程](#page-timetables.mass-import)。 #### 备份点 如果已启用**备份点**,点击 **备份点** 按钮即可打开其管理界面。参见 [备份点](#page-admin.snapshots)。 #### 与外部系统同步及API选项 > _Premium_ 该界面还提供: - 通过 **配置** 配置与外部系统的同步; - 全局分享/OpenAPI; - API设置; - MCP配置; - OAuth2/OIDC管理。 #### 操作步骤 — 导出账户 1. 打开 **导入/导出**。 2. 点击 **下载**。 3. 将文件保存在安全的位置。 4. 如果接下来要进行有风险的操作,请在导出之外再创建一个备份点。 #### 另请参阅 - [为批量导入准备数据](#page-getting-started.preparing-data) - [通过表格批量导入课程](#page-timetables.mass-import) - [备份点](#page-admin.snapshots) - [概览](#page-migration.overview) - [与外部系统同步](#page-integrations.extsync) - [admin.french-formats](#page-admin.french-formats) ### 8.16 备份点 *Source: `help/zh-cn/admin/snapshots.md` · id: admin.snapshots · Audience: admin · Plan: premium · Feature: snapshots · Updated: 2026-05-15* > **Premium** > _Premium_ **备份点**(*snapshot*)是Omniscol账户的一份快照。只有在Omniscol团队按学校合同为账户开通备份点配额后,才能使用该功能。配额由您与Omniscol根据学校的需求共同确定(手动备份、自动备份、期望的保留期限),并可应要求调整。管理员无法在此面板中直接设置配额。 #### 打开备份点 在 **管理** 模块中,打开 **导入/导出**,然后点击 **备份点**。面板会列出现有的备份点、已使用的配额,并在可用时显示内容的**摘要**:用户数量、学年、信息显示屏、事件、课表以及主要业务计数。 #### 可用操作 根据您的权限,您可以: - 点击 **创建** 创建备份点; - 点击 **下载** 将备份点导出为JSON; - 点击 **删除** 删除备份点; - 锁定备份点,防止其被删除; - 设置或修改到期日期; - 查看摘要,快速了解备份点包含的内容; - 点击 **恢复** 恢复备份点(全部或部分)。 备份点保存在带副本的存储中。每个备份点都可以导出为JSON,供您用自己的工具进行分析或比对。 #### 恢复 恢复需要再次确认。面板提供三种方式,按所选的数据类别生效: - **覆写数据**:所选数据将被替换为备份点中的状态。这是回退的方式; - **仅恢复已删除的数据**:在支持该方式时,Omniscol只写回当前缺失的内容,例如误删用户之后; - **恢复但不覆写**:在支持该方式时,Omniscol以副本形式恢复,便于对比或手动合并,而不替换当前状态,例如某份课表已经发生变化,而您不想覆盖备份点创建之后所做的修改。因此可能出现重复项。 恢复可以针对整个账户,也可以针对其中一部分,例如课表、事件、信息显示屏、缺勤、用户、科目、学年或配置。 #### 自动备份 点击 **自动化** 按钮,可以设置自动创建备份点。频率取决于为账户选定的配置:每天、每周、深夜执行,由您根据学校的情况决定策略。 到期日期和锁定共同决定保留期限: - 已到期的备份点可被自动删除,已锁定的除外; - 已锁定的备份点不会被手动删除,也不会被自动清理; - 当自动备份需要写入一个已满的配额时,Omniscol会删除最早的、未锁定的自动备份点来腾出空间。如果没有任何备份点可以删除(全部已锁定),则新的备份会失败。 这种机制形成的备份历史类似苹果环境中的Time Machine:可用于回退、找回误删的数据,或恢复一份副本用于对比。备份点数量受您与Omniscol约定的配额限制,配额可应要求调整。 #### 启用前需要确认的事项 在启用或扩充该选项之前,请与Omniscol确认: - 备份点的配额,以及为手动备份预留的余量; - 您打算设置的自动备份频率; - 期望的保留时长; - 部分恢复所涉及的数据类别; - 外部核查所需的导出格式。 每个备份点都可以导出为JSON。 #### 操作步骤 — 在高风险操作之前创建备份点 1. 打开 **导入/导出**。 2. 点击 **备份点**。 3. 点击 **创建**。 4. 确认新的备份点已出现在列表中。 5. 然后再开始计划中的导入、调整或配置修改。如果出现严重问题,您可以及时回退。 #### 另请参阅 - [导入与导出](#page-admin.import-export) - [活动日志](#page-admin.logs) ### 8.17 活动日志 *Source: `help/zh-cn/admin/logs.md` · id: admin.logs · Audience: admin · Feature: logs · Updated: 2026-05-15* > **Premium** 在 **管理** 模块中,当账户启用日志选项时,**活动日志** 界面会显示该账户可用的日志条目。日志的保留时长由您与Omniscol团队根据学校合同约定,也可按需调整。该面板用于查看和导出日志流中已有的记录。 #### 记录的内容 日志记录的是修改账户的操作,而不是每一次查看。 - **每一次数据修改**(用户详情、课表、设置等)——无论是创建、更新还是删除——都会生成一条记录,包含操作人、操作内容和时间戳。 - **登录**——每次登录尝试都会记录所用的账号。 - **密码相关操作**——设置、修改、删除或重置密码都会被记录:只记录操作及其操作人,绝不记录密码本身。 - **导出**——账户的JSON导出会被记录。 单纯的查看(打开界面、列出数据)不会被记录,少数敏感操作除外。因此,日志回答的是“谁在什么时候做了什么”,而不是“谁查看了什么”。 #### 界面显示的内容 每一行可能包含: - 时间戳; - 执行的操作; - 已知时解析出的路由; - 记录的参数和附加信息; - HTTP方法; - 相关的网页URL; - 相关用户。 具体内容取决于Omniscol记录了什么:界面反映的是账户日志流中已有的记录。 #### 搜索与导出 当列表中的条目足够多时,可以使用本地搜索来筛选表格。**时间戳** 按钮会打开这些行的可导出视图。 #### 日志的范围 - 每一行给出执行的操作、路由、参数和相关用户;详细程度以Omniscol实际记录的内容为准。 - 保留时长取决于账户启用的选项以及日志的定期清理。 - 日志可在本界面查看和导出;Omniscol不会自动将其转发到外部监控工具。 若要精确还原账户在某一时间点的状态,请将日志与备份点结合使用。 #### 合同中需要核实的事项 保留时长、审计义务和所需的导出,以合同和可按需提供的安全文件为准。本页不能替代这些文件。 #### 另请参阅 - [备份点](#page-admin.snapshots) - [用户与角色](#page-admin.users-and-roles) --- ## 9. 集成 ### 9.1 集成概览 *Source: `help/zh-cn/integrations/overview.md` · id: integrations.overview · Audience: admin · Updated: 2026-06-13* Omniscol可以通过多种方式接入您的信息系统,您可以按需选择。 如需了解经常与Omniscol对接的第三方工具和合作伙伴示例,另请参见 [integrations.partners](#page-integrations.partners)。 #### 概览表 | 方式 | 用途 | 数据流向 | | --- | --- | --- | | [iCal](#page-integrations.ical) | 让教师、学生在个人日历中查看自己的课表 | Omniscol → 日历 | | [分享链接](#page-glossary.share-link) | 以只读方式发布课表,或按场景开放定向录入 | Omniscol → 公开网页 | | [Iframe](#page-portal.share-links) | 将课表嵌入与Omniscol**同一域名**下的页面;在外部网站上会被阻止(出于安全考虑) | Omniscol → 同一域名 | | [Omniscol API](#page-integrations.api-tokens) | 系统之间的集成,权限与选项取决于账户 | 取决于配置 | | [MCP](#page-integrations.mcp) | 将兼容MCP的AI智能体连接到Omniscol | AI智能体 ↔ Omniscol | | [OAuth2 / OIDC(服务端)](#page-integrations.oauth-server) | 连接第三方服务:需注册客户端、用户授权,并使用限定范围的令牌(MCP和OneRoster的基础) | 服务 ↔ Omniscol | | [OIDC / SSO(登录)](#page-integrations.oauth2) | 通过身份提供方(Google Workspace、Microsoft Entra ID、通用OIDC)验证用户身份 | 取决于配置 | | [与外部系统同步](#page-integrations.extsync) | 连接器框架:Aurion、Auriga、Edusign,其他连接器按项目添加 | 双向 | | [信息显示屏](#page-panels.lobby-panel) | 在公共屏幕上显示课表 | Omniscol → 屏幕 | #### 选择合适的集成方式 - **向教师、学生发布课表**——订阅 [iCal](#page-integrations.ical)。 - **向家长或审计人员开放只读访问**—— [分享链接](#page-glossary.share-link)。 - **从您的ERP / 信息系统同步学生**——参见 [与外部系统同步](#page-integrations.extsync),其中列出了可用的连接器。如果列表中没有您的ERP, 请与Omniscol支持团队商定新增连接器。 - **单点登录**——[OIDC / SSO](#page-integrations.oauth2)。 - **外部AI助手**接入账户(需已启用该选项)—— 兼容的客户端使用[MCP](#page-integrations.mcp)。 - **在校内公共区域显示**—— [信息显示屏](#page-panels.lobby-panel)。 #### 安全最佳实践 - 在已启用**OIDC / SSO**时,用它来验证真实用户的身份。 - **API令牌**仅用于系统之间的集成,权限范围保持最小,并定期轮换。 - 为分享链接设置较短的**有效期**。 - 不要把API令牌放进公开的Git仓库。 #### 另请参阅 - [iCal](#page-integrations.ical) - [Omniscol API](#page-integrations.api-tokens) - [MCP](#page-integrations.mcp) - [OAuth2 / OIDC(服务端)](#page-integrations.oauth-server) - [OIDC / SSO(登录)](#page-integrations.oauth2) - [与外部系统同步](#page-integrations.extsync) - [integrations.partners](#page-integrations.partners) ### 9.2 Omniscol的工作原理——一套API,唯一数据源 *Source: `help/zh-cn/integrations/architecture.md` · id: integrations.architecture · Audience: admin · Plan: standard · Updated: 2026-07-12* 在集成Omniscol之前,有几点关于它构建方式的说明值得了解——它们解释了API为何如此完整、界面如何适应每位用户,以及一个需要牢记的隐私问题。 #### 一个应用,一套API Omniscol在您的浏览器中作为**单页Web应用**运行。每个界面、按钮和表格,都是通过调用Omniscol的**公开API**绘制出来的——这和您可以自行调用的是同一套API,文档见Omniscol的交互式API参考,即**开发者**页面([omniscol.com/fr/developers](https://www.omniscol.com/fr/developers))。您所集成的API背后并没有隐藏的“真实” API:界面使用什么,您就能得到什么。少数操作则相反——专为集成提供,但**应用本身并不使用**:例如**高级搜索和实体解析**接入点(供AI智能体通过 [MCP](#page-integrations.mcp) 使用),以及允许外部系统**向Omniscol写入数据**的接入点(例如让外部数据库保持同步的ETL)。 #### operationId——一个键,一个数据源 每个操作都是一个**方法加URL的组合**(例如 `GET /api/schedules/lessons/{datesrange}`),并带有一个稳定的标识符:它的**operationId**(此处为 `os_schedules_dates_get`)。这个名称是有结构的:先是 **`os`**(Omniscol),然后是**模块**(`schedules`),再是**操作**所针对的对象(`dates`——有时由多段以连字符连接而成),最后始终是**HTTP方法**(`get`、`post`、`put`、`delete`)。Omniscol在各处都使用这个唯一的键——在**开发者**页面中命名该操作,构建对应的 [MCP](#page-integrations.mcp) 工具,也在API自定义或本帮助中引用该操作。它只定义一次,让所有环节保持同步:文档、工具和界面不会出现分歧,因为它们读取的是同一份定义。 #### 界面随您的权限而变 **带有操作的图形元素**——按钮、选项卡、菜单项——只有在支撑它的操作对您**开放**时才会出现。这取决于您的角色和自定义角色(参见 [自定义角色](#page-admin.customroles)和 [用户与角色](#page-admin.users-and-roles)),以及您的套餐和选项(参见 [Omniscol的套餐与选项](#page-overview.plans-and-options))。修改其中任何一项,界面都会重新组合:相应的元素,甚至整个模块,会随之出现或消失。 同样的原则也适用于个人权限之外。IT部门可以通过**API自定义**停用某些操作,相应的界面元素随即消失(参见 [API自定义](#page-integrations.api-customization))。当某项数据由**外部同步**维护时也是如此:本地创建和修改可被停用,相应的控件将让位于同步(参见 [与外部系统同步](#page-integrations.extsync))。 因此,Omniscol **没有为学生或教师单独设置的门户**。只有一个应用;每个人看到的界面都与自己的权限同步——学生、教师、管理员和自定义角色持有者,得到的恰好是他们有权使用的操作,不多也不少。 #### 界面是便利,而不是锁 由于界面由您的权限驱动,人们容易把隐藏的按钮看作安全边界。其实不是。**每次调用都会在服务器上重新验证**您的身份和权限;无论界面显示什么,您无权执行的操作都会在服务器上被拒绝。界面是为了清晰和方便而调整的;真正的边界由服务器在每次请求时执行。 #### 令牌和分享链接,同一个模型 一个 [API令牌](#page-integrations.api-tokens)或分享链接,会被**限制在一组操作内**——也就是您在创建时授权的那些。服务器在每次调用时都会执行这一限制,与已登录的用户完全一样。分享链接、令牌和界面中的用户,是访问同一套受权限控制的API的三种方式——绝不是绕过它的后门。 #### 应对网络中断 由于每个界面都读取API,Omniscol还可以在您的浏览器中保留已收到的响应,让短暂的断网不会中断您的阅读。这个**本地副本**存放在浏览器的数据库(IndexedDB)中,与浏览器常规的页面缓存并存。它是一个**读取缓存**:如果网络中断,您仍能看到已经打开过的内容。它**不会**把您的修改排入队列,也不会重新执行——修改始终要经过服务器。 这个本地副本取决于您的**同意**。第一次在某个浏览器上使用时,Omniscol会询问您是否信任它;您接受后,才开始创建副本。之后,用户菜单中的 离线缓存 项可以随时启用或清除它——打勾表示已启用。 有两点需要了解: - **个人数据不在其中。**只保留成功的读取;服务器标记为不可存储的响应(会话和身份验证数据)绝不会被缓存,而对于*已*缓存的内容,软件会去掉人员的联系方式——电子邮箱、电话、出生日期、登录名、证件号、密码状态——并完全删除管理员账户。本地副本包含普通的工作数据,而不是实名通讯录。 - **在共享电脑上,请优先使用隐私浏览窗口。**退出登录不会清除这个本地副本(也不会清除浏览器的常规缓存);关闭隐私窗口时,两者都会被删除。对于任何不受您控制的电脑上的Web应用,这都是应有的谨慎。 #### 另请参阅 - [集成概览](#page-integrations.overview) - [API自定义](#page-integrations.api-customization) - [Omniscol API](#page-integrations.api-tokens) - [MCP——连接外部AI智能体](#page-integrations.mcp) ### 9.3 iCal——订阅与动态链接 *Source: `help/zh-cn/integrations/ical.md` · id: integrations.ical · Plan: standard · Updated: 2026-05-15* iCal(`.ics`)格式是各应用之间共享日历的标准。Omniscol可将每份课表 (个人、班级、教室、教师)生成**iCal订阅链接**,用户可将其粘贴到 Google Calendar、Apple Calendar、Outlook、Thunderbird 或任何支持标准日历的应用中。 #### 订阅链接与一次性导出 两种用法差别很大: - **订阅链接**(推荐)——指向Omniscol的HTTPS网址。客户端应用会定期访问它 (每小时或每天,取决于客户端设置),并持续更新用户的日历。 Omniscol中的课时一旦调整,用户无需任何操作即可在日历中看到变化。 - **一次性导出**——在某一时刻下载一份 `.ics` 文件。适合存档、通过邮件分享, 或导入不支持订阅的系统。但它是固定不变的:课表变化后,文件不会更新。 当最终使用的客户端是能刷新远程日历的现代应用 (Google Calendar、Apple Calendar、Outlook)时,请优先选择订阅链接。 #### 获取您的订阅链接 在支持分享的界面中,点击分享按钮, 会打开一个窗口,其中可能提供: - 一个或多个带签名的iCal订阅网址, - “复制网址”按钮, - 可扫描的二维码, - `.ics` 文件下载。 网址中包含保密令牌:请勿分享——任何获得该网址的人, 在链接到期或失效之前,都能看到链接范围内的课表。 #### 在哪里生成iCal 主要入口有: - **课表模块顶部**——分享按钮 可为所有显示的课表生成iCal,包括把它们合并到同一个订阅中的合并iCal, 以及各份课表单独的iCal。这些链接的范围限定在当前显示的学年内。 - **每份显示的课表上**——将鼠标悬停在课表标题栏上,即可为该份课表单独分享。 链接涵盖相应的学年。 - **教师详情中**——在管理中,教师详情里的 分享按钮可生成该教师的个人iCal, 只要链接、所属账户和所选有效期允许,它就会长期有效。 - **预览日历课表时**——在课表管理中,预览里的 分享按钮可为当前显示的内容生成iCal, 即使该课表尚未发布也可以。 每次生成时,用户都可以设置失效日期。该日期已编码在网址的令牌中: 事后无法修改。若要更改有效期,需要重新生成链接。 与其他分享链接一样,iCal也与生成它的账户绑定: 所属账户修改密码、被停用或被删除,相关链接都会失效。 #### 班级或教室的公开链接 管理员可以为**班级**或**教室**生成订阅链接(例如分享给家长或外部部门)。 这些链接带有签名和有效期。 另请参见[通过公开链接分享课表](#page-schedules.share-link),其中介绍了全部分享方式 (iCal、自适应网页、通过API获取JSON)。 #### 客户端设置 ##### Google Calendar 1. 在Google Calendar左侧,点击**其他日历**旁的 **+** > **通过网址添加**。 2. 粘贴Omniscol订阅网址。 3. 日历会以一个提示性名称和默认颜色显示,二者都可修改。 Google大约每8至24小时刷新一次订阅。 紧急的修改需要预留一段延迟。 ##### Apple Calendar(macOS、iOS) 1. **文件 > 新建日历订阅**。 2. 粘贴Omniscol网址。 Omniscol的iCal链接设置为每半小时自动刷新一次。 ##### Outlook(Microsoft 365) 1. **添加日历 > 从Internet订阅**。 2. 粘贴Omniscol网址。 Outlook的更新频率因版本而异;旧版桌面客户端需要预留延迟。 #### 限制 - 在客户端所做的修改(例如在Google Calendar中移动事件) 不会同步回Omniscol——订阅是只读的。 - 用户必须拥有有效的Omniscol账户,才能生成个人网址。 - 链接的有效期写在生成的网址中:事后无法延长; 如有需要,请重新生成链接。 - 课表以外的事件,仅在分享或iCal筛选条件包含它们时才会出现。 #### 操作步骤 — 从Google Calendar订阅您的课表 1. **iCal订阅**可将您的Omniscol课表与个人日历 (Google Calendar、Apple Calendar、Outlook)同步。 更新是持续自动进行的:课表每次变化时,无需重新复制粘贴。 2. **在您的Omniscol界面中**(学生、教师或共享视图), 在按钮可用时点击分享。 会打开一个窗口,显示为您的范围生成的网址。 3. **复制订阅网址**(“复制”按钮)。请勿分享: 任何获得该网址的人,在链接到期或失效之前,都能看到链接包含的范围。 4. **在Google Calendar中**:左侧面板,**其他日历 → + → 通过网址添加**,粘贴后确认。日历会以名称和颜色显示(均可修改)。 **在Apple Calendar中**:`文件 → 新建日历订阅`,粘贴。 **在Outlook M365中**:`添加日历 → 从 Internet 订阅`,粘贴。 5. **重要**:订阅是**只读**的。您在个人日历中所做的修改 不会同步回Omniscol。Omniscol中的修改会在客户端下次同步时 出现在您的日历中。 #### 另请参阅 - [iCal(日历导出)](#page-glossary.ical) - [通过公开链接分享课表](#page-schedules.share-link) - [集成概览](#page-integrations.overview) ### 9.4 Omniscol API——身份验证令牌 *Source: `help/zh-cn/integrations/api-tokens.md` · id: integrations.api-tokens · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ **Omniscol API**是一套以OpenAPI文档化的REST API,用于系统间集成:外部仪表盘、定制显示、ERP/信息系统同步,或通过MCP接入的AI智能体。 可通过界面管理的API令牌,仅在提供此集成的账户中可用。派生令牌只能访问生成时所选的API接入点,请勿默认它覆盖整个API。 #### 密钥与令牌:两个不同的对象 Omniscol区分两个不可混淆的对象。 **密钥**是由Omniscol持久保存的对象,包含: - 一个随机生成的简短**标识符**,公开可见:列表中显示的就是它,它也包含在每个令牌中,用于指明需要验证的密钥; - 一个描述性的**名称**,可随时修改; - 一个可选的**到期日期**,可随时修改; - 一个由服务器生成的随机长**密文**,用作加密签名密钥。 标识符、名称和到期日期属于管理信息:标识符只是公开引用,并非机密。**密文**才是唯一的签名材料:它在创建密钥时随机生成,只保存在服务器端,不可修改,并且**从不显示、从不返回**——创建时不会,密钥列表中也不会。即使它泄露,也不足以伪造令牌:签名还会结合**账户专属的盐值**和**服务器密文**,这两者同样不会离开Omniscol。 **令牌**是一个独立的**JWT**(JSON Web Token),用密钥的密文签名。您把它提供给外部系统。其签名内容包含所属账户、授权接入点列表、所派生的密钥,以及令牌自身的到期日期。 换句话说:**密钥负责签名,令牌被签名。**同一个密钥可以签发多个令牌——它们都能用同一个密文验证,因此密钥一旦消失,这些令牌会一并失效。 Omniscol不保存令牌:它生成令牌,只显示一次,之后每次调用时用密钥的密文重新计算签名(HMAC SHA-256)来验证。没有这个密文,令牌所携带的任何授权都无法被篡改。 #### 创建令牌 在Premium账户中,分享 界面位于 管理 → 导入 / 导出。创建分两步:先创建**密钥**,再用这个密钥**生成令牌**。 1. **创建密钥**——填写一个清晰的名称;如果访问是临时的,再填写到期日期。名称和到期日期之后仍可修改,签名密文则不可修改。 2. **生成令牌**——选择密钥,勾选授权的接入点,按需为令牌设置单独的到期日期,然后生成JWT。 生成时,Omniscol只显示令牌**一次**。请立即把它复制到密钥管理器中:之后不会再次显示。令牌的到期日期写在已签名的内容里,事后无法修改。若要更改该日期,请生成新令牌。 因此有两级相互独立的到期设置: - **密钥到期**——可在密钥列表中修改;到期后,由该密钥派生的**所有**令牌都会被拒绝(调用返回401); - **令牌到期**——在生成时确定,写入JWT,之后不可修改。 #### 授权接入点 令牌**只能访问生成时勾选的接入点**:请勿默认它覆盖整个API。授权列表随令牌一起传递,并在每次调用时验证;调用未授权的接入点会被拒绝(401)。 除了单个接入点,选择列表还提供**按模块的快捷选项**: - 单独勾选某个模块的条目,授权该模块的**所有**接入点; - 按操作区分的选项——**读取**、**修改**、**创建**、**删除**——把该模块限定为某一类调用。 例如勾选“**课表** [读取]”,即可授予全部课表读取权限而不开放任何写入,无需逐个勾选接入点。请遵循最小授权原则:只授予集成确实需要的模块和操作。 #### 使用令牌 向API发送令牌,常用两种方式: - **HTTP请求头**:`Authorization: Bearer <令牌>`(推荐)。 - **查询字符串**:`?auth=<令牌>`(便于调试,但会出现在HTTP日志中——生产环境请避免使用)。 `curl` 示例,请替换为OpenAPI中的真实接入点: ```bash curl -H "Authorization: Bearer $TOKEN" \ https://your-school.omniscol.com/api// ``` #### OpenAPI文档 导入 / 导出界面提供一个**OpenAPI 3.1**链接,可在Swagger Editor中打开该账户可用的规范。您可以在其中找到: - 已开放的API接入点列表, - 交换数据的结构, - 方法和参数, - 预期的响应。 规范也由您的账户直接提供,无需身份验证: - `/api/guest/openapi.json`——JSON格式的规范; - `/api/guest/openapi.yaml`(或 `/api/guest/openapi?yaml=true`)——相同内容的YAML格式; - `/api/guest/school_schema.json`——账户数据的JSON结构。 #### 为您的AI助手提供完整帮助 门户网站还把Omniscol的全部帮助发布为一个文本文件,可直接作为AI助手(Claude项目、自定义GPT等)的知识库: - [omniscol.com/fr/llms-full.txt](https://www.omniscol.com/fr/llms-full.txt)——Markdown格式的完整指南,提供帮助的每种语言版本(`/en/llms-full.txt`、`/de/llms-full.txt` 等); - [omniscol.com/llms.txt](https://www.omniscol.com/llms.txt)——符合 `llms.txt` 标准的索引,AI引擎会自动发现。 #### 撤销访问 撤销在**密钥**层面进行,而不是针对单个令牌。 界面列出用于生成令牌的**密钥**。**删除密钥**会清除Omniscol端的签名密文:此后,任何由该密文派生的签名都无法再通过验证,所有出示该密钥所签发令牌的调用都会返回**401**。令牌失效的原因是密文不存在,而不是因为有一份撤销名单。 对信息化部门而言,有两点需要注意: - **不支持逐个令牌撤销。**Omniscol不保存已签发的JWT,无法单独停用其中某一个:已生成的令牌在自身到期之前一直有效,或者直到其密钥被删除或到期。 - **修改密钥的到期日期**会立即影响其所有令牌:把该日期提前,会切断该密钥所有令牌的访问。 最佳实践:一旦怀疑某个密钥泄露,请立即删除,然后重新创建一个名称清晰的替代密钥。 ##### 每个目标系统、每种用途一个密钥 由于撤销以密钥为单位,请**为每个集成单独使用一个密钥**(一个外部软件对应一个密钥)。密钥的密文只为它自己的令牌签名:删除该密钥只会使相应集成的访问失效,不影响其他集成。 反之,如果多个系统共用同一个密钥,任何撤销都会很突兀:删除被泄露的密钥,会一次性切断所有使用它的系统。 #### 适用的集成 API通常用于: - 定制的**信息显示系统**(超出Omniscol原生信息显示屏的范围;参见 [显示屏的自定义](#page-panels.customization)), - 整合Omniscol与其他数据源的**外部仪表盘**, - 与ERP或业务信息系统的**连接器或同步**, - 通过MCP服务器使用Omniscol的**兼容MCP的AI智能体**;参见 [MCP——连接外部AI智能体](#page-integrations.mcp)。 如果需要向**已识别的第三方服务**提供委托访问(限定范围的令牌、用户授权,停用客户端即可撤销),请优先使用Omniscol的OAuth2服务器:参见 [OAuth2 / OIDC(提供方)](#page-integrations.oauth-server)。 #### 操作步骤 — 生成API令牌 1. **身份验证令牌**让外部系统(仪表盘、信息显示、通过MCP接入的AI智能体)可以调用您所选的API接入点。 2. **前往 管理 → 导入 / 导出**,然后用 分享 打开分享界面。您会看到现有的密钥、它们的名称以及可能设置的到期日期。 3. 如有需要,**创建密钥**。填写清晰的名称(`财务仪表盘`、`大厅信息显示屏`、`Claude桌面端AI智能体`);如果集成是临时的,再设置到期日期。之后仍可修改该密钥的到期日期。 4. **选择密钥**,然后勾选令牌可以调用的API接入点,列表应尽量精简。如果访问需要设定期限,还要选择令牌的到期日期。 5. **生成令牌**,然后立即复制显示的JWT。它不会再次显示,其到期日期也无法修改。之后请在HTTP请求头 `Authorization: Bearer <令牌>` 中使用它。 6. **如需撤销访问**,请删除对应的密钥。由该密钥派生的令牌随即失效。 #### 另请参阅 - [集成概览](#page-integrations.overview) - [MCP——连接外部AI智能体](#page-integrations.mcp) - [高级查询](#page-integrations.advanced-queries) - [OAuth2 / OIDC(提供方)](#page-integrations.oauth-server) - [显示屏的自定义](#page-panels.customization) ### 9.5 OAuth2 / OIDC——将服务连接到Omniscol *Source: `help/zh-cn/integrations/oauth-server.md` · id: integrations.oauth-server · Audience: admin · Plan: premium · Updated: 2026-06-29* > **Premium** > _Premium_ 本页面向**信息系统负责部门**。它介绍Omniscol作为 **OAuth2 / OpenID Connect授权服务器**的角色:第三方服务如何注册为**客户端**,用户如何**授权**其访问,以及服务如何获得限定在已授予 **scope** 内的**令牌**。 #### Omniscol作为OAuth2服务器的作用 外部服务——AI智能体、连接器、仪表盘——会成为您账户中声明的**客户端**;学校的某位用户通过授权页面**批准**其访问;服务随后获得一个有效期较短的**访问令牌**,其范围受限于已授予的 **scope** 和该用户的权限。 该机制不同于[OIDC / SSO](#page-integrations.oauth2)中介绍的**用户SSO**:在后者中,Omniscol是您的身份提供方的**客户端**,用于让您的用户登录。而在这里,Omniscol位于**服务器**一侧:由各种服务来连接它。 Omniscol有两项集成使用该服务器: - **MCP**——AI智能体的标准认证经由该OAuth2服务器完成(参见[MCP——连接外部AI智能体](#page-integrations.mcp)); - **OneRoster**——OneRoster生产方使用该服务器签发的机器对机器OAuth2令牌进行认证(参见[OneRoster](#page-integrations.oneroster))。 任何其他符合OAuth2 / OIDC的服务都可以用同样的方式连接。 #### 发现机制与协议接口 Omniscol在标准的 `.well-known` 地址发布其**发现元数据**,这些地址位于您账户域名的根路径下(例如 `https://your-school.omniscol.com`)。符合规范的客户端能自行找到所有接口,无需手动配置: - `/.well-known/oauth-authorization-server`——授权服务器元数据(RFC 8414); - `/.well-known/openid-configuration`——OpenID Connect元数据(内容与上一项相同); - `/.well-known/jwks.json`——用于验证的公钥(JWKS),可用来校验 `id_token` 的签名; - `/.well-known/oauth-protected-resource`——受保护资源元数据(RFC 9728)。 这些元数据会公布协议接口: - `/oauth/authorize`——授权请求(先登录,再进入授权页面); - `/oauth/token`——用授权码换取令牌,以及刷新令牌; - `/oauth/register`——**动态客户端注册**(RFC 7591); - `/oidc/userinfo`——已登录用户的信息(OIDC); - `/oauth/revoke`——撤销令牌(RFC 7009)。 这些协议接口是**公开的**:不限于Premium账户,也无需手动开放。只有下文介绍的**客户端管理界面**属于Premium。 #### 授权流程 Omniscol支持三种OAuth2流程: - **带PKCE的授权码模式**——服务**代表用户**操作时的默认流程。服务将用户重定向到 `/oauth/authorize`;用户登录并授权后,Omniscol返回一个**授权码**(有效期5分钟),服务再到 `/oauth/token` 兑换。采用的PKCE方法为 **S256**,唯一接受的 `response_type` 是 `code`。 - **刷新(`refresh_token`)**——用于延长委托访问,无需再次经过授权。 - **Client credentials**——**机器对机器**流程,没有用户参与,主要供 **OneRoster** 的使用方采用。客户端直接认证并获得访问令牌。 兑换时,服务器会签发一个**访问令牌**(`Bearer`,有效期**1小时**);对于用户流程,还会签发一个**刷新令牌**(有效期**30天**)。当请求了 `openid` scope时,还会签发已签名的OIDC **`id_token`**,其签名可通过 `/.well-known/jwks.json` 验证。`client_credentials` 流程只签发访问令牌,没有刷新令牌,也没有 `id_token`。 访问令牌随后放在HTTP请求头 `Authorization: Bearer <令牌>` 中提交。每次调用时,Omniscol都会验证其签名,检查客户端是否仍处于**活跃**状态、用户是否仍然存在并具备所需角色,以及令牌的 **scope** 是否覆盖所调用的接口——否则调用会被拒绝。 #### scope与授权 您可以在客户端上管理的scope有: - **`read:basic`**——读取课表、仪表盘和各类查询(主页、课表、仪表盘、课表管理模块); - **`read:user`**——读取用户列表; - **`write:data`**——写入上述查询类模块; - **`admin`**——管理访问(管理、缺勤管理、课表管理模块)。 服务器还支持OIDC scope(`openid`、`email`、`profile`)以及只读的 **OneRoster** scope(前缀为 `imsglobal.org`)。后者属于**特权** scope:客户端**不能**通过动态注册为自己授予;它们必须由管理员在该客户端上预置。 实际授予的scope是客户端所请求的与其已注册的**交集**:客户端获得的权限不会超出其已注册的范围。在用户流程中,**授权页面**(`/oauth/consent`)会显示请求方服务的**名称**和**徽标**,以及所请求scope的**易读列表**,并提供**接受**和**拒绝**按钮。批准后会签发授权码,并将用户送回服务;拒绝则带着 `access_denied` 错误将其送回。 #### 动态客户端注册 `/oauth/register` 接口实现了**动态注册**(Dynamic Client Registration,RFC 7591):符合规范的服务可以**自行声明**为客户端,无需事先人工干预。这使MCP智能体仅凭服务器URL就能完成自身配置。 动态注册**不能**为自己授予特权scope(OneRoster scope):这些scope会被静默剔除,如果没有剩下任何有效scope,则默认授予 `read:basic`。特权scope仍只能由管理员预置。 #### OAuth2客户端管理界面 在 **Premium**账户中,您可以在**管理 → 导入/导出**的 **OAuth2** 部分,通过按钮OAuth2管理客户端。进入前会先要求输入**管理员密码**——打开界面前的一道额外确认。 界面列出已注册的客户端,并显示每个客户端的**状态**(活跃 / 停用)、**名称**、**scope**、**联系人**和 **URI**(网站、徽标、重定向URI)。您可以: - **注册客户端**——填写名称、可选的 `software_id`、scope、联系人、网站、徽标和重定向URI。创建时,Omniscol会**仅显示一次** `client_id` 和 `client_secret`。 - **修改**客户端——只能修改安全的字段:名称、scope、联系人、网站和徽标。重定向URI、`software_id` 和密钥不能在此修改。 - **启用或停用**客户端——客户端被停用后,其令牌在下一次调用时即被拒绝。 - **删除**客户端——删除是**永久性的**。 ##### 客户端密钥 `client_secret` 在注册时**只显示一次**。Omniscol只保存该密钥的**指纹**,从不保存明文密钥:之后**无法**再次显示或找回。请立即将其复制到密钥管理工具中。 `client_id` 则是**确定性**的:由账户名称、客户端名称以及其技术元数据的指纹生成。因此,两次完全相同的注册会得到同一个标识。 ##### 更新密钥(轮换) 密钥**轮换**是支持的:它会签发新密钥,只保存新密钥的指纹,并且**仅返回一次**新密钥。轮换通过动态注册的管理接口(`/oauth/register//rotation`)进行,需要出示客户端动态注册时交给它的**注册令牌**。因此它**不是**从上述管理界面触发的,该界面不处理此令牌。 #### OAuth2还是API密钥:如何选择 Omniscol提供两种机器访问机制,信任模型各不相同: - **OAuth2**(本页)——**已注册的第三方**在用户**授权**后,获得一个有效期**较短**(1小时)、限定于已授予scope、可**刷新**、可**撤销**(通过停用客户端)的令牌。`client_credentials` 流程还支持没有用户参与的机器对机器场景。它适用于已识别的第三方服务、MCP和OneRoster。 - **API密钥**(参见[Omniscol API](#page-integrations.api-tokens))——由服务器签名的**独立令牌**,内含一份被授权的**接口列表**,由您自己交给外部系统:没有已注册的第三方,没有授权页面,也没有刷新。这相当于管理员把自己的权限委托给他所掌控的系统。 总之:当您亲自把访问权限交给自己控制的系统时,适合使用 **API密钥**;当已识别的第三方服务需要获得受限于scope、可撤销的委托访问,或协议本身要求时(MCP、OneRoster),适合使用 **OAuth2**。 #### 操作步骤 — 注册OAuth2客户端 1. **打开OAuth2界面。**在**管理 → 导入/导出**的OAuth2部分,点击OAuth2,然后输入管理员密码。 2. **注册客户端。**填写名称、scope(`read:basic`、`read:user`、`write:data`、`admin`)、重定向URI,必要时填写联系人、网站和徽标。OneRoster scope不能在此通过动态注册授予,需要由管理员预置。 3. **复制显示的 `client_id` 和 `client_secret`。**密钥**只会出现一次**:请将其保存在密钥管理工具中。 4. **在服务端**,用这些凭据和服务器URL配置客户端;符合规范的客户端会通过 `/.well-known/` 自行发现各接口。 5. **如需切断某个访问**,回到该界面,**停用**或**删除**该客户端。 #### 另请参阅 - [MCP——连接外部AI智能体](#page-integrations.mcp) - [Omniscol API](#page-integrations.api-tokens) - [OneRoster](#page-integrations.oneroster) - [OIDC / SSO](#page-integrations.oauth2) - [集成概览](#page-integrations.overview) ### 9.6 API自定义:端点覆盖与Webhook *Source: `help/zh-cn/integrations/api-customization.md` · id: integrations.api-customization · Audience: admin · Plan: premium · Updated: 2026-06-27* > **Premium** > _Premium_ **API自定义**是面向**IT部门**的技术界面。 您可以通过**三种方式**调整Omniscol API在您账户中的行为: - **通用配置**(通用HTTP头); - **端点覆盖**——将网页应用重定向到另一个URL,或停用某个端点; - **Webhook**——Omniscol在某项操作发生时发往您系统的出站调用。 #### 在哪里找到 管理模块,导入/导出界面, **API自定义**部分,**API**按钮。 该界面**仅限Premium账户**使用,并受**加强身份验证**保护:打开窗口前, Omniscol会再次要求输入管理员的密码。由于此界面上的任何操作都会影响您集成的技术约定, 因此设置工作需要与Omniscol团队配合完成。 #### 通用配置 您可以在此定义应用于**所有Webhook**的**HTTP头**(格式为 `键1:值1;键2:值2`)。 这里最适合放置发往您自己服务器的**身份验证令牌**(例如您的服务器要求的 `Authorization: Bearer …`)。对于**覆盖**,身份验证则放在该端点自己的HTTP头中 (见下文)。 #### 端点覆盖 **覆盖**会重新定义Omniscol API的某个端点,使**网页应用**改为调用**另一个URL**。 共有三种用法,从功能最强到最简单。 ##### 从您的信息系统实时提供数据 这是功能最强的用法。您将某个**读取**端点重定向到一个**外部URL**——通常是对接学校**内部信息系统**的 **ETL**。网页应用随后会**实时**从该系统获取数据,而不是使用Omniscol保存的本地副本。 具体来说:当重定向URL是**绝对外部地址**时,网页应用会直接调用它, 不再经过Omniscol的服务器,并**原样使用返回的响应**——就像它来自Omniscol一样。 唯一的要求是您的系统按 **Omniscol对该端点期望的格式**响应(相同的JSON结构): 中间没有任何转码。对于该端点,Omniscol的本地副本不再被查询;显示的是您系统中的实时数据。 示例:学校的**科目目录**从您的信息系统实时提供, 这样学校一侧的任何更新都会立即在Omniscol中可见,无需重新导入。 此处发往您系统的身份验证放在**该端点自己的HTTP头**中(例如 `Authorization: Bearer …`),在覆盖所在行中填写。HTTP **方法**也可以按端点指定。 将应用自身的某个端点重新接到实时外部数据源,既功能强大,要求也高: 请与您的IT部门一起操作,并与Omniscol团队配合。 ##### 插入您自己的服务器或代理 您也可以让调用经过**您自己的服务器**或**代理**——例如为了允许跨源资源共享(CORS), 或在网页应用与Omniscol之间加入自建逻辑。 ##### 停用端点 不给端点设置**任何重定向URL**(方法为 `null`),即可**停用**该端点。 请评估其对界面的影响。Omniscol是一个**单页网页应用**(SPA), 界面元素由**可用的端点**驱动:只有当按钮、标签页和菜单所依赖的端点存在时,它们才会显示。 因此,停用端点会让依赖它的界面元素在下次显示时**动态消失**——如果您停用了某个模块的所有端点, **整个模块**就会从导航中消失。这些元素是被移除,而不只是被隐藏, 整个过程**无需对代码做任何改动**:只需修改配置并重新加载应用。 表格按端点列出:其**键**(操作的内部代码)、**原始URL**、HTTP **方法**、 重定向的**新URL**以及专用的 **HTTP头**。搜索框可帮助您找到要覆盖的端点。 #### Webhook(出站调用) **Webhook** 让Omniscol在某项操作成功**之后**,**向您的URL发送一个HTTP请求**。 通过它可以**让外部系统实时获知变化**——信息显示屏、数字工作空间、人力资源系统、自建同步程序等。 Webhook有两种挂接方式: - 挂接到某个**具体端点**(操作的键); - 挂接到某个**分组事件**,一次覆盖一类操作。共有三个分组事件: - **课表变更**——任何影响**当前生效课表**的变更,包括副作用: 保存课表、创建、移动或删除课时、发布课表、 只要涉及日期的教师或班级缺勤,以及对**已发布**课表的结构性移除(教室、科目等)—— 移除某个科目会删除使用该科目的课时,这本身就是一次变更。 仅限于未发布草稿的编辑不会触发它; - **教师变更**(新增、更新或删除); - **科目变更**(自定义科目)。 对于每个Webhook,您需要填写**回调URL**、HTTP **方法**、 **“附带数据”**复选框(是否附上原始请求的正文?)以及专用的 **HTTP头**。 ##### 您的服务器会收到什么 调用以 `application/json` 发送,除您的HTTP头外还包含: - 启用“附带数据”选项时,**原始请求的正文**; - Omniscol的**元数据**块:被调用的URL、端点代码、方法、参数、 用户的身份验证令牌、学校标识以及Webhook本身的配置; - 用于追踪的HTTP头:`X-OS-original-query`、`X-OS-original-endpoint`、 `X-OS-auth` 和 `X-School`。 对于**课表变更**事件,当启用“附带数据”时,调用还会包含一份**课时差异** (新增、修改、删除的课时)——便于只同步发生变化的部分。 ##### 行为 Webhook在用户的操作成功**之后**于**后台**发出:它们不会拖慢界面, 即使您的服务器出现故障也**不会阻塞界面**。未能成功的出站调用会被**记入日志**, 不会中断Omniscol中的工作。每次调用的超时时间很短(几秒): 您的服务器应当**快速确认收到**,其余处理在自己一侧完成。 #### 须知 - Omniscol的API只开放了操作的一个**子集**;覆盖或Webhook只适用于实际开放的端点。 列表和身份验证请参见 [Omniscol API](#page-integrations.api-tokens)。 - 对于与**软件系统**(ERP、人力资源系统、数字工作空间)的**集成**,专用的同步功能通常更合适—— 参见 [与外部系统同步](#page-integrations.extsync)。其内部使用的是同一套Webhook机制。 - 如需让**AI智能体**无需开发即可查阅您的数据,参见 [MCP——连接外部AI智能体](#page-integrations.mcp)。 #### 另请参阅 - [Omniscol API](#page-integrations.api-tokens) - [MCP——连接外部AI智能体](#page-integrations.mcp) - [与外部系统同步](#page-integrations.extsync) ### 9.7 完整数据模型:JSON实体、关系与本体 *Source: `help/zh-cn/integrations/data-model-full.md` · id: integrations.data-model-full · Audience: admin · Status: stable · Updated: 2026-06-18* 本页描述Omniscol账户的**完整数据模型**:实体、主要字段及其关系。它是概念性页面 [数据组织](#page-core-concepts.data-model) 的延伸:那一页解释*为什么*(学校基础数据 ↔ 课表、本地副本);这里的目标是*是什么*——一份可直接使用的结构图,尤其适合**把模型与外部基础数据对接**(管理软件、通讯录、信息系统)。 > **技术页面。**本参考面向集成以及与外部系统的匹配。日常使用Omniscol **并不需要它**:如果想从业务角度了解数据的组织方式,请参见 [数据组织](#page-core-concepts.data-model)。 学校的所有数据都以树状结构组织。下文描述的实体(用户、学年、课表、缺勤、事件等)对应这棵树的各个分支。规范性的参照是账户的**JSON结构(schema)**,它有两种查看方式: - **原始源文件**(原样的JSON schema),由账户通过`https://api.omniscol.com/api/guest/school_schema.json`提供; - **树状查看器**,见[omniscol.com/fr/datamodel](https://www.omniscol.com/fr/datamodel)(对应的API参考见[omniscol.com/fr/developers](https://www.omniscol.com/fr/developers))。 该schema精确描述了数据库中以JSON文档形式存储的物理结构。本页给出的是对它有条理且长期稳定的解读。 #### 学校文档:根节点 根文档汇集了学校的长期基础数据和所有排课安排。它的一级子树如下: | 根键 | 实体 | 作用 | | --- | --- | --- | | `config` | `SchoolConfig` | 账户设置(国家、选项、时区、外部同步) | | `subjects_custom` | `SubjectFull`字典 | 学校自定义科目 | | `families_custom` | `Family`字典 | 自定义科目类别 | | `users` | `User`字典 | 用户通讯录(所有角色) | | `school_years` | `SchoolYear`数组 | 学年和假期 | | `timetables` | `Timetable`字典 | 课表 | | `absences` | `Absence*`集合 | 缺勤(教师、班级、员工、学生) | | `staffing` | `Staffing` | 员工与监督模块 | | `panels` | `Panel`字典 | 信息显示屏 | | `events` | `Event`字典 | 日程类事件 | | `api`, `snapshots`, `jobs`, `translations`, `logo` | 其他 | 技术设置和历史记录 | 以“字典”形式表示的子树是JSON对象,其**键是稳定的标识符**(任何外部对接的枢纽——参见最后一节)。 ```mermaid erDiagram SCHOOL ||--|| CONFIG : "config" SCHOOL ||--o{ SUBJECT : "subjects_custom" SCHOOL ||--o{ FAMILY : "families_custom" SCHOOL ||--o{ USER : "users" SCHOOL ||--o{ SCHOOL_YEAR : "school_years" SCHOOL ||--o{ TIMETABLE : "timetables" SCHOOL ||--o| STAFFING : "staffing" SCHOOL ||--o{ ABSENCE : "absences" SCHOOL ||--o{ PANEL : "panels" SCHOOL ||--o{ EVENT : "events" SCHOOL { string _id "学校域名" string name "账户名称" string country "账户所在国家" string current_school_year "当前学年" } ``` #### 通用字段:`_extids`和`wishes` 有两个字段会出现在许多实体上。为避免在每个schema中重复,这里统一说明一次。 - **`_extids`**(`ExternalIds`)——该实体在外部系统中的标识符对照表,例如`{ "auriga": "12345" }`。出现在可同步的实体上(科目、类别、用户、校区、教室、资源、教师、班级、小组等)。它是**与外部基础数据匹配的锚点**(参见最后一节)。 - **`wishes`**——**时间限制**:可用时间、期望或应避开的时段、最大授课小时数、首选教室等。出现在大多数可排课的实体上:用户、课表中的教师、课程(班级科目)、小组、班级、教室、校区时间范围、监督网格。视范围不同,这些限制是全局的(学校层面),或仅属于某张课表。 #### 第一层——学校基础数据 学校基础数据包含与具体课表无关、对整个学校都成立的内容:科目目录、用户通讯录、学年日历。 ```mermaid erDiagram FAMILY ||--o{ SUBJECT : "family" SUBJECT ||--o{ SUBJECT : "parent" USER ||--o{ PLACEMENT : "按学年的placements" PLACEMENT ||--o{ PLACEMENT_GROUP : "groups" SCHOOL_YEAR ||--o{ HOLIDAY : "holidays" SUBJECT { string name string short "简称(用于显示)" string code string parent "上级科目" string family "类别" string color object _extids "外部标识符" } FAMILY { string name string code } USER { string login string first_name string middle_name "(视国家而定)" string last_name string idnumber "官方标识符" array roles "admin teacher staff student" string customrole "自定义角色" int servicehours "基准服务时间" bool external "外聘教师" object subjects "任教科目" object wishes "全局可用时间" object _extids } PLACEMENT { string class "所属班级" string date_start string date_end array groups "所属小组" } PLACEMENT_GROUP { string group "教学小组组合或虚拟小组" array weeks "周范围" } SCHOOL_YEAR { string name string date_start string date_end array altweeks "交替周" } HOLIDAY { string name string begin string end } ``` ##### 科目——`SubjectFull` / `Subject` / `Family` 自定义科目(`SubjectFull`)在基础科目(`Subject`:`name`、`short`、`code`、`type`、`_extids`)之上增加了`parent`、`family`和`color`。学校层面存在两种来源:该国家的**通用科目**(只读)和学校的**自定义科目**。功能细节参见 [科目管理](#page-admin.subjects)。 ##### 用户——`User`(包括教师) `User`是通讯录中**唯一的实体**:身份(姓、名、`idnumber`、联系方式)、身份验证(`login`)、`roles`、基准服务时间(字段`servicehours`)、全局可用时间(`wishes`字段)和`placements`。**教师**不是单独的实体:他是`roles`中含`teacher`的`User`(同一用户可以兼有多个角色)。`placements`字段(按学年索引)把**学生**在某一时期归入某个`class`和若干`groups`。详情参见 [教师管理](#page-admin.teachers)。 ##### 学年——`SchoolYear` / `Holiday` `SchoolYear`定义`date_start → date_end`、`holidays`列表和`altweeks`(交替周)。它是一个**时间框架**,而不是容器:课表在其中展开,但并不嵌套于其中。参见 [学年](#page-core-concepts.school-year)。 #### 第二层——课表 `Timetable`是一个自洽的排课单元。它拥有自己的教师、班级、小组和科目的本地副本——关于本地副本的原则,参见 [数据组织](#page-core-concepts.data-model)。 ```mermaid erDiagram TIMETABLE ||--|| TIMETABLE_CONFIG : "config" TIMETABLE ||--o{ TIMETABLE_SITE : "sites" TIMETABLE ||--o{ TIMETABLE_TEACHER : "teachers" TIMETABLE ||--o{ TIMETABLE_CLASS : "classes" TIMETABLE ||--o{ LESSON : "lessons(教学小组组合、多小组)" TIMETABLE_SITE ||--o{ TIMETABLE_CLASSROOM : "classrooms" TIMETABLE_SITE ||--o{ TIMETABLE_RESOURCE : "resources" TIMETABLE_CLASS ||--o{ TIMETABLE_CLASS_SUBJECT : "subjects" TIMETABLE_CLASS ||--o{ TIMETABLE_CLASS_GROUP : "groups" TIMETABLE_CLASS ||--o{ LESSON : "lessons" TIMETABLE_CLASS_GROUP ||--o{ TIMETABLE_CLASS_GROUP : "parent(层级)" TIMETABLE_CLASS_SUBJECT }o--|| SUBJECT : "来源(部分本地副本)" TIMETABLE_CLASS_SUBJECT }o--o{ TIMETABLE_TEACHER : "默认teachers" TIMETABLE_TEACHER }o--o| USER : "部分本地副本,通过标识符隐式关联" GROUPSET_ITEM }o--o{ TIMETABLE_CLASS_GROUP : "组成小组" TIMETABLE { bool active "是否发布?" array lessons "跨班级课时" } TIMETABLE_CONFIG { string type "week cycle calendar" int time_period "时段时长" int time_unit "时段细分" array weekdays "工作日" string displaymode "hours periods agenda" int cycle "周期长度" array dates "calendar模式的起止日期" object date_windows "生成时间窗口" } TIMETABLE_SITE { string name object distances "校区间距离" object hours "时间网格" } TIMETABLE_CLASSROOM { string name int capacity string specialisation "自由填写的专业类型" int maxclasses "同时容纳的班级数" string building string description "自由填写的描述" array tags "特点或设备标签" } TIMETABLE_RESOURCE { string name int number "可用数量" } TIMETABLE_TEACHER { string first_name string last_name string virtual_name "待聘岗位" array subjects "虚拟岗位的科目" string idnumber int servicehours "可按课表覆盖" string classroom "首选教室" } TIMETABLE_CLASS { string name string level string campus array sites "只考虑一个校区" int studentsnb "理论学生人数(用于计算合适的教室)" string classroom "默认教室" bool offgrid "不在网格内(calendar)" string videolink "所有课时的默认视频会议链接" string resourcelink "所有课时的默认资源链接(LMS)" } TIMETABLE_CLASS_SUBJECT { string code "继承自Subject" array incompatibilities "不兼容" number pweight "教学权重" array teachers "默认教师" number minutes "目标授课时长" string specialisation "所需教室" } TIMETABLE_CLASS_GROUP { string name string code bool free "自由组" string parent "上级小组" int studentsnb "理论学生人数(用于计算合适的教室)" } GROUPSET_ITEM { string name string code array groups "小组标识符" } ``` ##### 配置——`TimetableConfig` 决定性的字段是`type`:`week`(每周重复的周课表)、`cycle`(多日周期,参见`cycle`)或`calendar`(真实日期,参见`dates`)。`time_period`和`time_unit`定义网格的框架;`weekdays`是工作日;`date_windows`是自动生成时使用的约束时间窗口。 ##### 校区、教室、资源 `TimetableSite`(校区)包含它的`classrooms`(`TimetableClassroom`:`capacity`、`specialisation`、`maxclasses`、`building`)和`resources`(`TimetableResource`:`number` = 可用数量,系统保证不会超量预订)。`distances`描述校区之间的行程时间。参见[单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources)和 [专业教室类型](#page-core-concepts.classroom-specializations)。 ##### 课表中的教师——`TimetableTeacher` 这是`User`的部分扩充副本:只复制少数标识字段(`first_name`、`last_name`、`idnumber`),再加上排课专用字段(可覆盖的`servicehours`、首选`classroom`、按课表设置的`wishes`)。非空的`virtual_name`表示**虚拟教师**(待聘岗位,背后没有真实的`User`)。 ##### 班级、班级科目、小组 - **`TimetableClass`**:`name`、`level`、`campus`/`sites`、`studentsnb`,以及三个关键子树——`subjects`、`groups`、`lessons`。 - **`TimetableClassSubject`**:科目的本地副本(扩展自`Subject`),为排课做了扩充——`minutes`(目标授课时长)、`pweight`(教学权重)、`incompatibilities`、默认`teachers`、教室`specialisation`。为班级指定带**课时类型**的科目时,每种类型会创建一个独立条目。参见 [课程、课时、课时类型](#page-core-concepts.lessons-and-types)。 - **`TimetableClassGroup`**:班级的一个子集。`free=true`会取消它与班级其余部分的冲突检查([自由组](#page-core-concepts.free-groups));`parent`建立 [小组层级](#page-core-concepts.group-hierarchy)。 ##### 小组之间的规则——班内分组、对齐、教学小组组合 小组之间的关系由课表的`groups`子树承载,有三种形式: | Schema | 实体 | 含义 | 页面 | | --- | --- | --- | --- | | `TimetableGroupTimeset` | 班内分组 | **同一班级**内互斥、并行安排的小组(半班、选修课) | [班内分组](#page-core-concepts.class-divisions) | | `TimetableGroupSpaceset` | 对齐 | **不同班级**的小组在镜像时段共同上课 | [小组对齐](#page-core-concepts.alignments) | | `TimetableGroupGroupset` | 教学小组组合 | 汇集多个小组的元小组(`GroupsetItem`:`name`、`code`、`groups[]`) | [教学小组组合](#page-core-concepts.groups-of-groups) | 另见总览 [班级、小组、子小组](#page-core-concepts.classes-and-groups)。 #### 第三层——课时 **课时**(`Lesson`)是真正安排进课表的教学单元:时长、科目、小组、教师、教室、资源、位置和状态。它由某个班级科目(见第二层)生成,并**附属于某个班级**(`class.lessons`),**或直接附属于课表**(`timetable.lessons`)——后者用于教学小组组合和多小组课时,它们跨越多个班级。 ```mermaid erDiagram TIMETABLE_CLASS ||--o{ LESSON : "lessons(班级的课时)" TIMETABLE ||--o{ LESSON : "lessons(教学小组组合、多小组)" LESSON ||--o{ LESSON : "assoc · concat · weekalt(复杂课时)" LESSON }o--o| TIMETABLE_CLASS_GROUP : "group" LESSON }o--o{ TIMETABLE_TEACHER : "teachers" LESSON }o--o| TIMETABLE_CLASSROOM : "classroom" LESSON }o--o{ TIMETABLE_RESOURCE : "resources" LESSON ||--o{ MEMO : "memos" LESSON ||--|| POSITION : "position" LESSON { int duration "以时段数计" int duration_actual "实际分钟数" int duration_accounted "计费分钟数" string modality "in_person remote hybrid self_study" string subject "科目标识符" string group "小组标识符" array teachers "null表示强制无教师" string classroom "null表示强制无教室" string status "planned draft canceled done" string _id "课时的稳定标识" string _osrev "修订版本(乐观锁)" } MEMO { string comment string pub "评论的可见范围" string owner int tstp "时间戳" } POSITION { string day "日期、星期几或周期日序号" int period "时段在网格中的索引" string start "精确开始时间HH:MM(仅限网格外)" string end "精确结束时间HH:MM(仅限网格外)" bool fixed "已固定的课时(生成时不动)" } ``` ##### 课时的核心 课时带有排课字段——`duration`(以时段计)、`duration_actual` / `duration_accounted`(实际 / 计费分钟数)、`modality`、`subject`、`group`、`teachers`、`classroom`、`resources`——此外还有它的`position`、`status`、`memos`和标识(`_id`、`_osrev`)。把`teachers`或`classroom`设为`null`,会**明确强制**没有教师或没有教室。 ##### 复杂课时 一个课时可以**包含其他课时**: - `assoc`——**关联**课时:各小组一起轮换。 - `concat`——**连堂课**:严格连续。 - `weekalt`——**交替周**:每周一个课时变体。 这些机制涵盖了**复杂课时**——参见[复杂课时:交替周、连堂课、关联课时、协同教学](#page-core-concepts.complex-lessons)。 ##### 课时的位置 `position`是一个**对象**,把课时放到时间轴上。它包含以下字段: - **`position.day`**——课时所在的日期,**随课表模式而变**:周课表模式下是星期名称(`monday`…`sunday`),周期课表模式下是**周期日序号**(`"1"`、`"2"`…),日历课表模式下是`YYYY-MM-DD` **日期**。同一个字段随模式改变形式;它始终存在。 - **`position.period`**——课时所在**时段的索引**,对应时间网格。既没有`period`也没有`start`/`end`的课时,对应一个公共假日。 - **`position.start`** / **`position.end`**——精确的开始和结束时间(`HH:MM`),用于**网格外**课时,或日历课表模式中不对齐标准时段的课时。 - **`position.fixed`**——布尔值(默认为否):**已固定**的课时,**自动生成不会移动它**。 班级的课时存放在`class.lessons`中;`timetable.lessons`数组存放与教学小组组合相关的**跨班级**课时。 ##### 课时的标识 每个课时带有两个技术标识字段,**在Premium账户中可用**: - **`_id`**——**稳定**的标识符,在创建课时时分配,此后不可更改(由时间戳和内容指纹组合而成)。它是协同编辑以及随时间跟踪课时的外部工具所用的**课时键**。对于日历课表中的**重复出现项**(交替周、连堂、关联),每次出现的`_id`都**派生**自基础课时,基础课时仍可辨认。 - **`_osrev`**——**修订**令牌(乐观锁),每次修改都会递增(时间戳 + 修改序号),并且严格按字母顺序排列(因此很容易判断某个修订是否比另一个更新)。协同编辑借此**发现并合并并发修改**:客户端修订过期即表示有冲突,服务器会裁决或合并,而不是悄悄覆盖。 #### 缺勤 缺勤共用一个基础结构(`Absence`:`date_start`、`date_end`、`reason`、`hours`、`comment`、状态),再按对象分化。 ```mermaid erDiagram ABSENCE ||--o{ ABSENCE_TEACHER : "teachers" ABSENCE ||--o{ ABSENCE_CLASS : "classes" ABSENCE ||--o{ ABSENCE_STAFF : "staff" ABSENCE ||--o{ ABSENCE_STUDENT : "students" ABSENCE_TEACHER ||--o{ SUBSTITUTE : "substitutes" ABSENCE_TEACHER { string date_start string date_end string reason "翻译键或名称" array subjects "涉及的科目" array classes "涉及的班级" string status } SUBSTITUTE { string substitute "代课人姓名" string date_start "规则开始(日期)" string date_end "规则结束(日期)" array hours "涉及的时段(begin/end以分钟计,day)" array classes "涉及的班级" array subjects "涉及的科目" string comment "评论" } ABSENCE_STUDENT { string date_start string reason array subjects "排除的科目" string status } ``` `AbsenceTeacher`可以限定在某些`subjects`/`classes`上,并带有一个**代课规则数组**(`substitutes`,每条是一个`AbsenceTeacherSubstitute`:代课人、期间、时段、涉及的班级和科目)。状态因对象而异(例如班级使用`ok`/`aborted`)。参见术语表 [代课 / 替课](#page-glossary.substitution) 和 **缺勤管理** 模块。 #### 员工 这是一个独立模块(也可单独购买),用于监督和值守服务。 ```mermaid erDiagram STAFFING ||--o{ STAFFING_GRID : "grids" STAFFING ||--o{ STAFFING_ASSIGNMENT : "assignments" STAFFING ||--o{ STAFFING_STAFF_MEMBER : "staff" STAFFING ||--|| STAFFING_SCHEDULE : "schedule" STAFFING_ASSIGNMENT ||--o{ STAFFING_NEED_SPAN : "needs" STAFFING_GRID { array dates "活动时间范围" array days array periods "时段" } STAFFING_ASSIGNMENT { string name int req "最少监督人数" int ideal "期望人数" string site string priority "high normal low" array allowed_staff } STAFFING_NEED_SPAN { string day "星期几或日期" string begin "HH:MM" string end "HH:MM" int headcount "所需人数" } STAFFING_STAFF_MEMBER { string first_name string last_name string virtual_name "待聘岗位" string color } STAFFING_SCHEDULE { object dates "按日期的值班安排" } ``` `StaffingGrid`是模板(日期、时段);`assignments`描述岗位(`req`/`ideal`、`priority`,以及通过`StaffingNeedSpan`按时段细化的`needs`);`schedule`则按日期落实实际的值班安排。参见 人员调度 模块。 #### 事件 **`Event`** 是**叠加在网格之上**的日程条目:学校里发生的、**不属于常规课程**的事情——班级评议会、家长会、一整天的考试、校外活动、开放日。事件存放在`events`字典中(键为`event-`),属于Premium功能。 `Event`的字段(必填:`title`、`start`、`end`): - **`title`**——显示的标题。 - **`start`** / **`end`**——开始和结束,格式为`YYYYMMDDTHHmmSS`。 - **`rrule`**——可选的**重复**规则。 - **`attendees`**——参与者:用户、班级、小组、自由填写的名称(`custom`),或全校(`everybody`)/ 任何志愿者(`anyone`)。 - **`location`**——地点:课表中的教室或自由填写的名称。 - **`resources`**——为该事件预订的资源。 - **`videolink`**——远程参加的视频会议链接。 - **`memos`**——评论;**`color`**——颜色(十六进制)。 使用层面的操作方式(创建、放置到网格、界面中的字段)参见 [临时事件](#page-schedules.events)。 #### 信息显示屏 **`Panel`** 是用于显示当天课时的**信息显示屏**(大厅、教室、迎宾屏幕等)。它定义`columns`的选择、`topline`、`filters`/`exclusions`以及外观设置。参见术语表 [信息显示屏](#page-glossary.panel)。 #### 标识符、本地副本以及与ERP的对接 要把Omniscol的模型与外部基础数据关联起来,有三个原则最为重要: 1. **字典的键就是稳定的标识符。**科目、用户、教师、班级、小组、教室、资源都以不可变的标识符(JSON键)索引,而不是以名称索引。任何对应关系都应使用这个枢纽,绝不能使用`name`。 2. **`_extids`字段(`ExternalIds`)承载外部标识符。**它出现在可同步的实体上(`Subject`、`Family`、`TimetableSite`、`TimetableClassroom`、`TimetableResource`、`TimetableTeacher`、`TimetableClass`、`TimetableClassGroup`、`User`等),为每个实体关联它在第三方系统中的标识符,例如`{ "auriga": "12345", "aimaira": "67890" }`。它是双向匹配的标准锚点。 3. **学校与课表之间的本地副本是有意为之的。**班级科目或课表中的教师是扩充后的副本,而不是实时引用。因此外部基础数据必须决定在哪个层面匹配:**学校基础数据**(长期目录)还是某张具体的**课表**(有日期的排课)。传播规则的细节见 [数据组织](#page-core-concepts.data-model)。 同步配置位于`config.extsync`(`SchoolConfigExtsync`):`systems`(已配置的连接器)、`sync`(方向和实体)、`export`和`schedules`,以及按Omniscol键和标识符建立的对应表(`mappings`)。在编程访问方面,REST API和令牌见[Omniscol API——身份验证令牌](#page-integrations.api-tokens);同步连接器见[与外部系统同步(ERP)](#page-integrations.extsync)。 > 每个字段的确切完整形式,仍以账户的参照JSON schema为准(`https://api.omniscol.com/api/guest/school_schema.json`,可读的查看器见[omniscol.com/fr/datamodel](https://www.omniscol.com/fr/datamodel))。本页与schema如有出入,**以schema为准**。 #### 另请参阅 - [数据组织](#page-core-concepts.data-model) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) · [小组对齐](#page-core-concepts.alignments) · [教学小组组合](#page-core-concepts.groups-of-groups) - [课程、课时、课时类型](#page-core-concepts.lessons-and-types) · [复杂课时](#page-core-concepts.complex-lessons) - [单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources) - [学年](#page-core-concepts.school-year) - [Omniscol API——身份验证令牌](#page-integrations.api-tokens) · [与外部系统同步(ERP)](#page-integrations.extsync) ### 9.8 高级查询——筛选、投影和分页API *Source: `help/zh-cn/integrations/advanced-queries.md` · id: integrations.advanced-queries · Audience: admin · Plan: premium · Updated: 2026-07-11* > **Premium** > _Premium_ 除了一次调用一个端点之外,Omniscol API还提供**三种搜索入口**。 它们合在一起,涵盖全文搜索、将人名解析为技术标识符, 以及在任意读取端点之上执行**筛选、投影和分页**的查询—— 无需您自己串联多次调用。 这些功能也能回答**内部网站**、预订工具或 **ETL** 最常提出的问题—— 首先是*“这个时段哪间教室或哪位教师有空?”*(参见 [查找可用的教室或教师](#查找可用的教室或教师))。 #### 三种入口一览 | 端点 | 作用 | 适用场景 | | --- | --- | --- | | `POST /api/search` | 对整个账户进行全局全文搜索。将您的文本拆分为词(不区分大小写和重音),并返回找到每个词的JSON **路径**。 | 快速定位“这个词出现在哪里?”。 | | `POST /api/search/entity` | 将名称解析为实体。支持重音、通配符和近似匹配(Dice相似度),并返回实体的类型、标识符和上下文。 | 把 `“6年级1班”` 变成对应的班级,或把 `“李娜”` 变成对应的教师。 | | `POST /api/search/query` | **查询编排器**:调用一个读取端点,然后对结果应用 `where` 筛选、字段投影、排序和分页。 | 否则需要多次调用的复杂筛选问题。 | 这三个端点都列在交互式API参考(**/developers** 页面)的 **Search** 部分, 并且都需要身份验证——参见 [Omniscol API](#page-integrations.api-tokens)。 #### `where` 筛选(Mango / MongoDB风格) `/api/search/entity` 和 `/api/search/query` 都接受 `where` 子句: 一种带有**MongoDB风格运算符**的结构化筛选。字段可以对应一个直接的值(隐含相等), 也可以对应一个运算符对象;同一字段上的多个运算符以隐含的**与**组合。 字段名支持**点号表示法**,以访问上级上下文(例如 `sites.name`)。 | 运算符 | 含义 | | --- | --- | | `$eq` / `$ne` | 等于 / 不等于 | | `$gt` `$gte` `$lt` `$lte` | 比较 | | `$in` / `$nin` | 值在 / 不在列表中 | | `$exists` | 字段存在 | | `$regex` | 正则表达式(不区分大小写) | | `$contains` | 字符串或数组包含某个值(不区分大小写) | | `$like` | 近似匹配,忽略重音和标点(Dice) | | `$and` `$or` `$not` | 逻辑组合 | 几个示例: ```json { "capacity": { "$gte": 20, "$lte": 50 } } { "level": { "$in": ["本科一年级", "本科二年级", "本科三年级"] } } { "name": { "$regex": "^实验" } } { "city": { "$like": "北京 海淀" } } { "$or": [ { "capacity": { "$gte": 50 } }, { "specialisation": "化学" } ] } ``` #### 投影、排序和分页 在 `/api/search/query` 上,还有四个参数可让响应保持精简且有序—— 这对仪表盘很重要,对按令牌计费的AI智能体更是如此: - **`project`**——要保留的字段列表(可使用点号表示法)。其余内容全部丢弃。 - **`sort`**——一个字段,`asc` 或 `desc`。伪字段 `_count.<字段>` 按数组字段的长度排序。 - **`limit`** 和 **`offset`**——对结果分页。 响应还会返回一个 `meta` 块:筛选前有多少元素、通过筛选的有多少、实际返回了多少。 #### 完整示例 找出至少有30个座位的教室,只保留名称和容量,按容量从大到小排序,取前20间: ```bash curl -X POST "https://your-school.omniscol.com/api/search/query" \ -H "Authorization: Bearer $OMNISCOL_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "call": "os_dashboard_classrooms_get", "where": { "capacity": { "$gte": 30 } }, "project": ["name", "capacity"], "sort": { "capacity": "desc" }, "limit": 20 }' ``` `call` 是要执行的读取端点的内部名称(与 **/developers** 页面上显示的一致), `params` 携带该端点自己的参数,`extract_path` 在需要时指明结果中要筛选的数组—— 此处省略,系统会自动检测。 #### 查找可用的教室或教师 最常见的集成场景——为内部网站、预订工具或 **ETL** 提供数据——就是 *“谁或什么在某个时间有空?”*。**availability** 端点可直接回答: 它们按实体仅返回所请求日期内**空闲**的时段,并已将课时、缺勤和必须满足的意愿考虑在内。 查询可用时间有两种方式: - **限定范围**——`GET /api/schedules/availability/{datesrange}/{entity}` (需要时加上 `/{entityId}`),针对某一类实体——`teachers`、 `classrooms`、`groups`、`resources` 等。 - **显式筛选**——`GET /api/schedules/availability/{datesrange}` 加上 `filter`,用上文介绍的同一种 `$where` 来限定范围。 `{datesrange}` 的写法为 `YYYYMMDD`,**用逗号分隔的多段表示不连续的日期**—— 很适合“指定的两个星期一”:`20261005,20261012`。每个返回的时段都带有 `day`、 `start`、`end` 和 `time`(单位为分钟):因此“至少3小时”就是您这一侧的 `time >= 180` 判断。 ##### 某个具体时段有空的教师 *“10月5日星期一哪些教师有空?”*——只需一次限定范围的调用: ```bash curl -G "https://your-school.omniscol.com/api/schedules/availability/20261005/teachers" \ -H "Authorization: Bearer $OMNISCOL_TOKEN" \ --data-urlencode "with_entities=true" ``` 空闲时段先按类别、再按教师分组返回——例如 `{ "availability": { "teachers": { "t.li": [ { "day": "2026-10-05", "start": "14:00", "end": "17:00", "time": 180 } ] } } }`—— 您的工具再选出覆盖所需时段的那一项。 ##### 两个星期一都有空、且达到一定规模的教室 在一次调用中同时使用实体筛选和可用时间,并采用语法中**有用的子集**—— 只对容量使用 `$where`: ```bash curl -G "https://your-school.omniscol.com/api/schedules/availability/20261005,20261012" \ -H "Authorization: Bearer $OMNISCOL_TOKEN" \ --data-urlencode 'filter={"classrooms":[{"$where":{"capacity":{"$gte":30}}}]}' \ --data-urlencode "with_entities=true" ``` Omniscol会返回每间至少有30个座位的教室在这两个星期一的空闲时段。 然后由您的ETL筛选出在**每一个**日期都有**3小时**空档(`time >= 180`)的教室—— 跨多天的组合由您这一侧完成,这样规则保持明确且可验证。 对于每种实体类型,`filter` 接受简单的标识符列表 (`{"classrooms":["A101","B204"]}`)、通配符(`{"teachers":"*"}`)、 简单的字段匹配(`{"teachers":[{"email":"…"}]}`),或此处展示的结构化 `$where`。 #### 选择合适的入口 - **“这个词出现在哪里?”** → `POST /api/search`。 - **“这个名称对应哪个实体?”** → `POST /api/search/entity`。 - **“给我座位超过30个的教室,排好序,第一页”** → `POST /api/search/query`。 - **“谁或什么在这个时段有空?”** → `GET /api/schedules/availability/…`。 #### 面向AI智能体 这些入口很大程度上正是**为AI智能体**而设。全文搜索和实体解析会把用户的说法 (`“教师李娜”`、`“班级6年级1班”`)转换为精确的标识符; 随后查询编排器只需一次调用即可回答一个带筛选的问题,且只返回所请求的字段—— 而不是多次调用和一份过大的响应。通过 [MCP——连接外部AI智能体](#page-integrations.mcp) 连接智能体时, 这些工具也在它可使用的范围之内。 #### 接入内部网站、ETL或合作伙伴工具 第三方工具日常使用的正是这些读取入口。常见形式: - **向内部网站或仪表盘拉取数据**——您的页面使用受限的 **API令牌**调用读取端点 (可用时间、[课时端点](#page-integrations.lessons-api)、 仪表盘),并显示结果。Omniscol一侧无需安装任何东西。 - **夜间ETL**——计划任务获取所需内容(某个日期窗口内的课时、 某位教师的小时数、教室占用情况),并加载到您的信息系统中。 `search/query` 让每次拉取都经过筛选、投影和分页,响应精简。 - **从您的系统推送**——反方向,让Omniscol与您的权威数据源保持一致: 夜间任务可以从您的数据库更新班级和教师 (`POST /api/external/classes`、`POST /api/external/teachers`), 或加载自定义科目目录(`POST /api/admin/subjects/custom`)。 - **SIS / ERP软件**——对于Aurion、Auriga等系统,专用连接器才是合适的工具——参见 [与外部系统同步](#page-integrations.extsync)。 - **事件驱动**——如果希望在变更发生时收到通知,而不是不停轮询, 请注册一个 **Webhook**——参见 [API自定义](#page-integrations.api-customization)。 请让每个集成都保持**受限**:令牌仅限于确实需要的端点,定期更换, 凡是只读取的地方都使用只读权限。参见 [Omniscol API](#page-integrations.api-tokens)。 #### 另请参阅 - [课时API](#page-integrations.lessons-api) - [Omniscol API](#page-integrations.api-tokens) - [MCP——连接外部AI智能体](#page-integrations.mcp) - [完整数据模型](#page-integrations.data-model-full) - [内置AI助手](#page-integrations.ai-assistant) - [集成概览](#page-integrations.overview) ### 9.9 课时API——获取任意日期的课时 *Source: `help/zh-cn/integrations/lessons-api.md` · id: integrations.lessons-api · Audience: admin · Plan: premium · Updated: 2026-07-11* > **Premium** > _Premium_ 当Omniscol之外的系统需要知道*什么时间发生什么*时,就调用这个接口: ``` GET /api/schedules/lessons/{datesrange} ``` 它会针对所请求的日期和实体,返回您课表中的**带日期的课时**—— 每个课时都落在其真实日期上。几乎所有集成(内网、ETL、合作方工具) 都从这里开始。本页介绍使这个接口能满足多种用途的各项参数。 #### 课时与结构 两个接口,两种职责: - **`GET /api/schedules/lessons/{datesrange}`**——**课时**: 每个落在真实日期上的课时,包含其科目、教师、教室、小组和时长。 想知道谁在何时何地,就读取它。 - **`GET /api/schedules/`**——**结构**:已发布的课表本身 (班级、科目、校区、时间网格)。需要底层模型而非带日期的课时时,读取它。 也可以通过 `with_timetables=true`(见下文)把结构并入课时请求: 一次请求即可同时返回两者。 #### 选择日期 `{datesrange}` 使用 `YYYYMMDD` 格式,写法刻意设计得很灵活: | 形式 | 含义 | | --- | --- | | `20261005` | 某一天 | | `20261005-20261011` | 闭区间(一周) | | `20260901-` / `-20260630` | 一端开放 | | `20261005,20261012,20261019` | **零散**日期——指定的三个周一 | | `20261005-20261011,20261102-20261108` | 同时指定多个区间 | | `` 或 `-` | 所有日期 | 零散形式(用逗号分隔)使“这三个周一”这样的问题只需一次调用即可解决。 #### 精确指定所需内容 `filter` 将请求限制在所需的实体上——其语法与可用时间接口 ([高级查询](#page-integrations.advanced-queries))相同: - 简单的标识列表——`{"classes":["3a","3b"]}`, - 通配符——`{"teachers":"*"}`, - 简单的字段匹配——`{"classrooms":[{"site":"nord"}]}`, - 或结构化的 `$where`——`{"classrooms":[{"$where":{"capacity":{"$gte":30}}}]}`。 结果**先按筛选类型分组,再按实体标识分组**——例如 `schedules.classes.3a.lessons[]`、`schedules.teachers.j-doe.lessons[]`。 另有两个参数用于限定提取范围,还有一个用于设置上限: - **`timetables_restrict`** / **`timetables_exclude`**——限定或排除某些课表标识 (字符串、CSV或数组)。 - **`limit`**——限制每个筛选条件返回的课时数量上限。 #### 课时的样子 `lessons[]` 中的每一项都是一个已安排的课时: ```json { "position": { "day": "2026-10-05", "period": 0, "start": "8:15", "end": "9:10" }, "duration": 2, "subject": "maths", "teachers": ["j-doe"], "classroom": "nord:B12", "class": "3a", "schedid": "3" } ``` - **`position.day`** 是课时的日期。 - **`position.period`** 是课时在课表时间网格上的序号——安排在网格上的课时才有。 网格外的课时(自带明确的 `start`/`end`,不在常规时段内) 则带有 `start`/`end`,没有 `period`。 - **`position.start`** / **`position.end`**(时间)始终出现在网格外的课时上; 当您传入 **`with_hours=true`**(预先计算的时间)时,网格内的课时也会带上。 当目标系统需要的是时钟时间而非网格序号时,请启用该参数。 #### 缺勤、取消和代课 默认情况下,接口会**合并缺勤**:缺勤的教师会从课时中移除, 没有剩余教师的课时被视为已取消并被排除。以下参数可改变这一行为: - **`without_absences`**——完全忽略缺勤;返回原始的计划网格。 - **`with_absences`**——在课时旁附上该时间段的原始缺勤记录。 - **`with_cancellessons`**——保留已取消的课时(所有教师都缺勤),而不是排除它们。 - **`with_studentcancellessons`**——只保留因学生缺勤而取消的课时。 - **`with_removedlessons`**——返回已移除的课时(与 `with_cancellessons` 互斥)。 - **`without_teacher_consolidation`**——在每个课时的 `teachers` 列表中保留缺勤的教师,而不是移除。 - **`without_holidays`**——不在该范围内插入假期。 默认情况下,当某次缺勤已指定代课教师时,他会**直接替换课时 `teachers` 列表中缺勤的教师**—— 代课是透明的,没有额外字段。传入 **`with_cancellessons`** 或 **`without_teacher_consolidation`** 后,课时还会带有一个 **`substitutes`** 块(代课教师的标识、缺勤原因以及引发代课的缺勤记录), 让您在同一份数据中看到谁被替换以及原因。 #### 结构与名录 可在同一次调用中附带所需的参考数据: - **`with_timetables=true`**——计算课时所用的课表原始结构 (班级、科目、时间网格,按标识组织)。需要解析标识时启用; 想要精简的响应时请保持关闭。 - **`with_entities=true`**——结果中各实体的精简名称/代码(以及人员的姓名字段)。 - **`with_teachers`** / **`with_all_teachers`**——课时中用到的教师, 或课表和名录中的所有教师。 - **`with_students`**——学生及其按日期的分配。 - **`with_events=true`**——同一时间范围内网格外的事件(班级评议会、家长会等)。 #### 夜间ETL拉取 获取所有班级一周的课时(含具体时间),并加载到您的信息系统: ```bash curl -G "https://your-school.omniscol.com/api/schedules/lessons/20261005-20261011" \ -H "Authorization: Bearer $OMNISCOL_TOKEN" \ --data-urlencode 'filter={"classes":"*"}' \ --data-urlencode "with_hours=true" ``` 响应会把课时归入 `schedules.classes..lessons[]`。 缺勤已合并:您加载的内容反映的是实时、最新的课表—— 如果还想记录变更原因,请加上 `with_absences=true`。 #### 推送到Omniscol 集成也可以反向进行——让Omniscol与外部权威数据源保持一致。 对于学生信息系统或ERP软件(Aurion、Auriga等),请优先使用专用连接器, 而不是下面的原始接口——参见[与外部系统同步](#page-integrations.extsync)。 ##### 班级与教师 这些接口**仅**用于与外部系统同步;Omniscol界面自己从不调用它们: - **`POST /api/external/classes`**(`os_external_classes_post`)—— 根据按班级标识索引的数据,更新已有班级 (名称、校区、年级、教室、人数)。它只更新已知班级,不会创建新班级。 将某个字段设为 `null` 即可清除它(班级名称除外——班级必须保留名称)。 - **`POST /api/external/teachers`**(`os_external_teachers_post`)—— 按标识插入或更新教师,同时作用于课表和名录 (必要时会创建具有教师角色的用户,并自动生成登录名)。 `DELETE` 变体用于移除班级或教师。 还有一个特殊接口 `os_external_classes_get`,**只能被覆盖**: Omniscol不提供默认实现,但当合作方或供应商通过 [API自定义](#page-integrations.api-customization)将其指向自己的服务时, 创建班级的界面会根据这份**封闭的班级列表**预填,而不再使用手动表单。 没有覆盖时,它什么都不做。 ##### 自定义科目 **`POST /api/admin/subjects/custom`**(`os_admin_subjects-custom_post`) 可加载一份**自定义科目目录**,或只创建一个科目。界面也会使用它。 目录请求体为 `{ "subjects": [ … ], "replace": false, "duplicates_reuse": true }`: 默认为增量更新,`replace: true` 表示完全刷新, `duplicates_reuse: true`(默认值)表示按外部标识、代码或名称与已有科目匹配。 这是每晚推送科目时使用的接口。 #### 另请参阅 - [高级查询](#page-integrations.advanced-queries) - [Omniscol API](#page-integrations.api-tokens) - [完整数据模型](#page-integrations.data-model-full) - [与外部系统同步](#page-integrations.extsync) - [API自定义](#page-integrations.api-customization) - [集成概览](#page-integrations.overview) ### 9.10 MCP——将外部AI智能体连接到Omniscol *Source: `help/zh-cn/integrations/mcp.md` · id: integrations.mcp · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ **Model Context Protocol(MCP)**是一项开放标准,让兼容MCP的AI助手可以使用外部服务提供的业务工具。Omniscol将其大部分API以 **MCP服务器**的形式开放:AI智能体完成认证后,即可通过被授权的API接口或权限查询您的账户。认证方式可以是OAuth2(MCP的标准方式),也可以是令牌。 #### 智能体能做什么 MCP智能体非常适合处理数据就在Omniscol中的**查询类问题**: - *“请给出本周各教室相对于开放时间的占用率。”* - *“帮我找一间教室,10月的三个周一在同一个2小时时段都有空。”* - *“张伟老师本学年已经上了多少小时的课?”* - *“今天所有的数学课有哪些?”* - *“列出本学期完成服务时间不足70%的教师。”* 这类请求通常需要组合多个工具:课表、统计仪表盘、计算得出的可用时间、教师详情。智能体负责编排这些调用,并用自然语言给出答复。 #### 开放的工具 MCP服务器根据允许用于MCP的Omniscol API路由生成工具。被明确忽略的路由,以及某些技术性模块(例如与用户身份验证相关的模块),不会成为工具。因此工具列表反映的是向MCP开放的API,而不是应用程序的全部内部接口,不过它已经覆盖了很大一部分。此外,还有一些路由专为MCP设计,Omniscol本身并不使用。例如高级搜索工具:让Omniscol能根据自由文本所指的实体(“张伟老师”“6年级1班”)找到其技术标识,再用这个标识精确查询数据。又如一些在Omniscol中没有图形界面的复杂工具,因为它们更适合用提示词来完成,比如查询实体的占用和可用情况(“帮我找一间教室,下午连续三个周一都有2小时空闲”“10月14日那一周有数学教师可以上3小时课吗?”)。 这些工具主要涵盖: - **管理**模块(用户、科目、学年、设置), - **课表管理**模块(配置、校区、教室、班级、课程), - **课表**模块(日程表、仪表盘、搜索), - **缺勤管理**模块(登记、统计), - 全局搜索。 读取类路由最适合智能体使用。目录中也可能存在一些写入操作,取决于令牌的权限和可用的API,但必须严加管控:凡是会修改多个业务对象的请求,都应由用户核实后再视为可靠。 #### 启用MCP服务器 MCP服务器适用于**Premium**账户。一切从 **MCP界面**开始:在**管理**模块中点击**配置**即可打开。界面会显示**服务器URL**,并提供可直接复制的客户端配置内容。 **MCP的标准认证方式是OAuth2。**兼容的客户端(如Claude)只需连接到服务器URL,即可发现该账户的OAuth2配置,用户在授权页面批准访问即可:**除了URL之外无需提供任何其他内容**。授予的权限范围遵循账户的权限及其可见性限制。Omniscol的OAuth2服务器、客户端管理界面和授权的详细说明,请参见[OAuth2 / OIDC(提供方)](#page-integrations.oauth-server)。 对于不支持OAuth2的客户端,同一界面可以生成**令牌**(API密钥,可选全局范围或限定某个模块,设置有效期,可选关联用户,可勾选写入权限),并根据需要提供可直接粘贴的格式:`Authorization: Bearer` 请求头、**Claude Desktop**(免费版)的配置块,以及本地代理命令。该令牌基于[Omniscol API](#page-integrations.api-tokens)中介绍的密钥体系。 #### 安全最佳实践 - **OAuth2认证**——更方便,智能体支持时应优先使用(Claude付费版)。 - **AI专用令牌**——创建令牌时使用一目了然的名称(`AI智能体——Claude桌面版`),需要时可随时撤销。 - **最小权限范围**——使用API令牌时,只选择必要的API接口;使用OAuth令牌时,按实际需要限制权限范围(scope)。 - **活动日志**——当相关路由会记录日志时,调用会出现在与该令牌关联的日志中。日志只记录调用本身,不保存返回数据的详情,也不保存可重放的请求内容。 - **可见性限制**——智能体只能看到Omniscol返回给它的内容。如果您为令牌所属角色配置了严格的可见性限制,这些限制同样适用。 #### 操作步骤 — 将Claude连接到Omniscol 推荐使用 **OAuth2认证**:通过URL将Claude连接到MCP服务器,无需处理令牌。 1. **启用MCP服务器。**在您的Premium账户中启用MCP服务器并获取其URL(通常为 `https://your-school.omniscol.com/mcp`)。MCP界面(**管理**模块,**配置**按钮)会显示该URL,并带有复制按钮。 2. **在Claude中添加Omniscol连接器。**在Claude的连接器设置中,添加自定义连接器,并粘贴Omniscol MCP服务器的URL。 3. **批准访问。**Claude会将您重定向到Omniscol的授权页面:请登录并授权访问。授予的权限范围遵循您账户的权限以及可能存在的可见性限制。 4. **工具会出现在Claude中**,当您的请求合适时,Claude会调用它们。 5. **首次测试:***“张伟老师今年上了多少小时的课?”*——Claude会综合可访问的数据,并用自然语言作答。 **通过令牌的替代方法。**如果MCP客户端不支持OAuth2,请在MCP界面生成专用令牌(名称清晰、API接口仅限实际所需、明确勾选写入权限),并通过 `Authorization: Bearer` 请求头传递。MCP界面会提供相应的配置块。只要客户端支持OAuth2,就请优先选择OAuth2。 #### 另请参阅 - [内置AI助手](#page-integrations.ai-assistant) - [Omniscol API](#page-integrations.api-tokens) - [高级查询](#page-integrations.advanced-queries) - [OAuth2 / OIDC(提供方)](#page-integrations.oauth-server) - [集成概览](#page-integrations.overview) ### 9.11 内置AI助手 *Source: `help/zh-cn/integrations/ai-assistant.md` · id: integrations.ai-assistant · Audience: admin · Status: stable · Updated: 2026-09-30* **内置AI助手**是Omniscol的对话入口,您可以在界面中用自然语言提问。 它在帮助面板的 **AI 助手** 标签页中打开,仅限管理员使用。 助手依据帮助文档,并根据账户合同,使用向智能体开放的Omniscol工具。 其范围因账户而异:文档型助手只根据在线帮助作答,合同中包含相应内容的账户, 还可使用查询账户数据的业务工具。 如需将外部AI智能体连接到您的账户,请使用 [MCP——连接外部AI智能体](#page-integrations.mcp)。 #### 助手能做什么 助手主要处理两类请求: - **文档类问题**——查找操作步骤、解释概念、指向合适的帮助页面; - **操作类问题**——通过获授权的工具查询账户数据,例如课程、教室、教师、缺勤或统计数据。 示例: - *“如何发布课表?”* - *“在哪里设置iCal链接?”* - *“今天安排了哪些数学课时?”* - *“为什么这次课表生成后还有未安排的课时?”* #### 助手能看到您屏幕上的什么 助手知道您正在查看哪个屏幕。但除非您将内容附加给它,否则它看不到屏幕上显示的内容 (姓名、数字、已打开的窗口)。 输入框左侧的相机按钮 (附加屏幕显示的内容)提供以下选项: - **屏幕截图**或**区域截图**:整个屏幕或屏幕一部分的图像,仅限Premium账户; - **屏幕上下文(不含数据)**:屏幕的地址、标题和可见元素,不含其内容; - **前景内容**:叠在屏幕上方打开的内容的文字,例如某个冲突的详情; - **完整内容(含数据)**:整个页面的文字,包括页面显示的数据。 在没有Premium的账户中,每个问题都会附带屏幕上下文。 当有内容位于前景时,助手会在输入框上方提示:“助手看不到前景内容。” 只有点击**前景内容**后,才会传送其文字。 #### 权限与范围 助手对账户并非拥有无限访问权限。 其回答和操作取决于: - 账户合同,它决定是否启用业务工具; - 当前登录管理员的权限; - 实际向智能体开放的工具; - Omniscol中可用的数据。 任何修改业务数据的操作,在执行前都需要明确确认。对于外部智能体集成, 请使用 [MCP——连接外部AI智能体](#page-integrations.mcp) 和专用令牌。 #### 最佳实践 - 在执行助手建议的操作之前,请先核对。 - 如非请求所需,请勿在对话中粘贴敏感数据。 - 对于外部智能体,请创建专用令牌,权限范围尽量小,并设置合适的有效期。 #### 另请参阅 - [MCP——连接外部AI智能体](#page-integrations.mcp) - [Omniscol API](#page-integrations.api-tokens) - [Omniscol的套餐与选项](#page-overview.plans-and-options) ### 9.12 OIDC / SSO——通过身份提供方登录 *Source: `help/zh-cn/integrations/oauth2.md` · id: integrations.oauth2 · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ OpenID Connect(OIDC)建立在OAuth2之上,让您的用户可以**用企业账户**登录Omniscol,而不必使用Omniscol专用密码。它有三个好处:只需记住一个密码;人员入职或离职时集中停用账户;由信息系统一侧管理的安全策略(MFA、密码长度、过期等)自动生效。 本页介绍的是**用户SSO**:用户通过您的身份提供方登录Omniscol。与之相反的情形——Omniscol作为OAuth2 / OIDC **服务器**供第三方服务连接,并带有客户端管理界面——请参见[OAuth2 / OIDC(提供方)](#page-integrations.oauth-server)。 #### 支持的提供方 Omniscol支持: - **Google Workspace**, - **Microsoft Entra ID**(原Azure AD), - **Keycloak**, - 通过issuer / discovery URL接入的**通用OIDC** 提供方(任何符合OIDC的提供方)。 #### 在Omniscol端配置 在**管理** → **设置**的**安全**部分,点击**配置**按钮,打开OIDC配置界面,在其中声明提供方: - **显示名称**——显示在登录按钮上的文字(例如 `使用 Google 继续`)。 - **提供方类型**——Google、Microsoft Entra ID(Azure AD)、Keycloak或通用OIDC。 - **Tenant / issuer**——Entra ID填写Microsoft tenant;Keycloak和通用OIDC提供方填写issuer URL。应用程序随后会自动发现OIDC元数据。 - **Client ID** 和 **Client secret**——在提供方一侧创建应用后获得(参见提供方的文档)。 - **Scope**——默认为 `openid profile email`。如有需要,可添加提供方特有的scope。 - **允许的域名**——SSO登录时接受的邮箱域名列表,可选;留空则不按域名过滤。 - **重定向URL**——Omniscol会给出需要复制到提供方配置中的准确值(如果提供方要求,还会给出登出后的重定向URL)。 - 仅允许通过 SSO 登录——SSO验证通过后,此选项会拒绝使用Omniscol密码登录,下文所述的**应急账户**除外。 当前的SSO配置在学校账户层面定义。 #### 应急访问(break-glass) 在**仅允许通过 SSO 登录**模式下,使用Omniscol密码登录会被拒绝:所有人都必须通过身份提供方登录。如果该提供方不可用——故障、密钥过期或配置错误——所有人都将无法访问Omniscol。 **应急账户(“break-glass”)**就是防范这种锁死的保险措施:一个**管理员**账户,即使在仅限SSO的模式下也被允许使用Omniscol密码登录。 - 在**管理员**账户的详情中,当选项**仅允许通过 SSO 登录**处于启用状态时,会出现一个**应急访问(仅 SSO)**复选框。勾选后,当身份提供方不可用时,允许该账户使用密码登录。只有管理员账户可以被设为应急账户。 - 此外,Omniscol支持团队保留独立的应急访问方式。 请在启用仅限SSO的模式**之前**,至少指定一个应急账户,并妥善保管其密码:身份提供方出现故障时,它就是您的保险。 #### 在提供方一侧配置(示例) ##### Google Workspace 1. Google Cloud控制台 > **APIs & Services > Credentials**。 2. **创建OAuth 2.0凭据**,类型选择 **Web应用**。 3. 将Omniscol提供的重定向URL粘贴到 **Authorized redirect URIs** 中。 4. 获取 **Client ID** 和 **Client secret**,并粘贴到Omniscol中。 ##### Microsoft Entra ID 1. Azure门户 > **Entra ID > App registrations**。 2. **New registration**,类型选择 **Web**,填入Omniscol的重定向URL。 3. **Certificates & secrets** > 创建一个client secret。 4. **API permissions** > 添加 `openid`、`profile`、`email`。 5. 获取 **Application (client) ID** 和密钥。 ##### Keycloak 1. Realm > **Clients > Create client**,类型选择 **OpenID Connect**。 2. **Valid redirect URIs**:填入Omniscol提供的URL。 3. **Credentials** > 获取client secret。 #### 与Omniscol账户关联 用户点击SSO按钮后,Omniscol会: 1. 将用户重定向到提供方, 2. 在认证后获取其电子邮箱地址, 3. 查找具有**相同电子邮箱地址**的Omniscol账户。 如果该账户存在且处于启用状态,用户即可登录;否则访问被拒绝。因此,要使SSO正常工作,用户必须以正确的电子邮箱地址存在于Omniscol中——默认情况下,Omniscol不会自动创建账户。 #### 账户自动创建 在首次SSO登录时自动创建账户(`just-in-time provisioning`)不是配置界面的默认行为。如果需要此模式,应与Omniscol团队商定。 #### 操作步骤 — 配置OIDC / SSO提供方 1. **OIDC / SSO** 让您的用户可以用企业账户(Google Workspace、Microsoft Entra ID、Keycloak、Okta……)登录。提供方一侧的操作取决于具体的提供方。 2. **在提供方一侧**,先创建一个OIDC **Web应用**:获取 **Client ID** 和 **Client secret**,并将Omniscol提供的**重定向URL** 复制到提供方的 *Authorized redirect URIs* 中。 3. **在Omniscol一侧**,打开设置,进入OIDC配置。填写**显示名称**(登录按钮上的文字)、提供方类型、issuer或tenant(视情况而定)、Client ID、Client secret和 **scope**(默认:`openid profile email`)。 4. **点击测试。**检查配置是否可用。Omniscol会完成一次OIDC往返;如果discovery、密钥或重定向出错,错误信息会给出明确提示。 5. **保存。**配置生效后,SSO登录按钮会出现在登录页面上。 6. **重要:账户必须已存在**于Omniscol中,且电子邮箱地址正确。SSO登录按电子邮箱匹配;默认不会自动创建账户。 #### 另请参阅 - [首次登录](#page-getting-started.first-login) - [用户与角色](#page-admin.users-and-roles) - [OAuth2 / OIDC(提供方)](#page-integrations.oauth-server) - [集成概览](#page-integrations.overview) ### 9.13 与外部系统同步(ERP) *Source: `help/zh-cn/integrations/extsync.md` · id: integrations.extsync · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ Omniscol通过统一的**同步**框架对接学校的ERP和外部信息系统。 Omniscol在其中扮演**核心枢纽**的角色:由它驱动导入和导出, 而外部系统仍是行政数据的权威来源。 与外部系统同步适用于**Premium**账户,且需要已为该账户配置连接器。 **按项目处理**的是新增一个尚未支持的ERP或信息系统, 包括确定映射和数据流。 #### 数据流模型 该框架涵盖两个方向的数据流: - **实体(导入)**——Omniscol可根据连接器及其配置,从ERP获取教师、科目、 教室、班级、学生及其外部标识。外部标识(ext-id)会保存在Omniscol中, 用于数据匹配。 - **课时(导出)**——Omniscol将排课生成的课时推送到ERP,并附上正确的 外部标识。根据连接器的不同,导出可以按需触发、按计划执行, 也可以整批重新导出,以修正数据差异。 Omniscol负责编排已配置的导入和导出,保存外部标识,管理各次同步, 并提供核对界面,用于比对Omniscol与外部系统之间的数据。 #### 数据来源与本地创建权限 对于每种实体类型(教师、科目、教室等),您可以选择来源系统, 并指定是否仍允许在本地创建和更新。界面还提供 **关联**按钮, 用于在Omniscol本地实体和ERP实体都已存在时,将二者关联起来。 #### 本体映射 每个ERP都有自己的术语(例如Omniscol中的“科目”,在Auriga中叫 **教学单元**(Unité Pédagogique),在Aurion中叫**课程**(Cours))。 框架负责**映射**:由Omniscol把两边的概念对应起来, 您无需改写自己的命名体系。 #### 可用的连接器 ##### 已上线 - **Aurion**——已在生产环境中提供的连接器。该ERP **由Auriga公司开发**, 在法国高等教育(工程师学院、商学院)中使用尤为广泛。 参见[integrations.aurion](#page-integrations.aurion)。 - **Auriga**——已在生产环境中提供的连接器。**Auriga软件**是Aurion的全网页版升级产品, 由同一家公司开发。参见[integrations.auriga](#page-integrations.auriga)。 ##### 名录标准 - **OneRoster**——Omniscol不为某个厂商单独开发连接器,而是支持国际标准 **OneRoster**(1.2及高级小组),可与符合标准的学生信息系统、校园门户或学习管理系统 交换学校名录。导入OneRoster名录属于这项Premium同步;导出则以只读方式提供, 并由OAuth2权限范围控制。参见[OneRoster](#page-integrations.oneroster)。 ##### 按需对接 任何提供**有文档的API**(用于导入/导出操作)和可供测试的**沙盒**的 ERP或信息系统,都可以按项目接入。请联系Omniscol支持团队, 共同确定新连接器的接入方案。 #### 与由外部系统查询Omniscol的区别 有些系统也可以通过公共API的 **GET** 接口读取Omniscol的数据: 这种情况下,Omniscol不负责编排ERP同步,第三方系统只是查询其令牌 有权访问的数据。该模式与由Omniscol编排的同步不同: | 模式 | 由谁编排? | 方向 | 示例 | | --- | --- | --- | --- | | **与外部系统同步** | Omniscol | 双向(实体导入,课时导出) | Auriga、Aurion | | **Partner pull** | 合作方 | 合作方发起GET请求 | 通过API接入的第三方连接器 | Partner pull模式无需配置与外部系统同步: 公共API和身份验证令牌就足够了。参见 [Omniscol API](#page-integrations.api-tokens)。 #### 配置 配置与外部系统的同步,通常需要与Omniscol支持团队一起开一次会, 完成以下事项: 1. **列出需要同步的对象**——用户、班级、教师、科目、教室等。 2. **校准本体映射**——ERP的哪个概念对应Omniscol的哪个概念。 3. **按实体类型确定独占权**。 4. **安排同步频率**(按需、每小时、每天,另有用于修正差异的补充同步)。 5. **正式启用前先在ERP沙盒中测试**。 #### 常用检查与操作 - **确认**已配置的收藏项或数据集,具体取决于连接器。 - 在管理界面中**手动触发**课时导出。 - 在导出设置块中配置了该选项时,可**按计划完整导出**。 - 使用Aurion连接器时可获取 **Aurion XML Pivot**。 - **核对关联**:关联界面会标出需要配对或修正的实体。 #### 操作步骤 — 确认并触发同步 1. **同步由Omniscol支持团队配置完成后**,日常操作都在管理界面中进行: 确认收藏项/数据集、配对实体、触发一次性导出、 在可用时下载Aurion Pivot,或在切换时清除导出状态。 2. **在系统配置中**,点击已填写的收藏项或数据集旁的 **确认**按钮。 Omniscol会从连接器获取数据,并在连接器返回时提示配置或格式错误。 3. **若要立即将课时推送到ERP**,而不等待下一次计划同步, 请点击 **触发**。 紧急修改后很有用。 4. **使用Aurion时**, **XML Pivot**按钮 会下载一个文件,选用该模式时,由ERP管理员通过ERP控制台手动导入。 5. **发生重大切换时**(结构变更、学年结束), **清除Omniscol导出**按钮 会删除Omniscol已导出到 **ERP端**的所有课时,以便从零开始。 该操作针对所选连接器,且**不可撤销**:请仅在获得支持团队同意后使用。 #### 另请参阅 - [integrations.aurion](#page-integrations.aurion) - [integrations.auriga](#page-integrations.auriga) - [OneRoster](#page-integrations.oneroster) - [Omniscol API](#page-integrations.api-tokens) - [导入与导出](#page-admin.import-export) - [集成概览](#page-integrations.overview) ### 9.14 OneRoster(1.2与高级小组) *Source: `help/zh-cn/integrations/oneroster.md` · id: integrations.oneroster · Audience: admin · Plan: standard · Updated: 2026-06-29* OneRoster是一项学校名册交换的国际标准(由1EdTech发布):它以统一格式描述学校的**机构**、**学年**、**教学科目**、**班级**、**注册**和**用户**。它用于把SIS、校园门户(ENT)或LMS接入其他工具,无需重复录入,也不必使用私有格式。 本页面向学校的**信息系统负责部门(IT)**。它介绍Omniscol在OneRoster方面提供和使用的内容、所要求的认证方式,以及每个交换方向的实际范围。 #### 支持的版本 Omniscol支持 **OneRoster 1.2 Rostering**——即基础部分(Org、AcademicSession、Course、Class、Enrollment、User、Demographics)——以及 **OR-Groups(Advanced Groups Service)**层。后者是在1.2之上新增三个实体(Group、GroupMembership、GroupAssociation)的附加小组标准。 OR-Groups层是一项**正在发布中的标准**。它对1.2而言是严格的附加层:Group只以只读方式**引用** 1.2中的Class / User / Org / AcademicSession。OneRoster 1.3预告会让Class成为Group的一种特化——Omniscol的实现已经向这一方向靠拢。 #### Omniscol作为生产方(Omniscol → ENT / LMS) 作为**生产方**,Omniscol通过符合OneRoster的REST API以**只读**方式开放学校名册,供ENT或LMS读取。 - Rostering 1.2基础部分位于 `/ims/oneroster/rostering/v1p2/…` 之下(例如 `/orgs`、`/schools`、`/academicSessions`、`/courses`、`/classes`、`/enrollments`、`/users`、`/teachers`、`/students`、`/demographics`,每个都有对应的嵌套变体)。 - 小组层位于 `/ims/oneroster/groups/v1p0/…` 之下(`/groups`、`/groupMemberships`、`/groupAssociations` 及其嵌套变体)。 - 默认范围是**当前**学年;可通过参数指定其他学年,或涵盖所有学年。 数据反映的是Omniscol汇总后的排课结果(已发布的课表)。生产方**有意设计为只读**:不开放任何写入操作(PUT / DELETE)——远程系统不能在Omniscol中创建或删除实体。 ##### 生产方的认证 生产方的接口由 **`client_credentials` 流程的OAuth2**(机器对机器令牌,没有用户参与)保护,令牌由Omniscol的OAuth2服务器签发。它们**不**限于Premium账户:访问由OAuth2的 **scope** 控制,而不是由套餐控制。每个scope对应一项特定服务,对人口统计数据的访问在1.2内部单独隔离: | 接口 | 接受的scope | | --- | --- | | Rostering 1.2(不含人口统计) | `https://purl.imsglobal.org/spec/or/v1p2/scope/roster-core.readonly`、`https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly` | | Rostering 1.2 `/demographics` | `https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly`、`https://purl.imsglobal.org/spec/or/v1p2/scope/roster-demographics.readonly` | | OR-Groups(全部) | `https://purl.imsglobal.org/spec/or-groups/v1p0/scope/roster-group.readonly` | OR-Groups令牌无法访问Rostering基础部分,反之亦然。系统不公布任何写入scope。特权scope由Omniscol管理员在注册OAuth2客户端时授予;客户端不能自行授予。OAuth2客户端和令牌的管理请参见[OAuth2 / OIDC(提供方)](#page-integrations.oauth-server)和[Omniscol API](#page-integrations.api-tokens)。 ##### 学生范围由小组层提供 一项关键的设计选择:班级或小组的学生名单通过 **OR-Groups**(GroupMembership)提供,而不是仅靠1.2基础部分。只读取Rostering 1.2的使用方能获得目录(Courses、Classes)、教师到课程的注册关系以及用户名册,但**得不到**学生的归属关系。要知道谁在哪个班级或哪个小组,使用方必须实现OR-Groups层。这一选择反映了法国的模型:学生被注册到一个**班级**或**小组**,而不是逐科目注册。 生产方以REST方式提供服务。**OneRoster CSV压缩包**格式(每个集合一个文件的zip归档)则在导入一侧支持,供以文件而非API方式提供名册的提供方使用——参见下文的使用方部分。 #### Omniscol作为使用方(SIS → Omniscol) > _Premium_ 作为**使用方**,Omniscol导入符合OneRoster的SIS名册,并在学校内完成对账。这一使用方配置属于**与外部系统的同步**:适用于 **Premium** 账户,并与Omniscol团队按项目确定(参见[与外部系统同步](#page-integrations.extsync))。 - **传输方式**——可以是提供方的 **REST API**(配置基础地址,遵循OneRoster标准分页),并以 `client_credentials` 流程的OAuth2向提供方的服务器认证;也可以是 **CSV压缩包**(zip归档)。 - **配置档**——配置档指明要读取的范围:仅1.2基础部分、小组层,或面向中小学教育的法国映射。仅支持1.2、没有小组服务的提供方也能顺利导入。 - **受控应用**——导入遵循与其他连接器相同的原则:Omniscol获取并对账数据,由**管理员确认**后应用到学校。远程系统从不直接向Omniscol推送数据。 - **幂等的重复导入**——外部标识的对应关系会被保留,因此即使提供方更改了某个名称,重复导入也不会产生重复数据。 #### 法国配置档(中小学教育) **面向中小学教育的法国配置档**把法国的概念映射到OneRoster模型:**division**(实际意义上的班级)对应主要的组织类Group;**小组**对应教学类Group;**教学小组组合**对应跨班的Group;**班内分组**和**对齐**转化为小组之间的关联;**教师**对某门课程的指派则转化为教师注册。INE(全国学生标识号)或教职工标识等标识符放在用户的 `userIds` 中。 #### 标识符与隐私 每个对外开放的实体都带有一个稳定的标识符 `sourcedId`。 - **结构性**标识符(机构、学年、教学科目、班级、小组)稳定,在各次导出之间保持不变:使用方可以据此跨时间关联数据。 - **用户**标识符经过**匿名化**:Omniscol从不把自己的实名标识放到传输中。传输中使用的令牌由账户专属的单向函数(HMAC)派生;注册和归属关系复用该令牌,但从不暴露原始标识。 #### 状态 - **生产方**——可用,且无需远程合作方即可演示(导出可独立完成)。Rostering 1.2和OR-Groups层均以只读方式提供,并采用OAuth2认证。 - **使用方**——导入配置属于Premium同步的一部分。与SIS的**实时**同步能否上线,取决于提供方,必要时还取决于教育主管部门的时间安排:需**按需**逐个连接器确定。这不是可以立即使用的开箱即用同步。 #### 另请参阅 - [与外部系统同步](#page-integrations.extsync) - [OAuth2 / OIDC(提供方)](#page-integrations.oauth-server) - [Omniscol API](#page-integrations.api-tokens) - [完整数据模型](#page-integrations.data-model-full) - [integrations.partners](#page-integrations.partners) ### 9.15 关联账户与共享资源 *Source: `help/zh-cn/integrations/linked-accounts.md` · id: integrations.linked-accounts · Audience: admin · Updated: 2026-09-23* **关联账户**把**多个相互独立的Omniscol账户——也就是多所学校**——连接起来, 这些学校在现实中共用**教师和教室**。通过关联,各账户可以看到彼此这些共用资源的**占用情况**: 您查看或编排课表时,Omniscol会调出关联账户中涉及您所共用的教师或教室的课时, 并将它们标记为已被占用。这样可以避免同一位教师或同一间教室被重复预定, 而无需联系另一所学校。该功能是选配项,需由Omniscol团队按需开通。 每个账户都**完全独立**:保留各自的用户、设置、学年和管理范围。 #### 关联共享什么 - **共享**:两个账户中都存在的教师和教室的**占用情况**。 占用情况为占用视图和跨账户冲突检测提供数据。 - **不共享**:各账户自己的用户、学生、班级、设置和行政数据。 看到某个时段被占用,并不意味着可以查看另一个账户的详情。 匹配是**自动**进行的:Omniscol通过姓名识别同一位教师 (同名时用出生日期区分),通过校区名称和教室名称识别同一间教室。 因此,要使其正常工作,这些教师和教室在各个账户中必须使用**相同的名称**。 外部(ERP)标识不参与账户之间的匹配。在同一账户内部, 外部标识优先于名称:参见 [识别不同课表中的同一班级](#page-timetables.multiple-active-timetables--same-entity)。 #### 使用场景 所有场景都涉及**多所独立的学校**,每所学校都有自己的Omniscol账户: - 共用教师或教室的**学校集团**—— 例如同一城市的一组学校。 - 位于同一栋楼内、**法律上相互独立的学校**,因此共用教室。 - 同一校园内,**多个机构**(工程学院、商学院等)使用各自独立的账户, 却共用同样的阶梯教室和同样的外聘教师。 #### 开通 关联账户需要与Omniscol团队共同确定,因为需要一起决定: - 哪些账户相互关联; - 共享哪些共用资源——教师、教室; - 统一共用教师和教室的名称,自动匹配正是以此为基础; - 每项数据由哪个账户负责; - 如何处理在不同范围之间检测到的冲突。 选项开通后,共享的占用情况会出现在占用视图中, 并为跨账户冲突检测提供数据,您无需再做任何其他操作。 #### 启用或停用同步 当一份课表与其他已发布的课表同步时——无论来自同一账户还是关联账户—— 就会出现 **同步** 按钮:在课表的**调课模式**下,以及在**编辑日历课表**时的**共享日期**上。 它会打开这些同步项的列表:账户内每一份**其他已发布的课表**, 以及每个共用教师或教室的**关联账户**。 所有同步项**默认启用**。取消勾选某一项,即可在当前视图中 **不再考虑**该课表或该账户的占用情况;重新勾选即可恢复。 只有存在至少一个可管理的同步项时,该按钮才会出现。 #### 相近情形:同一账户内发布多份课表 关联账户用于协调相互独立的学校;而在**单个账户内部**, 当一所学校**同时运行多份已发布的课表**时,也会出现同样的需求。 同样的共享占用原则可防止一间教室、一位教师或一个**班级** 被两份同时运行的课表重复预定。 典型情况是节奏各不相同的**多项目机构**—— 一个18个月的EMBA、一个按日历学期运行的高等商学院、一个按周课表运行的预科班—— 它们在各项目之间共用教室和外聘教师; 或者是**横跨两种日历的班级**,上午按重复安排,下午按单次安排。 这种协调在 **Premium** 中默认包含, 经与Omniscol确定方案后,也可以特例开通到标准版账户。 参见[同时发布多份课表](#page-timetables.multiple-active-timetables)。 #### 另请参阅 - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [校区、教室、资源](#page-core-concepts.sites-rooms-resources) - [与外部系统同步](#page-integrations.extsync) ### 9.16 Edusign连接器 *Source: `help/zh-cn/integrations/edusign.md` · id: integrations.edusign · Audience: admin · Plan: premium · Updated: 2026-08-14* > **Premium** > _Premium_ 在同时使用**Omniscol**和**Edusign**的学校里,这两个工具的角色并不相同。 **Omniscol**负责准备课时:它管理课表、约束、可用时间、班内分组和共享课程。**Edusign**则在课时确定之后介入:它需要知道课时**何时**进行、**由谁**授课、**谁**参加,以便准备签到并收集签名。 连接器的作用正是避免这种重复录入。因此,Omniscol把需要签名的课时推送到Edusign,因为学校是在Omniscol中准备和修正这些课时的。实际的出勤情况则在Edusign中查看:由它来观察,并以它为准。 Edusign连接器属于 [与外部系统同步](#page-integrations.extsync) 框架;本页介绍它的特有之处。 #### 发送什么,不发送什么 连接器首先发送**课时**。每个课时在Edusign中成为一门课程,并以Omniscol的标识符作为外部引用。这样日后无需另外维护对照表,就能找到、更新或删除它。 日历中的**事件**也可以走同样的路径:讲座、答辩或迎新日同样可以发送到Edusign签名。如果您不想全部发送,也可以用筛选器限制导出——下文会再谈到。 **教师**和**小组**也可以发送,有两种方式:如果启用了该选项,则在导出课时的过程中即时创建;或者通过 实体导出 选项卡批量同步,此时以Omniscol为准。**学生**则从不自动推送:只能手动触发发送,原因见下文。 一个重要的提醒:**不要混用两种创建签到表的方式。** 要么课时在Omniscol中产生,由连接器在Edusign中创建:如果您的课表经常变动,这是最一致的选择,因为修正、缺勤和代课都会随之更新。 要么直接在Edusign中创建课程。这也可以,但这些课程就此独立于Omniscol:连接器不会去动它们,您的课表变更也不会同步到那里。 最稳妥的做法,是一开始就选定在哪一边生成签到表,然后一直坚持。这样可以避免同一个课时出现两个版本。 #### 首次导出之前 对Edusign来说,没有教师的课时无法使用:必须知道由谁负责签到表。后续步骤取决于一个问题:您的教师在Edusign中是否已有账户? **他们已存在,且两边的电子邮箱相同。**无需任何操作:自动匹配。这是最常见的情况,也是为什么必须在Omniscol中填写准确可靠的邮箱——它是用于匹配的标识符,也是登录Edusign的账号。如果Omniscol中有两位教师使用同一个邮箱,连接器会尝试用姓名来区分:下文详细说明它的做法,以及什么情况下会受阻。 **他们已存在,但邮箱不一致。**这就需要**关联**:关联界面会把您的教师与Edusign账户并排列出,每个已建立的关联都优先于任何邮箱匹配。当共用邮箱无法用姓名区分时,同样使用这种办法。 **他们在Edusign中尚不存在。**有两种选择: - **即时创建**——在系统配置的 系统配置 选项卡中勾选远程创建,连接器会在某个课时需要时创建对应账户; - **教师同步**——在 实体导出 选项卡中一次性推送全部教师,这样在第一个课时之前账户就已存在,以Omniscol为准。 无论是即时创建还是批量创建,Edusign都规定每个邮箱只能对应一个账户。如果邮箱已被占用,创建会失败,该教师的课时也随之失败;如果在Omniscol中两位教师共用一个邮箱,连接器一个都不会创建——连第一位也不会,否则会把邮箱随机绑定给其中一位——他们的课时会等到每人都有自己的邮箱。因此,创建只适用于确实不存在的账户——对于Edusign中已有的教师,请使用匹配或关联。 在要求从Omniscol向Edusign创建之前,还有一点要注意:根据您的Edusign账户配置,创建用户可能会立刻通过电子邮件把登录信息发给他。这样,您的教师在第一次导出时就会发现这个新工具,却毫无准备。如果您希望自己通知账户开通,请在发起导出之前,先在Edusign一侧检查这项设置。 如果教师仍然找不到,课时**不会发送**。连接器会统计并明确提示:否则,缺失签到表这类问题总会在最不合适的时候才被发现。 #### 通过电子邮箱匹配 对于没有建立关联、且账户不是由连接器创建的教师,匹配依据是电子邮箱,两边的姓和名是否一致都无关紧要。因此邮箱必须准确:邮箱错误会使课时受阻,两个邮箱互换则会让两位教师的签到表对调。 姓和名只用来区分重复项:在Omniscol中有两位教师登记了同一个邮箱——例如秘书处的信箱,或兼职教师共用的地址。此时连接器会把姓名与Edusign账户的姓名进行比对。这几乎总能解决问题:每个人找到自己的账户,课时随即发出。 两位完全同名者使用同一个邮箱,很可能是同一个人在您这里被录入了两次。无论选中哪个账户,签到表上的姓名、科目和班级都是正确的:课时会发出,集成日志会记录这条重复项,便于您日后清理。 还有一种情况是没有任何姓名匹配。这位教师可能根本没有账户,而随意发送会让出勤签名落到别人的签到表上:这些课时**会被搁置**。导出汇总会给出相关的姓名和邮箱——甚至包括那个只创建重复项、却不授课、您很久都想不到的人。 长久的解决办法,是让每个人都使用自己的邮箱。在此之前,请手动建立关联:关联一旦建立,标识符即为准。 #### 按单位筛选发送 单位是一个组织层面的概念:它在您的账户内把若干班级归在一起,与校区和教室无关。如果您已声明单位,可以只发送其中某些单位的课时。该选择在 实体导出 选项卡中,位于课时区域下方。 只要课时的**至少一个**班级属于所选单位,该课时就会发送:因此两个单位共享的课程只会发送一次。但是,一旦您按某些单位筛选,没有分配单位的班级就会被排除在外:由于它不属于任何所选单位,连接器无法把它包括进来。 如果您之后缩小了选择范围,不再属于其中的课时会从Edusign中移除——**已经进行过的课时除外**,它们的签到已成定局。不选任何单位等于全部发送。 #### 导出窗口 Edusign用于对**即将进行**的课时进行签名。已经过去的课时不再需要准备签到,Edusign也会将其锁定。 该窗口在系统配置中设置,以今天为中心,向前和向后各若干天。实际上,向前几天就够了:它们只是用来补上课时刚结束后做出的修正。 **移出窗口的课时永远不会被删除。**它已经上过,Edusign保存着它的签到,而签到无法重建。只有在Omniscol中真正被删除的课时才会从Edusign中移除——而且仅限尚未进行的。 #### 实时与补发 有两种机制并存,各司其职。 **实时**随时发送每一处修改。这是正常模式:它让Edusign几乎即时保持最新。但应把它看作一个便利的通道,而不是绝对的保证:请求可能失败,进程可能重启。 **定时完整导出**用于定期协调两边。它发送整个窗口内的课时,读取Edusign中现有的内容,然后删除那些在您这边已不存在、但实时同步漏掉的课时。这是安全网:没有它,网络故障或重启会留下悄无声息的差异。 #### 学生 学生只能**手动触发**发送,并且需格外谨慎。 Edusign只能通过我们设置的外部引用来匹配学生——既不能通过邮箱,也不能通过它的内部标识符。因此,Edusign中已存在但没有该引用的学生**无法触及**:发送会创建出第二条使用同一邮箱的记录。 所以连接器宁可不做,也不创建重复项。它先读取Edusign中已有的学生,只创建确实不存在的,其余的搁置。没有电子邮箱的学生出于同样的原因被排除:他们无法通过任何方式匹配。触发结束时,汇总会准确告诉您哪些没有创建,并给出两边的身份信息,供您逐个决定。活动日志也会保留记录。 实际上,只有在您需要实名签到表时才必须有学生。只要课时带有教师和小组,签到即使没有学生也能进行。 #### 事件 讲座、答辩、模拟考试:您在日历中放置的课时之外的内容,同样可以发送到Edusign。事件在 实体导出 选项卡中有自己的区域,紧接在课时下方,有自己的筛选器和发送规则。 事件与课时携带相同的信息:日期、参与者、教室。在受邀者中,教师负责签到表;班级和小组构成受众。 您不必全部发送。连接器按您在事件上设置的**标签**筛选——参见 [临时事件](#page-schedules.events):只发送带某个标签的事件,或者反过来,除带某个标签的之外全部发送。**排除始终优先**,因此最实用的规则是:全部发送,但您标记为*无需签名*的除外(例如)。 #### 已有ERP的情况 最简单的情况是学校在Omniscol中管理课时,然后在Edusign中签名。这是连接器最直接的使用场景。 在已围绕ERP(如 [Aurion](#page-integrations.aurion) 或 [Auriga](#page-integrations.auriga))搭建体系的学校里,架构通常是以该ERP为中心的星形结构。它把基础数据发送到Omniscol——教师、教室、科目、小组,甚至学生——然后Omniscol把自己生成的课时回传给它。 从这时起,Edusign多数情况下接入的是ERP,而不是直接接入Omniscol。视所选的组织方式,要么由ERP把课时转发给Edusign(必要时经由ETL),要么由Edusign定期从ERP中读取。 在这种拓扑中,外部引用不会相互替换:它们按需要完成的交换叠加。同一位教师在Omniscol中可以带有一个ERP引用,必要时再带有一个独立的Edusign引用。在 实体同步 选项卡中,每个已配置的系统针对相同的实体仍分别关联。 #### 重置 清除按钮会从Edusign中移除当前学年内**来自Omniscol的课时**。它不会触及教师、小组,也不会触及直接在Edusign中创建的课程:目的是清理连接器推送的内容,而不是清除您环境中的其余部分。 Edusign对删除频率限制很严:每次最多移除几百个课时。如果还有剩余,请再次运行清除——活动日志会显示每次之后剩余的数量。 连接器在Edusign中创建的内容并不总是严格意义上的清除:在那里删除教师实际上是归档。因此,请在了解这一点的前提下启用创建功能。 --- ## 10. 门户 ### 10.1 学生门户 *Source: `help/zh-cn/portal/student-portal.md` · id: portal.student-portal · Audience: student/admin · Plan: standard · Updated: 2026-06-13* **学生门户**是专为学习者提供的界面。它比管理员界面更简单、更有针对性,只提供学生日常所需的内容:个人课表、所在班级的课表、缺勤情况以及日历分享。 #### 个人课表 打开后,学生会看到**自己的课表**,显示当前这一周:科目、时间、教室、教师。提供三种常用视图: - **周**——标准网格,按学校配置显示5天或7天。 - **天**——按时间顺序排列的日程,适合在手机上使用。 - **列表**——按顺序列出接下来的课时,不带网格。 临时变动(课时调整、更换教室、取消)都会体现出来:学生每次打开或刷新视图,看到的都是最新状态。 #### 查看班级课表 除了个人课表,学生还可以查看**所在班级的课表**以及这些班级中**小组**的课表。访问权限仅限于此:学生不能查看其他班级、教师或教室的课表。 管理员可以限制学生的**查看范围**:通过一个设置指定可见的未来周数,或将访问设为 **无限**。参见 [可见性限制](#page-admin.visibility-restrictions)。 #### 与个人日历同步 课表视图中的分享图标 分享 会打开 分享 窗口。其中的 **iCal** 标签页提供个人订阅网址,可粘贴到Google日历、Apple日历或Outlook中。该网址可以复制,可以下载为`.ics`文件,也可以扫描二维码。 详情参见 [iCal——订阅与动态链接](#page-integrations.ical)。日历应用会定期刷新订阅:Omniscol中的课表一有变化,学生的日历里就会显示更新。 #### 登记缺勤 如果学校允许,学生可以在门户中登记自己的缺勤:日期、可能涉及的时间、原因和评论。参见 [登记缺勤](#page-absences.declaring)。 申请会出现在 缺勤管理模块中,状态为 待处理,等待管理员审批。表单不支持上传证明材料。 #### 界面语言 界面语言跟随用户浏览器的语言。学生可以在用户菜单的 语言 项中选择其他语言;该选择会保存在账户中,下次登录时继续使用。 #### 另请参阅 - [教师门户](#page-portal.teacher-portal) - [访客门户(家长、观察员)](#page-portal.guest-portal) - [iCal——订阅与动态链接](#page-integrations.ical) - [登记缺勤](#page-absences.declaring) - [可见性限制](#page-admin.visibility-restrictions) ### 10.2 教师门户 *Source: `help/zh-cn/portal/teacher-portal.md` · id: portal.teacher-portal · Audience: teacher/admin · Plan: standard · Updated: 2026-06-26* **教师门户**是专为教师提供的界面。它满足教师的三项日常需求:查看课表、填写可用时间、登记缺勤。默认情况下,它还可以查看同事、班级和教室的课表。 #### 教师课表 教师可以看到当前这一周自己**授课的课时**:科目、班级、小组、教室、时间。提供三种视图: - **周**——标准网格视图。 - **天**——按时间顺序排列的日程视图。 - **列表**——不带网格的时间顺序列表,适合在手机上使用。 课表的变动(课时调整或取消、增加临时课时)都会体现出来:教师每次打开或刷新视图,看到的都是最新状态。 #### 填写可用时间 如果学校已启用可用时间填写,教师通过用户菜单中的 **信息** 项打开自己的详情;**可用时间** 标签页中有一个网格,教师可以在其中为下一次课表编排声明自己的偏好: - **不可用** 时段——硬性约束,算法绝不会在此安排课时,手动排课时在此安排会产生冲突, - **不希望** 时段——算法会尽量避免在此安排课时,但并非绝对禁止,手动排课时在此安排会看到提醒, - **优先** 时段——算法会优先选择这些时段。 未标记的时间范围保持中性:可用,没有偏好。 标记颜色的确切含义和填写建议,参见 [教师的可用时间](#page-core-concepts.wishes-and-availability)。 教师还可以添加**自由评论**(例如“因另有工作安排,周五不授课”),帮助学校管理人员了解情况。 #### 登记缺勤 教师可以通过 **申报缺勤** 按钮告知自己不能到岗: - 涉及的日期; - 全天或具体时段; - 原因; - 简短评论。 申请会出现在 **缺勤管理**模块中,状态为 **待处理**,等待管理员审批。之后代课在同一模块中处理;门户中的表单不会调整课时,也不能上传证明材料。参见 [登记缺勤](#page-absences.declaring)。 #### 查看同事和班级的课表 默认情况下,教师可以查看其他教师的课表(便于约定会议时间)、班级的课表(便于找到空闲时段安排外出活动)以及教室的课表。严格的设置(参见 [可见性限制](#page-admin.visibility-restrictions))会隐藏**其他教师**的课表;它只针对同事之间的课表,班级和教室的课表仍然开放。 #### 与个人日历同步 与学生端一样,课表视图中的分享图标 **分享** 会打开 **分享** 窗口,其中的 **iCal** 标签页提供个人订阅网址,可粘贴到Google日历、Apple日历或Outlook中。参见 [iCal——订阅与动态链接](#page-integrations.ical)。 这对希望在同一个日历中同时查看课时、会议和个人安排的教师很方便。 #### 另请参阅 - [学生门户](#page-portal.student-portal) - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [iCal——订阅与动态链接](#page-integrations.ical) - [登记缺勤](#page-absences.declaring) - [可见性限制](#page-admin.visibility-restrictions) ### 10.3 访客门户(公开链接) *Source: `help/zh-cn/portal/guest-portal.md` · id: portal.guest-portal · Plan: standard · Updated: 2026-05-15* **访客门户**在这里指没有本校Omniscol账户的人查看课表的方式。最常见的情况是带签名的公开链接:一个限定了具体范围的网址,以只读方式打开。 #### 访问方式 请根据需要选择: - **带签名的公开链接**——网址中包含一个保密令牌,无需登录即可访问某一份指定的课表(某名学生、某个班级、某间教室或某位教师)。适合分享给家长:只需一个链接,无需记住密码。参见 [公开分享链接](#page-portal.share-links)。 - **受限的Omniscol账户**——如果对方需要长期访问、需要登录验证,或需要查看多个范围,请改为创建账户,并设置合适的角色和权限。不要把这种情况当作匿名公开链接来介绍。 #### 访客能看到什么 访客以**严格只读**的方式查看课表: - 不能修改, - 不能登记缺勤, - 不能填写可用时间, - 不能查看链接范围之外的其他课表。 链接会打开预设的只读查看页面。对于**课表**,页面会自动精简显示——不显示顶部横幅和应用菜单,整个页面只突出日历。这种外观对应网址中的`raw=true`参数:课表链接会自动带上该参数,其他页面可选,熟悉的用户也可以手动添加。它不会改变身份验证方式,也不会改变链接的范围。 有些分享链接用于完成特定操作,而不是查看:教师填写可用时间的链接只开放预设的表单,直到到期日期为止。 #### 使用场景:学生家长(中小学) 初中和高中的典型流程: 1. 管理员(或学生本人)生成学生课表的分享链接。 2. 通过电子邮件把链接发给家长。 3. 家长打开链接,就能看到孩子的课表。 4. 家长还可以在同一个链接中订阅iCal,把课表直接加入Google日历或Apple日历。 无需创建账户,也无需管理密码。 #### 使用场景:长期观察员 如果外部的教学负责人需要全年跟踪某个培养方案,默认不要使用匿名公开链接。请创建一个仅限所需范围的受限Omniscol账户,或者采用带签名的分享方式,设置较短的有效期并控制续期。 #### 安全 - 带签名的公开链接在到期日期之前一直可用。如果该链接所属账户的密码被修改(或该账户被停用),链接就会失效;iCal链接在学校的访问密钥轮换后也会失效。 - 受限的Omniscol账户可以像其他用户账户一样被停用。 - 通过公开链接的访问,不应被当作已通过身份验证的内部用户。 #### 另请参阅 - [公开分享链接](#page-portal.share-links) - [学生门户](#page-portal.student-portal) - [iCal——订阅与动态链接](#page-integrations.ical) - [通过公开链接分享课表](#page-schedules.share-link) ### 10.4 公开分享链接 *Source: `help/zh-cn/portal/share-links.md` · id: portal.share-links · Audience: admin · Plan: standard · Updated: 2026-06-13* **公开分享链接**是一个带签名的网址,无需登录即可以只读方式打开某个查看页面——最常见的是课表。对于没有(也不会有)Omniscol账户的人,例如家长、外部合作方或行政部门,这是分发日历最简单的渠道。 #### 可用格式 根据使用场景和分享者的权限,Omniscol可以生成多种带签名的网址: - **响应式网页**——类似门户的可浏览页面,提供周、天和列表视图。在浏览器中打开链接看到的就是这个页面。 - **iCal订阅源(`.ics`)**——供Google日历、Apple日历和Outlook使用的动态订阅。参见 [iCal——订阅与动态链接](#page-integrations.ical)。 - **JSON(API)**——供开发人员和系统间集成使用,需该格式已获允许。 这些格式并非一定都有:弹窗会显示当前所选内容实际生成的标签页。 #### 可以分享什么? 分享不限于课表查看页面:同一个分享图标 **分享** 出现在Omniscol的大多数页面上。 **只读**分享的内容包括: - **某个对象的课表**——学生、班级、教师、教室或科目:这是最常见的情况(家长、同事、兼职教师、技术部门); - **课表**模块的**完整课表页面**; - 六种**仪表盘**(教师、教室、资源、科目、班级、学生); - **缺勤管理**页面(教师、班级、学生、员工); - **人员调度**模块的**值班表**(网格、任务、日程表、签到表); - 课表的**查看**、**调课**和**排版**页面; - 教师或员工成员的详情。 **可读写**——仅有两种情况——是分享 教师或员工成员的**可用时间填写**:专用链接允许当事人在到期日期之前填写并确认自己的可用时间,并编辑自己的个人资料,**无需Omniscol账户和密码**。该链接与其本人身份绑定,只会在其本人的详情中提供。班级、教室、小组或课程的时间限制仍是内部编辑页面:不能通过分享链接收集。 每个带签名的网址都包含所请求的范围和到期日期。 #### 创建分享链接 在 **课表**模块中,选择要分享的课表(学生、班级、教室等),然后点击分享图标 **分享**。打开的 **分享** 窗口提供: - **到期日期**——生成的网址在此日期之前有效。 - **Web、iCal和JSON标签页**——根据该分享生成的格式显示。 然后复制所需的网址。对于供人查看的链接,弹窗可能会显示二维码。 #### 限制或使链接失效 公开分享不保存已发出链接的记录:Omniscol不提供已发出链接的汇总列表,不统计访问次数,也不能逐个撤销链接。因此,使链接失效要通过所属账户(密码、停用)和到期日期来实现。 为降低风险: - 选择较短的到期日期; - 只分享必要的范围; - 面向团队分发时,使用**有明确身份的服务账户**,而不是个人账户; - 如果链接被不当传播,请修改或重置所属账户的密码,必要时停用该账户。 修改密码会使该账户持有的链接失效,即使新密码与旧密码的明文相同也是如此,因为存储的哈希值会改变。停用或删除所属账户同样会切断访问。 #### 安全 - 网址包含带签名且难以猜测的令牌。 - 链接**只开放令牌中登记的页面**,而不是账户的其余部分。对于**对象课表**(以及所有**iCal**订阅源),筛选条件固定在令牌中:收件人只能查看该对象——持有孩子课表链接的家长无法看到其他学生的课表。而**完整课表页面**的分享则反映**生成该链接的账户的权限**:如需有针对性地对外分发,请分享具体对象的课表,而不是整个页面。 - 有效期以到期日期为限。 - 有效性还取决于所属账户:修改密码、停用或删除账户都会使相关链接失效。 - 任何拿到网址的人,在到期或失效之前都可以查看所分享的范围。 #### 将课表嵌入网页(iframe) **目前无法嵌入到其他网站。**为防止点击劫持,Omniscol禁止在其他域名托管的框架(`iframe`)中显示。如果您尝试把课表嵌入学校的教学平台、内网或公开网站,浏览器会**拒绝**显示该框架。这一安全限制由Omniscol设置,学校账户无法更改。 唯一的例外是与您的Omniscol实例域名完全相同的页面,实际中很少见。 如果仍需在外部网站上发布课表,有三种简单的办法: - **一个链接**指向分享网址:读者在新标签页中打开课表,没有嵌入框架; - **iCal订阅**,让课表显示在对方的日历中(Google日历、Outlook等)——参见 [iCal——订阅与动态链接](#page-integrations.ical); - **信息显示屏**,用于在校内设置公共屏幕——参见 [信息显示屏](#page-panels.lobby-panel)。 #### 操作步骤 — 创建带有效期的家长链接 1. **要把班级课表分享给家长**而不为他们创建账户:使用带签名、限时有效的公开链接。 2. **打开目标课表**:在 **课表**模块中选择相应班级。分享图标 **分享** 位于视图的标题栏中。 3. **分享窗口**:选择**到期日期**。分享给家长时,最长设置到相关学期结束。 4. **复制所需的格式。**直接查看用Web,日历订阅用iCal,只有计划做API集成时才用JSON。Omniscol也可以显示二维码,便于印刷分发。 5. **通过预定的渠道发送链接**:家长会、通讯、教学平台、内网或定向消息。 6. **如果链接传播到了预期范围之外**,请创建一个范围更小的新链接,必要时再使旧账户持有的链接失效:修改密码、停用或删除所属账户。 #### 另请参阅 - [访客门户(家长、观察员)](#page-portal.guest-portal) - [iCal——订阅与动态链接](#page-integrations.ical) - [通过公开链接分享课表](#page-schedules.share-link) --- ## 11. 信息显示屏 ### 11.1 为大厅或走廊配置信息显示屏 *Source: `help/zh-cn/panels/lobby-panel.md` · id: panels.lobby-panel · Audience: admin · Plan: standard · Updated: 2026-05-12* **信息显示屏**是一个网页,需在电视、显示器或平板电脑的浏览器中全屏加载,用来向学校的公众展示当天的课时和活动。接待大厅的屏幕、走廊里的屏幕、实验室门口或阶梯教室对面的屏幕,都可以使用这一功能:显示的内容只取决于您设置的筛选条件,与屏幕放置的位置无关。您可以创建任意数量的显示屏,每块都有各自的筛选条件和访问URL。 #### 创建新的显示屏 在**课表**模块中,点击**信息显示屏**按钮,打开配置界面。左侧列表显示现有的显示屏;点击(绿色的)**添加**按钮可新建一块空白显示屏。您也可以用**复制**复制现有的显示屏,如果您管理的一批屏幕共用同一套视觉规范,这样更快。 每块显示屏都有一个**标签**,便于在列表中找到它,还有一个**标题**,显示在公共屏幕的顶部。两者可以不同:管理端用`主楼大厅——A区`,屏幕端用`欢迎来到X学校——A区`。 #### 筛选显示的课时 主要的筛选条件——**显示**属性——决定哪些内容显示在屏幕上。有四个互补的维度: - **年级**——一次选中某个年级的所有班级(例如所有6年级班级)。 - **班级**——明确选择一个或多个班级。 - **校区**——某个校区的所有教室(适合放在特定校区大厅的屏幕)。 - **教室**——明确选择一间或多间教室(适合覆盖教学楼某一侧的显示屏)。 筛选条件为空即显示所有课时。对于需要展示全校各处情况的中央大厅屏幕,这是合适的默认设置。 第二个列表——**隐藏**——可以临时把某些课时从已选内容中排除: - 要隐藏的**科目**(例如体育课在远离主楼的地方上,就不显示); - 要隐藏的**课时类型**(例如不宜向公众公布的考试)。 筛选与隐藏叠加生效:先保留所有符合筛选条件的内容,再去掉符合隐藏条件的内容。 #### 设置显示的时间范围 **时间范围**属性控制显示屏向前显示多少课时: - **当天最后一节**(默认)——滚动显示今天正在进行和即将开始的课时(进行中的课时会一直显示到结束时间)。适合全天使用的屏幕。 - **滑动窗口**——最多到**+2小时**,按30分钟递增;之后到**+12小时**,按整点递增。显示屏只显示从当前时间起、在所选窗口内开始的课时。适合信息量很大的大厅屏幕,避免信息堆满屏幕:例如只显示接下来的两个小时。 浏览器端会自动刷新,无需手动重新加载;随着当前时间推移,已结束的课时移出窗口,后续的课时进入窗口。 #### 添加临时消息 **信息**部分可以在显示屏上显示一条或多条文字消息,每条都有各自的时间范围。典型用途: - 通知活动(`家长会,17:30在B204教室`), - 提醒异常情况(`南翼施工,请从后门进入`), - 发布欢迎语(`欢迎参加开放日`)。 每条消息包含自由文本、开始时间和结束时间。超出这一时间范围,消息会自动消失,您不必事后再去撤下。 #### 获取显示屏的公开URL 保存后,每块显示屏都有一个**唯一的URL**,需在目标设备上全屏打开。URL中含有一个保密的哈希值,可免登录访问——这样未经认证的电视也能显示内容。只要哈希值没有公开传播,显示屏就无法被他人访问。 最佳做法:在浏览器的**全屏展示模式**中打开此URL(Chrome用`--kiosk`,Firefox用F11),最好使用连接到屏幕的微型主机或信息发布盒。刷新和滚动由浏览器自行处理。 #### 操作步骤 — 创建信息显示屏 1. **信息显示屏是一个网页**,需在电视或显示器上全屏加载,用来展示当天的课时。 2. **点击**添加**按钮**,新建一块空白显示屏。您也可以复制现有的显示屏作为起点——如果您管理的一批屏幕采用相同的视觉规范,可以节省时间。 3. **填写标签和标题**:**标签**(管理端使用,便于在列表中找到)和**标题**(显示在公共屏幕顶部)。例如:管理端用`主楼大厅——A区`,屏幕端用`欢迎来到X学校`。 4. **选择课时筛选条件**:在**显示**属性中选择年级、班级、校区或教室。筛选条件为空即显示所有课时。对于中央大厅的显示屏,通常留空;对于教室门口的屏幕,请选择该教室。 5. **按需添加临时消息**,并设置时间范围(会议、异常情况、欢迎语)。超出时间范围,消息会自动从显示中消失。 6. **保存。** 您会得到该显示屏的唯一URL,请在目标设备上以全屏展示模式打开(Chrome用`--kiosk`,Firefox用F11)。之后会自动刷新。 #### 另请参阅 - [信息显示屏](#page-glossary.panel) - [教室门口的显示屏](#page-panels.room-panel) - [显示屏的自定义](#page-panels.customization) ### 11.2 为教室门口配置信息显示屏 *Source: `help/zh-cn/panels/room-panel.md` · id: panels.room-panel · Audience: admin · Plan: standard · Updated: 2026-06-13* **教室门口的显示屏**是信息显示屏的一种特殊情形:配置与大厅显示屏相同,只是筛选条件锁定**一间教室**,而不是某个校区或年级。放在门边的屏幕只显示对应教室的占用情况,回答走廊里的人们想知道的问题:*“这间教室现在和接下来有什么安排?”* 典型场景: - 阶梯教室的门口, - 实验室或机房的入口, - 多个专业共用的多功能教室, - 工作室或工坊(音乐、设计、视频)。 #### 配置 **课表**模块提供与大厅显示屏相同的**信息显示屏**按钮。区别在于筛选条件:在**显示**部分选择**教室**,然后选中对应的那间教室。 其他设置与大厅显示屏相同: - 管理端的**标签**(例如`B204门口`),屏幕端的**标题**(例如`B204教室——实验科学`)。 - **时间范围**:建议选择**+2小时**或**+4小时**,而不是整天——对于一间教室,用户主要想知道正在进行的课时和下一节课时。 - **字体尺寸**:在走廊里1至2米处阅读的屏幕,通常适合选**大**;屏幕靠得更近时可以小一些。 - **消息**:适合通知临时预订(`教室已预订用于14:00的班级评议会`)或不可用情况(`教室维护至15:00`)。 #### 同一块屏幕显示多间教室 如果一块屏幕覆盖几间相邻的教室(教学楼的某一侧、同一实验室的多间教室),可以在筛选条件中选择多间教室。所选教室的课时会**合并为一个按时间排序的列表**;如果列表超出屏幕,显示屏会**分页**(翻页滚动),不会逐间教室轮换。如果想真正按教室分别显示,请为每间教室创建一块显示屏——每块都有各自的URL。同一台微型主机可以通过多个全屏标签页显示多块显示屏,这依靠浏览器或系统的展示模式功能(不是Omniscol的设置)。 #### URL与部署 每块显示屏都有唯一的URL,无需登录,需在门边设备上以全屏展示模式打开。刷新是自动的,采用定期轮询:显示内容大约每分钟按当前时间重新筛选,数据每五分钟重新加载一次——无需任何手动操作,但更新并非即时。 #### 操作步骤 — 创建教室门口的显示屏 1. **教室门口的显示屏**展示这间教室未来几个小时的占用情况。与大厅显示屏的区别:单间教室筛选、较短的时间范围、适合走廊阅读的字体大小。 2. 在**课表**模块中点击**添加**,新建一块显示屏(或复制现有的大厅显示屏再调整)。 3. **填写标签和标题。** 标签用于管理端(`B204门口`),标题用于屏幕端(`B204教室——实验科学`)。标题是走廊里的人们看到的内容。 4. **筛选:在显示部分选择教室**,选中**对应的教室**。如果屏幕覆盖教学楼的一侧(多间相邻教室),请把它们全部选中——它们的课时会合并为一个按时间排序的列表,必要时分页。 5. **教室门口的专用设置:** - **时间范围**:建议选择`+2小时`或`+4小时`,而不是整天——用户想知道正在进行的课时和下一节课时。 - **字体尺寸**:1至2米处阅读的屏幕选`大`。 - **消息**:适合通知临时预订或不可用情况。 6. **保存。** 获取显示屏的唯一URL,在门边设备上以全屏展示模式打开。刷新采用定期轮询自动完成(大约每分钟重新筛选,每五分钟重新加载数据)。 #### 另请参阅 - [信息显示屏](#page-glossary.panel) - [信息显示屏](#page-panels.lobby-panel) - [显示屏的自定义](#page-panels.customization) ### 11.3 信息显示屏的外观自定义 *Source: `help/zh-cn/panels/customization.md` · id: panels.customization · Audience: admin · Plan: standard · Updated: 2026-05-12* Omniscol的信息显示屏可以融入您学校的视觉形象。自定义分为两个层次:(1)**界面内的设置**(可满足大多数情形);(2)**完整替换**渲染显示屏的网页(适用于对视觉形象要求很高的部署)。 #### 界面内的设置 在**课表**模块中,点击**信息显示屏**按钮,即可打开显示屏的配置界面。该界面提供以下渲染选项,无需改动代码即可修改: - **字体尺寸**——小、中或大。显示使用相对于窗口大小的单位(`vmin`),因此无论屏幕是何种比例(`16:9`、`4:3`、竖屏),可读性都保持一致。 - **色彩**——背景色、文字颜色,以及课时表格中奇数行和偶数行的颜色。支持所有十六进制颜色代码,您可以直接套用学校视觉规范的配色。 - **标题栏**——按顺序组合:**标题**、**标志**、**当前日期和时间**。您可以选择标题栏中显示哪些内容及其顺序。 - **列**——从**教室**、**班级**、**教师**、**科目**、**课时时间**中选择并排序。隐藏某一列(例如面向公众的入口显示屏隐藏教师列)或调整列的顺序,都能立即生效。 - **教师姓名格式**——名+姓、姓+名、头衔+姓(王老师)、头衔+名。头衔会自动跟随界面语言;每块显示屏可设置的是所采用的**格式**。 - **标志**——在学校配置中上传的学校标志可以显示在标题栏中。 这些设置保存在显示屏的配置中。请注意:课时和消息会自动刷新,而这些**视觉**选项(颜色、字体尺寸、列、标题栏、姓名格式)是在页面加载时嵌入的。保存之后,请**重新加载**屏幕上已打开的标签页(按F5,或重启展示模式页面),新的显示效果才会生效。 #### 完整替换模板(MIT许可证) 渲染显示页面的模板明确采用**MIT许可证**,可以复制后修改,用于定制学校的显示屏。 对于希望超越界面设置的学校,这带来了几种方案: - **完整的视觉重构**——重写模板的HTML/CSS,以贴合鲜明的视觉规范(专有字体、特定动画、非标准版式)。 - **集成到现有的信息发布系统**——把Omniscol显示屏的内容嵌入全局显示页面,与课时、天气、学校新闻、视频等内容一同轮播。 - **专门的业务视图**——例如为监管人员(谁负责什么)或后勤部门(教室占用及设备需求)创建专用显示。 为此有两种互补的做法: 1. **复制模板**——如果您自行托管Omniscol,请复制`panel.dot`,修改后部署您自己的版本。MIT许可证明确允许修改、再分发和商业使用。 2. **显示屏的JSON API**——如果您想继续以Omniscol作为数据源,而由第三方负责渲染显示,显示屏的URL还提供JSON版本(`GET /panels/:accesshash/lessons`)。它返回按显示屏配置筛选后的课时列表,可直接供第三方信息发布系统(Yodeck、Xibo、ScreenCloud或自建看板)使用。该URL通过显示屏的访问密钥打开,无需额外的令牌。如需更广泛的系统间集成,Omniscol REST API的说明见[Omniscol API](#page-integrations.api-tokens)。 #### 实用建议 部署中经常遇到以下几点: - **对比度**——对于每天运行12小时的屏幕,深色背景配浅色文字比白色背景更护眼。 - **字体选“大”**,只要屏幕是在2米以外阅读(典型如入口大厅)。教室门口的屏幕观看距离更近,保持“中”即可。 - **标题栏中的标志**——当大型校园内有多块显示屏时,标志始终有助于快速识别。 - **标题栏中的日期**——在大厅很有用(访客会核对日期),在教室门口则作用不大(情境一目了然)。 - **隐藏教师列**——如果学校对公开显示姓名有内部规定,请在面向公众的显示屏上隐藏教师列。 #### 操作步骤 — 让显示屏符合学校的视觉规范 1. **两个层次的自定义**:(1)界面内的设置(90%的情形足够);(2)视觉规范要求很高时,完整替换MIT模板。 2. **打开显示屏的配置**:在**课表**模块中,点击**信息显示屏**按钮。界面会显示渲染选项:颜色、字体尺寸、标题栏、列、姓名格式。 3. **让颜色贴合学校规范**:背景色、文字颜色、奇偶行颜色。支持十六进制颜色代码。对于每天运行12小时的屏幕,建议选择**深色背景加浅色文字**(更护眼)。 4. **标题栏**:选择**标志**、**标题**、**日期**的顺序。只要有多块显示屏,标志就很有用;日期在大厅有用,在教室门口可以省去。 5. **列**:从教室、班级、教师、科目、课时时间中选择并排序。对于校规禁止公开显示姓名的**面向公众的入口显示屏**,请隐藏**教师**列。 **姓名格式**(如保留):名+姓、姓+名、头衔+姓、头衔+名。 6. **字体尺寸**:在2米以外阅读时选大(大厅),教室门口(近距离观看)选中。使用相对的`vmin`单位——无论屏幕比例如何,可读性都保持一致。 7. **保存,然后重新加载屏幕。** 这些视觉设置是在页面加载时嵌入的:请重新加载(F5)显示屏上已打开的标签页,新的显示效果才会生效。 **进一步定制**(完整重构、集成第三方信息发布系统Yodeck/Xibo/ScreenCloud):模板`panel.dot`采用**MIT许可证**,允许复制修改。显示屏URL的JSON版本(`GET /panels/:accesshash/lessons`)提供可供外部系统直接使用的数据,需使用显示屏的访问密钥。更广泛的REST API请参见[Omniscol API](#page-integrations.api-tokens)。 #### 另请参阅 - [信息显示屏](#page-panels.lobby-panel) - [教室门口的显示屏](#page-panels.room-panel) - [信息显示屏](#page-glossary.panel) - [Omniscol API](#page-integrations.api-tokens) --- ## 12. 从其他软件迁移 ### 12.1 从其他软件迁移——概览 *Source: `help/zh-cn/migration/overview.md` · id: migration.overview · Audience: admin · Updated: 2026-05-10* 您是从其他课表管理软件转到Omniscol的吗?根据原软件的不同,以及可用导出文件的完整程度,有多种途径可选。 #### 可用的方式 ##### 1. 原生格式导入器 对于两款软件,Omniscol可以直接读取其原生导出文件,无需经过中间表格:您在“导入/导出”界面中选择一个或多个文件即可(UnDeuxTEMPS的导入由多个`.DBF`文件组成,位于法国格式的分区中)。 | 原软件 | 可直接读取的格式 | 专页 | | --- | --- | --- | | ASC Timetables | aSc XML文件 | [从aSc Timetables迁移](#page-migration.from-asc) | | UnDeuxTEMPS | UDT文件(`.DBF`) | [migration.from-undeuxtemps](#page-migration.from-undeuxtemps) | 对于其他软件(Hyperplanning、EDT / Pronote、ADE),需要通过第2点所述的表格**批量导入**:您先从原软件导出数据,在表格中整理好格式,再导入。下面每一页都详细说明了对应软件特有的对应关系和注意事项: - [从Hyperplanning(Index Education)迁移](#page-migration.from-hyperplanning) - [从EDT / PRONOTE(Index Education)迁移](#page-migration.from-edt) - [从ADE / ADE Campus迁移](#page-migration.from-ade) > **Aurion和Auriga**是**ERP**(学校行政管理系统),不是排课软件。Omniscol可以与它们对接,但不会取代它们。集成方式参见[integrations.aurion](#page-integrations.aurion)和[integrations.auriga](#page-integrations.auriga)。 ##### 2. 通用表格导入 如果您的原软件没有原生导入器,或者您更希望自己掌控格式:把数据提取到表格中(Excel、Google Sheets、Numbers、Calc),再使用Omniscol的**批量导入**。参见[通过表格批量导入课程](#page-timetables.mass-import)。 ##### 3. 直接使用API 如果要进行**自动化**迁移(例如在两款软件的过渡期内需要保持同步),您可以编写脚本,通过Omniscol的API推送数据。参见[Omniscol API](#page-integrations.api-tokens)。 ##### 4. 手动录入 对于小型学校或部分迁移,仍然可以手动录入。视规模大小,大约需要几个小时到几天。 #### 推荐的迁移策略 1. **梳理您的数据**——首先盘点您想转移的内容:教师、学生、教室、科目、班级结构、当前课表、可用时间、缺勤。 2. **确定范围**——通常不会全部转移。学生数据可以继续保留在学生信息系统中,之后再同步。历史课表可以单独存档。 3. **做一次局部测试导入**——选取一个子集(一个班级、一个年级),验证转移的质量。 4. **确定时间安排**——通常在**下一个学年开始时**切换,而不是在学年中途,以免处理衔接问题。 5. **培训用户**——Omniscol的约定与其他软件不同。请预留培训时间,特别是业务概念方面([班内分组](#page-glossary.class-division)、[小组对齐](#page-glossary.alignment)、[教学小组组合](#page-glossary.groups-of-groups))。 #### 不同原软件的术语差异 | 其他软件的术语 | Omniscol中的对应 | | --- | --- | | Hyperplanning意义上的“资源”(教师、教室、班级等) | 视情况对应多个实体 | | EDT/Pronote意义上的“课”(排在课表上的单位) | [课时](#page-glossary.lesson) | | 教学意义上的“课”(班级的科目) | [课程](#page-glossary.course) | | “楼栋” | [教室](#page-glossary.classroom)上的标签或教学楼 | | 高等教育中的“培训项目” | [班级](#page-glossary.class),或一组班级 | | “教学模块 / 模块单元 / 子模块” | [科目](#page-glossary.subject),并约定命名规则 | #### 另请参阅 - [为批量导入准备数据](#page-getting-started.preparing-data) - [通过表格批量导入课程](#page-timetables.mass-import) - [Omniscol API](#page-integrations.api-tokens) - [FAQ——高等教育使用场景](#page-faq.higher-ed-cases) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) ### 12.2 从Hyperplanning(Index Education)迁移 *Source: `help/zh-cn/migration/from-hyperplanning.md` · id: migration.from-hyperplanning · Audience: admin · Updated: 2026-06-30* Hyperplanning(Index Education)是法国高等教育领域应用最广的课表管理工具。迁移到Omniscol,需要把您现有的数据(用户、结构、当前课表)按Omniscol的概念重新整理。本页汇总了两者的对应关系和已知的注意事项。 #### 可直接对应的内容 | Hyperplanning | Omniscol | | --- | --- | | 年级(Promotion,公共课程) | 班级 | | 年级的分组(Partition) | 互不重叠的小组;若这些小组共用同一时段(习题课、实验课同时进行),则使用**班内分组** | | 习题课分组(来自某个分组方案) | 班内分组中的一个小组 | | 选修课 | 小组 | | 合班(Regroupement) | 教学小组组合(或不同班级/年级之间的小组对齐) | | 课程 | 课程(及其课时) | | 科目/模块(教学模块、模块单元) | 科目(通常需要自定义) | | 日历/时期 | 日历模式(带日期的课表,Premium);日期窗口用于纳入或排除某些时期 | | 教室 | 教室(专业教室类型需要重新设置) | | 外部授课人/兼职教师 | 标记为外聘教师的教师(Premium选项) | #### 需要留意的内容 - **小组对齐**:在Hyperplanning中,让多个年级的习题课分组或选修课分组同时修同一门课,要通过**合堂课**实现(通常借助合班来搭建)。当这门合堂课要求不同班级的小组在同一时段、同一间教室、由同一位教师授课时,对应的就是Omniscol的**对齐**。参见[小组对齐](#page-core-concepts.alignments)。 - **合班**:Hyperplanning的合班把若干小组合在一起修同一门课;在Omniscol中对应**教学小组组合**(所有套餐均可使用)。参见[教学小组组合](#page-core-concepts.groups-of-groups)。视具体情况,不同班级或年级之间的合班也可能属于上文所说的**对齐**。 - **关联课时**(半组轮换):Omniscol通过**关联课时**原生支持这种安排。参见[复杂课时](#page-core-concepts.complex-lessons)。 - **教学服务**:要保持教学的连续性(各节课使用相同的资源),只需让同一门课程的各个课时保持同一位教师和同一间教室——没有专门的实体。 - **日历课程**:如果您在Hyperplanning中使用日历模式管理日期固定的模块,Omniscol的[日历模式](#page-timetables.calendar-mode)可以满足同样的需求,包含在Premium套餐中。 - **Hyperplanning与Aurion**:如果您的学校同时使用Hyperplanning**和**Aurion,迁移只涉及排课部分;Aurion仍继续提供行政结构数据。参见[与外部系统同步](#page-integrations.extsync)。 #### 操作步骤 1. **从Hyperplanning取出数据**,放入表格——教师、学生、教室和课程的清单。视版本而定,可以通过复制粘贴清单或导出来完成,请参阅Hyperplanning的文档。 2. **按导入格式准备Omniscol文件**:用户CSV、课程CSV。参见[为批量导入准备数据](#page-getting-started.preparing-data)。 3. **创建一个Omniscol沙盒账户**,用来放心地测试导入。 4. **分多次导入**: - 用户(教师、学生), - 班级和小组, - 科目, - 课程,通过[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import)。 5. **重新搭建复杂课时**(对齐、关联课时、交替周)——如果导入时它们被拍平了,就手动重建。 6. **查看诊断**,并修正检测到的不一致。 7. **运行一次测试生成**,验证方案是否可行。 8. 切换到正式账户之前先做**快照**。 #### 平稳迁移用户 推荐做法:先以**未激活**状态把用户导入Omniscol。您可以先核对数据、切换配置(如适用,包括单点登录),等一切就绪后一次性激活所有账户。这样可以避免用户过早收到邀请。 #### 不会迁移的内容 - 当前课表之外的**Hyperplanning历史记录**——若要保留历史,请把Hyperplanning以只读方式留作存档,而不要全部迁移。 - Hyperplanning的**外观自定义**——请按您学校的视觉规范在Omniscol中重新设置。参见[显示屏的自定义](#page-panels.customization)。 #### 操作步骤 — 从Hyperplanning迁移到Omniscol 1. **从Hyperplanning迁移**:8个阶段依次为:导出 → 准备 → 沙盒 → 多次导入 → 修正复杂课时 → 诊断 → 测试生成 → 切换。 2. **阶段1——从Hyperplanning取出数据**:把清单(教师、学生、教室、课程)导出到表格。视版本而定,可通过复制粘贴清单或导出完成,请参阅Hyperplanning的文档。源数据越干净,后续越快。 3. **阶段2-3——准备并建立沙盒**:按Omniscol的模板调整各列(参见[为批量导入准备数据(成批导入)](#page-getting-started.preparing-data))。创建一个**Omniscol沙盒账户**,在不影响正式账户的前提下测试导入。 4. **阶段4——多次导入**,顺序如下:**用户** → **班级和小组** → **科目** → **课程**,通过[第6步(补充)——通过表格批量导入课程](#page-timetables.mass-import)。顺序很重要:课程会引用班级和教师,它们必须先存在。 5. **阶段5——复杂课时**:对齐(Hyperplanning中多个年级合上的合堂课 → Omniscol的对齐)、关联课时(半组轮换)、A/B交替周。导入往往会把它们拍平——请通过课程卡片上的复杂课时图标手动重建。 6. **阶段6-7——诊断并测试生成**:运行诊断,修正不一致。再运行一次**自动生成**,在迁移到正式账户之前验证整体可行性。 7. **阶段8——切换**:切换之前先创建**快照**。激活用户账户(此前以未激活状态导入)。发布。把Hyperplanning以只读方式留作存档——迁移不会带走当前课表之外的历史记录。 如果您同时使用**Aurion**:迁移只涉及排课部分,Aurion仍是行政数据的来源。参见[与外部系统同步](#page-integrations.extsync)。 #### 另请参阅 - [从其他软件迁移——概览](#page-migration.overview) - [为批量导入准备数据](#page-getting-started.preparing-data) - [通过表格批量导入课程](#page-timetables.mass-import) - [与外部系统同步](#page-integrations.extsync) ### 12.3 从EDT / PRONOTE(Index Education)迁移 *Source: `help/zh-cn/migration/from-edt.md` · id: migration.from-edt · Audience: admin · Updated: 2026-06-30* **EDT**和**PRONOTE**(Index Education公司出品)是法国中等教育——公立和私立的初中与高中——中使用最广泛的工具。这一组合涵盖排课(EDT)和学校日常管理——成绩、成绩单、教学日志(PRONOTE)。迁移到Omniscol首先涉及排课部分;对于更深入的日常管理(成绩、成绩单、与家长沟通),PRONOTE可以继续并行使用。 #### 最直接的途径:STSweb导出 EDT的结构数据来自**STSweb**:**服务时间**(教师在某个班级承担某科目的一定授课小时数)来自STSweb,并在筹备结束时回传给它。这对迁移是个好消息,因为**Omniscol可以直接导入STSweb导出文件**(STS文件),入口在 [导入与导出](#page-admin.import-export) 页面。 这次导入会一次性重建结构数据:学校(UAI代码)、学年、**科目**、**年级**(MEF)及其法定授课小时数、**班级**(行政班)、**小组**、**教师**,以及**服务时间**——它们会成为Omniscol的**课程**。所支持的法国格式详见 [admin.french-formats](#page-admin.french-formats)。 对于STSweb不包含的内容(教室、特殊合班、细致的意愿),表格仍然有用:见下文的批量导入。 #### 需要另行迁移的内容 - **教室、异地校区**:STSweb对教室的描述不够细致。请通过表格迁移或重新录入,然后重建校区。对于一组可互换的教室(相当于EDT的“教室组”),请使用共享的**专业教室类型**,生成时会遵守该设置。参见 [专业教室类型](#page-core-concepts.classroom-specializations)。 - **教师的意愿与不可用时间**:粒度与EDT不同;请预留重新录入的时间(在开学前发送录入链接),或做一次近似导入后再调整。 - **假期和校历**:它们在学年设置中定义(国家模板或手工录入),而不是通过导出文件。 #### 继续留在PRONOTE的内容 Omniscol不会迁移以下内容(您可以继续把它们留在PRONOTE中): - 成绩、测评、成绩单、能力评估; - 教学日志、作业; - 广义的学校日常管理(与家长沟通、问卷调查); - 缺勤可以继续留在PRONOTE中,也可以在您愿意时转到Omniscol中跟踪。 #### 主要对应关系 | EDT / STSweb | Omniscol | | --- | --- | | 班级(行政班) | 班级 | | 班级的一部分 | 小组;**班内分组**用于表示同一时段互斥的关系 | | 小组(需求、专业方向、选修、语言) | 小组(班内);跨班时用对齐或教学小组组合 | | 服务时间(STSweb) | 课程(课时在排课时由其生成) | | 科目 | 科目 | | 教室 / 教室组 | 教室;可互换的一组教室 = 不固定教室(自动安排)或共享的专业教室类型 | | 异地校区 | 校区(含路程时间) | | 教师的意愿 / 不可用时间 | 可用时间(意愿);不可用时间使用“不可用”级别(黑色) | | Q1 / Q2交替(双周) | 交替周A / B | | 自习 / 图书馆(CDI) | 人员调度(看管)+ 为没有课的小组设置一门“自习课” | #### 操作步骤 1. **获取STSweb导出文件**(STS文件)——这是结构数据和服务时间的官方来源。 2. **将STS文件导入**沙盒账户,入口为 [导入与导出](#page-admin.import-export)。学校、学年、科目、年级、班级、小组、教师、服务时间(→ 课程)等结构会一次性重建。参见 [admin.french-formats](#page-admin.french-formats)。 3. **用表格补充**STSweb不包含的内容(教室、专业教室类型、特殊合班),通过批量导入完成。参见 [通过表格批量导入课程](#page-timetables.mass-import) 和 [为批量导入准备数据](#page-getting-started.preparing-data)。 4. **检查周次交替**:EDT的Q1/Q2约定必须与Omniscol的**交替周A/B**相对应。 5. **迁移教师的意愿和不可用时间**——重新录入,或做近似导入后再调整。 6. **运行Omniscol诊断**,然后启动测试生成。 7. 切换到正式账户之前,**先做快照**。 #### 过渡期间EDT与Omniscol并存 在过渡期(通常为一个学期)内,常见的做法是PRONOTE继续用于学校日常管理,而课表切换到Omniscol。PRONOTE通常从EDT获取课表;如果您希望继续在其中显示在别处管理的课表,请向Index Education确认PRONOTE能接收什么——不要想当然地认为外部数据流会被原样接收。 #### 典型的中小学迁移 初中或高中从EDT切换到Omniscol的标准情形: - 6月导出STSweb, - 暑假期间在Omniscol中导入并测试, - 9月开学时切换, - 如果学校愿意,继续用PRONOTE管理学校日常事务。 #### 操作步骤 — 典型中小学迁移:6月至9月 1. **学校从EDT/PRONOTE切换到Omniscol的典型情形**:6月导出,暑假测试,开学时切换。如有需要,继续用PRONOTE管理学校日常事务。 2. **6月——导出STSweb**:获取学校的STS文件(结构数据和服务时间的官方来源)。如果没有,可将EDT的列表(课程、服务时间、班级)导出到表格——视您的版本而定,可通过导出列表或复制粘贴;参见EDT文档。 3. **7月——Omniscol沙盒账户**:从 [导入与导出](#page-admin.import-export) 导入STS文件(参见 [admin.french-formats](#page-admin.french-formats))。结构会一次性重建。您可以从容地测试:如果有不合适的地方,慢慢迭代即可。 4. **8月——用表格补充**STSweb不包含的内容(教室、专业教室类型、特殊合班),通过批量导入完成(参见 [通过表格批量导入课程](#page-timetables.mass-import))。对齐**周次交替**(EDT的Q1/Q2 → Omniscol的A/B)。 5. **8月——教师的意愿与可用时间**:粒度不同。请预留**重新录入**(在开学前发送录入链接),或者**近似导入**后再调整。 6. **8月底——诊断**:用Omniscol诊断找出不一致之处(缺少的科目、冲突、未能迁移的可用时间)。在开学周启动一次**测试生成**,验证可行性。 7. **9月——切换**:先做快照,然后发布课表。如果您愿意,**继续使用PRONOTE**管理学校日常事务。 #### 另请参阅 - [概览](#page-migration.overview) - [从Hyperplanning(Index Education)迁移](#page-migration.from-hyperplanning) - [admin.french-formats](#page-admin.french-formats) - [通过表格批量导入课程](#page-timetables.mass-import) ### 12.4 从aSc Timetables迁移 *Source: `help/zh-cn/migration/from-asc.md` · id: migration.from-asc · Audience: admin · Updated: 2026-06-30* **aSc Timetables**(斯洛伐克)是一款历史悠久、使用广泛的课表生成软件,在国际学校和多个中欧国家尤其常见。好消息是:Omniscol可以直接读取和写入aSc Timetables的原生文件,无需中间表格,也无需手工重新映射各种结构。 #### 一个文件,双向通用 aSc Timetables将课表保存为**XML**文件(“aSc Timetables 2012”格式)。Omniscol可以: - **读取**该文件,重建完整的课表(班级、小组、教师、科目、教室、课程); - **写回**同类型的文件,供您在aSc或Edupage(同一厂商的学校管理方案)中重新打开。 所有操作都在 [导入与导出](#page-admin.import-export) 页面完成,无需任何技术操作:导出时点击 导出为aSc格式(.xml) 按钮;导入时只需选择aSc生成的XML文件。这个往返过程是**可逆的**:导出后再导入,Omniscol中的结构保持不变,仅命名习惯上可能略有差异。 #### 可以迁移的内容 读取文件时自动导入: - 班级及其**小组**(包括用于实验课的班内分组)。 - 科目及其代码。 - **教室**及其容量。 - 教师(姓名、联系方式)。 - **课程**(科目、授课小时数、教师)及已安排的**课时**(星期、时段、教室)。 - 一天中的**课间休息和其他休息时段**。 - **交替周**(A/B),前提是已在aSc中配置。 #### 导入后需要检查的内容 - aSc特有的**复杂约束**(顺序约束、条件教室、非常特殊的防连排规则):Omniscol会尽力转换,但有些规则的表达方式不同,需要复查。条件教室更适合用 [专业教室类型](#page-core-concepts.classroom-specializations) 来表达;其他规则则对应 [教师的可用时间](#page-core-concepts.wishes-and-availability) 和 [时间限制(通用机制)](#page-core-concepts.time-constraints)。 - **多个班级共享的课程**(多个班级共同的科目):会被转换为 [教学小组组合](#page-core-concepts.groups-of-groups)。请确认结果符合您的意图。 - **重命名与往返**:Omniscol不保留aSc的内部标识符;在写回aSc文件时,它会根据各实体的**名称**重建对应关系。实际操作中,如果您打算重新导出到aSc,请不要在此期间重命名班级、教师和科目,否则对应关系会错位。 #### 操作步骤 1. **在aSc中**:将课表保存为**XML**格式(2012版,或您的aSc提供的最接近的版本)。 2. **创建一个Omniscol沙盒账户**,以便安全地测试。 3. **从 [导入与导出](#page-admin.import-export) 页面导入文件**:选择aSc的XML文件,然后确认。 4. **查看Omniscol的诊断**,找出不一致之处(没有教室的课程、未能迁移的可用时间等)。 5. **调整**未能自动转换的**复杂约束**。 6. **启动一次测试生成**,检查约束产生的结果是否与您在aSc中得到的一致。 7. 切换到正式账户之前,**先做一次快照**。 #### 过渡期间继续向aSc提供数据 如果在过渡期间还需要保留aSc,可以通过反向导出,继续从Omniscol为其提供数据——例如合作学校仍在使用aSc时,这很有用。生成的文件可在aSc Desktop(2012或更高版本)中重新打开。 #### 注意事项 - **带重音的字符**:如果往返之后某些重音字符显示不正确,这是文件编码的问题。Omniscol导出时默认使用aSc Desktop所需的编码;请确认带重音的名称在导出和重新导入之后仍然完好。 - **不同的生成引擎**:aSc与Omniscol的生成算法特性不同。在aSc中很容易生成的课表,在Omniscol中可能需要做一些调整,反之亦然。 - **aSc版本**:读取针对的是2012格式。更早的版本可能无法直接兼容——请先在aSc Desktop中另存为2012格式。 #### 操作步骤 — aSc与Omniscol之间的XML往返 1. **Omniscol可以读取和写入aSc Timetables 2012的原生文件**:直接往返,无需中间表格。 2. **在aSc一侧**:将课表保存为**XML 2012**格式(或最接近的版本),并将文件保存在您的电脑上。 3. **在Omniscol沙盒一侧**:打开 [导入与导出](#page-admin.import-export),选择aSc的XML文件。导入会重建班级、小组、科目、教室、教师、课程、交替周和课间休息。 4. **检查诊断**:没有教室的课程、未能迁移的可用时间、已转换为 [教学小组组合](#page-core-concepts.groups-of-groups) 的多班级课程。提醒:为了让往返干净无误,如果打算重新导出,请不要重命名班级、教师和科目——Omniscol依靠它们的名称来重建对应关系。 5. **调整**aSc特有的复杂约束(顺序约束、非常特殊的防连排规则):转换只能尽力而为,有些规则在Omniscol中的表达方式不同。参见 [教师的可用时间](#page-core-concepts.wishes-and-availability)。 6. **在Omniscol中启动测试生成**,检查结果是否符合预期。⚠ aSc与Omniscol的生成算法特性不同;在aSc中很容易排好的课表,在Omniscol中可能需要调整,反之亦然。 7. **反向导出**(如果同时保留aSc):点击 [导入与导出](#page-admin.import-export) 中的 导出为aSc格式(.xml) 按钮。文件可在aSc Desktop 2012及以上版本中重新打开;往返会保留结构(仅在命名习惯上有少量损失)。 #### 另请参阅 - [概览](#page-migration.overview) - [导入与导出](#page-admin.import-export) - [教师的可用时间](#page-core-concepts.wishes-and-availability) - [教学小组组合](#page-core-concepts.groups-of-groups) ### 12.5 从ADE / ADE Campus迁移 *Source: `help/zh-cn/migration/from-ade.md` · id: migration.from-ade · Audience: admin · Updated: 2026-06-30* **ADE**(Adesoft公司出品)常以网页版**ADE Campus**的形式使用,在高等教育领域应用广泛,尤其是大学和高等专业学院。ADE**以活动为中心**(即“课程活动”),并经常与学校的信息系统(Apogée、Pegase、Aurion、UNIT4等)同步。迁移到Omniscol首先涉及排课;与信息系统的同步则需要在Omniscol一侧重新配置。 #### 迁移范围 可以迁移的内容: - **培养方案**(PGE、CPGE、BBA等)及其小组(辅助小组、半班); - **教师**(专职、非专职、兼职); - **活动**(课程活动),包括类型、时长和重复次数; - **教室和设备**(按教学楼和楼层划分,含容量); - **资源的可用时间与不可用时间**。 ADE与Omniscol的模型大体兼容,但命名习惯不同,请先做一次初始对应。 #### 对应关系 | ADE(ADE Campus) | Omniscol | | --- | --- | | 培养方案(PGE、CPGE、BBA等) | 若干个班级(一个**年级**或学年 = 一个班级) | | 辅助小组 / 半班 | 小组;如果两个半班在同一时段上不同的课时,则使用**班内分组** | | 教师 | 教师 | | 活动(课程活动) | 课程(及其课时) | | 活动类型(讲授课、习题课、实验课等) | 课时类型 | | 授课形式(面授、远程等) | 授课形式(Premium属性) | | 上限 / 已注册人数 | 预计人数——没有单独的上限(名额限制来自教室容量) | | 教室 / 设备(教学楼、楼层、容量) | 教室(校区、容量);只有**可移动**设备才成为资源 | | 可用 / 不可用时间(色阶) | 可用时间(意愿):4个级别——不可用 / 不希望 / 优先 / 中性 | | 活动关联 | 视关联性质而定:对齐、连堂课或关联课时 | | CURSUS / UNIT4代码 | 外部标识符(信息系统同步的痕迹) | #### 操作步骤 1. **从ADE获取数据**——培养方案、教师、教室、活动。ADE以**可配置的列表**呈现数据(列表视图,可选择列),您可以通过**打印**菜单打印或导出到表格。 2. **根据这些导出文件准备Omniscol文件**(参见 [为批量导入准备数据](#page-getting-started.preparing-data))。 3. **通过表格导入**到一个测试课表中(参见 [通过表格批量导入课程](#page-timetables.mass-import))。 4. **重建各种关联**:对齐(对应ADE中的活动关联)、交替周、半班的班内分组——ADE与Omniscol使用的基本概念并不完全相同。 5. **启动一次测试生成**。 #### 注意事项 - **ADE按具体日期排课**:**排课**视图(周、日、开始、结束)和周次栏使ADE成为日历类工具。要获得同样的效果,请使用Omniscol的日历模式,Premium套餐已包含该模式(参见 [日历模式](#page-timetables.calendar-mode))。 - **半班与辅助小组**:一个培养方案通常会拆分为辅助小组和半班。在Omniscol中,半班对应班级的一个**班内分组**;请在一开始就考虑好小组的粒度。 - **指定教室与“任选”教室**:在ADE中,教室可以指定给某项活动,也可以交给引擎选择。在Omniscol中,指定的教室会被算法原样保留;对于“任选”教室,请让课时不指定具体教室——算法会在校区内选择一间,同时遵守容量要求和所需的**专业教室类型**(一组可互换的教室通过共享的专业教室类型来表示)。参见 [校区、教室、资源](#page-core-concepts.sites-rooms-resources) 和 [教室自动分配](#page-timetables.auto-room-assignment)。 - **分级的可用时间**:ADE的可用时间分多个级别(从绿到红,外加一个动态层)。Omniscol使用4个级别的**可用时间(意愿)**(不可用、不希望、优先、中性)——请主要迁移两个极端级别(不可用和优先),中间级别之后再调整。 - **教学负责人**:ADE为每项活动指定一名教学负责人。Omniscol在课程层面没有这个角色;如果需要这项信息,可通过命名约定或备忘保存。 - **iCal订阅源**:ADE通常以iCal订阅源发布课表。Omniscol的导入不读取iCal;iCal导出文件需要先转换为表格。 - **与信息系统同步**:如果ADE此前与您的信息系统(Apogée、Pegase、Aurion、UNIT4等)同步,则需要在Omniscol一侧重新配置——通常通过API或与外部系统的同步。ADE的**CURSUS / UNIT4代码**字段是源端的痕迹。参见 [与外部系统同步](#page-integrations.extsync)。 #### 操作步骤 — 从ADE迁移到Omniscol(高等教育) 1. **ADE(Adesoft),常以ADE Campus版本使用**,在高等教育中应用广泛。迁移首先涉及排课;与信息系统(Apogée、Pegase、Aurion、UNIT4)的同步需要在Omniscol一侧重新配置。 2. **获取ADE数据**:培养方案、教师、教室、活动(含类型、时长、重复次数、上限)。ADE以可配置的列表(列表视图)呈现这些数据,可通过**打印**菜单打印或导出。iCal订阅源需要先转换为表格(导入不读取iCal)。如果您按具体日期排课,也请保留这一特性。 3. **初始对应**:ADE与Omniscol的模型兼容,但命名习惯不同。请按Omniscol的模板准备文件(参见 [为批量导入准备数据](#page-getting-started.preparing-data))。请在一开始就考虑好**学生小组**(半班、辅助小组)的粒度——这是高等教育中最棘手的地方。 4. **通过表格导入**到测试课表:教师、培养方案、科目、教室,然后是活动(参见 [通过表格批量导入课程](#page-timetables.mass-import))。课程表格没有外部标识符列;若日后需要与信息系统对账,建议改用外部同步(参见 [与外部系统同步](#page-integrations.extsync))。 5. **重建关联**:跨培养方案的对齐(对应ADE中的活动**关联**)、交替周、半班的班内分组。对于“任选”教室,也请让算法来安排(必要时通过共享的专业教室类型)。ADE与Omniscol使用的基本概念并不完全相同——请预留一次手工收尾调整。 如果ADE按具体日期排课,请使用Omniscol的**日历模式**(Premium已包含)来保留这一特性(参见 [日历模式](#page-timetables.calendar-mode))。 6. **Omniscol测试生成**,验证可行性。诊断、修正、反复迭代。切换前测试得越充分,切换后需要修正的就越少。 7. **重新配置信息系统**:如果ADE此前与Apogée、Pegase、Aurion或UNIT4同步,则需要在Omniscol一侧通过API(参见 [Omniscol API](#page-integrations.api-tokens))或与外部系统的同步(参见 [与外部系统同步](#page-integrations.extsync))重新配置。Aurion的具体情况参见 [integrations.aurion](#page-integrations.aurion)——共有3种模式。 #### 另请参阅 - [概览](#page-migration.overview) - [Omniscol API](#page-integrations.api-tokens) - [与外部系统同步](#page-integrations.extsync) - [日历模式](#page-timetables.calendar-mode) ### 12.6 从自制Excel表格迁移 *Source: `help/zh-cn/migration/from-spreadsheet.md` · id: migration.from-spreadsheet · Audience: admin · Updated: 2026-05-12* 很多学校——尤其是小型机构、民办学校和短期培训——仍在用自制的Excel表格管理课表。这种情况下迁移到Omniscol特别简单:没有专有格式需要解析,只需要把数据整理得有条理。 #### 开始之前:先做整理 课表表格里往往混着好几种不同性质的“工作表”:教师名单、班级名单、科目名单、课表排布,还有各种备注。导入之前,请先理清: - **教师名单**(单独一张工作表), - **学生名单**(单独一张工作表,如果有的话), - **班级名单**及各班人数, - **教室名单**, - **课程**:每一行写明班级、科目、教师、教室、星期、时间、时长。 如果您的表格没有把这些信息分开,现在就分开——无论如何导入都需要这样做。 #### 导入所需的格式 导入通过从您的表格(Excel、Google Sheets、Numbers、Calc等)**复制粘贴**到一个有说明的列模板中完成。系统按**位置**识别各列(您可以调整模板的列顺序,使之与您的文件一致),而不是按表头名称识别。列顺序、日期格式、科目代码等细节参见[为批量导入准备数据](#page-getting-started.preparing-data)。 对于课程,[通过表格批量导入课程](#page-timetables.mass-import)是专用工具:您可以把表格中的行直接**复制粘贴**到可编辑区域,结构为一行一门课程。 #### 操作步骤 1. **清理**源表格:删除无用的列,统一各种写法(同一位教师不应出现三种不同的拼写)。 2. **每种实体准备一张工作表**:教师、学生、班级、教室、课程——您将逐张粘贴。 3. 使用**Omniscol测试账户**,放心地验证导入。 4. **依次导入**,先导入基础数据(教师、教室、科目),再导入引用它们的课程。 5. 查看Omniscol的**诊断**,找出没有被正确解读的内容。 6. **运行一次测试生成**(即使您打算保留表格中的手动安排),以验证方案是否可行。 #### 迁移的好处 - **一个工具**取代了表格、课表PDF和靠电子邮件流转的更新。 - **实时更新**:内容一有变化,所有人立刻看到最新版本。 - **自动发布**:iCal、信息显示屏、学生和教师门户。 - **诊断**:Omniscol会发现您的表格放过的冲突。 #### 把表格以只读方式留作存档 没有必要删除您的历史表格。把它以只读方式留作存档(例如放在共享文件夹中)——需要查找旧的配置时仍然可用。此后Omniscol成为日常运作的权威数据来源,表格只作为历史记录保留。 #### 操作步骤 — 迁移自制Excel课表 1. **最简单的情况**:课表在自制的Excel中管理。没有专有格式需要解析,只需要在导入之前把数据整理得有条理。 2. **导入之前——先做整理**,在源表格中进行。如果您的文件把教师、班级、教室、课程混在同一张工作表里,请先按主题拆分成不同的工作表:教师、学生、班级、教室、课程。 3. **清理**每张工作表:不留无用的列,**统一写法**(同一位教师不应出现三种不同的拼写),删除合并的行。一行就是一个实体。 4. **Omniscol测试账户**:在操作正式账户之前先创建测试账户,放心地验证导入。 5. **依次导入**,遵循依赖顺序:**先导入基础数据**(教师、教室、科目),**再导入课程**(它们引用前者)。课程请使用[通过表格批量导入课程](#page-timetables.mass-import)——直接把表格中的行粘贴进去。 6. **诊断**:Omniscol会发现表格看不到的不一致(没有教室的课程、未知的教师、冲突)。切换之前请先修正。 7. **测试生成**(可选——如果您想保留手动安排)以验证可行性。**切换**:原来的Excel以只读方式留作存档;Omniscol成为权威数据来源,并带来自动发布(iCal、信息显示屏、门户)和实时更新。 #### 另请参阅 - [概览](#page-migration.overview) - [为批量导入准备数据](#page-getting-started.preparing-data) - [通过表格批量导入课程](#page-timetables.mass-import) --- ## 13. 高等教育专属说明 ### 13.1 高等教育的特点——概览 *Source: `help/zh-cn/higher-ed/overview.md` · id: higher-ed.overview · Updated: 2026-06-13* 高等教育、继续教育和培训机构面临的约束,与小学和中学有很大不同。本部分汇集了介绍这些特点的页面。 #### 典型特点 - **[日历模式](#page-glossary.calendar-mode)**多于周课表:教学很少全年重复,课时通常是逐个确定日期的。 - **外部授课人员众多**:兼职教师、客座教授、专家。参见[外部授课人员](#page-higher-ed.external-faculty)。 - **并行的年级**而不是单一班级:一个硕士项目可能有多个学习路径,它们共享部分课程,有共同的专业方向,但各自有独立的项目。 - **协同教学**很常见(两位教师搭档、双重专长)。 - **多教室考试**(拆分的阶梯教室)。参见[多教室考试](#page-higher-ed.multi-room-exams)。 - **按课程设置视频会议链接**(混合式课程、部分远程授课)。参见[按课程设置视频会议链接](#page-higher-ed.videoconference-links)。 - 需要管理**重修或不在培养方案内的学生**。 #### 配置建议 - **[Premium](#page-overview.plans-and-options)账户**:包含日历模式、带日期的可用时间、同时发布多份课表,以及**单次事件**(答辩、评审组、开放日)。课时的远程 / 混合式授课认定,即课时的**[授课形式](#page-glossary.lesson-modality)**,也包含在内;单独的**视频会议链接**则所有账户都可以使用。 - 主要课表使用**日历模式**,这在高等教育的大多数情况下必不可少。 - 如果您既有重复的课程,又有单次的课程,或者学校包含多个相互独立的学院,或者是一个学校集团,请**同时发布多份课表**。 - 对于经常变动的合并需求,使用**教学小组组合**。 - **日历模式下的可用时间录入**:授课人员逐日填写可用时间,系统实时汇总。 - 与您的学生信息系统或ERP进行**API与集成**:在商学院和工程院校中,通常采用[与外部系统同步](#page-integrations.extsync)。它同步各类实体(教师、教室)和课程目录,并把课时作为授课记录回传给中央系统,由中央系统作为学校的权威数据源。 #### 术语对照 高校所说的**培养方案**、**培养手册**、**教学计划**或**教学大纲**,在Omniscol中对应一个班级或一个培训项目的**[课程](#page-glossary.course)全集**,每门课程是指定给某个班级的一个带类型的科目,带有自己的授课小时数和约束。它的**[课时](#page-glossary.lesson)**就是按计划安排的各次授课。 高等教育中的其他术语对应的是Omniscol中更通用的实体,词汇表中有详细说明:**学员**和**参与者**对应[学生](#page-glossary.student);**授课人员**、**兼职教师**、**专职教师**和**专家**对应[教师](#page-glossary.teacher);**年级**、**培训班次**和**学生群体**对应[班级](#page-glossary.class)。 #### 高等教育使用场景 - [FAQ——高等教育使用场景](#page-faq.higher-ed-cases) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) #### 另请参阅 - [日历模式](#page-glossary.calendar-mode) - [教学小组组合](#page-core-concepts.groups-of-groups) - [外部授课人员](#page-higher-ed.external-faculty) - [多教室考试](#page-higher-ed.multi-room-exams) - [按课程设置视频会议链接](#page-higher-ed.videoconference-links) ### 13.2 教学周期、届、培养方案、学习路径 *Source: `help/zh-cn/higher-ed/sessions-and-tracks.md` · id: higher-ed.sessions-and-tracks · Updated: 2026-05-12* 在高等教育中,教学组织的结构不像中小学那样线性。一名学生属于某个**届**(按入学时间划分的同一批学生),同时也属于某些**学习路径**或**培养方案**(他的专业方向),还会加入习题课或实验课的**小组**。有时他会同时隶属于多个届(辅修、双学位)。本页概述Omniscol如何为这些情形建模。 #### 届 = Omniscol中的班级 **届**(口语中常说“年级”)在行政意义上对应Omniscol中的班级,例如*“本科三年级信息2026级”*或*“硕士二年级金融2025-2027级”*。它是把同一教学周期入学的这批学生聚在一起的实体。 班级的命名要清晰无歧义,学制较长的专业还要带上入学年份: - `本科一年级工程科学2026级`:本科一年级工程科学,2026年入学, - `硕士一年级市场营销2026-2028级`:硕士一年级,学制两年。 #### 学习路径与专业方向 **学习路径**是在一个年级之内或跨多个年级的教学方向,例如*“数据方向”*、*“创业辅修”*、*“XYZ双学位”*。根据复杂程度,在Omniscol中有以下建模方式: - 一个年级内的**简单学习路径**:班级中的一个**小组**(例如`本科三年级信息2026级-数据方向`)。 - 跨多个年级的**横向学习路径**:一个**教学小组组合**,把多个班级中对应的小组汇集在一起。参见[教学小组组合](#page-core-concepts.groups-of-groups)。 - **双学位**(学生修读两个完整的学习路径):特殊情形,同一名学生在一学年内会有**两次班级分配**。这是“两个班级不共享学员”这一般规则的例外。 #### 教学周期 **教学周期**是一段确定的教学时间:一个学期、一个季度,或一个为期2周的集中模块。Omniscol通过以下方式管理教学周期: - 课表的**发布时间范围**(每个教学周期一份课表,在相应的周次发布), - **学年**(一个学年可以包含多个教学周期)。 对于短期或不重复的培训(研讨班、继续教育模块),建议使用**日历模式**(包含在Premium套餐中),而不是传统的周课表。参见[日历模式](#page-higher-ed.calendar-mode)。 #### 学习经历特殊的学生 高等教育中的常见情形: - **重修生**:通过了部分教学模块,其余未通过。 - **交换生**(Erasmus、交流项目):被分配到接收班级,并对学习路径做相应调整。 - **学徒制学生**:学校周与企业周交替;这种节奏可以用交替周建模,也可以用专门的日历课表建模。 #### 另请参阅 - [概览](#page-higher-ed.overview) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [教学小组组合](#page-core-concepts.groups-of-groups) - [日历模式](#page-higher-ed.calendar-mode) ### 13.3 外部授课人员(外聘教师、访问教师) *Source: `help/zh-cn/higher-ed/external-faculty.md` · id: higher-ed.external-faculty · Audience: admin · Updated: 2026-06-13* 高等教育大量依靠**外部授课人员**:行业兼职教师、偶尔授课的从业人员,以及来自其他院校的受邀教授(访问教师)。对他们的管理与专职教师不同:授课小时数少,日程由学校被动接受而不是自行选择,有时按小时签订合同。 #### 将授课人员标记为外聘 在教师详情([教师管理](#page-admin.teachers))中,开关 **外聘教师**(Premium套餐可用)用来区分兼职教师和专职教师。该标记有两个具体效果: - 在列表和课时的信息提示中,授课人员姓名前显示一个**图标** [user-tie]; - 在表格视图和电子表格导出中增加**专用列**,便于单独筛出兼职教师(例如对比专职教师与外聘教师完成的小时数)。 #### 填写可用时间 兼职教师的可用时间通常是**按日期**而不是按周的:他同意在3月12日和3月19日(周二)授课,但并非每个周二都可以。这种情况下,最自然的办法是使用Premium套餐包含的[日历模式下的可用时间与约束](#page-timetables.calendar-wishes)。 没有Premium套餐时,请填写大致的**每周可用时间**(周二下午),然后手动逐个锁定课时。 #### 服务时间与合同 兼职教师通常在聘用时确定一个**小时额度**(`全年30小时`、`一个15小时的模块`)。教师详情中的 **服务时间** 字段用来记录这个额度;如果已安排的小时数超出额度,诊断会提示。 对于按小时签订的合同(按课时而不是按月付酬),按教师导出的统计数据可用于外部的薪酬/开票流程。 #### 沟通方式 兼职教师登录应用的次数比专职教师少。有三种使用方式: - **完整账户**——兼职教师收到登录凭据,查看自己的课表、填写可用时间,并通过教师门户申报缺勤。 - **仅iCal链接**——没有账户,只有一个iCal订阅链接,把课时同步到个人日历。 - **邮件提醒(应用之外)**——管理员在授课前通过邮件通知兼职教师;兼职教师从不登录。这一提醒是手动的:Omniscol不会针对每个课时自动发送通知。此类提醒很容易在Omniscol之外借助获取日程的API来实现,并按教师筛选。例如,每周运行一次处理,生成摘要并填入学校自己的模板,再通过学校的邮件服务发送。使用该服务有助于保持发件人信誉,减少被误判为垃圾邮件的情况。 请根据对方的情况来权衡(资深顾问没有时间再管理一个账户;只教几个小时的博士生则很容易适应)。 #### 操作步骤 — 接入一位兼职教师 1. **一位全年授课15小时的兼职教师**:外聘标记、按日期的可用时间、小时额度、合适的沟通方式。 2. 在 **教师** 中**创建教师详情**。填写名、姓、邮箱,并启用 **外聘教师**。该标记会在姓名前添加图标 [user-tie],并在表格视图和导出中增加专用列。 3. **小时额度**:在 **服务时间** 字段中填写合同约定的额度(`15`)。如果已安排的小时数超出额度,诊断会提示。这对按小时付酬和合同跟踪很方便。 4. **可用时间**:在Premium账户中,兼职教师通过[日历模式下的可用时间与约束](#page-timetables.calendar-wishes)**按日期逐日**填写可用时间,非常适合由学校被动接受的日程。否则,使用**大致的每周可用时间**,再手动逐个锁定课时。 5. **沟通方式**——根据对方情况选择: - **完整账户**——适合只教几个小时的博士生;登录凭据、教师门户、可用时间、缺勤; - **仅iCal链接**——适合太忙而无暇再管理一个账户的资深顾问;只提供日历订阅; - **邮件提醒(应用之外)**——管理员手动通过邮件通知兼职教师(Omniscol不会针对每个课时自动发送提醒);兼职教师从不登录。 6. 在月末或学期末**导出统计数据**,用于**外部薪酬/开票**:按课时、科目、班级统计已完成的小时数。参见[打印与分享](#page-schedules.print-and-export)。导出中的“外聘教师”列可用来单独筛出兼职教师。 #### 另请参阅 - [教师管理](#page-admin.teachers) - [日历模式下的可用时间](#page-timetables.calendar-wishes) - [外聘教师](#page-glossary.external-teacher) - [概览](#page-higher-ed.overview) ### 13.4 拆分教室与多教室考试 *Source: `help/zh-cn/higher-ed/multi-room-exams.md` · id: higher-ed.multi-room-exams · Audience: admin · Updated: 2026-06-13* 在高等教育中,有些课时会**同时占用多间教室**。一场期中考试要把一个年级的200名学生安排在5间阶梯教室;一堂大课拆到2间阶梯教室,并通过视频会议同步;一个评审组同时占用3间教室。Omniscol通过**多教室**这一概念来处理这些情况。 #### 多教室:基本原理 一个课时(或一个事件)可以安排**多间教室**。这些教室在该时段内全部被占用,所有约束(容量、专业教室类型、可用时间)会同时得到检查。 多教室适用于**所有课表模式**(周课表、周期课表、日历课表)。参见[校区、教室、资源](#page-core-concepts.sites-rooms-resources)。 > _Premium_ 下面的考试和评审组场景依赖**单次事件**(压在时间网格之上的带日期的课时),仅限**Premium**账户使用。给常规课时设置**多教室**则所有账户都可以使用。 #### 典型用例:一场考试占用多间教室 本科一年级信息专业2026级(200名学生)参加算法期中考试。学校没有一间阶梯教室能容纳200人,因此考试同时在以下教室进行: - `阶梯教室A`(80个座位), - `阶梯教室B`(70个座位), - `阶梯教室C`(50个座位)。 在Omniscol中的建模方式: - 在相应的日期和时间创建一个**考试事件**(参见[临时事件](#page-schedules.events)), - 参与者:班级`本科一年级信息2026级`, - 教室:`阶梯教室A`、`阶梯教室B`、`阶梯教室C`(多教室), - 监考:通过**人员调度**模块为每间教室安排1至3名监考人员(参见[人员调度概览](#page-staffing.overview))。 请确认各阶梯教室的容量总和(80 + 70 + 50 = 200)能容纳全部学生。对于按**事件**建模的考试,Omniscol不会自动计算这个总和:容量诊断只针对时间网格上的常规课时。 #### 通过视频会议同步的大课 一堂听课人数很多的大课,可以从主阶梯教室通过视频会议转播到分流用的阶梯教室。建模方式: - 只建一个课时,安排两间教室, - 教师亲自在主阶梯教室授课, - 该课时的**视频会议链接**填写转播到第二间阶梯教室的网址(可用备忘说明具体安排)。 #### 答辩评审组 一个评审组在3间教室中同时听取10名博士生的答辩(每间教室按三分之一轮换): - 每场评审对应一个事件, - 每场评审都设置多教室, - 通过**人员调度**为每间教室安排评审组成员。 #### 学生的自动安排 Omniscol不会自动决定哪名学生进哪间阶梯教室。具体怎么安排由学校自行决定(按姓名顺序、按水平、按考试类型、按内部规定)。您可以手工完成,也可以导出电子表格后交给监考人员。 #### 操作步骤 — 为3间阶梯教室安排一场期中考试 1. **高等教育的典型场景**:200名学生的期中考试同时在3间阶梯教室进行。使用多教室、事件和**人员调度**模块即可完成。 2. **创建考试事件**:在**课表**模块中,显示**事件**筛选器(调课模式),然后在日历上**拖动**画出带日期的时段。标题填写`算法期中考试(本科一年级信息)`,再填写开始和结束的日期与时间。参见[临时事件](#page-schedules.events)。 3. **参与者**:添加班级`本科一年级信息2026级`(200名学生)。所有相关学生都会自动出现在该事件中,无论他们实际在哪间阶梯教室考试。 4. **教室——这就是多教室**:添加3间阶梯教室(`阶梯教室A` 80座、`阶梯教室B` 70座、`阶梯教室C` 50座)。这3间阶梯教室在该时段内同时被占用。请自行核对容量总和(200)能否容纳学生人数(200):对事件而言,系统不会自动诊断这个总和。 5. **监考人员**:打开**人员调度**模块,为每间阶梯教室创建监考任务(每间教室1至3名监考人员,视您的规定而定)。参见[人员调度概览](#page-staffing.overview)。 6. **学生在各阶梯教室之间的安排**:Omniscol不会自动完成。这一选择取决于您的内部规定(姓名顺序、水平、均衡)。请将学生名单导出为电子表格,手工或按您的规则完成安排,再交给监考人员。参见[打印与分享](#page-schedules.print-and-export)。 #### 另请参阅 - [多教室](#page-glossary.multi-room) - [授课形式](#page-glossary.lesson-modality) - [校区、教室、资源](#page-core-concepts.sites-rooms-resources) - [人员调度概览](#page-staffing.overview) - [临时事件](#page-schedules.events) ### 13.5 协同教学与授课人员轮换 *Source: `help/zh-cn/higher-ed/co-teaching.md` · id: higher-ed.co-teaching · Audience: admin · Updated: 2026-06-13* 高等教育中常见两种情况: - **协同教学**——两位(或更多)教师共同讲授同一个课时。典型情形:在战略管理课程中,由一位理论学者搭配一位实务专家;在案例分析中,由一位专职教师搭配一位兼职专家。 - **授课人员轮换**——某一时期(一个模块、一个学期)内的一门课程由多位教师轮流承担。典型情形:行业模块被拆分为多个主题课时,每个课时交给不同的专家。 Omniscol原生支持这两种机制。 #### 协同教学(联合授课) 一个课时可以**同时有多位教师**。在 **课表管理** 模块中,教师选择器 **分配教师** 允许为同一个课时选择多个教师。相关教师的个人课表会把该课时显示为联合授课。 影响如下: - 所有联合授课教师的**可用时间**在该时段必须都允许。 - 在**服务时间**方面,该课时会**完整**出现在每位联合授课教师的课表中。如果您的政策是在联合授课教师之间按比例分摊小时数,这一计算在导出时(薪酬、开票)进行。 联合授课课时的技术细节,参见[复杂课时](#page-core-concepts.complex-lessons)。 #### 模块内的授课人员轮换 情况更复杂:一个模块有12个课时,每个课时由不同的教师承担。有两种做法: ##### 做法A——一个科目,多门课程 在模块内**为每位授课人员建一门课程**,各配其任课教师。录入较费时间,但对授课人员而言结果很清楚:每个人都能在自己的课表中看到自己的课时,而模块则呈现为一个包含多门课程的科目。 ##### 做法B——使用日期明确的日历模式 如果课时的日期已经确定,请使用Premium套餐包含的[日历模式](#page-timetables.calendar-mode): - 一个科目 `企业战略模块`, - N个带日期的课时,每个课时对应一位授课人员, - 算法会遵守每位授课人员的可用时间。 这种做法更精简,也更适合集中授课模块。 #### 用评论说明课时的衔接 您可以在每个课时上添加**评论** 评论,说明该课时在模块中的位置(`第3/12次——财务战略`)。评论会显示在课表中,帮助学生了解进度。 #### 操作步骤 — 12位授课人员轮换的模块 1. **行业模块的情形**:12个课时,每个课时交给不同的专家。这里组合使用两种机制:用**日历做法**为轮换的课时标注日期,只在双人授课的课时上使用**联合授课**。 2. **对于日期明确的这一变体**:课表使用**日历模式**。所有外部授课人员都在其教师详情中标记为**外聘教师**。参见[外部授课人员](#page-higher-ed.external-faculty)。 3. **创建唯一的科目** `企业战略模块`。这是模块的教学框架。**课时类型** 需相应调整:通常是讲授课与案例分析的组合。 4. **录入12个带确切日期的课时**,每个课时配**各自的授课人员**。在评论中写明课时标题及主题(`第3/12次——财务战略`),帮助学生了解进度。 5. **对于双人授课的课时**(一位理论学者加一位实务专家共同讲一个案例),请使用**联合授课**:在相关课时上,于 **分配教师** 中选择**多位授课人员**。相关教师的个人课表会把该课时显示为联合授课。 6. **服务时间**:该课时会**完整**出现在每位联合授课教师的课表中。联合授课教师之间按比例分摊,在导出时(薪酬、开票)处理,而不在Omniscol中处理。 7. **检查**:打开学生门户,核对模块的显示——12个课时都出现在课表中,并带有各自的授课人员。进度评论(`第N/12次`)在鼠标悬停时可见。 #### 另请参阅 - [协同教学](#page-glossary.co-teaching) - [复杂课时](#page-core-concepts.complex-lessons) - [外部授课人员](#page-higher-ed.external-faculty) - [日历模式](#page-timetables.calendar-mode) ### 13.6 面向非循环培训的日历模式 *Source: `help/zh-cn/higher-ed/calendar-mode.md` · id: higher-ed.calendar-mode · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ 高等教育并不总是遵循**每周重复**的规律:为期2周的集中授课模块、为期3天的研讨会、分散在一个月内的答辩课时,以及由校外授课人员主持的临时工作坊。对于这些情况,Omniscol的**日历模式**比布满例外的每周网格更自然。 #### 何时选择日历模式 判断依据: - 课时有**明确的日期**,而不是每周重复的固定时段; - 各课时的**授课人员不同**; - **地点不同**(现场考察、企业参观、视频会议); - **节奏**不是按周的(有时2天内连上3个课时,有时连续3周没有课)。 如果您更愿意用日历而不是每周网格来描述这个模块,日历模式就是为您准备的。 #### 高等教育中的典型用例 - **集中授课模块**——连续3整天的研讨会,或为期2周的集中授课。 - **继续教育**——无法纳入全年网格的临时培训。 - **科研研讨会**——每周邀请不同嘉宾的临时课时。 - **答辩与评审**——分散在几周内,日期和教室都是确定的。 - **实地考察与项目**——阶段短,地点不固定。 #### 建模方式 您需要定义**一份按日期排列的课时清单**,无需使用每周网格: - 确切的**日期和时间**; - **时长**(自由设定); - **地点**; - **授课人员**(各课时可以不同); - **授课对象**:班级、小组、教学小组组合。 日历模式与周课表使用相同的班级/小组结构,您不会失去任何组织工具。 [自动生成](#page-timetables.generation)在日历模式下同样可用:生成会把课时安排在目标日期范围内,并可将授课日集中到期间的开头或结尾。参见[日历模式](#page-timetables.calendar-mode)。 #### 与周课表结合使用 您可以用**周课表**安排每周固定的上午公共基础课,用**日历课表**安排下午的临时课时,两份课表为同一批班级同时发布;也可以低年级用周课表,最后一年的专业方向班级用日历课表(参见[同时发布多份课表](#page-timetables.multiple-active-timetables))。 #### 日历模式下授课人员的可用时间 [日历模式下的可用时间与约束](#page-timetables.calendar-wishes)在这里尤其有用:兼职教师可以按确切日期填写可用时间,而不必遵循每周固定的节奏。 #### 另请参阅 - [日历模式——高级选项](#page-timetables.calendar-mode) - [选择合适的课表类型](#page-overview.timetable-modes) - [外部授课人员](#page-higher-ed.external-faculty) - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes) ### 13.7 按课程设置视频会议链接 *Source: `help/zh-cn/higher-ed/videoconference-links.md` · id: higher-ed.videoconference-links · Audience: admin · Plan: premium · Updated: 2026-06-13* > **Premium** > _Premium_ 在高等教育中,许多课程是**远程**或**混合**授课 (部分学生在教室上课,部分学生在线参加)。此时每个课时都有一个**视频会议链接** (Zoom、Teams、Google Meet、Jitsi),它需要显示在课表中,让所有人都知道该点哪里。 #### 如何附加链接 在课时或活动上,视频会议链接字段可填写一个URL。对于课时, 该字段在选择教室的窗口中填写。填写后,课表会以图标 [video] 显示该链接, 点击后在新标签页中打开。 链接会显示在: - 学生和教师门户中的该课时上, - iCal导出中(链接存在时,通过会议或URL属性), - JSON API中。 #### 远程或混合授课 课时的**[授课形式](#page-glossary.lesson-modality)**字段用于说明授课形式: **线下**、**远程**、 **混合**或**自主学习**。 它与教室、视频会议链接在同一个窗口中填写。 对于**完全远程**的课程,请选择授课形式**远程**,填写视频会议链接; 如果课程不占用实体教室,就不必强制指定教室。对于**混合**课程(线下授课同时开启视频), 请选择**混合**,保留实体教室,并同时填写链接。 #### 固定链接与按课时链接 视您使用的视频会议工具而定: - **固定链接**——个人Zoom会议室、重复的Teams会议。同一个链接适用于某门课程的所有课时。 只需在课程上填写一次(该课程的所有课时都会继承),或直接填写在班级上, 作为该班级所有课时的默认链接。 - **按课时链接**——每个课时有各自的URL,填写在课时上(与教室在同一个窗口中)。 仅在链接每次都会变化时使用(例如临时生成的Zoom会议)。 #### 安全 一些良好做法: - **敏感课程不要使用公开链接**——对于私密课程或有监考的考试,请将视频会议室设置为需要身份验证才能进入 (而不是通过直接链接)。 - **iCal中的链接**——任何拥有分享链接的人都可以查看iCal。放在课时上的视频会议链接 因此会通过iCal传播,请确认这正是您想要的。 - **更新**——如果固定链接已泄露,请在Zoom / Teams一侧更换,并在Omniscol中同步更新 (更新课程或班级,而不是逐个课时)。 #### 另请参阅 - [授课形式](#page-glossary.lesson-modality) - [课时类型](#page-admin.lesson-types) - [iCal——订阅与动态链接](#page-integrations.ical) - [FAQ——高等教育使用场景](#page-faq.higher-ed-cases) ### 13.8 高等教育中的多校区 *Source: `help/zh-cn/higher-ed/multi-site.md` · id: higher-ed.multi-site · Audience: admin · Updated: 2026-06-13* 多校区功能**从Standard套餐起即可使用**(仅Lite套餐中停用);一般原则请参见[单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources)。本页列出**高等教育中常见的特殊情况**,在这些场景中多校区几乎是常态:拥有多个校区的工程类院校、设在外地的商学院、多校区大学。 请注意,在Omniscol中,[单位](#page-glossary.campus)是一个与[校区](#page-glossary.site)不同的组织层面的概念。两者经常重合(每个校区对应一个单位,并有各自的班级)。需要管理时间网格、教室或通勤时间时,请把这个地点建模为校区。 > 当学校在地理上分散时(例如初中与高中分设,或学校带有独立的幼儿园校区),这些情形同样适用于中小学。 #### 典型场景:一个主校区加若干外地校区 工程类院校或商学院中的常见情形: - 1个**主校区**(通常是总部), - 1至N个**外地校区**,异地办学的年级在那里学习部分课程, - 在各校区之间往返的**授课人员**。 在Omniscol中的建模方式:每个地点建一个校区,并按校区两两声明通勤时间(高铁、飞机或自驾往返各校区所需的时间)。具体机制(精确到分钟的硬性约束、午休时间按通勤时间缩短等)请参见[单位、校区、教室、资源、多教室](#page-core-concepts.sites-rooms-resources)。 #### 按校区分设课表,还是使用统一课表 根据内部组织方式,有两种思路: - **统一的合并课表**:一份课表涵盖所有校区。适合排课团队集中办公、授课人员频繁往返的情况。诊断一次就能把所有内容交叉核对。 - **每个校区一份课表**:借助[同时发布多份课表](#page-timetables.multiple-active-timetables)(包含在Premium套餐中)。每个校区有自己的本地团队,各自的课表在相同的周次发布;查看时,对于涉及多个校区的学生或授课人员,系统会动态合并这些视图。 #### 虚拟校区与远程课程 特殊情形:一堂课从主校区通过**视频会议转播**给完全远程学习的年级。可行的建模方式: - 创建一个“远程”**虚拟校区**,它与转播校区之间没有通勤时间,因此不存在任何通勤时间上的约束, - 为每个远程学生群体在其中设一间“视频会议”教室, - 把这间教室与原阶梯教室一起,以多教室的方式关联到该课时。 > 如果您有**大量远程学生群体**,这种建模方式就有局限:成倍增加的虚拟“视频会议”教室难以维护,管理它们的容量也没有实际意义。这时请把需求记录为特殊情况,优先直接在课时上设置视频会议链接(Premium套餐还可以在班级上设置默认链接),而不是为每个学生群体建一间虚拟教室。 多教室的机制请参见[多教室考试](#page-higher-ed.multi-room-exams),相关的Zoom / Teams / Meet链接请参见[按课程设置视频会议链接](#page-higher-ed.videoconference-links)。 #### 按校区筛选与统计 Omniscol的界面提供**按校区**筛选的功能,用于单独查看某个实际地点。适用于: - 显示某个具体地点的课表, - 单独管理某个外地校区的教室使用情况, - 按校区生成统计数据(授课小时数、使用率)。 #### 各校区的信息显示屏 [信息显示屏](#page-panels.lobby-panel)可以按指定校区筛选,这通常对应安装在某个校区**大厅**的显示屏。参见[为大厅或走廊配置信息显示屏](#page-panels.lobby-panel)。 #### 另请参阅 - [校区、教室、资源](#page-core-concepts.sites-rooms-resources) - [校区](#page-glossary.site) - [同时发布多份课表](#page-timetables.multiple-active-timetables) - [多教室考试](#page-higher-ed.multi-room-exams) - [按课程设置视频会议链接](#page-higher-ed.videoconference-links) - [授课形式](#page-glossary.lesson-modality) - [为大厅或走廊配置信息显示屏](#page-panels.lobby-panel) - [高等教育的特点——概览](#page-higher-ed.overview) --- ## 14. 中小学专属说明 ### 14.1 中小学的特点——概览 *Source: `help/zh-cn/k12/overview.md` · id: k12.overview · Updated: 2026-06-13* 本节汇集了小学和中学(小学、初中、高中)的相关特点页面。 #### 典型特点 - **[周课表](#page-glossary.weekly-timetable)**——以每周重复的标准周为常态, 可以使用,也可以不使用[交替周](#page-glossary.alternate-lessons)(A/B周)。 - **每个班级固定教室**——很多学校为每个班级设一间固定教室, 由教师来回走动上课。 - **半班 / 选修小组**——通过同一班级内的 [班内分组](#page-core-concepts.class-divisions)来管理。 - **日语 / 德语选修及高中选科组**——通过跨班级的 [小组对齐](#page-core-concepts.alignments)来管理。 - **自动生成**——生成功能运行良好,这是Omniscol在中小学场景中的核心价值。 - **自习 / 看管**——学生在校但没有指定课程的时段。参见[自习与看管](#page-k12.study-halls)。 - **多年级班级**——乡村小规模学校的典型情况。 参见[多年级班级](#page-k12.multi-grade-classes)。 #### 配置建议 - 大多数情况下**标准账户**即可满足(常规中小学无需Premium档)。 - 默认使用**周课表模式**。 - 在周课表中**启用教师可用时间的录入**;可由学校管理层录入或复核。 - 适用时**为每个班级设置一间固定教室**——在班级上设置。 - **认真设置年级**:在**管理**模块中,通过 **创建**(1年级、2年级、……、6年级、7年级、……、 10年级、11年级、12年级等)。 - **本国官方假期**——创建学年时,Omniscol会提议导入本国通用的假期。 参见[学年与假期](#page-admin.school-year)。 #### 中小学使用场景 Omniscol最初面向的是中学(初中、高中):很多默认约定都源自于此。 适用于中小学的分步骤场景集中在 [使用场景](#page-use-cases.overview)和 [FAQ——创建课表](#page-faq.timetables)中。 #### 另请参阅 - [Omniscol是什么](#page-overview.what-is-omniscol) - [选择合适的课表类型](#page-overview.timetable-modes) - [半班与班内分组中的选修课](#page-k12.half-classes-and-options) - [自习与看管](#page-k12.study-halls) - [多年级班级](#page-k12.multi-grade-classes) ### 14.2 半班与班内分组中的选修课 *Source: `help/zh-cn/k12/half-classes-and-options.md` · id: k12.half-classes-and-options · Audience: admin · Updated: 2026-06-13* 在中小学,班级管理很快会因**半班**(实验课小班授课)和**选修课**而变得复杂: 选修课会把同一个班级的学生拆分为多个同时上课的子小组。Omniscol用来构建这类安排的概念是 **班内分组**:这些子小组必须在同一时间上课,但内容各不相同。 #### 实验课半班 典型场景是6—7年级:平时28名学生整班上课, 上科学实验课时拆成两个14人的小组。两个半班必须同时上实验课 (否则无法同时安排其他课程),各自有自己的教师和教室。 在Omniscol中这样建模: - 在班级`6年级1班`中创建两个**小组**`6年级1班-实验1组`和`6年级1班-实验2组`, - 将它们声明为**班内分组**:Omniscol保证它们同时有课, - 创建**两门科学实验课程**,各自对应一个小组、一位教师、一间教室, 安排在每周的同一时段。 生成算法会遵守班内分组:不会出现`6年级1班-实验1组`上科学课, 而`6年级1班-实验2组`在上语文的情况。 #### 班内分组中的选修课 典型场景是初二、初三(8—9年级):在同一时段,一部分学生上日语, 一部分学生上强化德语,其余学生不选课(自习)。同一个班级内有三个同时进行的小组。 建模方式: - 在班级`8年级1班`中创建小组`8年级1班-日语`、`8年级1班-德语`、`8年级1班-自习`, - 声明为**班内分组**(三个小组同时进行), - 每个小组一门课程,安排在同一时段,各自有教师和教室。 #### 学生在学年中途更换选修课 选修课可能在学年中途发生变化(例如某名学生放弃日语,转去自习)。 小组分配按**周**在学生详情中管理:已经过去的周保留原来的分配, 之后的周采用新的分配。 #### 班内分组与小组对齐 对于**跨班级**开设的外语(例如日语向8年级1班、8年级2班、8年级3班开放), 请组合使用: - 每个班级各自一个**班内分组**(8年级1班-日语 / 8年级1班-其他, 8年级2班-日语 / 8年级2班-其他,以此类推), - 在三个日语小组之间设置**对齐**,使它们处于同一时段、同一间教室, 并由同一位教师授课。 参见[小组对齐](#page-core-concepts.alignments)。 #### 操作步骤 — 为初二年级创建日语/德语/自习时段 1. **典型的初二、初三场景**:在同一时段,一部分学生上日语, 一部分上德语,一部分不选课(自习)。三个小组同时进行。 Omniscol的班内分组可以轻松处理这种情况。 2. **创建三个小组**:在班级`8年级1班`中创建`8年级1班-日语`、 `8年级1班-德语`、`8年级1班-自习`。根据每名学生的选修选择, 将其分配到对应的小组。 3. **声明班内分组**`(8年级1班-日语, 8年级1班-德语, 8年级1班-自习)`: 这三个小组**互不重叠且同时进行**。Omniscol会保证它们安排在同一时段。 4. **创建三门课程**,安排在每周的同一时段: - 日语:对应`8年级1班-日语`,配日语教师和合适的教室; - 德语:对应`8年级1班-德语`,配德语教师; - 自习:对应`8年级1班-自习`,配看管人员(也可按贵校的做法不安排教师)。 生成会遵守班内分组:这三门课程必然安排在同一时段。 5. **面向多个班级开放的选修课**(8年级1班、2班、3班共用一位日语教师和 一间教室):组合使用**按班级设置的班内分组**(`8年级1班-日语`与 8年级1班的其他小组互不重叠,2班、3班同理)**+三个日语小组之间的对齐**。 参见[小组对齐](#page-core-concepts.alignments)。 6. **学年中途的变动**(某名学生放弃日语,转去自习): 在其学生详情中修改所属小组,从变动当周起生效。 已经过去的周保留原来的分配。 #### 另请参阅 - [班内分组](#page-core-concepts.class-divisions) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [小组对齐](#page-core-concepts.alignments) - [多年级班级](#page-k12.multi-grade-classes) ### 14.3 自习与看管(学校) *Source: `help/zh-cn/k12/study-halls.md` · id: k12.study-halls · Audience: admin/staff · Updated: 2026-06-13* **自习**(或称**晚自习**、**自修课**)是指没有课的学生被安排到自习教室、由人看管的时段。这是法国初中和高中的典型做法:选修课没有排到的学生、免上体育课的学生、任课教师缺勤的学生,都会被安排去自习。 #### 为什么不直接按普通课程处理? 自习与普通课程的管理方式并不完全相同: - **没有通常意义上的科目**; - **每个时段的学生人数不固定**(取决于哪些学生没有课); - **以看管为主,而不是授课**——值班人员不授课,只负责看管; - **对公平性要求很高**:看管任务必须按公平规则在教师和学生管理人员、看管人员之间分摊。 因此,Omniscol提供了专门用于这类管理的 人员调度 模块。参见 [人员调度概览](#page-staffing.overview)。该模块是账户的**选配功能**:如果没有开通,请用**自习小组**(见下文)来表示自习;看管网格则只能在该模块中管理。 #### 使用 人员调度 建模 自习可以转化为值班网格: - 一张**每周网格**,列出学生可能需要自习的时段; - 每个时段设置一个或多个看管**岗位**(根据预计的学生人数和期望的看管人员与学生比例而定); - 为每个岗位**安排**看管人员(学生管理人员,或拥有 员工 角色的教师)。 参见 [制作值班网格](#page-staffing.building-grids) 和 [安排员工](#page-staffing.planner)。 #### 与学生课表的关系 当学生在某个时段没有课时(所在班级上选修课,或半班上实验课),其个人课表只会显示一个**空闲时段**:Omniscol不会自动在其中显示一节“自习”课时。 如果希望自习出现在相关学生的课表中,请为该时段没有课的小组创建一门**自习课程**,并指定自习教室——这就是 [半班与班内分组中的选修课](#page-k12.half-classes-and-options) 中介绍的 `8年级1班-自习` 小组方案。看管工作的覆盖情况则在 人员调度 模块中管理,参见 [人员调度概览](#page-staffing.overview)。 #### 有人看管的自习与自由自习 两者的区别如下: - **有人看管的自习**——有值班人员在场,学生安静学习。这是 人员调度 模块的典型场景。 - **自由自习**(学生活动室、自主学习区)——没有专门的值班人员,只是学生可以等候的场所。不需要 人员调度 模块:将其建模为一间专用教室即可;必要时可用**专业教室类型**防止普通课时被排进该教室(但这并不会为自习本身预留教室,因为自习没有科目)。参见 [专业教室类型](#page-core-concepts.classroom-specializations)。 #### 另请参阅 - [人员调度概览](#page-staffing.overview) - [制作值班网格](#page-staffing.building-grids) - [安排员工](#page-staffing.planner) - [半班与班内分组中的选修课](#page-k12.half-classes-and-options) ### 14.4 多年级班级 *Source: `help/zh-cn/k12/multi-grade-classes.md` · id: k12.multi-grade-classes · Audience: admin · Updated: 2026-06-13* **多年级班级**把多个年级的学生放在同一间教室,由同一位教师负责。 这是小学阶段**乡村小规模学校**的常态,有时也出现在学生人数较少的 **特殊学校**和**国际学校**。 #### Omniscol为何能处理这类情况 Omniscol的模型把班级(行政单位)与小组(教学子集)区分开来, 因此天然支持多年级。同一个行政班级`2-3年级`可以包含`2年级`和`3年级` 两个小组,有时合班上课,有时按年级分开上课。 #### 建模 根据所授课程的性质,有两种做法: ##### 方案A——一个行政班级,两个教学小组 - 行政班级:`2-3年级`(用于管理学生、家长名单和教室)。 - 教学小组:`2年级`和`3年级`。 - **合班课程**(音乐、体育、班会)安排给整个班级`2-3年级`。 - **分年级课程**(语文、数学按各小组的年级授课)使用小组`2年级`和`3年级`, 并将它们声明为**班内分组**,使其同时进行(唯一的教师给一个年级讲课, 另一个年级自主学习)。 ##### 方案B——两个行政班级,一位教师 - 分设两个行政班级:`2年级`和`3年级`。 - 这位教师被安排到两个班级的课程中。 - 由于一位教师不能同时上两节课,如果他的2年级与3年级课时被安排在 同一时段,Omniscol会提示冲突。 方案B较少使用:它使行政管理变得复杂(实际上是同一批学生,却要设两个独立的班级), 而且没有像班内分组那样直接的机制来安排不同年级之间的轮换。 #### 三个年级及更多 这一机制可以扩展到三个或更多年级(例如极小的学校:1至5年级在同一间教室)。 Omniscol没有数量上的限制——难点在于教学组织,而不在于建模。 #### 自习与看管 当唯一的教师在给某个年级上课时,另一个年级在同一间教室里自主学习。 无需把这种情况建模为自习时段——这是多年级班级运作中固有的部分, 并不是单独的看管任务。 #### 操作步骤 — 为2-3年级多年级班级建模 1. **乡村学校的典型场景**:一个`2-3年级`班级,只有一位教师, 在两个年级之间轮流授课。推荐使用方案A:一个行政班级,两个教学小组。 2. **创建行政班级**`2-3年级`:在**班级**中创建。 学生名单、家长、教室和通知都归属于该班级。年级:选择最有代表性的年级, 或创建专用年级`小学多年级`。 3. **在班级内创建两个教学小组**`2年级`和`3年级`, 将学生分配到各自的小组。两个小组合起来就是整个班级。 4. **将小组声明为班内分组**`(2年级, 3年级)`:班内分组**允许** 它们**同时**安排(消除了原本会禁止这种安排的冲突), 生成时也会**尽量**把2年级与3年级的课程安排在相同的时段。 教室和教师仍按课程逐一指定。参见[班内分组](#page-core-concepts.class-divisions)。 5. **合班课程**(音乐、体育、班会):安排给整个班级`2-3年级`。 所有学生一起上课。 6. **分年级课程**(语文、数学):为小组`2年级`和`3年级`各创建一门课程, 安排在同一时段(班内分组的要求)。把教师指定给他实际授课的那门课程, 另一门课程不安排教师(自主学习):如果同一位教师被指定到两节同时进行的课时, 就会触发冲突。无需建模自习时段,自主学习是多年级班级运作中固有的部分。 7. **对于极小的学校**(1至5年级在同一间教室),这一机制可以无限扩展。 有多少个年级就创建多少个小组,并声明为班内分组。难点在于教学组织, 而不在于Omniscol的建模。 #### 另请参阅 - [班级、小组、子小组](#page-core-concepts.classes-and-groups) - [班内分组](#page-core-concepts.class-divisions) - [半班与班内分组中的选修课](#page-k12.half-classes-and-options) --- ## 15. 应用场景示例 ### 15.1 使用场景——概览 *Source: `help/zh-cn/use-cases/overview.md` · id: use-cases.overview · Updated: 2026-10-03* 大型院校经常提出这样的需求:希望有一份**操作场景清单**,以*用户故事*的格式写成,并具体说明“在Omniscol中怎么做”。每个可用的场景都会指向一个参考页面或一个现有的引导式演示;仍在研究中的场景另行跟踪,不在此清单之列。 这些场景来自客户和潜在客户(商学院、工程类院校、大学、继续教育)的真实反馈,已做匿名处理,并以通用方式表述。 #### 格式 每个场景都采用经典的敏捷格式: > **作为** *(用户角色)* > **我想要** *(操作)* > **以便** *(业务目标)* 随后是 **Omniscol的解决方案**:一小段文字、指向详细参考页面的链接,并且只有在已有可靠的引导式演示时才附上交互演示。 #### 状态 每个场景都带有实现状态: | 状态 | 含义 | | --- | --- | | ✓ **可用** | 功能已上线,经过测试和验证。 | | ◐ **部分支持** | 覆盖不完整;有变通办法,或该功能仅适用于部分模式。 | | — **不在范围内** | 由生态系统中的其他工具负责,或不属于Omniscol的功能范围。 | #### 主题目录 - [课表的创建与生成](#page-use-cases.creation-and-generation) - [日常排课与调整](#page-use-cases.placement-and-modification) - [多小组、多教室、多授课人员](#page-use-cases.multi-entities) - [批量操作](#page-use-cases.mass-operations) - [考试与事件](#page-use-cases.exams-and-events) - [缺勤与代课(场景)](#page-use-cases.absences-and-substitutions) - [报表与统计](#page-use-cases.reporting-and-stats) - [发布与分享](#page-use-cases.diffusion-and-sharing) #### 演示与视频 当某个场景包含经过验证的引导式演示时,同一份内容可以支撑多种呈现方式: - 帮助面板中的**弹出气泡**(交互模式,用户逐步点击), - 嵌入视频的**字幕**(被动模式,线性播放), - 若制作了视频,则配有相应的**WebVTT文件**。 字幕与步骤的进程同步:同一份源内容生成这三种格式。 没有经过验证的步骤的场景,只是一个普通的参考页面,不带引导式演示,也没有相关视频。 #### 如何阅读场景 一个典型的场景页面包含: ```markdown ## 场景简称 > **作为** *<角色>*,**我想要** *<操作>*,**以便** > *<目标>*。 **状态**:✓ 可用 **Omniscol中的解决方案。** 简短、可操作的说明文字。 [指向详细参考页面的链接](id:timetables.publication) `<如有,此处为交互和视频用的引导式演示>` ``` 状态为 ✓ 或 ◐ 的场景**现在即可使用**。 #### 另请参阅 - [FAQ——高等教育使用场景](#page-faq.higher-ed-cases) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) - [高等教育的特点——概览](#page-higher-ed.overview) ### 15.2 场景——课表的创建与生成 *Source: `help/zh-cn/use-cases/creation-and-generation.md` · id: use-cases.creation-and-generation · Updated: 2026-06-13* 课表的初次创建、自动生成、沙盒,以及为测试和比较而复制课表。 阅读方式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 启动课表自动生成 > **作为**排课员,**我想要**启动课表的自动生成,**以便**快速得到一份可用的初始方案。 **状态**:✓ 可用 **Omniscol中的解决方案。** 自动生成适用于三种课表类型——周课表、周期课表和日历课表。生成会安排已创建但尚未定位的课时;若能改善结果,也会重新安排已定位的课时,已锁定的课时除外。如果不存在完整的解,Omniscol会返回计算出的最佳课表,并把剩余的课时留在未定位便签列表中。 [自动生成](#page-timetables.generation) #### 修改约束后重新生成 > **作为**排课员,**我想要**在修改约束后重新生成,**以便**无需从头开始就能测试不同的配置。 **状态**:✓ 可用 **Omniscol中的解决方案。** 调整可用时间、约束或锁定,然后在同一界面重新启动生成。已锁定的课时保持原位;其他课时若能改善结果,可被重新安排。要比较多种配置,请在课表的副本上操作(见“在日程表的副本(沙盒)上操作”)。 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) #### 在日程表的副本(沙盒)上操作 > **作为**排课员,**我想要**在日程表的副本(沙盒)上操作,**以便**在不影响正式版本的前提下做尝试。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在 **课表管理** 模块中复制课表,并在副本上操作:副本发布之前,用户看到的仍是正式版本。副本准备好后再发布。 [显示、复制、重组](#page-timetables.visualize-duplicate), [发布课表](#page-timetables.publication) #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [课表管理模块概览](#page-timetables.overview) - [自动生成](#page-timetables.generation) - [生成算法](#page-glossary.solver) ### 15.3 场景——日常排课与调整 *Source: `help/zh-cn/use-cases/placement-and-modification.md` · id: use-cases.placement-and-modification · Updated: 2026-06-13* 查找可用的教室和教师,安排和修改课时,检测冲突和遗漏。 阅读格式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 找到适合某个课时的可用教室(容量、类型、校区)并指定 > **作为**排课员,**我想要**找到适合某个课时的可用教室(容量、类型、校区)并指定给某次授课,**以便**快速安排一个没有冲突的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 教室选择器支持文本搜索和容量筛选(`>20`、`<=50`、`=30`、`20-30`)。用空格分隔的多个条件按逻辑“且”处理;用逗号分隔的多个取值按逻辑“或”处理。同一个搜索框还接受 “ok”(相对于 “ko”),只保留该时段空闲的教室。 #### 找到教授该科目的可用教师 > **作为**排课员,**我想要**找到教授该科目的可用教师,**以便**轻松更换教师或补充教师安排。 **状态**:✓ 可用 **Omniscol中的解决方案。** 选择教师时会考虑其任教科目和可用时间。根据所在界面的不同,可以直接在课时上更换教师,也可以在课程列表中更换。 #### 找出某个班级或小组的可用时段 > **作为**排课员,**我想要**找出某个班级或小组的可用时段,**以便**高效地手动安排课时。 **状态**:◐ 部分支持 **Omniscol中的解决方案。** 在多对象查看视图中叠加显示该班级或小组的课表,即可看出空闲时段(参见“查看课表”)。 #### 快速修改课时(教室、教师、时间) > **作为**排课员,**我想要**快速修改课时(教室、教师、时间),**以便**实时调整日程表。 **状态**:✓ 可用 **Omniscol中的解决方案。** 打开课时,在其修改窗口中更改教室、教师或时间;也可以在日程表视图中通过图钉按钮 [thumbtack](点击有颜色的时段)重新安排位置。**多选**(按Shift+点击多个课时)会以批量模式打开同一个窗口:一次操作即可重新安排、解除固定或删除所有选中的课时。 [临时调整](#page-schedules.ad-hoc-changes) #### 检测没有教师或没有教室的课时 > **作为**排课员,**我想要**检测没有教师或没有教室的课时,**以便**立即纠正关键的遗漏。 **状态**:✓ 可用 **Omniscol中的解决方案。** 课表的诊断会明确列出已安排但没有教室的课时和没有教师的课时;日程表视图也会对其加以标示。 [冲突与诊断](#page-timetables.conflicts) #### 出现不一致时收到提醒(缺教室、缺教师、冲突) > **作为**排课员,**我想要**在出现不一致(缺教室、缺教师、冲突)时收到提醒,**以便**保证日程表的质量。 **状态**:◐ 部分支持 **Omniscol中的解决方案。** 不一致会在诊断和日程表视图中标示出来:课时没有教室、没有教师,教室、班级或教师发生冲突。诊断面板可以**精细筛选**——按严重程度、提醒类型、对象(班级、教师、教室)、年级、校区或单位,以及日历课表模式下的日期区间(Premium功能;参见 [冲突与诊断](#page-timetables.conflicts))。 **变通办法(无Premium时)。** 利用按时间顺序排列的提醒列表和可用的查看筛选器,找出相关课时。在发布之前,或在回传到第三方系统之前,请先解决会造成阻碍的冲突。 #### 快速查看剩余的冲突 > **作为**排课员,**我想要**快速查看剩余的冲突,**以便**在发布前完成一份可靠的日程表。 **状态**:✓ 可用 **Omniscol中的解决方案。** 课表的诊断和日程表视图会标示剩余的冲突。请在发布之前优先处理会造成阻碍的冲突。 [冲突与诊断](#page-timetables.conflicts) #### 收集授课人员的可用时间和偏好 > **作为**排课员,**我想要**收集授课人员的可用时间和偏好。 **状态**:✓ 可用 **Omniscol中的解决方案。** 教师在自己的个人空间中填写可用和不可用的时间;排课员也可以代他们填写。这些可用时间在手动安排时可见,自动生成时也会予以考虑。 [教师的可用时间](#page-core-concepts.wishes-and-availability) #### 管理时段、时间网格和脱离时间网格的课时 > **作为**排课员,**我想要**管理时段、时间网格和脱离时间网格的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 时间网格按校区定义可供安排的时段,包括休息时间。 > _Premium_ [脱离网格的课时](#page-timetables.off-grid-lessons)涵盖与网格中任何时段都不吻合的课时。 [时间网格、时段与时长](#page-core-concepts.timetable-grid) #### 管理休息时间和脱离时间网格的课时 > **作为**排课员,**我想要**管理休息时间和脱离时间网格的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 参见“管理时段、时间网格和脱离时间网格的课时”:休息时间在各校区的时间网格中定义,脱离时间网格的课时则涵盖时段之外的课时。 #### 查看课表(多选、自定义视图、叠加) > **作为**排课员,**我想要**查看课表(多选、自定义视图、叠加、可见性、导出)。 **状态**:✓ 可用 **Omniscol中的解决方案。** 查看视图涵盖周视图、日视图、月视图、列表、分屏以及多种对比模式。多对象查看可以把多份课表并排显示,按列或按网格排列,视具体情境而定。 当前界面暂不支持:显示科目代码的丰富提示、自动隐藏没有课的周、不带区分列的单一合并视图。 #### 只显示可用的教室 > **作为**排课员,**我想要**只显示可用的教室,**以便**在指定教室时节省时间。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在教室选择器中使用可用性筛选,隐藏该时段已被占用的教室(另见“找到适合某个课时的可用教室并指定”)。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [查看和筛选](#page-schedules.consult-and-filter) - [临时调整](#page-schedules.ad-hoc-changes) - [冲突与诊断](#page-timetables.conflicts) ### 15.4 场景——多小组、多教室、多授课人员 *Source: `help/zh-cn/use-cases/multi-entities.md` · id: use-cases.multi-entities · Updated: 2026-06-13* 多个小组、多间教室、多位授课人员共用课时:协同授课、对齐、教学小组组合。 阅读格式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 合班上课(1个课时安排2个小组在同一日期和时间、同一间教室上课) > **作为**排课员,**我想要**合班上课(1个课时安排2个小组在同一日期和时间、同一间教室上课)。 **状态**:✓ 可用 **Omniscol中的解决方案。** 用[对齐](#page-core-concepts.alignments)或[教学小组组合](#page-core-concepts.groups-of-groups)来建立合班:共同的课时把这些小组安排在同一时段、同一间教室,由同一位教师授课。 #### 安排有多位授课人员的课时(协同教学) > **作为**排课员,**我想要**安排有多位授课人员的课时(协同教学)。 **状态**:✓ 可用 **Omniscol中的解决方案。** 一个课时可以有多位教师:在课时详情的教师选择器 **分配教师** 中添加协同授课的教师。 [协同教学](#page-higher-ed.co-teaching) #### 安排占用多间教室的课时 > **作为**排课员,**我想要**安排占用多间教室的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 通过教室选择器 **分配教室**,为同一个课时指定多间教室。 [多教室考试](#page-higher-ed.multi-room-exams) #### 安排有多个小组的课时 > **作为**排课员,**我想要**安排有多个小组的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 您可以将**多个小组**(来自同一班级或不同班级)**直接添加**到同一个课时。若是长期或重复出现的组合,请根据情况改用[教学小组组合](#page-core-concepts.groups-of-groups)或[对齐](#page-core-concepts.alignments)来建立。 #### 能够按小组批量安排课时 > **作为**排课员,**我想要**能够按小组批量安排课时,**以便**一键批量指定各小组。 **状态**:✓ 可用 **Omniscol中的解决方案。** 有两种方式可以批量安排。 - **多选,再用图钉。** 同时选中多个课时——按 **Shift+点击**,或通过**扩展选择**菜单(按日、周、月、星期几、科目或班内分组)。**图钉**随即显示与整个选择都兼容的时段:一次点击即可把它们一起安排到同一时段。 - **自动生成。** 若要一次性把全部课时安排到网格上,可让生成功能在遵守约束的前提下完成分配(参见 [自动生成](#page-timetables.generation))。 若要把多个小组合并到同一个课时,请参见上文“安排有多个小组的课时”;若要跟踪已安排的小时数,请借助[课时数分配](#page-timetables.hour-distribution)。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [多教室](#page-glossary.multi-room) - [协同教学](#page-glossary.co-teaching) - [班内分组](#page-core-concepts.class-divisions) - [小组对齐](#page-core-concepts.alignments) - [教学小组组合](#page-core-concepts.groups-of-groups) ### 15.5 场景——批量操作 *Source: `help/zh-cn/use-cases/mass-operations.md` · id: use-cases.mass-operations · Updated: 2026-06-28* 批量安排、高级筛选和自动化功能,帮助您快速管理教室、容量和培养方案。 阅读格式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 只批量安排尚未指定教室的课时 > **作为**排课员,**我想要**只批量安排尚未指定教室的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在 **课表管理** 界面的列表模式下,对各列排序或筛选,找出**待安排教室**的课时,勾选后对所选课时启动教室自动分配。自动生成也提供仅针对教室的模式:启动时忽略已指定的教室,只为尚无教室的课时补充安排,不会重新计算课时的位置。 [教室自动分配](#page-timetables.auto-room-assignment) #### 为活动批量安排所有超过115个座位的教室 > **作为**排课员,**我想要**为活动批量安排所有超过115个座位的教室,**以便**优化教室管理。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在教室统计中找出大教室,该处的搜索支持容量比较符(例如 `>115`)。然后在 **课表管理** 界面的列表模式下选中相关课时,启动教室自动分配:在候选教室选择器中,只勾选需要的教室,每间教室的容量都会显示出来,供您参考。 #### 将教室分配限定在某栋教学楼或某个楼层 > **作为**排课员,**我想要**将批量教室分配限定在某栋教学楼或某个楼层,**以便**把课时集中在同一处,减少往返奔波。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在教室自动分配中,候选教室选择器先按**校区**、再按**教学楼**对教室分组:勾选整个校区或整栋教学楼,即只允许使用其中的教室,算法会在这些教室中选择。参见 [教室自动分配](#page-timetables.auto-room-assignment)。 #### 按实际人数重新安排教室 > **作为**排课员,**我想要**按实际人数(选修课、语言课、小组)批量重新安排教室,**以便**让教室大小与注册人数相匹配。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在列表模式下(按列排序和筛选)找出相关课时,然后启动教室自动分配:算法会将每间教室的**容量**与课时的**人数**进行比对,选用能容纳的最小教室。参见 [教室自动分配](#page-timetables.auto-room-assignment)。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [教室自动分配](#page-timetables.auto-room-assignment) - [教室统计](#page-dashboard.classrooms) - [分配课时数并创建课时](#page-timetables.hour-distribution) - [临时调整](#page-schedules.ad-hoc-changes) ### 15.6 场景——考试与事件 *Source: `help/zh-cn/use-cases/exams-and-events.md` · id: use-cases.exams-and-events · Updated: 2026-06-13* 创建特殊课时:考试(线下或线上、特殊配置)、竞赛、维护。 阅读方式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 创建事件(竞赛) > **作为**排课员,**我想要**创建事件(竞赛),**以便**预订教室并获得统计数据。 **状态**:✓ 可用 **Omniscol中的解决方案。** 创建一个带日期的[临时事件](#page-schedules.events),并添加教室、参与者和资源:只要事件占用了相关参与者,教室、班级或教师上同时出现的其他安排都会被标记为冲突。临时事件属于 **Premium** 账户的功能。 #### 创建考试专用课时(隔座就座、延时考试等) > **作为**排课员,**我想要**创建考试专用课时(隔座就座、延时考试等),**以便**预订教室并获得统计数据。 **状态**:✓ 可用 **Omniscol中的解决方案。** 创建专用的课时或事件,并按考试的配置设定合适的教室和时长。 [多教室考试](#page-higher-ed.multi-room-exams) #### 创建事件(维护) > **作为**排课员,**我想要**创建事件(维护),**以便**预订教室并获得统计数据。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在相应时段创建[事件](#page-schedules.events),并加入需要占用的教室或资源:该教室或资源在此时段即被占用,不再计入可用时间。 #### 创建考试(线上或线下、1小时30分钟或3小时等、选修或必修课程) > **作为**排课员,**我想要**创建考试(线上或线下、1小时30分钟或3小时等、选修或必修课程),**以便**安排考试。 **状态**:✓ 可用 **Omniscol中的解决方案。** 考试以**考试**类型的课时创建(参见 [课时类型](#page-admin.lesson-types)):时长不限(1小时30分钟、3小时等),线下或线上取决于其[授课形式](#page-glossary.lesson-modality),可使用一间或[多间教室](#page-glossary.multi-room)。选修性质通过[小组](#page-glossary.group)来表示,而不是整个班级。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [临时事件](#page-schedules.events) - [脱离网格的课时](#page-timetables.off-grid-lessons) ### 15.7 场景——缺勤与代课 *Source: `help/zh-cn/use-cases/absences-and-substitutions.md` · id: use-cases.absences-and-substitutions · Updated: 2026-06-13* 登记教师缺勤,并在短期或长期内管理教师代课。 阅读方式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 登记教师缺勤 > **作为**教务处人员,**我想要**登记教师的缺勤,**以便**标出受影响的课时并安排必要的代课。 **状态**:✓ 可用 **Omniscol中的解决方案。** 在 **缺勤管理** 模块中登记缺勤(教师也可以自行登记,需经审批)。Omniscol会找出受影响的课时,并让您安排代课。 [登记缺勤](#page-absences.declaring) #### 在指定期间内由另一位教师代替某位教师 > **作为**教务处人员,**我想要**在指定期间内由另一位教师代替某位教师,**以便**处理长期性的变动(患病、离职等)。 **状态**:✓ 可用 **Omniscol中的解决方案。** 登记一次多日缺勤,填写开始日期和结束日期:Omniscol会计算出涉及的课时,这些课时可以不安排代课、由代课规则统一覆盖,或通过临时代课逐一调整。 [多日缺勤](#page-absences.multi-day), [代课规则](#page-absences.substitution-policies) #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [缺勤管理模块概览](#page-absences.overview) - [登记缺勤](#page-absences.declaring) - [代课规则](#page-absences.substitution-policies) ### 15.8 场景——报表与统计 *Source: `help/zh-cn/use-cases/reporting-and-stats.md` · id: use-cases.reporting-and-stats · Updated: 2026-06-13* 占用率统计、教师工作量核查、远程与线下授课比例,以及按小组和科目统计的学时。 阅读格式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 查看教室的占用紧张情况 > **作为**排课员,**我想要**查看教室的占用紧张情况,**以便**预判哪些时段会达到饱和。 **状态**:✓ 可用 **Omniscol中的解决方案。** **仪表盘**中的教室统计(参见 [教室统计](#page-dashboard.classrooms))给出每间教室、每个时期的占用率;**课表**模块则显示每间教室的占用日程(已占用的时段)。 #### 核查某位教师的授课小时数 > **作为**教学负责人,**我想要**核查某位教师的授课小时数,**以便**控制工作量并确保合规。 **状态**:◐ 部分支持 **Omniscol中的解决方案。** 在**课表管理**模块中编辑课表时,该教师的小时数总和会实时显示并更新;**仪表盘**提供该时期内的小时总数。 **变通办法。** 若要核查某个特定学期,请在**仪表盘**中选择相应的日期范围:小时总数会按所选时期重新计算,无需手动做减法。 #### 提取活动统计数据(小时数、占用率、分布) > **作为**质量负责人,**我想要**提取活动统计数据(小时数、占用率、分布),**以便**满足质量审核或认证的要求。 **状态**:◐ 部分支持 **Omniscol中的解决方案。** **仪表盘**和日程表视图的导出可提供现有的数据量。它们本身并不构成完整的认证报告:业务层面和文档层面的整理仍由院校自行负责。 > _Country: FR_ 在法国,这些导出尤其用于Qualiopi认证的跟踪。 #### 分析教室和资源的占用情况 > **作为**管理层,**我想要**分析教室和资源的占用情况,**以便**优化基础设施的使用。 **状态**:✓ 可用 **Omniscol中的解决方案。** **仪表盘**给出教室和资源的占用情况;导出文件沿用这些数据。 #### 按培养方案或年级查看远程与线下授课比例 > **作为**排课员,**我想要**按培养方案或年级查看远程与线下授课比例,**以便**落实相关规定(远程授课最多20%,周六的不理想时段至少20%)。 **状态**:◐ 部分支持 > _Premium_ **Omniscol中的解决方案。** 当课时设置了授课形式(参见 [编辑课时](#page-timetables.lesson-edit))时,**仪表盘**会按班级和科目,展示按**授课形式**划分的分布——**线下**、**远程**、**混合**或**自主学习**。Omniscol不提供对阈值的自动合规检查(例如“远程授课最多20%”)。 #### 跟踪已安排和待安排的学时 > **作为**教学负责人,**我想要**跟踪已安排的学时和尚待安排的学时,**以便**核对其与培养方案是否一致。 **状态**:✓ 可用 **Omniscol中的解决方案。** 编辑期间,[课时数分配](#page-timetables.hour-distribution)会按科目实时显示已安排的小时数和**尚待安排的时间**。**仪表盘**则事后按班级、科目和小组提供跟踪。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [仪表盘](#page-glossary.dashboard) - [仪表盘模块概览](#page-dashboard.overview) - [分配课时数并创建课时](#page-timetables.hour-distribution) ### 15.9 场景——发布与分享 *Source: `help/zh-cn/use-cases/diffusion-and-sharing.md` · id: use-cases.diffusion-and-sharing · Updated: 2026-06-13* 导出数据、教师和学生订阅iCal、只读的公开链接、预订资源。 阅读方式和状态图例,请参见 [场景——概览](#page-use-cases.overview)。 #### 导出日程数据 > **作为**教务处人员,**我想要**导出日程数据,**以便**在其他工具(ERP、报表等)中再次使用。 **状态**:✓ 可用 **Omniscol中的解决方案。** 日程表视图和 仪表盘 都提供导出功能;Omniscol API可用于自动获取数据。 [打印与分享](#page-schedules.print-and-export), [Omniscol API](#page-integrations.api-tokens) #### 通过无需登录的安全网页链接查看自己的课表 > **作为**教师,**我想要**通过无需登录的安全网页链接查看自己的课表,**以便**方便地查看我的课时。 **状态**:✓ 可用 **Omniscol中的解决方案。** 分享链接带有签名,提供只读访问,无需登录;它可以设置到期日期,并始终绑定创建它的账户(停用该账户或更改其密码都会使链接失效)。 [通过公开链接分享课表](#page-schedules.share-link) #### 通过iCal订阅源订阅自己的课表 > **作为**教师或学生,**我想要**通过iCal订阅源订阅自己的课表,**以便**把日程自动同步到个人日历中。 **状态**:✓ 可用 **Omniscol中的解决方案。** 每位用户都可以通过动态iCal链接订阅自己的课表,兼容常见的日历应用(Google日历、Outlook、Apple日历);日历按其自身的同步频率更新。 [iCal——订阅与动态链接](#page-integrations.ical) #### 将某位教师或某个小组的课表导出为Excel格式 > **作为**教务处人员,**我想要**将某位教师或某个小组的课表导出为Excel格式,**以便**分享或再处理数据。 **状态**:✓ 可用 **Omniscol中的解决方案。** 参见 [打印与分享](#page-schedules.print-and-export)。 #### 通过受控的公开链接发布课表 > **作为**学校,**我想要**通过受控的公开链接发布课表,**以便**简单地通知教师和学生。 **状态**:✓ 可用 **Omniscol中的解决方案。** 公开分享链接带有签名,只读,并且**带有到期日期**(默认为学年结束,或90天后,可修改)。对于以学校名义发布的情形,请使用已明确身份、负责分享的服务账户来创建链接,而不要用个人账户。 [公开分享链接](#page-portal.share-links) #### 预订资源(教室、教师、课时或其他) > **作为**用户,**我想要**预订资源(教室、教师、课时或其他),**以便**预订教室并获得统计数据。 **状态**:◐ 部分支持 **Omniscol中的解决方案。** 目前没有专门的预订模块。 **变通办法(Premium账户)。** 要在某个具体时段锁定一项资源,请创建[临时事件](#page-schedules.events);要使其在整个**期间**内不可用,请使用[日期窗口](#page-glossary.date-windows)。 #### 另请参阅 - [场景——概览](#page-use-cases.overview) - [iCal——订阅与动态链接](#page-integrations.ical) - [分享链接](#page-glossary.share-link) - [公开分享链接](#page-portal.share-links) - [打印与分享](#page-schedules.print-and-export) --- ## 16. 常见问题解答 ### 16.1 FAQ——常见问题 *Source: `help/zh-cn/faq/general.md` · id: faq.general · Updated: 2026-09-29* 潜在客户和新用户最常提出的一般性问题。如需更专业的问题,请参见各专题FAQ:[创建课表](#page-faq.timetables)、[数据导入](#page-faq.data-import)、[算法运行机制](#page-faq.solver-behavior)、[显示与UX](#page-faq.display-and-ux)、[安全与托管](#page-faq.security-and-hosting)、[价格与许可](#page-faq.pricing-and-licenses)。 #### 如何获得产品演示? omniscol.com网站每个页面顶部的 申请演示 按钮,可预约一次30分钟的视频会议,与Omniscol团队交流。演示会基于与您相近的情境:学校类型、人数规模、教学组织方式。 您也可以通过联系页面给团队写信,以便为这次会面做准备,或提前提出问题。之后通常会提供一段试用期,让您在团队的协助下用自己的数据试用Omniscol。参见 [价格与许可](#page-faq.pricing-and-licenses)。 #### Omniscol是否管理成绩、纪律或与家长的沟通? Omniscol专注于课表。成绩和成绩单、纪律、家校联系册或与家长的沟通,仍由校务管理软件负责,Omniscol会向这些软件提供课时数据。在法国,多年来与Omniscol合作的École Futée和EdSquare(Educentric)会因此自动收到已安排的课时。参见 [integrations.partners](#page-integrations.partners)。 #### 网络连接受限时Omniscol能正常使用吗? 可以,前提是在加载和保存时有足够的网络连接。网页应用会在浏览器中缓存已查看过的数据,使查看操作对短暂的断网更有容错性。但修改、导入、导出和管理操作需要在执行时有可用的网络。 #### 支持哪些浏览器? 推荐使用Chrome。Firefox、Safari和Edge也可正常使用。不支持Internet Explorer。 #### 需要安装客户端吗? 不需要。全部功能都在浏览器中运行,无需本地安装任何软件。 #### 我的数据有备份吗? 有。Omniscol依靠备份和冗余机制,相关内容见合同约定和账户的安全文档。参见 [安全与托管](#page-faq.security-and-hosting)。 如需手动备份,可在 导入/导出 中进行**完整的JSON格式导出**。如遇重大问题,可将该文件发回Omniscol团队,由团队重新导入。 #### 可以同时拥有多份课表吗? 可以。Standard账户可在互不重叠的周范围内使用(例如第一学期与第二学期)。[Premium](#page-overview.plans-and-options) 账户则可在相同的周内**同时**发布多份课表,各视图动态汇总——这是基础功能。部分Standard账户也可通过合同开通此功能(属特殊情况,需另行商定)。参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)。 #### 可以有多少位管理员同时工作? 同时在线的会话数取决于您的合同和使用情况。启用实时协作选项后,管理员可以看到其他已登录用户的在线状态(红点表示存在同时修改的风险)。同事保存后,业务视图不一定会自动刷新。参见 [管理员协作](#page-core-concepts.collaboration)。 #### 如何与没有账户的人分享课表? 课表界面上的 分享 按钮会生成只读的[分享链接](#page-glossary.share-link),并且必须设置到期日期。 如需动态日历订阅(自动同步),可在分享中选择iCal选项。参见 [iCal——订阅与动态链接](#page-integrations.ical)。 #### 支持哪些语言? 目前支持:法语、英语、德语、西班牙语、意大利语、葡萄牙语、荷兰语、波兰语、俄语、简体中文、阿拉伯语、希伯来语、哈萨克语、越南语。从右向左书写的语言(阿拉伯语、希伯来语)提供适配的界面(RTL)。 #### 我的学校所在国家不在列表中,可以使用Omniscol吗? 可以。按国家预先填写的设置只是为了方便,并不是限制。在最不利的情况下,您可以手动自定义年级、时间网格、假期和科目。 #### 如果我不再使用Omniscol,如何取回我的数据? 通过 导入/导出 完整导出JSON。其中包含学校的全部数据,格式可重复使用。根据GDPR,您仍然拥有自己数据的所有权。 #### **课表** 和 **课表管理** 模块有什么区别? - **课表管理** 用于**创建、配置、生成和发布**课表。使用频率较低(开学前准备、结构性修改)。 - **课表** 用于**查看和临时修改**已发布的课表。日常使用。 参见 [课表管理模块概览](#page-timetables.overview) 和 [查看和筛选](#page-schedules.consult-and-filter)。 #### 另请参阅 - [创建课表](#page-faq.timetables) - [数据导入](#page-faq.data-import) - [算法运行机制](#page-faq.solver-behavior) - [安全与托管](#page-faq.security-and-hosting) - [FAQ——高等教育使用场景](#page-faq.higher-ed-cases) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) ### 16.2 FAQ——创建课表 *Source: `help/zh-cn/faq/timetables.md` · id: faq.timetables · Updated: 2026-07-10* 关于创建和配置课表(排课表、课程表)的常见问题。每个步骤的详细说明,请参见 [课表管理模块概览](#page-timetables.overview)。 #### 应该选择哪种课表类型:周课表、周期课表还是日历课表? 取决于贵校的作息节奏: - **周课表**——课时按一个标准周每周重复。适用于小学和中学。 - **周期课表**——课时按N天为一个周期重复,周期不同于5天或7天的一周(北美体系常见)。 - **日历课表**——每个课时单独标注日期,不重复(高校和继续教育常见)。适用于Premium账户。 自动生成适用于所有类型的课表。 参见 [选择合适的课表类型](#page-overview.timetable-modes)。 #### 可以同时创建多份课表吗? 可以。同一个账户中可以并存多份课表(草稿、不同版本、学期、不同时段)。Standard账户的发布必须落在互不重叠的周范围内。Premium账户可以在相同的周**同时发布**多份课表,并动态合并;部分Standard账户也可按合同开通同等的启用方式。参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)。 #### 配置课表的推荐顺序是什么? 按**步骤**依次进行:常规设置、校区、教师、班级(及其小组)、对齐、课时数分配、生成,最后是发布。前七项是课表编辑器的标签页(从左到右);**发布**则在课表管理界面中进行。每个步骤的详细说明见目录中的“创建课表”部分。 #### 为什么“生成”按钮是灰色的? 因为检查标签页中的诊断报告出现了阻断性警告(红色)。在刚开始创建课表时最常见的原因是:**没有任何待安排的课时**。生成只负责安排已有的课时,不会创建课时——您需要先根据各课程的授课小时数创建它们,见步骤 [分配课时数并创建课时](#page-timetables.hour-distribution)。 对于一般的阻断性警告,您仍可通过按钮的选项菜单启动计算,风险自负。对于致命警告——没有课时、没有可用班级、校区没有时间网格——选项菜单也会被禁用。各种情况的详细说明见 [自动生成](#page-timetables.generation)。 #### 自动生成有局限吗? 生成算法功能强大,但会严格遵守您给定的约束。如果某项配置在结构上无法实现(可用时间相互矛盾、容量不足、对齐不一致),Omniscol会返回已计算出的最佳课表,把缺少的课时留在未安排的便利贴列表中,并给出明确的诊断。参见 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 一次生成需要多长时间? 时长取决于课表规模、课时数量和约束条件。每次生成都会启动专用的并行计算环境;在正式计算之前,初始化通常需要十秒左右。计算期间可以关闭窗口,完成后会弹出通知。大致的时长范围参见 [算法运行机制](#page-faq.solver-behavior)。 #### 生成的课表会自动发布吗? 不会。发布是独立的一步,必须在检查之后明确执行。未发布时,课表只是草稿(沙盒):其中的课时不会进入任何其他模块。参见 [发布课表](#page-timetables.publication)。 #### 可以回到课表的先前状态吗? 可以,有两种方式: - **复制**课表——每次结构性修改都可以在副本上进行,原件作为参照(所有套餐均可使用)。 - **快照**——整个账户的可恢复备份点,可自动或手动创建(Snapshots选项,视合同而定)。参见 [备份点](#page-admin.snapshots)。 #### 如何管理交替周(A/B周)? 在 [常规设置](#page-admin.parameters)的 **交替周** 部分启用该功能(用字母A/B/C或数字1/2/3表示,可在任意多个周之间自由设定循环节奏)。 在课程上,添加一周 可为新的交替周添加一个时间范围。参见 [交替周课时](#page-glossary.alternate-lessons)。 #### 可以按年级错开午餐时间吗(两个食堂用餐时段)? 可以,这正是**错峰使用食堂**的正确做法。先设定一个统一的较长午休时段——例如**12:00–14:00**,需保留的午餐时长为**一小时**——然后在班级的时间限制中(班级时间限制),在各年级半个时段的用餐时间上标记不可用(**不可用**),以此**固定**每个年级的用餐时段。 示例:6年级、7年级、8年级在12:00–13:00不可用(第一轮用餐);9年级、10年级在13:00–14:00不可用(第二轮用餐)。这样食堂就会迎来两批错开的人流。参见 [时间网格、时段与时长](#page-core-concepts.timetable-grid) 和 [时间限制(通用机制)](#page-core-concepts.time-constraints)。 #### 另请参阅 - [课表管理模块概览](#page-timetables.overview) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) - [选择合适的课表类型](#page-overview.timetable-modes) - [算法运行机制](#page-faq.solver-behavior) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) ### 16.3 FAQ——数据导入 *Source: `help/zh-cn/faq/data-import.md` · id: faq.data-import · Updated: 2026-05-10* #### 支持哪些导入格式? 支持CSV和TSV,可从Excel、Google Sheets、Numbers或Calc中复制粘贴。管理员可以导出账户的完整 **JSON文件**(用于备份);而完整JSON账户的**重新导入**属于恢复操作,由Omniscol团队负责,并不是管理界面中的常规操作。 如需专门的迁移方案,请参见 [概览](#page-migration.overview)。 #### 标识符由系统生成吗? 是的。导入学生、教师或班级时,Omniscol会生成稳定的内部标识符:人员的标识符由名和姓派生,小组的标识符包含其所属班级(`<班级>:<小组>`)。**登录标识符**的格式(名-姓、姓-名或身份编号)在 [常规设置](#page-admin.parameters) 的 **用户名** 字段中设置。 您也可以通过**外部标识符 / 学号(工号)**字段填写自己的编号,便于与学校信息系统对应追溯,也可用来区分重名的人员。 #### 导入小组时,必须始终指明所属班级吗? 是的。小组始终是班级的细分,小组的ID包含其所属班级。在课程导入文件中,“班级”和“小组”两列需要配合使用。 参见 [班级、小组、子小组](#page-core-concepts.classes-and-groups)。 #### 表格的列顺序重要吗? 导入界面会打开一个按位置区分类型的**列模板**(科目、教师、教室等各占一个指定的列)。您可以**调整模板中列的顺序**,使其与源电子表格的列顺序一致:这样复制粘贴即可,无需改写您的文件。参见 [通过表格批量导入课程](#page-timetables.mass-import)。 #### 列表字段(多位教师、多个小组等)使用哪些分隔符? 同一字段内可识别常见的分隔符:逗号、分号、斜杠、竖线、加号、&符号或换行。导入引擎会自动检测该字段所使用的分隔方式。 #### 如果表格中含有未知科目会怎样? 在导入的第4步,Omniscol会提供**创建未知实体**的选项。对于自定义科目和部分教师,您可以在 **管理** 模块中请求创建,使其在全校范围内可用。名称可在第3步消除歧义时修改。 #### 复杂课时能被正确导入吗? 部分可以。导入引擎能够很好地识别: - 简单课时(科目 + 班级 + 教师 + 教室 + 时段), - 基本的交替课时(`A/B`), - 多教师课时(协同教学), - 多教室课时。 以下情况识别效果较差,需要手动完善: - 关联课时(半班交替), - 复杂的连堂课, - 教学小组组合, - 具有精确时间、脱离时间网格的课时。 #### 大文件导入失败怎么办? - 检查是否存在空行或合并单元格。 - 将文件拆分为多个子集(按班级、按单位、按学期)。 - 优先使用源账户的**完整导出**,它通常比手动导出部分数据更规整。 #### 另请参阅 - [为批量导入准备数据](#page-getting-started.preparing-data) - [通过表格批量导入课程](#page-timetables.mass-import) - [概览](#page-migration.overview) - [高等教育使用场景](#page-faq.higher-ed-cases) ### 16.4 FAQ——生成算法的运行机制 *Source: `help/zh-cn/faq/solver-behavior.md` · id: faq.solver-behavior · Updated: 2026-05-15* 关于自动生成引擎运行机制的常见问题。算法本身的说明请参见 [生成算法](#page-glossary.solver);具体操作请参见 [自动生成](#page-timetables.generation)。 #### 生成算法适用于哪些类型的课表? 适用于[周课表](#page-glossary.weekly-timetable)、[周期课表](#page-glossary.cyclic-timetable)和[日历模式](#page-glossary.calendar-mode)的课表。在日历模式下,课时安排在真实日期上,生成选项中包含日期范围。 #### 算法是如何运作的? Omniscol在后台启动一次生成计算。算法会评估待安排的课时、已声明的约束以及生成偏好。结果主要取决于数据质量:授课小时数、教师、教室、小组、可用时间、不兼容规则以及跨校区约束。 每次生成都会启动一个专用的并行计算环境。学校一侧无需管理任何排队;初始化通常需要十秒左右,之后才开始实际计算。在 **课表管理** 模块中,**生成课表** 按钮用于启动计算、跟踪其状态并检查结果。 该引擎是一种**神经符号蒙特卡洛元启发式**优化AI:随机搜索、符号化约束和分数的逐步优化。它并不保证在一组不可能满足的约束上取得成功;这种情况下,Omniscol会返回诊断结果。 #### 一次生成需要多长时间? 时长取决于课表的规模、课时数量、约束数量以及所选的选项。作为参考量级:一所约有550名学生、45名教师、16个班级且可用时间很充裕的初中,在数据一致的情况下,不到一分钟即可得到一份完整的课表,几乎没有或完全没有空档。更密集、约束很多或带有高开销优化的情形,耗时会明显更长。 #### 生成算法会满足所有约束吗? **硬约束**会被严格满足: - 同一时刻一位教师只能在一处; - 一个班级不会重复安排,班内分组的小组除外; - 可用时间和标记为**不可用**的时段; - 普通教室同一时间只被一个课时占用; - 大教室只在其容量和班级数量的限制内使用; - 专业教室、容量、物资资源以及跨校区的路程均相互兼容; - 已锁定的课时保持原位。 **软约束**(不希望的可用时间、偏好、教学权重、每日均衡、到校天数、课表中的空档)会尽力优化。它们会产生罚分:算法寻找罚分累计最少的方案,但如果这是与硬约束兼容的最佳折中,也可能保留一部分罚分。 #### 生成失败怎么办? 找不到完整的解时,Omniscol会返回已计算出的最佳课表,并把未安排的课时留在便签栏中。这份部分课表仍可查看,以便了解哪些已经安排,然后再修正约束或手动重新安排部分课时。最常见的原因见页面 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 可以手动固定某个课时的位置吗? 可以,在手动安排课时之后,通过**锁定**该课时实现。再次生成时,算法不会移动已锁定的课时,而是围绕它调整其他课时。这对固定不变的课时很有用(日期固定的外部授课、已定日期的考试)。 #### 为什么生成算法不提供多个方案? 算法按已声明的约束和偏好进行优化,并返回**找到的最佳方案**。如果想得到多个方案进行比较,请在每次生成前复制课表,并在两次运行之间略微调整约束或权重。 #### 生成算法会考虑已登记的缺勤吗? 生成算法作用于**结构性**课表,与缺勤无关。缺勤在之后的 **缺勤管理** 模块中处理(参见 [缺勤管理模块概览](#page-absences.overview)),它会影响已发布课表的显示以及 [仪表盘](#page-glossary.dashboard)的统计(不影响底层结构)。 #### 有意保留的冲突与阻塞性冲突 并非所有冲突都一样: - **非阻塞性冲突**——如果是有意为之,可以保持现状(例如,某间教室显示的人数超过容量,因为已知所有报名者不会全部到场)。警告仍会显示,但不会阻止操作。 - **阻塞性冲突**——会导致自动生成无法成功(没有兼容的教室、对齐设置不一致等)。只要这些冲突仍然存在,生成课表按钮就保持禁用。 参见 [冲突](#page-glossary.conflict)。 #### 另请参阅 - [生成算法](#page-glossary.solver) - [自动生成](#page-timetables.generation) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) - [冲突](#page-glossary.conflict) - [诊断](#page-glossary.diagnostic) ### 16.5 FAQ——显示与界面 *Source: `help/zh-cn/faq/display-and-ux.md` · id: faq.display-and-ux · Updated: 2026-06-25* 关于Omniscol界面的显示、视图和用户体验的常见问题。 #### 查看课表有哪些视图? 显示组件提供以下组合: - **呈现模式**:**网格**(标准日历)、**列表**、类似电子表格的**表格**; - **阅读变体**:**日**、**月**、**日程表**(以及**按小时的日程表**)、**分屏**。 日程表用于在同一视图中交叉查看多个对象或多天;按小时的日程表则在时间刻度上做同样的事。表格是当前视图的表格化呈现。 参见 [课表的显示方式](#page-schedules.schedule-display) 和 [查看和筛选](#page-schedules.consult-and-filter)。 #### 课表有纵向显示吗? 在 **课表** 模块中,课表显示组件不提供纵向视图。**人员调度** 模块(参见 [人员调度概览](#page-staffing.overview))中有类似的纵向视图,用于相近的场景(监考排班网格)。 #### 界面是否支持响应式(手机、平板)? 支持,界面会适应各种尺寸的屏幕。在智能手机上,左右滑动可切换所显示的时间段(默认按周,日视图下按天)。 #### 姓名显示有哪些设置? 姓名通过一个格式化函数输出,该函数按学校的配置进行设置: - 名和姓的顺序(依各国习惯)。 - 主要部分加粗(各国不同——需处理美国、越南、阿拉伯等地习惯中的*中间名*)。 - 通过姓名大写设置,对名、第二个名(若启用)和/或姓进行大写。 #### 界面对残障人士是否友好? 我们已开展无障碍审核(RGAA、WCAG)。如有需要,可提供合规报告,已发现的改进项会持续处理。如有特殊需求(屏幕阅读器、增强对比度、键盘导航),请联系技术支持。 #### 是否支持从右向左书写的语言? 支持。阿拉伯语和希伯来语提供了适配的从右向左界面。所支持的14种语言列于 [常见问题](#page-faq.general)。 #### 如何打印课表? **课表** 模块中的 **打印** 按钮可启动打印。输出针对纸张做了优化(不含交互元素,版面经过调整)。 #### 如何将课表导出到Excel或外部日历? - 通过 **电子表格** 导出Excel / CSV。 - 通过 **下载** 导出 / 订阅iCal(参见 [iCal——订阅与动态链接](#page-integrations.ical))。 - 只读的公开分享链接(参见 [分享链接](#page-glossary.share-link))。 #### 有深色模式吗? 当前界面没有:Omniscol不提供深色主题,也不会随操作系统的深色设置自动切换。不过,界面会遵循系统的无障碍偏好设置,例如增强对比度。 #### 可以自定义科目的颜色吗? 可以。每个科目(参见 [科目](#page-glossary.subject))都可以通过 **颜色** 指定专属颜色。课时类型只是普通的文字标签,不带颜色或图标。 #### 另请参阅 - [查看和筛选](#page-schedules.consult-and-filter) - [FAQ——特殊情况与高级配置](#page-faq.edge-cases) - [信息显示屏](#page-panels.lobby-panel) - [打印与分享](#page-schedules.print-and-export) ### 16.6 FAQ——高等教育使用场景 *Source: `help/zh-cn/faq/higher-ed-cases.md` · id: faq.higher-ed-cases · Updated: 2026-06-13* 本页汇总高等教育机构(商学院、工程学院、艺术与设计学院、综合性大学、继续教育中心)常见的问题。 这些解答适用于上述各类机构;业务细节请参见 [高等教育的特点——概览](#page-higher-ed.overview)。 #### 多份课表并行,每位用户只看到自己的课表 **Q.** 如何同时管理多份课表,并让每位用户在日历中只看到与自己相关的课时? **R.** 三种机制协同工作: - 管理员可以在相同的周次上并行发布多份课表,并动态合并显示——Premium账户默认包含此功能(参见 [同时发布多份课表](#page-timetables.multiple-active-timetables))。 - 每位用户默认只看到与自己相关的课时——所在的班级、小组,教师则看到自己任教的课时。 筛选条件会在登录时按其角色自动应用。 - 若要查看其他范围(其他班级、其他教师等),用户可手动应用筛选条件,前提是其角色允许。例如,通过 [可见性限制](#page-admin.visibility-restrictions) 可以对教师隐藏其同事的课表。 #### 修改课表后的iCal同步 **Q.** 在Omniscol中修改某个课时后,iCal订阅源会自动更新吗? **R.** 会,前提是使用的是 **iCal订阅链接**(而不是静态下载的文件)。订阅链接是动态的;日历应用会定期重新拉取订阅源,间隔从几分钟到几小时不等,取决于具体应用及其设置。刷新频率由日历应用决定,而不是Omniscol。 参见 [iCal(日历导出)](#page-glossary.ical) 和 [iCal——订阅与动态链接](#page-integrations.ical)。 #### 每次修改都发送通知 **Q.** 每次修改课表时,能否发送通知? **R.** 不会在每次修改时自动发送通知:否则收件人会被大量通知淹没。目前的做法是:把修改汇总后批量发送,通过汇总邮件通知所选的相关用户(发送邮件)。 #### 在某一大类教室中选择教室 **Q.** 如何指定某个课程必须在属于某一大类的教室中进行——既可以指定某间具体教室,也可以让系统在该类教室中自行选择? **R.** 通过 [**专业教室类型**](#page-glossary.classroom-specialization),它们是自由填写的字段: - 创建一个与该大类对应的专业教室类型(例如“工坊”“机房”“化学实验室”)。 - 为相关教室设置该专业教室类型。 - 在课程上指定所需的专业教室类型。Omniscol会优先推荐对应的专业教室,由生成算法在空闲的教室中选择一间。 - 若要**指定某间具体教室**,直接填写该教室即可(可与专业教室类型同时填写,也可只填教室)。生成算法会遵守这一指定。 批量导入时,可以只填写专业教室类型;最终选用哪间教室由生成算法决定。 #### 生成前检查教室的使用情况 **Q.** 有没有报告可以在生成之前,检查安排在某间教室或某一大类教室的小时数是否在可用总小时数之内? **R.** 生成选项卡会先执行一次诊断:容量检查(待安排的课时数与时间网格的容量比较)以及专业教室类型的兼容性检查。若超出容量,会给出警告。发布之后,[仪表盘](#page-glossary.dashboard)会给出实际的详细情况(已考虑缺勤和代课)。 #### 导入时每门课程的单独时长 **Q.** 在导入文件中,“时长”一列填的是某个活动的总小时数,而一个活动可能包含多门课程。每门课程各自的时长应填在哪里? **R.** **导入文件的一行对应一门课程**。所填的时长是该课程的时长,而不是整个模块的时长。如果一个模块包含多门时长不同的课程,就需要为每门课程各写一行。 如果数据源是汇总的(如“代数 = 共30小时”),需要在导入前先拆分,或者使用 [第6步——分配课时数并创建课时](#page-timetables.hour-distribution),把总小时数分配成各门单独的课程。 #### 只在特定周次上的课程 **Q.** 如何指定某门课程只在学年中的某几个特定周次上课? **R.** 取决于所用的模式: - 在[周课表](#page-glossary.weekly-timetable)模式下,[交替周课时 / A-B周](#page-glossary.alternate-lessons)适用于课程每隔N周才出现一次的情形。如果课程只出现在学年中的某几个特定周次,则更适合使用日历模式。 - 在[日历模式](#page-glossary.calendar-mode)下,每个课时都按各自的日期单独安排:这是原生支持的。 - 导入时,请在相应的列中填写每个课时的**日期**(格式为 `YYYY-MM-DD`);若留空,则该课时之后需手动安排。 #### 跨班级、跨年级的课程 **Q.** 如何为这样的课程建模:在同一时段、同一间教室里,同一班级的多个小组或不同班级的学生一起上课,有时科目不同,有时还分处不同校区? **R.** 视具体情况而定: - **同一班级的多个小组在同一时段、同一科目、同一教师、同一教室** —— 只需一门课程,指定给一个上级小组。组成固定时,如适用,使用 [班内分组](#page-glossary.class-division);组成会变动时,使用[教学小组组合](#page-glossary.groups-of-groups),所有账户、所有类型的课表均可使用。 - **不同班级在同一时段、同一科目、同一教师、同一教室** —— 组成固定时使用 [小组对齐](#page-glossary.alignment);需要保持可调整的合并时,使用[教学小组组合](#page-glossary.groups-of-groups)(所有账户、所有类型的课表均可使用)。 - **不同科目在同一时段、同一教室**(少见)—— 需要两门独立的课程。每位学生在自己的课表上看到的是所在小组的科目。 - **跨两个校区**(来自不同地点的两个班级共享一门课程)—— 支持,前提是共用教室或视频会议已正确建模(参见 [校区](#page-glossary.site)中的虚拟校区)。 #### 同一时段由授课人员轮流上课 **Q.** 如何表示两位教师在同一时段、每周的同一天、面向同一班级/科目/小组轮流授课——这周一位,下周另一位? **R.** 这属于**授课人员轮换**,严格来说不是[协同教学](#page-glossary.co-teaching)(协同教学是指两位教师同时上同一个课时)。根据轮换的节奏,有两种做法: - **周课表模式下的规律轮换** —— 使用[交替周课时 / A-B周](#page-glossary.alternate-lessons),每一周安排不同的教师。 - **日历模式下按特定日期轮换** —— 为每个课时各创建一门课程,并指定对应的教师。操作更繁琐,但更灵活:每个课时都可以单独调整。 #### 临时联合授课(访问教授) **Q.** 如何表示在一个或几个课时上,由一位访问教授与主讲教师联合授课? **R.** 在[日历模式](#page-glossary.calendar-mode)下,先只用主讲教师创建常规课时;对访问教授参与的课时,再在该具体课时上把他添加为[协同教学](#page-glossary.co-teaching)的授课人员。 每位教师都会计入各自的统计。 #### 按课程设置视频会议链接 **Q.** 视频会议链接只能绑定到整个班级吗?还是可以绑定到某门课程或某个具体课时? **R.** 视频会议链接可以设置在三个层级:**班级**(此时默认适用于该班级的所有课时)、某门具体的**课程**,或日历模式下的**单个课时**。这适用于只有部分课程采用远程授课的混合式教学。参见 [按课程设置视频会议链接](#page-higher-ed.videoconference-links)。 #### 重修生和非本年级学生 **Q.** 如何处理需要修读其他年级科目的学生(重修、补修、延期毕业的学生等)? **R.** 一名学生可以同时被分配到多个班级,并且可以只限于某个班级的部分小组。有四种典型情形: 1. **整个另一个班级 + 第三个班级的某个小组** —— 分配到这两个班级,并选择该小组。 2. **另一个班级的多个小组,但不是整个班级** —— 直接分配到这些小组。 3. **通过某个特定小组,只修读另一个班级的一个科目** —— 在另一个班级中创建一个专用小组,并把该学生只分配到这个小组。 4. **非本年级学生重修单独一个科目** —— 做法相同,使用专用小组。 #### 使用教务系统的ID作为唯一标识 **Q.** 能否把教务系统(SIS)中的学生或教师编号作为Omniscol中的唯一标识,以避免重名? **R.** 可以,使用用户详情中的**学号/工号/外部ID**字段——这正是该字段的用途。导入时填写它,Omniscol会将其作为识别键。这对与教务系统的双向同步尤其有用(Aurion / Auriga请参见[与外部系统同步(ERP)](#page-integrations.extsync),定制集成请参见 [Omniscol API](#page-integrations.api-tokens))。 #### 每位用户多个电子邮箱 **Q.** 能否为同一位教师导入两个电子邮箱(单位邮箱和个人邮箱)? **R.** 当前界面不支持:每位用户只有一个主邮箱。如果需要保留第二个邮箱作为参考,可以填写在用户详情的评论字段中。该字段不会用作发送地址。 #### 学习者、学生、学员——对应哪个实体? **Q.** 我们的体系区分**学习者**(通称)、**学生**(学历教育)和**学员**(继续教育)。这些区别如何对应? **R.** 它们都对应Omniscol的[学生](#page-glossary.student)实体(角色 `student`)。学历教育与继续教育的区别,通过用户详情上的可选属性(教务系统学号、状态)来体现,而不是通过独立的实体。 #### 授课人员:专职、兼职、专家、访问教授 **Q.** 我们的体系区分**专职教师**(长期合同、工时分配)、**兼职教师**(按次聘用)、**专家**(少见的外部服务提供者)和**访问教授**(受邀的学者)。它们是否都对应Omniscol的同一个实体? **R.** 是的,它们都对应[教师](#page-glossary.teacher)实体(角色 `teacher`)。用于与专职教师区分的**“外聘/兼职”姓名标记**是一项 **Premium** 选项(参见 [外聘教师](#page-glossary.external-teacher));没有Premium时,这四类人员仍是同一个教师实体,没有专门的标记。 “课程负责人”和“培养方案负责人”是贵校内部的**职能角色**。Omniscol不直接为它们建模,但可以通过 [自定义角色](#page-admin.customroles)来表示。 #### 培养方案、学制、教学路径 **Q.** 我们的教学体系分为**培养方案**(本科、MBA、硕士、博士等)、**管理类课程**(教学模块/模块单元)和**教学活动**(课时)。这在Omniscol中如何对应? **R.** 推荐的对应关系: | 业务概念 | Omniscol实体 | | --- | --- | | **培养方案** | 一个[班级](#page-glossary.class)(平行的年级则对应一组班级) | | **课程 / 模块 / 教学模块 / 模块单元** | 一个[科目](#page-glossary.subject)(可带或不带[课时类型](#page-glossary.lesson-type)) | | **课时 / 教学活动** | 一个[课时](#page-glossary.lesson)——某门课程中单独安排的一次授课 | 对于层级式的编码体系(教学模块 → 模块单元 → 子单元),可以在科目名称上约定命名规则(如“UE3-EC2-ECUE1线性代数”),或使用**科目分组**来表示分组关系。 #### 交流、交换、双学位 **Q.** 如何管理来访和外出的学生(学术交流、双学位、自由流动生、海外学习)? **R.** 在课表方面,这些学习者是**被分配到特定班级的普通学生**。行政管理(协议、学分、ECTS、状态)由学校的教务系统负责;Omniscol专注于“谁在何时、何地上哪门课”这个问题。 #### 高等教育的配置建议 对于高等教育账户,建议考虑: - **Premium账户**:日历模式、日历可用时间和多份课表并行发布均默认包含在内,MCP(连接兼容的AI助手)也是如此。可根据需要再加上合同选项:自定义角色、备份点、实时协作。(**教学小组组合**则在所有账户上都可使用。) - **日历模式**用于大多数课表(每个课时单独标注日期,授课人员随各期安排而变动)。 - 每个培养方案**并行发布多份课表**(每个硕士专业一份课表,有共同课程时动态合并)。 - **教学小组组合**用于可调整的跨专业合并(多方向的公共基础课)。 - 用于分设阶梯教室的考试,或转播的讲授课,使用**多教室**。 - **自定义角色**用于为课程负责人或培养方案负责人建模,并仅在其负责范围内授予相应权限。 - **教务系统集成**(Aurion / Auriga请参见[与外部系统同步(ERP)](#page-integrations.extsync),定制集成请参见 [Omniscol API](#page-integrations.api-tokens)),用于同步学习者。 - 在学校的身份提供方(Google Workspace、Microsoft Entra ID、Keycloak等)上启用 **OIDC / SSO**。 #### 另请参阅 - [高等教育的特点——概览](#page-higher-ed.overview) - [多教室](#page-glossary.multi-room) - [授课形式](#page-glossary.lesson-modality) - [协同教学](#page-glossary.co-teaching) - [日历模式](#page-glossary.calendar-mode) - [教学小组组合](#page-core-concepts.groups-of-groups) - [FAQ——创建课表](#page-faq.timetables) - [FAQ——数据导入](#page-faq.data-import) ### 16.7 FAQ——特殊情况与高级配置 *Source: `help/zh-cn/faq/edge-cases.md` · id: faq.edge-cases · Updated: 2026-09-23* 本页回答有关非常规配置和特殊情况的问题:不遵循时间网格的课时、教室及其专业教室类型的精细管理、不阻断的冲突、特殊显示,以及不一致之处的追溯。 #### 自定义时间的课时 **问:** 我校约20%的课时不遵循标准时间网格:考试有精确的时长,部分实验课的时间错开。如何在10分钟步长的网格上安排一个从13:10开始的课时,并得到合理的结束时间? **答:** 可以。一个课时可以录入其自己的开始和结束时间,不必严格遵守标准网格的边界。在已安排的课时中,使用 自定义时间 按钮(自定义时间),然后填写开始和结束时间。 该课时仍会参与冲突检测:只要自定义时间与某个时段重叠,教师、教室、班级、小组和资源都会被视为已被占用。在自动生成时,该位置会被锁定。 班级的**脱离网格**配置则是另一种情况:它用于配置为脱离网格的日历课表班级,其所有课时都必须以精确的时间存储。 详情参见 [脱离网格的课时](#page-timetables.off-grid-lessons)。 #### 创建科目时选择已有的父级科目和科目分组 **问:** 创建自定义科目时,能否直接选择已创建的**父级科目**和已有的**科目分组**,而不必通过外部重新导入? **答:** 可以。自定义科目的创建或修改窗口中,可以直接选择已有的父级科目(字段 父级科目)和已有的科目分组(字段 科目分组),无需外部重新导入。参见 [科目管理](#page-admin.subjects)。 #### 修改或删除专业教室类型 **问:** 为什么无法直接修改或删除专业教室类型(例如纠正拼写错误)? **答:** 专业教室类型的列表是根据各教室**动态计算**出来的。要让某个类型消失: - 从所有带有该类型的教室中移除它。下次保存时,它会自动从基础列表中消失。 - 如需**重命名**,请用正确的名称创建新的类型,并在相关教室中替换;旧的类型随后会自行消失。 因此界面不提供直接修改或删除专业教室类型的按钮。参见 [专业教室类型](#page-glossary.classroom-specialization)。 #### 按科目筛选课表:单纯科目与带类型的科目 **问:** 按科目筛选课表时,有些课时没有出现,但按班级筛选时却能看到。原因是什么? **答:** **(科目,课时类型)**这一组合被视为独立于单纯科目的条目。因此: - 不带类型的“代数”与“代数——习题课”在课表中是**两个不同的条目**。 - 若要同时筛选这两者,请不要在筛选中指定类型。 - 如需核查同一科目的所有类型,请使用视图中提供的筛选,然后在课时列表中检查结果。 #### 姓氏大写显示 **问:** 能否将姓氏以大写显示?当姓氏同时也是常见的名字时尤其有用(例如“Taylor James”与“Taylor JAMES”)。 **答:** 可以。姓名大写设置在学校设置中调整。它可以作用于名、第二个名(如启用该选项)和/或姓,具体取决于为学校配置的姓名顺序。 #### 课时的锁定标记没有在所有视图中显示 **问:** 切换视图(便签 ↔ 列表)时,课时位置的锁定并不总是显示出来。 **答:** 锁定标记取决于视图和课时的性质。在课时分配视图和某些课程行中,锁定以 [lock] 图标显示。如果某个视图没有显示,请先查看课时详情,再判断算法是否可以修改它。 #### 安排教室:常用校区与优先的专业教室类型 **问:** 安排教室时,尽管勾选了常用校区,其他校区的教室却排在前面。为什么? **答:** 默认的排序依据是**班级所属的校区**,而不是用户的常用校区。这是有意的设计:由班级决定教室的选择。如果显示的顺序不符合预期,请在 编辑 中检查该班级是否已归属到所需的校区。 对于**专业教室类型**,请在选择器中查看所列教室及其兼容性提示。不要假定系统会优先按最佳兼容性排序。 #### 总容量等于各教室之和(多教室) **问:** 当同一课时安排了多间教室时,Omniscol是否会把**总容量**计算为各教室容量之和,从而避免超容量的误报? **答:** 是的。总容量按所安排教室容量的**总和**计算。如果小组人数在总和之内,则不会触发提示。该功能**适用于所有类型的课表**:周课表、周期课表、日历课表。 如果总和仍小于小组人数,系统会提示冲突。此时管理员可以: - 增加一间教室, - 缩小小组, - 若冲突是有意为之则接受它(典型情况:已知并非所有注册学生都会到场)。 参见 [多教室](#page-glossary.multi-room)。 #### 两个毫无关联的班级之间出现冲突 **问:** 两个名称不同、没有共同教师或教室的班级被提示冲突。冲突从何而来? **答:** 冲突详情会给出说明。如果第二个课时的班级后面跟着 [calendar-days] 图标和课表名称,说明该课时来自在相同日期发布的另一份课表。Omniscol在两份课表中识别出了同一个班级:虽然名称不同,它们共用同一个外部标识符(参见[识别不同课表中的同一个班级](#page-timetables.multiple-active-timetables--same-entity))。如果它们确实是两个不同的班级,请在原软件中修正该标识符。若不想再考虑某份课表,请在 同步 菜单中取消勾选它。 如果没有该图标,则两个课时属于同一份课表:请查找将这两个班级的小组汇集在一起的教学小组组合(参见 [教学小组组合](#page-glossary.groups-of-groups))。 #### 检测班内分组中小组的不一致 **问:** Omniscol提示“班内分组中各小组的课时数量不同”,但没有说明不一致出现在哪些科目。如何详细排查? **答:** **课时分配**界面中的**高级统计**面板可用于详细检查,尤其可以单独筛出在相关时段上相互影响的小组。 对于存在大量有意不平衡情况的学校,系统有一种启发式规则,超过一定阈值后会限制提示的显示,以免列表无法阅读。您仍然可以导出课时,并在电子表格中筛选,进行全面诊断。 #### 多条带有不同限制的评论 **问:** 同一门课程,能否添加两条发布范围不同的评论(一条仅限管理员,另一条面向教师)? **答:** 可以。每条评论都有各自的发布限制:管理员、教师或所有用户。使用 评论 按钮可添加多条评论,并分别设置其可见范围。 #### 课表的纵向显示(每周工作量) **问:** 要查看一个小组的工作量,或某类教室一整周的占用情况,横向显示需要来回滚动。有纵向显示吗? **答:** 在 **课表** 模块中,课表以横向方式显示。**人员调度** 模块中有类似的纵向视图,用于相近的场景(监考排班网格)。参见 [人员调度概览](#page-staffing.overview) 和 [显示与UX](#page-faq.display-and-ux)。 #### 统计:已安排的课时与已创建的课程 **问:** **课时分配**界面的计数器显示已创建了多少课时。哪里可以看到实际有多少小时已**安排**到课表中(相对于已创建但未安排的)? **答:** 两个界面给出两种互补的度量: - **仪表盘** 基于**运行中的课表**(实际已安排的课时、已发布的多份课表的汇总结果、缺勤的影响)。所显示的百分比是相对值(“该班级93%的授课小时”),并不是安排率。 - **课时分配**界面度量的是已声明的课程和已创建的小时数。如果您需要安排率,请在日程表视图中核对课程,或导出列表,筛选出尚未安排位置的课时。 #### 课表上可见的外聘教师 / 校外授课人员 **问:** 区分外聘教师与专职教师的图标,会出现在课表视图中教师姓名旁边吗? **答:** 视视图而定: - **网格视图**——空间有限,姓名可能被缩写或以纯文本截断显示,图标不一定会出现。 - **列表、提示框和选择器**——凡是显示完整姓名的地方,带有 外聘教师 标记的教师,姓名前都会有 [user-tie] 图标。 该“外部”标记是 **Premium** 选项;没有它,就没有任何图标来区分外聘教师。参见 [外聘教师](#page-glossary.external-teacher)。 > _Premium_ #### 临时事件:常见补充说明 关于事件界面的几点补充说明(参见 [临时事件](#page-schedules.events)): - **提供的时间** —— 事件的时间范围遵循校区的 开放时间;如果范围太短(例如晚间事件),请在校区详情中放宽这些时间。 - **原位修改时间** —— 事件的时间可以直接修改,点击该事件即可。 - **参与者** —— 参与者列表提供班级和小组,也可单独选择教师和学生。 #### 另请参阅 - [脱离网格的课时](#page-timetables.off-grid-lessons) - [临时事件](#page-schedules.events) - [多教室](#page-glossary.multi-room) - [专业教室类型](#page-glossary.classroom-specialization) - [显示与UX](#page-faq.display-and-ux) - [算法运行机制](#page-faq.solver-behavior) ### 16.8 FAQ——安全与托管 *Source: `help/zh-cn/faq/security-and-hosting.md` · id: faq.security-and-hosting · Updated: 2026-05-10* 本页汇总安全与托管方面最常见的问题。如需详尽说明,Omniscol可应要求(视情况也可在签署保密协议后)提供以下正式文件: - `SECURITY_OVERVIEW.md`——公开的总体概述, - `SECURITY_ONE_PAGER.md`——面向首席信息安全官(CISO)的摘要, - `SECURITY_FULL.md`——完整文档(治理、基础设施、控制措施、合规、事件响应), - `ISO27001_MAPPING.md`——与ISO 27001控制项的对照, - `SSI_QUESTIONNAIRE_STANDARD.md`——标准信息系统安全问卷的答复。 任何安全问题,请联系:**[security@omniscol.com](mailto:security@omniscol.com)**。 #### 我的数据托管在哪里? 法律声明中注明,数据托管在欧盟境内,使用AWS巴黎和Scaleway。冗余、备份、保留期限和可用性的具体承诺,取决于适用于您账户的合同框架。 #### Omniscol符合GDPR吗? Omniscol的设计以符合GDPR的使用方式为目标。实际表现为: - 仅在欧盟(法国)托管。 - 各客户之间**逻辑隔离**:账户之间无法交叉访问。 - 不做任何**用户画像**,不**转售**数据,不对贵校的内容做任何**二次使用**。 - **可迁移性**:可通过 **下载** 以JSON格式完整导出。 - 按适用的合同和法规框架处理数据主体的请求。 #### Omniscol通过了ISO 27001认证吗? 目前尚未认证,但**相关实践与该标准的原则保持一致**,并采用基于风险、持续评审的方法。控制措施的详情可在适当的合同或安全框架下提供。 #### 密码如何保护? Omniscol通过以下方式保护密码: - 在**客户端用scrypt预哈希**——您的明文密码绝不会到达服务器。 - 服务器端以加盐哈希的形式存储。 - 明文密码从不传输,也从不存储。 - Omniscol的任何管理员都无法读取、找回或恢复用户密码。 如果怀疑账户已被盗用,修改密码会使依赖该密码的衍生访问失效,尤其是与创建者密码绑定的分享链接。 #### 通信是否加密? 面向公众的应用访问均通过HTTPS。网络暴露的配置取决于所选的部署方式,需在相关账户的安全或合同框架下核实。 #### 身份验证如何运作? Omniscol的会话使用带签名、有效期有限的令牌;用户在界面中操作期间,访问权限会自动续期。 分享链接和API令牌遵循各自独立的规则: - 分享链接可以设置到期日期,并且还依赖于创建它的账户;修改该账户的密码或停用该账户,会使相关访问失效; - API令牌依赖于在界面中创建的密钥;删除该密钥或到达其到期日期,会使关联的令牌失效。 另请参见 [分享链接](#page-glossary.share-link) 和 [Omniscol API](#page-integrations.api-tokens)。 #### API:密钥与令牌 API访问在界面中管理,涉及两类可见的对象: 1. **密钥**——创建时需填写标签,必要时设置到期日期。该到期日期之后可以修改。 2. **令牌**——由某个密钥生成,带有一份允许访问的API端点列表和自己的到期日期。令牌的到期日期生成后无法修改;需要创建新的令牌。 最佳实践:每个集成使用一个密钥,标签清晰明确,到期时间与实际需求相符。如有疑虑,请删除该密钥并创建新的。 参见 [Omniscol API](#page-integrations.api-tokens)。 #### 我的用户可以使用企业账号(SSO)登录吗? 可以,通过 [OIDC / SSO](#page-integrations.oauth2),前提是账户已启用该配置。Omniscol支持Google Workspace、Microsoft Entra ID以及通用的OIDC身份提供方。 用户随后使用其企业身份登录,并保留在Omniscol中配置的权限。 #### 对恶意登录尝试有哪些防护? - 身份验证失败的响应会被有意延迟。 - 管理界面享有更强的防护。 - Omniscol不会提示账号是否存在:提示信息始终保持笼统。 #### 用户账户的生命周期 - **停用而不删除**——被停用的账户无法再登录,但其关联的数据会被保留。 - **首次访问时强制修改**——手动设置密码后,用户必须在首次登录时修改。 - **重置**——管理员可以在不知道现有密码的情况下触发重置。 #### 网络安全与运维 应要求提供的安全文件,详细说明了适用于相关账户的托管、网络隔离、数据访问规则和运维流程。 #### 有审计日志吗? 有,前提是账户已启用日志选项及相应的保留期限。可见范围取决于被记录的操作,以及Omniscol配置的保留深度。参见 [活动日志](#page-admin.logs)。 #### OWASP Top 10 Omniscol采取了与OWASP Top 10风险相对应的控制措施:访问控制、加密、输入验证、安全配置、依赖项跟踪、会话保护和日志记录。具体范围可在应要求提供的安全文件中详细说明。 #### 自动化安全测试 自动化检查已纳入Omniscol的开发和部署流程。其范围会随产品演进;详细内容可在适当的安全框架下提供。 #### 如何手动备份? **下载** 按钮会以JSON格式下载账户的完整导出文件。请妥善保管该文件:其中包含密码哈希和全部个人数据。 发生重大事故时,可以把该文件发回Omniscol团队,用于重新导入。 如果账户已启用**备份点**选项,您还可以自动创建可恢复的备份点。参见 [备份点](#page-admin.snapshots)。 #### 事件历史 截至最近一次统计(2026年2月): - **0起客户数据泄露**(累计)。 - 2025年**0起安全事件**。 这些数字发布在 `SECURITY_ONE_PAGER.md` 中,该文件每季度更新一次。 #### 另请参阅 - [架构与角色](#page-overview.architecture-and-roles) - [分享链接](#page-glossary.share-link) - [API令牌](#page-glossary.api-token) - [Omniscol API](#page-integrations.api-tokens) - [OIDC / SSO](#page-integrations.oauth2) - [备份点](#page-admin.snapshots) - [活动日志](#page-admin.logs) ### 16.9 FAQ——价格与许可 *Source: `help/zh-cn/faq/pricing-and-licenses.md` · id: faq.pricing-and-licenses · Updated: 2026-07-24* 本页汇总关于订阅套餐、包含的功能、按需选购的选项以及计费的常见问题。各套餐/选项的功能详情,请参见 [Omniscol的套餐与选项](#page-overview.plans-and-options)。 #### 有哪些订阅套餐? 三个主要套餐,外加按需选购的选项目录: | 套餐 | 适用对象 | | --- | --- | | **Lite** | 极小型机构、个人、独立培训师、试用——仅提供课表生成与打印(不含发布和学生管理) | | **Standard** | 常规学校(小学、初中、高中),单一排课团队,周课表 | | **Premium** | 高等教育、继续教育、大数据量、复杂的多校区 | 此外还有 **Standard Plus**(在Standard基础上增加 **人员调度** 模块)和独立的 **人员调度** 方案(只管理监考与值守,不含Omniscol的其他部分)。 功能详情请参见 [Omniscol的套餐与选项](#page-overview.plans-and-options)。 #### Premium包含哪些功能? Premium账户默认包含: - 日历模式——逐个课时标注日期的课表; - 日历可用时间——按日期逐日填写的可用时间; - 多份课表并行发布——在相同的周次上发布,视图自动合并。 (**教学小组组合**不是Premium功能:无论哪个套餐,所有账户都可使用。) #### 可以按需订阅哪些选项? 其余的合同选项可根据账户的需要启用,作为所选套餐的补充: - 在Standard账户上多份课表并行发布——属于特例,需通过合同启用,并相应调整方案和计费(Premium默认包含此功能); - 关联账户——将账户关联起来并共享资源的占用情况,由Omniscol应要求启用; - 自定义角色——带权限矩阵的自定义角色; - 备份点——可恢复的账户状态; - 协作——实时协同编辑; - **人员调度**——监考/值守模块(也可作为独立方案提供,不含Omniscol的其他部分); - 与外部系统同步——与外部ERP / 教务系统同步(Aurion、Auriga,或按项目增加的连接器); - 活动日志——在账户上配置了保留期限后,可查看日志; - 附加模块——其他可选模块,视模块和合同而定。 #### 是否有“仅 人员调度”方案? 有。对于只需要监考/值守管理的机构,**人员调度** 模块也可以脱离Omniscol的其他部分单独销售。此时账户只开放 **人员调度** 模块和最简的用户界面。 #### 在哪里查看价格? 每所学校情况不同:价格取决于规模、所选功能、合同期限和所需的支持服务。我们不公布统一的价目表,而是由Omniscol团队与您一起了解具体情况,并出具量身定制的报价。请发邮件至 **contact@omniscol.com**,或预约演示当面沟通(参见 [常见问题](#page-faq.general))。 #### 如何查看我账户的套餐? 当前套餐及已订阅的选项不会显示在现有的管理界面中(**设置**中的相应栏目仅限Omniscol内部使用)。如需了解账户的套餐,请联系Omniscol团队。 #### 可以在学年中途更换套餐或增加选项吗? 可以。增加选项即时生效,服务不会中断。从Standard升级到Premium同样如此。停用某个选项,要求账户上不再使用相应的功能(例如,取消关联账户前,不能再有跨账户的资源共享;取消Standard账户上的多份课表并行发布前,不能再有同时发布的课表)。 #### 有试用期吗? 有。新账户通常会提供一段评估期,并由Omniscol团队协助完成初始设置。具体条件请咨询。 #### 如何计费? 默认按年计费,并按所选期限签约。具体条款(计费周期、付款方式)在合同中约定。 #### 合同结束后会怎样? 您的数据在合同约定的过渡期内仍可访问,期间可继续使用完整的JSON导出。合同保证数据可迁移(符合GDPR)。 #### 另请参阅 - [Omniscol的套餐与选项](#page-overview.plans-and-options) - [Omniscol是什么?](#page-overview.what-is-omniscol) - [安全与托管](#page-faq.security-and-hosting) --- ## 术语表 **术语表** — 55 terms - [班级](#page-glossary.class) - [班内分组](#page-glossary.class-division) - [不兼容(科目之间)](#page-glossary.incompatibility) - [冲突](#page-glossary.conflict) - [大教室(多个课时同时进行)](#page-glossary.large-room) - [代课 / 替课](#page-glossary.substitution) - [单位](#page-glossary.campus) - [多教室(一个课时占用多间教室)](#page-glossary.multi-room) - [分享链接](#page-glossary.share-link) - [共享课程](#page-glossary.transverse-course) - [关联课时(半组交替)](#page-glossary.associated-lessons) - [假期](#page-glossary.holidays) - [交替周课时 / A-B周](#page-glossary.alternate-lessons) - [教师 / 授课人员](#page-glossary.teacher) - [教师的可用时间(意愿)](#page-glossary.wishes) - [教室](#page-glossary.classroom) - [教学小组组合](#page-glossary.groups-of-groups) - [科目](#page-glossary.subject) - [课表](#page-glossary.timetable) - [课表发布](#page-glossary.publication) - [课表显示模式](#page-glossary.schedule-view-mode) - [课程](#page-glossary.course) - [课时](#page-glossary.lesson) - [课时的授课形式](#page-glossary.lesson-modality) - [课时的状态](#page-glossary.lesson-status) - [课时分配规则](#page-glossary.distribution-policy) - [课时类型](#page-glossary.lesson-type) - [连堂课](#page-glossary.concatenated-lessons) - [年级](#page-glossary.level) - [排课范围](#page-glossary.planning-domain) - [缺勤](#page-glossary.absence) - [人员调度](#page-glossary.staffing) - [日历模式](#page-glossary.calendar-mode) - [日期窗口](#page-glossary.date-windows) - [生成算法 / 课表自动生成算法](#page-glossary.solver) - [时间网格](#page-glossary.timetable-grid) - [时间轴](#page-glossary.timeline) - [脱离网格](#page-glossary.off-grid) - [外聘教师 / 校外授课人员](#page-glossary.external-teacher) - [小组](#page-glossary.group) - [小组对齐](#page-glossary.alignment) - [校区](#page-glossary.site) - [协同教学](#page-glossary.co-teaching) - [信息显示屏](#page-glossary.panel) - [学年](#page-glossary.school-year) - [学生 / 大学生 / 学员](#page-glossary.student) - [仪表盘](#page-glossary.dashboard) - [诊断](#page-glossary.diagnostic) - [周课表](#page-glossary.weekly-timetable) - [周期课表](#page-glossary.cyclic-timetable) - [专业教室类型](#page-glossary.classroom-specialization) - [资源](#page-glossary.resource) - [自由组](#page-glossary.free-group) - [API令牌](#page-glossary.api-token) - [iCal(日历导出)](#page-glossary.ical) ### 班级 *Source: `help/zh-cn/glossary/class.md` · id: glossary.class · Updated: 2026-07-05* *Also known as : 年级 · 届 · 培训班次 · 学生群体* 在Omniscol中,**班级**是汇集学生的主要实体:这些学生在同一所学校、同一时期修读相同的培养方案。班级是课程的对象:课程面向一个班级(整个班级,或通过作为其子集的[小组](#page-glossary.group)),而不是反过来。 一个班级包含: - 一个**名称**(例如“6年级1班”“工程师培养二年级”“市场营销硕士一年级”), - 一个**年级**(年级在创建中定义,例如初中的6年级/7年级/8年级/9年级,本科的本科一年级/二年级/三年级), - 可选的**单位**(Premium选项;下属学校、学院、部门或其他组织性分组), - 一个默认**校区**(默认使用的物理地点和教室), - 可选的**专用教室**(班级的课时默认在该教室进行), - 一个**预计人数**(预期的学生数;可选,但有助于确定教室容量)。 #### 不同情境下的称呼 “班级”一词在不同类型的院校中含义各有侧重,但在Omniscol中都对应同一个实体: - **小学 / 中学**:传统学校意义上的“班级”(5年级、6年级1班、12年级文科班)。 - **高等教育**:常称“年级”“届”“培训班次”“学生群体”,有时称“培养方向”或“专业方向”。一个200名学生的年级就是一个班级;习题课和实验课的子小组是[小组](#page-glossary.group),而不是班级。 - **继续教育**:“培训班次”“学生群体”“学员群体”。 > _Premium_ 在高等教育中,“班级”在此指共用同一课表或同一整体培养方向的稳定学生群体。 它通常对应一个学生群体、一个培训班,有时也对应一个培养方向。 请不要把它与教学模块、模块单元或课程混淆。 在Omniscol中看到“班级”时,请理解为“在这一时期修读该培养方向的学生群体”,而不是“实际的房间”(房间是[教室](#page-glossary.classroom))。 #### 班级与小组的区别 一个常见的误区是把班级和小组混为一谈。小组**始终**是班级的子集。如果您需要把来自多个班级的学生放在一起(例如8年级1班、2班和3班中选修日语的学生一起上同一门日语课),不要创建新的班级,而是使用[小组对齐](#page-glossary.alignment)或[教学小组组合](#page-glossary.groups-of-groups)。 #### 另请参阅 - [小组](#page-glossary.group) - [年级](#page-glossary.level) - [班内分组](#page-glossary.class-division) - [小组对齐](#page-glossary.alignment) - [单位](#page-glossary.campus) - [校区](#page-glossary.site) - [班级、小组、子小组](#page-core-concepts.classes-and-groups) ### 班内分组 *Source: `help/zh-cn/glossary/class-division.md` · id: glossary.class-division · Updated: 2026-05-10* *Also known as : 班级分组 · 小组分区 · 拆班* **班内分组**将**同一个班级**中、必须**共用同一时段**的多个[小组](#page-glossary.group)归为一组。 具体来说:学生不可能分身,同一名学生不能同时出现在两个地方。如果您的半班小组实验A组和实验B组需要同时上两节不同的实验课,生成就需要知道它们构成一个班内分组。这样系统便会: - 把两节实验课安排在同一时段, - 使用两间不同的教室, - 由两位不同的教师授课, - 且不触发冲突提示。 #### 何时创建班内分组 只要同一个时段需要为班级中互不重叠的学生子集安排不同的课时,就应创建班内分组: - 实验课半班小组(实验A组与实验B组,半班数学与半班语文等), - 语言小组(第二外语日语与第二外语德语), - 互斥的选修课(选修书法与选修编程), - 信息技术课半班小组(因为机房只有15台电脑)。 有效性的判断标准:**同一个班内分组中,任何学生都不能同时属于两个小组**。否则您需要的是对齐,而不是班内分组(如果这些小组属于同一个班级,这本来也行不通)。 #### 如何创建班内分组 在[班级的小组页面](#page-core-concepts.classes-and-groups)中,选择相关的小组,然后点击添加班内分组按钮。同一个班级中可以并存多个班内分组(例如一个用于理科实验课,一个用于语言课,一个用于选修课)。 #### 与对齐的区别 **班内分组**=**同一个班级**中必须处于同一时段的小组。 [**小组对齐**](#page-glossary.alignment)=**不同班级**中必须处于同一时段的小组,且**由同一位教师授课、使用同一间教室**。 #### 另请参阅 - [小组](#page-glossary.group) - [小组对齐](#page-glossary.alignment) - [班内分组](#page-core-concepts.class-divisions) ### 不兼容(科目之间) *Source: `help/zh-cn/glossary/incompatibility.md` · id: glossary.incompatibility · Updated: 2026-06-13* *Also known as : 排除 · 禁止连排 · 禁止顺序* **不兼容**是一种教学上的约束,禁止一个科目**排在**另一个科目**之后**。这是一条**有方向**的规则:您声明的是“科目A之后不得排科目B”——方向很重要,先A后B与先B后A是两条不同的规则。典型例子:“数学课不能紧接在体育课之后”。 不兼容在班级层面设置,位于当前课表的 不兼容 选项卡中。 #### 禁止的范围 创建规则时,您需要选择禁令适用的范围: - **紧接着**——不能排在紧接着的下一个课时,且须在同一天。 - **在同一个半天**——不能排在同一半天的更晚时间。 - **在同一天**——不能排在同一天的更晚时间。 - **在同一周内**——不能排在同一周的更晚时间。 - **始终** *(周期课表或日历课表)*——在整个时间段内永远不能排在其后。这是用于**排定先后顺序**的工具:先学完一个模块,再进入依赖它的模块。 另外,“同一天内不重复安排相同科目”选项(全局设置)可以避免同一科目在一天内为同一名学生出现两次——这往往比逐一设置多条两两规则更简单。 #### 与课程时间限制的区别 请勿与课程的**时间限制**([clock])混淆:时间限制确定的是某一门课程的各课时在网格中的**绝对**位置,而不兼容针对的是两个科目的**相对**顺序。 | 约束 | 针对对象 | 示例 | | --- | --- | --- | | **不兼容** | 两个科目的**顺序** | “数学课不能排在体育课之后” | | 课程的时间限制 | 某门课程的**绝对**位置 | “数学课不能排在第一节” | | 专业教室类型 | 某个科目所需的**教室** | “化学课需要实验室” | #### 是优化约束,而非硬性限制 不兼容不是硬性约束:生成算法把它当作需要尽量消除的扣分项,与不希望的可用时间处理方式相同。如果其他约束没有留下任何替代方案,生成的课表中仍可能保留不兼容;这时[诊断](#page-glossary.diagnostic)会将其标出,供您决定如何取舍。请避免设置过多的不兼容:每增加一条,都会减少生成算法的自由度并延长计算时间。若要让某个科目在一周内分布均衡,调整该科目的教学比重通常更有效。 #### 另请参阅 - [科目](#page-glossary.subject) - [生成算法](#page-glossary.solver) ### 冲突 *Source: `help/zh-cn/glossary/conflict.md` · id: glossary.conflict · Updated: 2026-09-23* *Also known as : 提示 · 检测到的不一致 · 重叠 · 撞课* Omniscol中的**冲突**是指两个约束无法同时满足的情形。例如: - 一位教师在同一时段被分配了两个课时, - 一间教室被两个课时同时预订, - 班级、教师或教室在同一时间已被另一份已发布课表或关联账户中的课时占用, - 一个学生小组需要同时出现在两个地点, - 某个课时不符合其科目所要求的专业教室类型, - 某个课时的总容量(所分配教室的容量之和)小于小组的人数, - 对齐的各小组授课小时数不一致。 #### 实时检测 Omniscol**在您录入的过程中**就会检测冲突,而不仅仅是在生成时: - “课时分配”顶部显示红色横幅, - 相关课时和班级上显示 [triangle-exclamation] 图标, - 冲突列表可以点击(“放大镜”进入详情), - 在详情中,来自其他课表的课时上会显示 [calendar-days] 图标,后面是该课表的名称(参见[同时发布多份课表](#page-timetables.multiple-active-timetables--same-entity))。 #### 有意保留的冲突 并非所有冲突都需要解决,有些是有意为之: - 同一小组同时参加考试和延时考场(同一批学生按不同条件被安排在两间教室), - 当您知道并非所有报名者都会到场时,人数超过教室容量。 您可以**保留冲突**;提示会继续显示,但不会妨碍使用。 #### 阻塞性冲突 某些不一致会导致**自动生成**无法成功: - 没有与某个科目和授课小时数相匹配的教室, - 教师的可用时间与其课程完全不兼容, - 对齐在结构上无法实现。 这些冲突会被标记为**严重**;只要它们存在,生成课表 按钮就一直不可用。 #### 另请参阅 - [诊断](#page-glossary.diagnostic) - [生成算法](#page-glossary.solver) - [检测并解决冲突(生成时)](#page-timetables.conflicts) ### 大教室(多个课时同时进行) *Source: `help/zh-cn/glossary/large-room.md` · id: glossary.large-room · Updated: 2026-06-25* *Also known as : 最大班级数 · 考场 · 剧场 · 体育馆 · 游泳池 · 室外* **大教室**是一间可以在**同一时间容纳多个不同课时**的[教室](#page-glossary.classroom),这些课时的教师不同,小组之间也互不相关。在教室上填写 **最大班级数** 字段即可将其设为大教室:该数字决定了有多少个不同的课时可以在其中并行进行。 典型例子:**考场**、**大厅**、**室外场地**(操场、剧场、运动场、博物馆等)、**体育馆**、**游泳池**——都是多个互不相关的活动可以共处的场所。 #### 仅限设有专业教室类型的教室 最大班级数字段只会出现在设有**[专业教室类型](#page-glossary.classroom-specialization)**的教室上。因此需要先为教室指定专业教室类型(体育、考试、游泳池、室外……),再填写其同时容纳的最大班级数。这很合理:共享的大教室始终是为某种特定活动设置的专用场所,专业教室类型也因此可以把合适的科目引导到这里。 #### Omniscol如何使用它 在每个时段,[生成算法](#page-glossary.solver)和冲突检测都允许在该教室中安排不超过 最大班级数 的课时数,前提是这些课时的人数总和不超过教室的**[容量](#page-glossary.classroom)**。一旦超出其中任何一个上限——并行的课时过多,或容量超出——Omniscol就会提示冲突。 没有填写 最大班级数 的教室与普通教室无异:同一时间只能进行一个课时。 #### 大教室还是多教室? 这两个概念都涉及教室与课时的对应关系,但方向相反: - **大教室**是**多个课时共用同一间教室**; - 采用[多教室](#page-glossary.multi-room)的课时则相反,是**一个课时占用多间教室**(其容量为所分配各教室容量之和)。 #### 另请参阅 - [教室](#page-glossary.classroom) - [专业教室类型](#page-glossary.classroom-specialization) - [多教室](#page-glossary.multi-room) - [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 代课 / 替课 *Source: `help/zh-cn/glossary/substitution.md` · id: glossary.substitution · Updated: 2026-05-14* *Also known as : 代课教师 · 顶替* **代课**是指当任课教师[缺勤](#page-glossary.absence)时,安排另一位教师接替其上课。 #### 单个课时的临时代课 对于某一个具体的课时,管理员打开该缺勤的代课教师管理,使用 指定代课教师。这一安排只对所选课时有效,并且优先于长期规则。 #### 代课规则 对于长期缺勤,管理员通过 指定代课教师 创建一条或多条规则。一条规则可以指定: - 代课教师; - 有效日期; - 时段; - 科目; - 班级; - 评论。 规则按显示的顺序依次应用。如果没有任何规则涵盖某个课时,该课时仍然受任课教师缺勤的影响。 #### 代课的显示 在课表上,被代课的教师仍显示为缺勤的任课教师,代课教师则显示在该课时上。缺勤原因和评论的详细内容取决于查看权限。 #### 另请参阅 - [缺勤](#page-glossary.absence) - [代课规则](#page-absences.substitution-policies) - [单个课时的临时代课](#page-absences.single-lesson-replacement) ### 单位 *Source: `help/zh-cn/glossary/campus.md` · id: glossary.campus · Plan: premium · Updated: 2026-06-13* > **Premium** *Also known as : 学院 · 部门 · 下属学校 · 组织分组* > _Premium_ **单位**可以在同一个Omniscol账户中区分多所下属学校、学院或部门。 单位功能**仅限Premium账户**,且为可选项:只有在确实有助于反映您的组织结构时,才需要创建单位。 单位是一个**组织层面**的概念。它不能取代[校区](#page-glossary.site),后者描述的是地理或物理层面的实际情况:地点、时间网格、教室、路途时间。 当校区无法对应您的逻辑组织结构时,单位尤其有用。例如: - 多个学院共用同一批教学楼; - 同一集团的多所学校交叉共用多个校区; - 同一个物理校区内设有多个部门或培养方案。 即使单位与校区在很大程度上重合,单位仍然可以方便筛选和归类。 #### 单位的用途 单位主要用于: - 将属于同一组织的班级归为一类; - 便于某些筛选和归类,尤其是在冲突诊断中。 单位本身并不决定时间网格、路途时间或严格的排课约束。这些行为仍由校区、教室、资源和课表的约束来决定。 #### 在哪里设置 单位在[常规设置](#page-admin.parameters)中创建,位于班级年级设置之下。之后每个班级都可以归属于某个单位,相应的筛选和归类即由此而来。 #### 另请参阅 - [校区](#page-glossary.site) - [教室](#page-glossary.classroom) - [班级](#page-glossary.class) - [年级](#page-glossary.level) - [检测并解决冲突(生成时)](#page-timetables.conflicts) ### 多教室(一个课时占用多间教室) *Source: `help/zh-cn/glossary/multi-room.md` · id: glossary.multi-room · Updated: 2026-06-13* *Also known as : 多个教室 · 拆分教室 · 分班上课* Omniscol允许为同一个课时安排**多间教室**。 此功能**适用于所有类型的课表**:[周课表](#page-glossary.weekly-timetable)、 [周期课表](#page-glossary.cyclic-timetable)和 [日历模式](#page-glossary.calendar-mode)。 #### 典型使用场景 - **拆分到多个阶梯教室的考试**——一场200名考生的考试 分在三个阶梯教室进行(容量70 + 60 + 80),只有一位负责的 教师。容量按所安排教室的总和计算。 - **转播的讲授课**——讲授课在主阶梯教室进行,通过视频会议 转播到卫星教室(例如在另一个校区,甚至 面向完全远程上课的年级)。 - **不拆分小组的实验课分教室**——一节30名学生的实验课, 没有任何一间机房能容纳,但可以由同一位教师在两间相邻教室 (15 + 15)同时看管。 #### 总容量 = 各教室容量之和 当您为一个课时安排多间教室时,Omniscol会把 各教室的容量相加,以核对小组能否容纳。只要总和足够, 就不再出现容量超限的误报。 > **提示。** 如果您发现添加第二间教室后,容量超限的提醒 > 消失了,这正是预期的行为: > 总和现在已能覆盖人数。 #### 需要了解的限制 如果容量总和仍然**小于**小组人数,Omniscol 依然会显示冲突——是否解决由管理员决定 (增加教室、减少小组人数,或者在冲突是有意为之时接受它, 例如已知并非所有注册学生都会到场)。 #### 另请参阅 - [教室](#page-glossary.classroom) - [多教室考试](#page-higher-ed.multi-room-exams) - [校区](#page-glossary.site) ### 分享链接 *Source: `help/zh-cn/glossary/share-link.md` · id: glossary.share-link · Updated: 2026-06-13* *Also known as : 已分享的链接 · 公开链接 · 令牌分享* Omniscol中的**分享链接**是一个带签名的URL,无需事先登录即可访问以下内容: - 某个班级或某位教师的课表, - 指定的录入界面,例如可用时间, - 以只读方式查看缺勤管理模块, - 面向外部团队的特定视图(审核、沟通)。 公开课表的访问为只读。不过,某些内部分享链接可以允许有限的操作,例如填写某个指定的表单。典型的例子是教师可用时间的录入链接:学校可以连同截止日期发给教师,而无需为其创建Omniscol登录账户。 #### 安全 每个链接都内嵌一个已签名的**JWT**。对于网页链接和API链接,签名取决于生成链接的账户及其密码的哈希值。对于iCal链接,校验哈希的构造原理相同。由此产生四个结果: 1. **必须设置有效期**——链接会在您选定的日期自动失效。这是一道重要的保护:不存在永久有效的链接。 2. **更改密码后失效**——如果创建链接的账户更改了密码(或改成相同的密码,这同样会改变随机盐值),该账户生成的所有链接会立即失效。 3. **创建者账户失效则链接失效**——如果该账户被停用或删除,它创建的链接将停止工作。 4. **范围有限**——链接只开放预设的视图或操作。请勿将其描述为对账户的全局访问。 如需面向大范围分发,请使用明确标识的服务账户,而不是个人账户。服务账户会成为所发出链接在管理上的创建者,当某次分享需要作废时,可以轮换或停用该账户。 #### 与API令牌的区别 | 方面 | 分享链接 | [API令牌](#page-glossary.api-token) | | --- | --- | --- | | 适用对象 | 在浏览器中的人 | 第三方软件 | | 权限 | 范围受限,通常只读 | 取决于所选的接口 | | 使用场景 | 临时分发 | 软件集成 | | 认证 | URL中的JWT | `Authorization`请求头中的JWT | | 所需级别 | 创建者的角色 | 管理权限 | #### 创建链接 分享按钮会出现在可分享的界面上(课表、可用时间、缺勤)。点击它,选择有效期,然后复制所需格式的URL。 #### 另请参阅 - [API令牌](#page-glossary.api-token) - [通过公开链接分享课表](#page-schedules.share-link) - [公开分享链接](#page-portal.share-links) ### 共享课程 *Source: `help/zh-cn/glossary/transverse-course.md` · id: glossary.transverse-course · Updated: 2026-06-21* *Also known as : 跨班课程 · 合班课程 · 公共课 · 跨专业课程 · 跨年级课程 · 合班上课* **共享课程**把**多个班级、专业方向或年级**的学生集中到同一门课程中——公共基础课、辅修课程、跨专业选修课、跨年级讲座等。 在Omniscol中,通常使用[教学小组组合](#page-glossary.groups-of-groups)来建立共享课程(其他软件称之为“合班”):您把相关的小组合并为一个实体,再在这个实体上安排课程。课程会显示在所有所属班级中,并且**事后仍可修改**——增加或移除小组都不会改动结构。这是首选方案,尤其适用于高等教育和日历模式。 如果只是**临时**需要,不想创建命名实体,也可以在课时的小组选择器中**直接为该课时指定多个小组**。这样更快,但可读性和复用性较差。 如果班级是**平行班且结构相同**(授课小时数相同),尤其是在周课表或周期课表中,[对齐](#page-glossary.alignment)仍然适用:各小组共享一门课程,同一时段、同一位教师、同一间教室——代价是组成固定,无法调整。 #### 另请参阅 - [教学小组组合](#page-glossary.groups-of-groups) - [小组对齐](#page-glossary.alignment) - [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) - [教学小组组合](#page-core-concepts.groups-of-groups) ### 关联课时(半组交替) *Source: `help/zh-cn/glossary/associated-lessons.md` · id: glossary.associated-lessons · Updated: 2026-05-10* *Also known as : A/B组交替 · 互换* **关联课时**是两个同时进行、按半组上课的课时,它们**先后轮换**。典型情形: ``` 时段1:A组上生物,B组上物理 时段2:A组上物理,B组上生物 ``` 两个时段结束后,两个小组都上完了两门科目,只是顺序不同。这种结构在实验类科目中很常见(生物实验课加物理实验课,由两位专科教师“轮转”),在艺术类科目中也有(一半小组上实践,另一半上理论,然后互换)。 #### 创建 1. 先创建两个[连堂课](#page-glossary.concatenated-lessons)(上下相连)。 2. 将鼠标移到两者的交界处,会出现一个“关联”按钮。 3. 点击它,并指定需要轮换的**两个小组**——最好已设置为[班内分组](#page-glossary.class-division)。 #### 与小组的一致性 关联课时中使用的小组,必须在班级中设置为**班内分组**,否则生成时会发出一致性警告(一个小组不能同时出现在两个地方)。 #### 另请参阅 - [连堂课](#page-glossary.concatenated-lessons) - [班内分组](#page-glossary.class-division) - [复杂课时](#page-core-concepts.complex-lessons) ### 假期 *Source: `help/zh-cn/glossary/holidays.md` · id: glossary.holidays · Updated: 2026-06-26* *Also known as : 休假 · 法定节假日 · 寒假 · 暑假 · 调休* **假期**是学校停课的时段,归属于某个[学年](#page-glossary.school-year),包括寒暑假、调休和法定节假日。每个假期都有名称、开始日期和结束日期。 创建学年时,如果所选时间范围内有相关数据,Omniscol可以建议导入所配置国家的通用假期。之后您可以手动补充和调整列表。 #### 对课表的影响 假期的影响取决于课表的类型: - **重复课表(周课表或周期课表)**:发布时,假期会取消相关日期的课时,这些日期不会有重复课程,统计也会据此扣除这些日期。 - **日历课表**:课时可以被安排在假期当天,但这会产生冲突;此时,如果该课时未被锁定,自动生成可能会重新安排它的位置。 假期表示学校**整体**停课。若要在更小的范围内排除某个时段: - [班级和学生缺勤](#page-absences.class-and-student-absences)可在指定时段内排除某个班级; - 在日历课表中,[日期窗口](#page-glossary.date-windows)可限定某门课程的有效时间段。 #### 在哪里设置 假期按学年管理,在[学年与假期](#page-admin.school-year)中逐个添加,或以表格方式批量编辑。 #### 另请参阅 - [学年](#page-glossary.school-year) - [日期窗口](#page-glossary.date-windows) - [学年与假期](#page-admin.school-year) ### 交替周课时 / A-B周 *Source: `help/zh-cn/glossary/alternate-lessons.md` · id: glossary.alternate-lessons · Updated: 2026-05-10* *Also known as : A/B周 · 单双周 · 每周轮换* **交替周课时**是指不每周都上的课时,而是在同一时段与其他课时轮流出现。 典型情形:同一天的同一时间,A周上一节课,B周上另一节课。 #### 轮换周期的设置 交替周在保存中设置,共有三个选项: - **停用**——不交替。 - **字母**——A周、B周(若需要,还可以有C周、D周……)。 - **数字**——第1周、第2周(扩展后还可以有第3周、第4周……)。 Omniscol不限定只能两周一轮,您可以按3周、4周或更多周来交替。 #### 创建交替周课时 在设置课时的时间分配时: 1. 将鼠标移到要交替的课时上,右上角会出现[plus]图标,点击它。 2. 系统为交替周新增一个空闲时间范围。 3. 为这个新的时间范围创建对应的课时。 4. 点击该课时的图钉按钮[thumbtack],再在彩色圆点中点击所需的日期和时间。 您可以重复操作,为同一课程添加更多交替周。 #### 与其他复杂课时组合 交替周课时可以是: - **单纯交替**——两个课时之间纯粹的轮换, - **[连堂课](#page-glossary.concatenated-lessons)**——既交替,又占两个连续时段的课时, - **[关联课时(半组交替)](#page-glossary.associated-lessons)**——与关联课时叠加(小组互换:A组先上生物后上物理,B组先上物理后上生物)。小组互换与A/B周交替是**不同的**复杂课时类型,但可以组合使用。 #### 假期造成的错位 如果假期前刚好是A周,而您希望假期后从B周开始,请在全年各周的时间轴上创建一个**虚拟偏移**(参见[学年](#page-glossary.school-year))。没有偏移时,交替会按原有周期自然接续。 #### 另请参阅 - [课时](#page-glossary.lesson) - [复杂课时](#page-core-concepts.complex-lessons) - [学年](#page-glossary.school-year) ### 教师 / 授课人员 *Source: `help/zh-cn/glossary/teacher.md` · id: glossary.teacher · Updated: 2026-05-10* *Also known as : 老师 · 任课教师 · 培训师 · 讲师* 在Omniscol中,**教师**指负责课程教学的所有人员,包括: - **专职教师**(在编教师、高校专任教师), - **兼职教师**(临时受聘的外聘授课人员), - **访问教师**(受邀的高校学者、报告人), - **培训师**(继续教育、工作坊), - **专家**(因专业特长而临时聘请的授课人员)。 根据您所在学校的习惯,您可能会说“教师”“老师”“授课人员”或“培训师”——Omniscol可以通过名称设置适应您的用语,但在系统内部,他们都由同一个实体表示。 #### 创建 教师在学校层面的 教师 中创建。您需要填写: - 名、姓、登录名、密码, - 电子邮箱(用于邀请,以及“忘记密码”功能), - 可选的外部标识(工号、SIS ID), - **所教科目**(便于之后把教师分配到课程), - **服务时间**(每周计划授课小时数,会作为默认值带入新建的课表)。 #### 加入课表 教师在学校层面创建之后,还必须通过 教师分配 **加入课表**。这一步区分了“现有人员”(学校层面)和“在这份课表上调配的人员”(课表层面)。 #### 可用时间 教师可以填写自己的[教师的可用时间(意愿)](#page-glossary.wishes)(不可用、不希望、优先的时段)。对于周课表,这些信息需要经管理员确认;对于日历课表,则会实时汇总。在中学阶段,也称为**意愿**。 #### 兼职教师(外聘授课人员) 关于**兼职教师**,请参见专门的条目:[外聘教师 / 校外授课人员](#page-glossary.external-teacher)。 #### 虚拟教师 按钮 虚拟的 会创建一位*虚拟教师*——为待招聘的岗位建立的临时教师详情,其姓名旁会显示一个幽灵图标。真人入职后,您可以通过其所在行的按钮把这条记录转为真正的教师。这样可以在所有招聘尚未完成时,提前准备新学期的工作。 #### 另请参阅 - [外聘教师 / 校外授课人员](#page-glossary.external-teacher) - [教师的可用时间(意愿)](#page-glossary.wishes) - [教师管理](#page-admin.teachers) - [第3步——分配教师](#page-timetables.assigning-teachers) ### 教师的可用时间(意愿) *Source: `help/zh-cn/glossary/wishes.md` · id: glossary.wishes · Updated: 2026-06-21* *Also known as : 不可用时间 · 偏好 · 教师意愿* 教师的**可用时间**用来告诉软件哪些时段**不可用**(黑色,硬性约束)、**不希望**(红色,软性约束)或**优先**(绿色)。在中学教育中也称为**意愿**,两者是同一个概念:教师填写每周的理论可用时间,学校在生成课表时使用这些数据(也可以事先对其做修改或加权)。 生成会**严格**遵守不可用时段,并在满足其他约束的前提下,尽量照顾不希望和优先的时段。 #### 两种模式,取决于课表类型 - **周课表**——可用时间按标准周填写,由管理员在生成前确认。之后若有修改,系统会提示,但不会影响已有结果。 - **日历课表**(Premium账户)——可用时间按日期逐日填写,并实时汇总。冲突会随时被检测出来。 #### 由教师本人填写 教师可以在自己的账户中([教师门户](#page-portal.teacher-portal))填写自己的可用时间,这能为管理员节省大量时间。您也可以通过 下载 生成**可用时间界面的直达分享链接**并设置有效期,教师无需登录即可打开。 #### 另请参阅 - [教师](#page-glossary.teacher) - [生成算法](#page-glossary.solver) - [教师的可用时间与时间限制](#page-core-concepts.wishes-and-availability) - [日历模式下的可用时间与约束](#page-timetables.calendar-wishes) ### 教室 *Source: `help/zh-cn/glossary/classroom.md` · id: glossary.classroom · Updated: 2026-06-13* *Also known as : 课室 · 上课教室 · 房间 · 专用教室* Omniscol中的**教室**是可以上课的实际房间,每间教室隶属于一个[校区](#page-glossary.site)。教室包含以下信息: - **名称**(“A102”“牛顿阶梯教室”“化学实验室3”), - **容量**(可容纳的学生人数;对生成算法至关重要), - 可选的 最大班级数:如果它是可以同时容纳多个课时的**[大教室(多个课时同时进行)](#page-glossary.large-room)**(考场、礼堂、体育馆、游泳池、室外场地), - 可选的**[专业教室类型](#page-glossary.classroom-specialization)**(化学、信息技术、体育、多媒体等,每间教室只能有一个标签), - 可选的**标签**或自由备注(白板、固定投影仪、学生用插座等), - 可选的**教学楼**, - **开放时间**(适用于与其他学校共用的教室,或只在某些日子开放的教室)。 #### 为课时分配教室 一个课时可以有一间或[多间教室](#page-glossary.multi-room)。手动分配教室时,Omniscol会: - **预先过滤**不合适的教室(专业教室类型不符、容量不足、不可用、校区不对),并以半透明方式显示, - 按适合程度对兼容的教室**排序**(星级:最佳容量利用等), - 允许您强制选择不合理的分配,但会给出提示。 #### 容量与规模 容量是关键字段。如有疑问,而且您确定教室足够大,请填写较大的数字。如果填得过小,生成算法会拒绝本来有效的方案,或给出提示。 #### 大教室:同时进行多个课时 最大班级数 字段会把教室变成**[大教室(多个课时同时进行)](#page-glossary.large-room)**:它可以在同一时间容纳多个不同的课时(教师和小组各不相同),数量不超过该数值,也不超过教室的总容量——典型的有考场、礼堂、体育馆、游泳池或室外场地。此设置只会出现在已设置**[专业教室类型](#page-glossary.classroom-specialization)**的教室上。留空时,教室同一时间只能容纳一个课时。 #### 专业教室类型 **专业教室类型**(化学、信息技术、体育、多媒体、自习室等)是一个自由标签,每间教室只能有一个。在为班级分配科目时,您可以指定必须使用带有完全相同标签的教室。生成时会严格遵守这一约束。 #### 班级专用教室 许多中小学的配置会给每个班级配一间教室(课时默认在该教室进行,只有教师来回走动)。您可以在班级上进行设置(参见[第4步——创建班级及其小组](#page-timetables.creating-classes))。 #### 两个虚拟校区中的教室 如果您为同一个实际场所创建了两个虚拟[校区](#page-glossary.site)(典型情况是初中部和高中部共用校舍),一间教室同一时间只能属于其中一个校区。要让它在初中部**和**高中部都能使用,请在两个校区中各复制一份,并**设置互不重叠的开放时间**。Omniscol无法区分“两个校区共用的同一间教室”和“两间同名教室”,因此不会自动交叉核对这两条记录,需要您自己避免对同一个实际房间的重复预订。 #### 另请参阅 - [校区](#page-glossary.site) - [单位](#page-glossary.campus) - [专业教室类型](#page-glossary.classroom-specialization) - [多教室](#page-glossary.multi-room) - [大教室](#page-glossary.large-room) - [资源](#page-glossary.resource) ### 教学小组组合 *Source: `help/zh-cn/glossary/groups-of-groups.md` · id: glossary.groups-of-groups · Updated: 2026-05-10* *Also known as : 小组的小组 · 超级小组 · 小组合并* **教学小组组合**是把来自同一班级或不同班级的多个[小组](#page-glossary.group)组合在一起的方式,比[小组对齐](#page-glossary.alignment)更灵活。 它是Omniscol提供的基础组合机制。 #### 与小组对齐的关键区别 小组对齐在**创建时即固定**:被对齐的小组列表是确定的,若要取消对齐,必须复制该小组。 而教学小组组合**可以在事后修改**。您可以随时添加或移除小组,无需重建整个结构。这使它在高等教育中尤其有价值,因为组合的构成常常会在学年中变化(例如新的专业方向加入某门公共课,或某个子小组为做项目而分出)。 #### 适用场景 - 多个专业方向共同上的课程(工程类或商科院校), - 跨年级的讲座、跨专业的研讨课, - 继续教育中的公共基础课, - 开放的教学活动(参观、校外人士授课)。 分配给教学小组组合的课程,可以在组合内各小组所属的每个班级中查看(并编辑)。 #### 特点 当参与者的构成会在学年中变化,或者您希望避开小组对齐的对称性约束时,教学小组组合最为适用。 #### 另请参阅 - [小组对齐](#page-glossary.alignment) - [共享课程](#page-glossary.transverse-course) - [日历模式](#page-glossary.calendar-mode) - [教学小组组合](#page-core-concepts.groups-of-groups) ### 科目 *Source: `help/zh-cn/glossary/subject.md` · id: glossary.subject · Updated: 2026-05-10* *Also known as : 学科 · 教学模块 · 模块单元* **科目**是[课程](#page-glossary.course)所教授的学科:数学、物理、英语、会计法、机器学习、项目方法论……科目只是学科本身;课程则是这门科目落实到某个具体班级后的教学安排。 Omniscol为每个国家提供一份**通用科目目录**(根据官方分类,有时几百个,有时几千个),已预先填入账户中。如果缺少某个科目,您可以通过 创建 创建**自定义科目**。 #### 高等教育中的术语 法国高等教育的教学分类采用不同的层级: - **UE**(教学模块)——一组课程或模块的集合, - **EC**(模块单元)——教学模块的子单元, - **ECUE**(教学模块的组成单元)——划分得更细, - **模块**——继续教育中的通用说法。 所有这些层级在Omniscol中都对应同一个实体:“科目”。如果您需要表示教学层级本身(教学模块 → 模块单元 → 组成单元),可以采用命名约定(例如在代码前加前缀:`模块3-单元2-子单元1 线性代数`),也可以使用[科目管理(官方科目与自定义科目)](#page-admin.subjects)中的科目分组。 #### 课表中复制的科目 在课表中为班级指定某个科目时,Omniscol会在课表的结构中为该科目创建一份**内部副本**。这是有意为之:如果之后您在学校层面删除或重命名了该科目,现有课表仍保留其历史版本。因此,在课表中使用自定义科目之前,请**仔细检查其拼写**——事后的修改不会同步到已经配置好的课表中。 #### 搭配的课时类型 为班级指定科目时,您可以同时选择一个[课时类型](#page-glossary.lesson-type)(习题课、实验课、考试、讲授课等)。`(科目,类型)`这一组合是一个独立的标识:例如,“数学讲授课”和“数学习题课”在课表结构中是两个相互独立的条目。 #### 所需的专业教室类型 科目可以**要求特定的专业教室类型**(化学 → 化学实验室,体育 → 体育馆)。生成时会严格遵守这一约束。参见[专业教室类型](#page-glossary.classroom-specialization)。 #### 教学权重 您可以为班级中的某个科目设置**教学权重**:生成时会尽量把该科目均衡地分布在一周的各天,而不是全部集中在一起。 #### 另请参阅 - [课程](#page-glossary.course) - [课时类型](#page-glossary.lesson-type) - [课时](#page-glossary.lesson) - [科目管理](#page-admin.subjects) - [专业教室类型](#page-glossary.classroom-specialization) ### 课表 *Source: `help/zh-cn/glossary/timetable.md` · id: glossary.timetable · Updated: 2026-06-13* *Also known as : 排课表 · 日程表 · 周课表 · 课程表 · 课程安排* Omniscol中的**课表**是学校在某一时期内全部课时的完整安排,也是整个软件的核心对象。 一份课表包括: - [班级](#page-glossary.class)及其[小组](#page-glossary.group)和[班内分组](#page-glossary.class-division), - 已指定的[教师 / 授课人员](#page-glossary.teacher), - [校区](#page-glossary.site)及其时间网格、教室和资源, - 各种约束(可用时间、不兼容、对齐), - [课时](#page-glossary.lesson)(已安排或未安排)。 #### 三种课表模式 创建课表时,您需要选择它的模式: - **[周课表](#page-glossary.weekly-timetable)**——课时按一个重复的标准周安排,常见于小学和中学。 - **[周期课表](#page-glossary.cyclic-timetable)**——课时在任意天数(5天、6天、7天……取决于您的周期)内重复,常见于北美的教育体系。 - **[日历课表](#page-glossary.calendar-mode)**——每个课时都有具体日期,如同日程本,常见于高等教育(工程学院、继续教育)。 #### 一所学校可有多份课表 同一账户下可以同时存在多份课表: - 尚未发布的**草稿**, - 针对不同**时期**的课表(第一学期与第二学期,新学年筹备与当前课表), - 在Premium账户(或在合同约定启用的Standard账户,属于例外情况)中,可以在相同的周次**同时发布**多份课表(例如一份按周重复的上午课表,加一份日历模式的下午课表)——参见[同时发布多份课表](#page-timetables.multiple-active-timetables)。 #### 课表的生命周期 ``` 创建 → 配置 → (自动生成?) → 查看 → 发布 → 日常调整 ``` - **创建**——选择模式、名称和基本参数。 - **配置**——校区、教室、教师、班级、小组、科目、课程。 - **生成**——通过生成算法自动完成(周课表、周期课表、日历课表三种模式均可使用),或手动安排。 - **查看**——发布前检查。 - **发布**——课表投入使用:在学年中所选的周次,其课时会提供给所有其他模块。 - **日常调整**——在学年中随时进行(调课、换教室、处理缺勤),无需重新生成。 #### 另请参阅 - [选择合适的课表类型:周课表、周期课表、日历课表](#page-overview.timetable-modes) - [课表管理模块概览](#page-timetables.overview) - [第8步——发布课表](#page-timetables.publication) ### 课表发布 *Source: `help/zh-cn/glossary/publication.md` · id: glossary.publication · Updated: 2026-06-13* **发布**课表,就是让它投入使用。在您选择的**学年周次**内,已发布的课表会把它的**课时**提供给所有其他模块:主页、课表、仪表盘、缺勤管理,甚至通过教师课表和学生的分配提供给管理。状态为草稿或已取消的课时不会出现在这些模块中。 生成的课表**不会自动发布**。在发布之前,它只是草稿,相当于沙盒:您可以在课表管理模块中随意准备,不会改变其他任何地方;只有管理员能看到它。 #### 如何发布 在课表管理模块的主页上: 1. 选择相关的学年。 2. 点击课表发布(课表发布)。 3. 在出现的网格上,为每份课表选择周次。 4. 保存。 #### 每周只能有一个已发布课表(Standard账户) Standard账户每周只允许**一个已发布的课表**。如果您想发布两份不同的课表,它们的周次范围必须互不重叠。 #### 同时发布多份课表 在Premium账户中(或者在合同约定了受限启用的Standard账户中,属于特例),可以在相同的周次发布多份课表,并在查看时合并显示。详见 [同时发布多份课表](#page-timetables.multiple-active-timetables) 以及发布的完整页面。 #### 日历课表:只有发布与否 日历模式的课表不按周次范围发布(课时本身已逐一标注日期):它只有两种状态,要么已发布,要么未发布。参见[日历模式](#page-glossary.calendar-mode)。 #### 另请参阅 - [课表](#page-glossary.timetable) - [学年](#page-glossary.school-year) - [第8步——发布课表](#page-timetables.publication) - [同时发布多份课表](#page-timetables.multiple-active-timetables) ### 课表显示模式 *Source: `help/zh-cn/glossary/schedule-view-mode.md` · id: glossary.schedule-view-mode · Updated: 2026-06-13* *Also known as : 网格视图 · 列表视图 · 表格视图 · 切换视图* 同一份课表上的课时有三种可互相切换的呈现方式,通过标题栏中的按钮选择: - **网格**(网格视图):经典的日历视图,课时按“日 × 时间”排布在网格上。这是快速查看时的默认模式。 - **列表**(列表视图):按时间顺序依次列出课时,每行一个,包含日期、时间、时长、班级、小组、科目、教师、校区和教室。适合逐条浏览。 - **电子表格**(电子表格):当前视图的电子表格式呈现——日期为列、时段为行(或相反);在列表视图下则每行一个课时。适用于审核、复制到电子表格,或按屏幕提供的文件导出(PDF、CSV、Excel / XLSX)。此模式仅限管理员在电脑上使用。 三种模式使用**同一份数据**;切换既不会修改也不会筛选数据,只是呈现方式不同。您的选择不会被保存,仅对当前显示有效。 ### 课程 *Source: `help/zh-cn/glossary/course.md` · id: glossary.course · Updated: 2026-06-26* *Also known as : 班级科目 · 班级课程 · 课程行* **课程**是某个[科目](#page-glossary.subject)面向一个[班级](#page-glossary.class)(或其某个[小组](#page-glossary.group))在特定时期内的教学。它是您**教学安排**的基本单元:要教什么、教给谁、教多少,与这些内容最终落在课表的什么时间无关。 一门课程包含: - 一个**科目**(所教授的学科), - 可选的**[课时类型](#page-glossary.lesson-type)**(讲授课、习题课、实验课、考试等)——“(科目,类型)”这一组合构成一门独立的课程, - 目标**授课小时数**(每周小时数,或课时数), - 一位或多位已分配的**教师**, - 可选的**约束**:教学权重、所需的专业教室、不兼容规则、排课偏好。 #### 课程、科目、课时:不要混淆 - [科目](#page-glossary.subject)是纯粹的学科(数学),位于学校的目录中。 - **课程**是这个科目*落到某个班级上*,并带有小时数和属性:“9年级1班的数学,每周4小时,习题课”。 - [课时](#page-glossary.lesson)是在时间网格中实现课程的具体**出现**(每周实际安排的四个时段)。 因此,一门课程对应一个或多个课时;删除一个课时不会删除课程。 #### 界面中的隐含概念 界面在这里并不使用“课程”一词:您通过**为班级分配科目**来建立课程(班级的课程标签页),然后填写小时数、类型和教师。这个概念仍然有助于理清思路,尤其是在高等教育中,那里明确区分课程(定义)与其课时(具体出现)。 #### 全部课程:培养方案 一个班级或一个专业的全部课程构成其**培养方案**。根据学段和院校的用语,也称为**教学计划**、**培养手册**、**学习路径**或**教学大纲**。Omniscol不强制使用这些术语:它处理的是课程(班级的科目,带类型);这些课程之和*就是*培养方案。 #### 另请参阅 - [科目](#page-glossary.subject) - [课时](#page-glossary.lesson) - [课时类型](#page-glossary.lesson-type) - [课程、课时、课时类型](#page-core-concepts.lessons-and-types) - [数据组织:科目、教师、班级、课表](#page-core-concepts.data-model) - [第4步——创建班级及其小组](#page-timetables.creating-classes) ### 课时 *Source: `help/zh-cn/glossary/lesson.md` · id: glossary.lesson · Updated: 2026-06-13* *Also known as : 上课 · 节次 · 时段 · 兼职授课* **课时**(或称*上课节次*)是安排在课表时间网格上的计划单元: 您放置、移动、锁定、修改、取消或代课的都是它。一个课时包含: - 一个**班级**或一个[小组](#page-glossary.group)(授课对象), - 一个**科目**([科目](#page-glossary.subject)), - 一位或多位**教师**([协同教学](#page-glossary.co-teaching)), - 一间或多间**教室**(参见[多教室](#page-glossary.multi-room)), - 一个或多个**资源**(移动投影仪、平板电脑箱等), - 一个**时长**(通常为校区时间网格的1个或2个时间单位), - 可选的**类型**(习题课、实验课、讲授课、考试等,在 创建中定义), - 可选的**备忘**(自由备注,可限制发布范围:仅管理员、 管理员和教师,或所有人)。 #### 课时还是课程? Omniscol的界面用“课时”指放置在网格上的单元。 **[课程](#page-glossary.course)**则是指教学本身的恰当说法—— 即某个班级所学的科目,包含学时总量和各项属性:我们说英语课程、课程小时数、 上课日,同一门课程会在课表中产生一个或多个课时。中文界面中,课时类型这一标签和 [复杂课时](#page-core-concepts.complex-lessons)这一概念则统一使用 “课时”一词。 #### 不同场景下的用词 - **课时**——界面中对计划单元的称呼, 不论学校类型。 - **课节**——中小学常用的同义说法。 - **授课安排**——高等教育的常用说法:授课教师 完成一次授课(Auriga和Aurion连接器沿用这一用法)。 - **时段**——更多指网格上的时间位置, 而不是占用它的课时。 - **兼职授课**指由兼职教师承担的课时(与专职教师相对); 它并不是另一种课时类型,只是授课的教师不同。 #### 简单课时与复杂课时 简单课时 = 一个授课对象、一位教师、一间教室,占用一个时段。 **复杂课时**由多个课时组合而成: - **[连堂课](#page-glossary.concatenated-lessons)**——两个前后相接的课时 (2小时的实验课 = 一节1小时的实验课与另一节1小时的实验课连堂)。 - **[关联课时](#page-glossary.associated-lessons)**——小组在两个连续课时中 轮换(A组先上生物再上物理,B组 先上物理再上生物)。 - **[交替周课时](#page-glossary.alternate-lessons)**——每两周、每三周 才出现一次的课时(A周与B周),等等。在 保存中配置。 #### 脱离时间网格的课时和班级 默认情况下,课时与校区时间网格的时段对齐。 但Omniscol也能处理不符合网格的课时(例如在以50分钟为间隔的网格上, 一场2小时的考试从10:20开始)。请参见 [脱离时间网格的课时和班级](#page-timetables.off-grid-lessons)。 #### 另请参阅 - [课程](#page-glossary.course) - [课时类型(习题课、实验课、讲授课等)](#page-glossary.lesson-type) - [课时的状态](#page-glossary.lesson-status) - [课时的授课形式](#page-glossary.lesson-modality) - [科目](#page-glossary.subject) - [复杂课时](#page-core-concepts.complex-lessons) - [多教室](#page-glossary.multi-room) ### 课时的授课形式 *Source: `help/zh-cn/glossary/lesson-modality.md` · id: glossary.lesson-modality · Plan: premium · Updated: 2026-06-25* > **Premium** *Also known as : 线下授课 · 线上授课 · 远程课时 · 混合 · 自主学习 · 视频会议* > _Premium_ 在 **Premium** 账户中,**授课形式**说明[课时](#page-glossary.lesson)**如何**进行。它在教室选择器 分配教室 中选择,位于教室分配旁边。共有四个取值,每个在课时上都有各自的图标: - **线下**——课时在[教室](#page-glossary.classroom)中进行(默认情形)。 - **远程**——课时以远程方式进行(图标 [video]);无需教室。 - **混合**——课时在教室中进行,**同时**向远程转播(例如以视频会议方式直播的讲授课):因此它既占用教室,也需要一个链接。 - **自主学习**——学生自主完成的学习,无需教室。这等同于锁定为无教室(锁定后,课时未分配教室时不再发出提醒)。 #### 对教室和生成的影响 授课形式会对排课产生实际影响:**远程**或**自主学习**的课时**无需教室**。[生成算法](#page-glossary.solver)不会为其预留教室,教室自动分配也会忽略它们。相反,**线下**和**混合**的课时需要教室。 #### 视频会议链接 对于远程或混合课时,您可以在同一个教室选择器中填写**视频会议链接**。也可以在班级上设置默认链接,此时它适用于该班级的课时。如果没有链接,系统会显示提醒。 #### 按授课形式统计 [诊断](#page-glossary.diagnostic)提供一张**按授课形式**划分的分布表:它汇总线下、远程、混合和自主学习各自完成的教学时间。例如,可以借此衡量一个培训项目中远程授课所占的比例。 如果没有明确填写授课形式,Omniscol会根据已有的信息**推断**:既有教室**又**有视频会议链接的为混合课时;只有教室的为线下;只有视频会议链接的为远程;明确设为无教室的为自主学习。明确的选择始终优先于这种推断。 #### 另请参阅 - [编辑课时](#page-timetables.lesson-edit) - [状态](#page-glossary.lesson-status) - [课时](#page-glossary.lesson) - [教室](#page-glossary.classroom) ### 课时的状态 *Source: `help/zh-cn/glossary/lesson-status.md` · id: glossary.lesson-status · Plan: premium · Updated: 2026-06-25* > **Premium** *Also known as : 课时状态 · 课程状态 · 已计划 · 草稿 · 已取消课时 · 已完成课时* > _Premium_ 在 **Premium** 账户中,**状态**表示[课时](#page-glossary.lesson)在排课流程中所处的阶段。可以逐个课时设置——通过图标 状态——也可以在列表模式下**批量**设置。共有四个取值: - **已计划**——已排课课时的默认状态。这是放置在网格上的普通课时的状态。 - **草稿**——筹备中的课时,会被**自动生成**和**仪表盘**所**忽略**。适合先准备好课时,而暂不将其强加于课表或[生成算法](#page-glossary.solver)。 - **已取消**——课时仍会**显示为已取消**(留作记录),但同样会被**自动生成**和**仪表盘**所**忽略**。 - **已完成**——课时被标记为**已完成**,由此以这一明确的标记计入教师的**仪表盘**,用于**计费**。 #### 显示方式 在时间网格上显示时,这些课时可以通过外观识别: - **草稿**课时带有**橙色虚线边框**,并略显淡化; - **已取消**课时带有**删除线**,并明显淡化——鼠标悬停时恢复清晰可读,这样既能留作记录,又不会让网格显得杂乱。 #### 对生成的影响 **草稿**和**已取消**课时会被[生成算法](#page-glossary.solver)搁置:不会为其安排位置,也不会计入冲突(教室占用、教师撞课、容量)。**已计划**课时仍是生成所安排的实际课时。 #### “已完成”:仅限日历模式 **已完成**状态只在**[日历模式](#page-glossary.calendar-mode)**的课表中提供:只有在有具体日期的课时上,把课时标记为已实际完成才有意义。它随后用于**统计教师实际授课的小时数**(教师仪表盘)及其**计费**。在周课表或周期课表中,不会出现这一状态。 #### 另请参阅 - [编辑课时](#page-timetables.lesson-edit) - [授课形式](#page-glossary.lesson-modality) - [课时](#page-glossary.lesson) - [日历模式](#page-glossary.calendar-mode) ### 课时分配规则 *Source: `help/zh-cn/glossary/distribution-policy.md` · id: glossary.distribution-policy · Updated: 2026-09-14* *Also known as : 课时分配策略 · 预排课* 课时分配规则逐门课程描述课表中应包含的课时: 面向哪些学生、由哪些教师授课、在哪些教室、共多少节、每节多长。 它属于**预排课**:在任何课时存在之前就已确定, 并且往往不是由排课员决定的—— 由教务部门确定培养方案,排课员负责落实。 它由若干**规则**组成。一条规则描述一组相同的课时: > 小组A · 王老师 · 4节2小时的课时 一门课程可以有任意多条规则:每个不同的学生群体、 每种不同的时长、每位不同的授课教师各一条。 规则是**可选的**。没有规则的课程,与其他课程一样, 可以手动安排课时,或通过自动安排完成。 有规则时,它发挥两个作用:按其描述**创建** 缺少的课时;并**持续衡量**它的预期 与课表中实际内容之间的**差异**。 它连接两样东西: - **课程**及其授课小时数,从学生的角度表述—— 24小时的金融分析,无论班级是否被划分为 [班内分组](#page-glossary.class-division); - 在课时分配界面中实际建立的**课时**, 学生只上一次的授课小时数,可以按需要服务的小组数重复多次。 要落实它,请参见 [分配规则](#page-timetables.distribution-policy)。 ### 课时类型 *Source: `help/zh-cn/glossary/lesson-type.md` · id: glossary.lesson-type · Updated: 2026-05-10* *Also known as : 讲授课 · 习题课 · 实验课 · 随堂测验* **课时类型**说明一个课时的教学形式。 典型示例: - **讲授课**——教师面向全班系统讲授, - **习题课**——带领学生做练习, - **实验课**——动手实验与实践操作, - **考试**——需要评分的测评, - **讲座**——外部嘉宾受邀授课, - **工作坊**、**研讨课**、**论坛**、**答辩**…… 课时类型在学校层面通过 创建定义。您可以按教学分类的需要创建任意多个 (高等院校有时会有25至30种类型)。 #### 科目与类型的组合 课时类型是为课程设置的,是对其[科目](#page-glossary.subject)的补充。“科目 + 类型”这一组合 被视为一个独立的标识:例如在统计或筛选中,“数学课”和“数学习题课”会 分别显示。 如果想同时查询两者(不区分类型),请使用不指定类型的开放式筛选。 #### 筛选与显示 - **课表模块中的筛选**——选择某一类型,只查看 实验课或只查看讲授课。 - **统计**——按班级或按教师统计习题课、实验课和讲授课的 小时数。 - **显示**——根据显示设置,在网格上用颜色或标记区分不同类型。 #### 另请参阅 - [课程](#page-glossary.course) - [科目](#page-glossary.subject) - [课时](#page-glossary.lesson) - [配置课时类型](#page-admin.lesson-types) ### 连堂课 *Source: `help/zh-cn/glossary/concatenated-lessons.md` · id: glossary.concatenated-lessons · Updated: 2026-05-10* *Also known as : 紧邻课时 · 连续课时 · 双节课 · 连上两节* **连堂课**是两个必须在一天中**连续**排列的课时。生成时会保证它们紧接在一起,中间不插入其他课时。 典型情形: - 由两个1小时课时组成的**2小时实验课**, - **讲授课 + 习题课**连续进行(先讲授导论,再做习题练习), - 由两个1小时时段组成的**2小时考试**。 #### 创建 在“课时分配”中,把一个课时拖放到另一个课时下方。两个课时会**紧贴**在一起,成为一个整体。 #### 拆分 鼠标悬停在两个连堂课时之间时会出现“剪刀”按钮,点击即可**拆分**这组连堂课。两个课时随即恢复为相互独立。 #### 为什么不直接创建一个更长的课时? 这是个好问题。选择连堂而不是延长时长,主要有两个原因: 1. 这些课时可能有**不同的类型**(讲授课连着习题课)、**不同的教师**或**不同的教室**。 2. 您希望在统计中把它们算作两个独立的课时(教学日志中的两条记录),而不是一个。 如果所有属性都相同,直接延长单个课时更简单。需要灵活性时,连堂课才有用武之地。 #### 另请参阅 - [关联课时](#page-glossary.associated-lessons) - [复杂课时](#page-core-concepts.complex-lessons) ### 年级 *Source: `help/zh-cn/glossary/level.md` · id: glossary.level · Updated: 2026-06-21* *Also known as : 班级年级 · 学段* **年级**按**学业进度**对[班级](#page-glossary.class)分类: 初中的6年级、7年级、8年级、9年级;本科的本科一年级、二年级、三年级; Bachelor、Master、第1年、第2年……视学校而定。 它是一种**组织用的标签**,不是排课约束: 年级不会对生成施加任何限制。它用来**整理和查找** 班级——用于班级相关的各个界面、多个筛选条件以及 部分诊断视图。 #### 在哪里设置 年级属于账户的**常规**设置。在 [常规设置](#page-admin.parameters)的**年级**下,您可以通过 创建创建年级、删除年级,还可以 **拖放来调整顺序**——顺序体现学业进度。 之后,每个班级在创建时会被分配一个年级 (参见[创建班级](#page-timetables.creating-classes))。 #### 年级、单位和校区 三个相近的概念,请勿混淆: - **年级**说明班级所处的**学业进度**(班级 在学业中进行到哪一步); - [单位](#page-glossary.campus)把班级归入某个**组织实体** (学院、部门、办学点); - [校区](#page-glossary.site)则给出**实际地点**以及 默认使用的教室。 一个班级通常同时具有这三者:一个年级,可能还有一个 单位,以及一个默认校区。 #### 另请参阅 - [班级](#page-glossary.class) - [单位](#page-glossary.campus) - [校区](#page-glossary.site) - [创建班级及其小组](#page-timetables.creating-classes) - [常规设置](#page-admin.parameters) ### 排课范围 *Source: `help/zh-cn/glossary/planning-domain.md` · id: glossary.planning-domain · Plan: premium · Options: customroles · Updated: 2026-08-07* > **Premium · Option: 自定义角色** *Also known as : 排课数据范围* **排课范围**为管理员授予一个**数据范围**(他负责管理的数据)和一组**权限**(他可以对这些数据执行的操作)。当一个账户在同一份[课表](#page-glossary.timetable)中汇集了多个[单位](#page-glossary.campus)、专业方向或学校时,每位排课员就只处理属于自己的那一部分。 管理员只要没有任何排课范围,就保有对账户的完全访问权限。 #### 数据范围 数据范围按维度描述,从最宽到最细:一边是单位和[科目](#page-glossary.subject),然后是课表、其[校区](#page-glossary.site)及[教室](#page-glossary.classroom)、其[班级](#page-glossary.class)及[小组](#page-glossary.group)。每个维度都可以用一个条件来限定:精确值、前缀、包含的值或数值阈值。当一个[课时](#page-glossary.lesson)满足所有被限定的维度时,就属于该数据范围。 #### 权限 权限决定排课员可以对其数据范围做什么:创建、修改或删除实体和课时;在精细修改中,还包括时间网格上的位置、教师、教室、授课形式、视频会议链接、状态、时长、评论和生成。 其原则是做减法:默认授予全部权限,由您取消勾选该范围所禁止的操作。 查看权限始终开放:排课范围限定的是您可以写入什么,而不是可以看到什么。 #### 排课范围还是自定义角色 [自定义角色](#page-admin.customroles)决定管理员可以执行**哪些操作**,即哪些模块可以查看、修改或删除。排课范围则决定他对**哪些数据**起作用。两者可以授予同一个人,相辅相成。 #### 多个排课范围 一位管理员可以获得多个排课范围,每个范围都有各自的数据范围和权限。它们相互叠加而不会合并:只要有一个范围涵盖某项操作,该操作就被允许。 #### 另请参阅 - [范围](#page-admin.planning-domains) - [自定义角色](#page-admin.customroles) - [单位](#page-glossary.campus) - [校区](#page-glossary.site) ### 缺勤 *Source: `help/zh-cn/glossary/absence.md` · id: glossary.absence · Updated: 2026-05-14* *Also known as : 请假 · 不可用 · 病假 · 临时缺勤* Omniscol中的**缺勤**是指声明某个实体在指定时间段内不会到场。可管理的实体包括教师、班级、学生,以及(在启用 人员调度 模块时)员工。 已批准的缺勤会改变课时的显示方式: - **教师缺勤且无人代课**:该课时被标记为受影响,教师姓名加删除线; - **教师缺勤且有[代课 / 替课](#page-glossary.substitution)**:代课教师显示在被划掉的原任课教师旁边; - **班级缺勤**:该班级的课时在此期间不再显示; - **学生缺勤**:记录在该学生名下,不影响其所在班级的课程。 #### 缺勤的状态 - **已批准**:缺勤已确认并生效。 - **待处理**:由相关用户提交的申请,需管理员审批。 - **已拒绝**:申请被拒绝。 - **已中止**:申请被申报人撤销。 只有状态为 **已批准** 的缺勤才会影响课表的显示。 #### 缺勤的字段 - **实体**:教师、班级、学生,或在启用 人员调度 模块时的 员工。 - **日期范围**:开始和结束日期。真正没有结束日期的缺勤需要明确跟进;如果未提供结束日期,可以把学年结束日作为技术上的截止日期。 - **时间范围**:全天或指定时段。 - **筛选条件**:根据实体类型,可选班级、科目或任务。 - **事由**:从提供的列表中选择;管理员可以输入自定义事由。 - **评论**:简短的自由文本。 - **状态**:已批准、待处理、已拒绝或已中止。 #### 另请参阅 - [代课 / 替课](#page-glossary.substitution) - [缺勤管理模块概览](#page-absences.overview) - [登记缺勤](#page-absences.declaring) ### 人员调度 *Source: `help/zh-cn/glossary/staffing.md` · id: glossary.staffing · Options: staffing · SKU: omniscol/staffing-only · Updated: 2026-06-13* > **Option: 人员调度** *Also known as : 看护 · 值班表 · 值班网格 · 监考安排* **人员调度**模块**按任务**而不是按课程来安排员工。它最初是为学生事务工作设计的:生活老师、德育处人员、值班人员及类似岗位,在一天中轮流负责操场、接待处、走廊、图书馆、食堂、体育课外出、自习看护等。 该模块还可以管理: - **考试监考**(期末考试、中考和高考、竞赛), - **临时看护**(外出活动、研学旅行、班级评议会), - **活动式教学**(蒙台梭利):教师按活动而不是按课程来安排。 #### 数据模型 - **任务** = 需要有人承担的工作,由地点 + 时段 + 人数 + 可选的授权员工名单来定义。 - **网格** = 某个日期范围内的全部任务,粒度通常为一刻钟。 - **安排** = 把一位员工成员指定到网格的某个格子中。 - **值班表** = 以人为单位查看其全部任务的视图。 #### 独立于课程 人员调度模块可以这样使用: - **配合**教学课表使用(学生事务任务与课程一起出现在账户中); - 作为**独立产品**使用,不管理教学课表。 #### 员工角色 员工角色面向学生事务团队(生活老师、德育处人员、值班人员、实验室管理员):可以使用人员调度模块、查看自己的缺勤情况和个人日程表,但不能访问全局设置。 当同一个人既是教师又在人员调度模块中被安排任务时,可以同时拥有教师角色。参见 [用户与角色](#page-admin.users-and-roles)。 #### 另请参阅 - [人员调度概览](#page-staffing.overview) - [制作值班网格](#page-staffing.building-grids) - [定义需要覆盖的任务](#page-staffing.assignments) - [安排员工](#page-staffing.planner) - [值班表](#page-staffing.roster) ### 日历模式 *Source: `help/zh-cn/glossary/calendar-mode.md` · id: glossary.calendar-mode · Plan: premium · Updated: 2026-06-13* > **Premium** *Also known as : 日程模式 · 按日期排课 · 无重复* > _Premium_ **日历模式**的课表按**日期**组织课时,没有重复的标准周。每个课时单独安排在具体的日期上,就像日程本一样。 以下场景首选该模式: - **高等教育**(工程师学院、商学院、大学), - **继续教育**(一次性的培训班、短期项目), - **培训中心**:课时并非每周都上。 该模式适用于Premium账户。 #### 与周课表模式的区别 | 方面 | 周课表 | 日历课表 | | --- | --- | --- | | 重复方式 | 标准周 | 逐日期安排 | | 自动生成 | 支持 | 支持(可设置日期窗口并集中上课日) | | 可用时间 | 提前确认 | 实时汇总 | | 编辑课时 | 影响所有已发布的周 | 只影响具体某一天 | | 教学小组组合 | 支持 | 支持 | | 发布 | 按周的范围发布 | 二选一(发布或不发布) | | 默认显示 | 周视图 | 周视图或月视图 | | 假期处理 | 自动避开 | 无需处理(课时本身已有日期) | #### 日历模式下的自动生成 生成同样适用于日历模式:它把尚未排定的课时放到可用的日期上,并遵守相同的约束(教师或班级不能同时出现在两个地方、教室须匹配、不可用时间不可占用)。生成界面还提供日历模式特有的设置:用于把计算限制在某个时期内的**目标日期窗口**,以及**集中上课日**(集中到窗口开头或结尾,或交由生成自行决定)。手动排课的辅助功能依然可用:实时检测冲突、按条件筛选推荐教室、即时考虑可用时间。 #### 日历模式下的可用时间 在日历课表中,外聘教师的可用时间可能随时间变化。Omniscol会实时汇总,并在可用时间变化时发出冲突警告。参见[日历模式下的可用时间与约束](#page-timetables.calendar-wishes)。 #### 在同一所学校同时使用周课表与日历课表 在Premium中,借助[同时发布多份课表](#page-timetables.multiple-active-timetables)选项,您可以在相同的周上**同时发布**一份周课表(上午的重复课时,如综合预科)和一份日历课表(下午的一次性大师课,如精英学院课程)。如果两份课表共用同一些对象(教师、教室),Omniscol会动态合并视图,并检测它们之间的交叉冲突。 #### 另请参阅 - [课表](#page-glossary.timetable) - [选择合适的课表类型](#page-overview.timetable-modes) - [日历模式](#page-timetables.calendar-mode) - [教学小组组合](#page-glossary.groups-of-groups) ### 日期窗口 *Source: `help/zh-cn/glossary/date-windows.md` · id: glossary.date-windows · Plan: premium · Updated: 2026-06-20* > **Premium** *Also known as : 包含窗口 · 排除窗口 · 日期图层* > _Premium_ **日期窗口**是可**重复使用**的日期**包含**或**排除**时间段,用于限制某些课时可以安排的时间。它在日历课表的编辑界面中定义一次后,即作为**图层**叠加在班级、小组和课程的时间限制以及教室的可用时间之上。 仅适用于**日历课表**,且仅限 **Premium** 账户。 #### 两种类型 - **允许的课时**——课时只能安排在这些日期内。 - **排除的课时**——课时不能安排在这些日期内。 多个窗口会叠加生效;若有重叠,排除优先于允许。 #### 另请参阅 - [日期窗口](#page-timetables.date-windows) - [日历模式](#page-glossary.calendar-mode) ### 生成算法 / 课表自动生成算法 *Source: `help/zh-cn/glossary/solver.md` · id: glossary.solver · Updated: 2026-06-13* *Also known as : 自动排课 · 排课算法* Omniscol的**生成算法**可以自动计算[周课表](#page-glossary.weekly-timetable)、[周期课表](#page-glossary.cyclic-timetable)或[日历模式](#page-glossary.calendar-mode)课表中课时的安排。它会安排已创建但尚未定位的课时;如果能改进课表,也会调整已定位的课时;已锁定的课时则保持在原位。 #### 工作原理 启动生成后,Omniscol会开启一个专用的并行计算环境。学校一侧无需管理任何排队;初始化通常需要十秒左右,之后才会看到最初的计算结果。结果取决于您录入数据的质量:校区、教室、教师、小组、授课小时数、可用时间和不兼容规则。约束越多或相互矛盾越多,生成耗时就可能越长,也可能只得到部分结果。 其引擎是一种**蒙特卡洛神经符号元启发式**优化人工智能,结合了随机搜索、符号化业务规则和约束评分。关键在于实际使用:生成算法专为约束很多的情形设计,遇到无法实现的情况会明确提示,而不是掩盖冲突。 #### 硬性约束 生成算法会严格遵守会使课表无效的约束: - 一位教师不能同时出现在两个地方; - 一个班级不能同时上两节课,但以班内分组方式设置的小组除外; - 标记为**不可用**的可用时间和约束会阻止课时的安排; - 普通教室不能同时容纳两节课; - 大教室只有在所设定的容量和班级数量上限内,才能同时容纳多节课; - 专业教室、容量、设备资源和校区间通勤必须保持相互兼容; - 已锁定的课时保持其位置。 #### 优化约束 软性约束用来对已找到的方案打分并加以改进。它们不会被忽略,而是转化为扣分项,由生成算法设法降低。 常见示例: - 教师、教室、课程、小组或班级的**不期望**可用时间或约束; - 科目之间的教学不兼容规则,例如避免实验课排在对应的讲授课之前,避免在一节负担很重的课后紧接着上体育课,或者要求按教学进度的顺序排课; - 避免同一个班级在同一天出现两次相同的科目; - 每天或每周授课小时数的下限或上限; - 各天课时安排的均衡; - 减少班级和教师课表中的空档; - 教师的到校天数,视学校或所在国家的惯例而定。 找到一个有效方案是第一步。随后对扣分项的优化,往往会成为计算中耗时最长的部分。 #### 适用范围 - **周课表**——可用。 - **周期课表**——可用。 - **日历课表**——可用,需要有带日期的课时和日期范围。 #### 生成失败怎么办 如果没有找到完整的方案,Omniscol会保留计算得到的最佳课表,并把无法安排的课时留在未定位便签列表中。您可以查看这份部分课表,阅读诊断结果,并修正约束。 常见原因: - 可用时间设置过严(某位教师没有任何符合条件的空闲时段), - 教室不足,或没有可用的专业教室, - 对齐设置不一致(对齐的小组之间授课小时数不同), - 不兼容规则过多或过于严格, - 班级的理论人数超过了所有候选教室的容量。 参见 [诊断课表生成失败的原因](#page-timetables.diagnosing-generation)。 #### 强制安排某节课时 重新生成之前,您可以**锁定**某节课时的位置:生成算法将不再移动它,而是围绕它调整其他课时。这对固定“不可调整”的课时很有用(合同约定了时间的外部授课、已确定日期的考试等)。 #### 另请参阅 - [周课表](#page-glossary.weekly-timetable) - [教师的可用时间(意愿)](#page-glossary.wishes) - [冲突](#page-glossary.conflict) - [自动生成](#page-timetables.generation) ### 时间网格 *Source: `help/zh-cn/glossary/timetable-grid.md` · id: glossary.timetable-grid · Plan: standard · Updated: 2026-08-24* *Also known as : 作息时间 · 时段* **时间网格**是**校区**的时间划分:课时所安排的各个时段,包括起止时间、课间休息和停课时间。 每个校区都有自己的时间网格,因此同一所学校的两个校区可以有不同的作息安排。时间网格用于课表的显示、可用时间的检查和自动生成。 班级可以不受时间网格限制:参见**脱离网格**。 ### 时间轴 *Source: `help/zh-cn/glossary/timeline.md` · id: glossary.timeline · Updated: 2026-06-29* *Also known as : 周时间条 · 时间线 · 时间导航条* **时间轴**是显示日程表或统计数据的每个界面顶部的水平条。您可以用它在**时间中导航**:选择学年、显示的时期,并根据界面在周视图、月视图或年视图之间切换。 它的**左右箭头**可以整学年地向前或向后切换。当前显示的学年(或时期)会明确地显示在时间轴上方。 [时间轴与时间导航](#page-core-concepts.timeline-navigation) ### 脱离网格 *Source: `help/zh-cn/glossary/off-grid.md` · id: glossary.off-grid · Plan: premium · Updated: 2026-08-24* > **Premium** *Also known as : 脱离网格的班级 · 脱离网格的课时 · 自由时间* > _Premium_ 为某个班级启用**脱离网格**模式后,该班级的所有课时都不再受各校区时间网格的约束:开始和结束时间可以自由设置。Omniscol只保留一个时间步长(10、15、20、30或60分钟),方便您定位课时。 该模式适用于继续教育,或共用同一批场地却不遵循统一时间网格的平行课程。 ### 外聘教师 / 校外授课人员 *Source: `help/zh-cn/glossary/external-teacher.md` · id: glossary.external-teacher · Updated: 2026-06-13* *Also known as : 临时授课人员 · 兼职教师 · 访问教师 · 访问教授 · 客座教授* **外聘教师**(视具体情况也称*校外授课人员*、*访问教师*、*专家*)是与学校 只有临时或偶尔合同关系的教师。对于 生成而言,外聘教师与其他 [教师 / 授课人员](#page-glossary.teacher)并无不同——可用时间相同, 排课方式也相同。 两者的区别主要在**行政方面**: - 短期合同(按小时、按课时或按任务计酬), - 授课小时数比专职教师少, - 用户使用的系统往往与专职教师不同 (电子邮箱不同,无法使用相同的内部工具)。 > _Premium_ 专用标记 外聘教师,在用户的详情中勾选, 仅限Premium账户使用。它用于明确标识 校外授课人员,并启用下文所述的 专门显示方式。 #### 专门的显示方式 在部分界面(尤其是课时提示框和课表的列表视图)中, 会用图标 [user-tie] 把外聘教师与专职教师区分开来。在主时间网格上, 出于空间考虑,默认显示不作区分, 但鼠标悬停时,提示框中仍可看到这一信息。 #### 特殊情况:访问教师承担少量课时 如果访问教师只在个别课时与主讲教师共同授课而不轮换, 请参见[协同教学](#page-glossary.co-teaching)。如果两位授课人员 在同一时段每周轮换授课, 请参见[交替周课时 / A-B周](#page-glossary.alternate-lessons)。 #### 另请参阅 - [教师](#page-glossary.teacher) - [协同教学](#page-glossary.co-teaching) - [外部授课人员(外聘教师、访问教师)](#page-higher-ed.external-faculty) ### 小组 *Source: `help/zh-cn/glossary/group.md` · id: glossary.group · Updated: 2026-05-10* *Also known as : 子小组 · 半班 · 选修小组 · 实验课a组 · 实验课b组* 在Omniscol中,**小组**是**班级的细分**。小组中的所有学生同时也是所属班级的学生。 只要班级中的一部分学生需要上与其他同学不同的课程,哪怕只是临时的、仅限一节课,就应创建一个小组。例如: - 实验课的半班小组(“实验课A组”“实验课B组”), - 选修课小组(“拉丁语组”“希腊语组”“第二外语日语组”“第二外语德语组”), - 分层教学小组(“英语强化组”“英语标准组”)。 #### 强烈建议:一门课程一个小组 即使班里选拉丁语和选希腊语的实际上是同一批学生,也请**创建两个独立的小组**。否则与其他班级的[小组对齐](#page-glossary.alignment)会含混不清,冲突也很难诊断。 反过来,也没有必要创建“全班”小组。当一门课程面向全班时,不必关联小组,直接把课程分配给班级即可。 #### 预计人数 请填写小组的预计学生人数。该字段为选填,但建议填写:[生成算法](#page-glossary.solver)会据此选择容量合适的[教室](#page-glossary.classroom)。 #### 如何组合多个班级的学生 小组的概念仅限于单个班级的范围。如果要把7年级1班、2班、3班中一起上课的拉丁语学生组合起来: - 在这三个班级中各创建一个“拉丁语组”, - 再创建一个[小组对齐](#page-glossary.alignment),把这三个小组关联起来。 您也可以使用[教学小组组合](#page-glossary.groups-of-groups),当组合需要经常调整时,它的编辑更灵活。 #### 自由组 对于开放报名的情形(晚间工作坊、不受班级限制的选修课),请参见[自由组](#page-glossary.free-group):其成员事先并不固定,学生可以随时加入或退出,不会产生冲突。这属于**特殊**情形(一种半独立的附属子小组):如果只是要**把已有的小组合并到一起**上同一节课,请使用教学小组组合,而不是自由组。 #### 另请参阅 - [班级](#page-glossary.class) - [班内分组](#page-glossary.class-division) - [小组对齐](#page-glossary.alignment) - [教学小组组合](#page-glossary.groups-of-groups) - [自由组](#page-glossary.free-group) ### 小组对齐 *Source: `help/zh-cn/glossary/alignment.md` · id: glossary.alignment · Updated: 2026-06-26* *Also known as : 跨班分组* **对齐**把来自**不同班级**的多个[小组](#page-glossary.group)组合在一起,它们必须共用**同一时段、同一位教师和同一间教室**。 典型例子:8年级1班、2班、3班的日语选修学生一起上同一门日语课。与其创建三门并行的课程(它们会争抢教师和教室),不如在这三个班级中各创建一个**“日语选修”小组**,然后将它们**对齐**。这样,生成算法只会排一门课程,同时关联这三个小组。 典型场景: - 跨班的第一外语 / 第二外语(把多个班级的英语小组合并上课), - 跨班的选修课(日语、德语、编程), - 高中的选考科目, - 高校的共享教学模块(同一门公共基础课供多个专业方向共同修读)。 #### 优势与限制 对齐功能非常强大:它避免了重复设置,保证修改的一致性(一个课时被调整,所有地方同步调整),也简化了查看。**但它的限制也很多**: - 小组一旦对齐,在该时段就不能再有独立的课时:如果三个班级中有一个班级的课时需要例外处理,就必须**复制**其小组,并让复制出的小组脱离对齐。 - 所有被对齐的小组,在各自班级中必须具有完全相同的授课小时数和配置。不一致会产生一致性警告(参见 生成 选项卡)。 - 修改(增加课时、更换教室)只需在对齐上操作一次——Omniscol会自动同步。但只通过其中一个班级编辑课时,可能产生副作用。 #### 重要区别 | 概念 | 范围 | 约束 | | --- | --- | --- | | [班内分组](#page-glossary.class-division) | **一个**班级的小组 | 同一时段,**不同**教师/教室 | | **对齐** | **多个**班级的小组 | 同一时段,**同一位**教师,**同一间**教室 | | [教学小组组合](#page-glossary.groups-of-groups) | 范围与对齐相同 | 同一时段,教师/教室唯一,**事后可灵活编辑** | #### 在日历模式下 在[日历模式](#page-glossary.calendar-mode)的课表中,更推荐使用[教学小组组合](#page-glossary.groups-of-groups)而非对齐:它更易于编辑,可以随时添加或移除小组,无需重建整个结构。 #### 另请参阅 - [小组](#page-glossary.group) - [班内分组](#page-glossary.class-division) - [教学小组组合](#page-glossary.groups-of-groups) - [共享课程](#page-glossary.transverse-course) - [小组对齐](#page-core-concepts.alignments) ### 校区 *Source: `help/zh-cn/glossary/site.md` · id: glossary.site · Updated: 2026-05-10* *Also known as : 场地 · 主教学楼 · 分部* Omniscol中的**校区**是课时进行的实际场地。一个校区包含若干[教室](#page-glossary.classroom)和[资源](#page-glossary.resource)。 请不要把它与[单位](#page-glossary.campus)混淆,后者是组织层面的概念:校内机构、学院、教学部门或其他内部分组。校区承载作息时间、教室和通勤时间;单位则主要用于分类和筛选。 每份课表至少有一个校区。如果您的所有教学楼都在同一地点,一个校区就够了。如果学校有多个校区,教师或学生需要在校区之间往返,请按需创建多个校区,并**填写校区之间的通勤时间**,否则生成时可能会让教师或学生“瞬间移动”。 #### 校区层面的时间网格 每个校区都有自己的**时间网格**(上课时间、课间休息、午休、闭校时段)。系统会根据您填写的信息自动推算出时间网格,您可以进一步调整,添加课间休息、午休和闭校时段(例如周三下午、周六)。 #### 实用案例:同一场地设置两个虚拟校区 这种配置偶尔有用(但很少见):同一个实际场地由两个机构(例如初中部和高中部)共用,它们的时间网格不同,但有共同的教师。此时可以为这一个实际场地创建两个“虚拟校区”,两者之间的通勤时间为零。请注意在两个校区中都复制共用的教室,并设置互不重叠的开放时间(参见[教室](#page-glossary.classroom))。 #### 何时用两个账户而不是两个校区 如果两所独立的学校**没有共同的教师**(或者少数共同教师在不同日期固定轮流前往两个校区),使用两个独立的Omniscol账户通常更简单。只要教师或学生确实需要在校区之间往返,就应当设置多个校区来建模。 使用 **Premium** 时,还有另一种做法:在同一账户中**同时发布两份课表**(参见 [同时发布多份课表](#page-timetables.multiple-active-timetables)),每份对应一个校区,而不是在同一份课表中配置两个校区。 无论是使用多个账户还是同时发布多份课表,都可以共享教师和教室的占用情况,并进行交叉冲突检测(排课员可以关闭该检测)。如果是多个账户,需要联系Omniscol团队来配置账户之间的关联。只有已发布、正在使用的课表,才会作为判定共用教师和教室占用情况的依据。 #### 另请参阅 - [教室](#page-glossary.classroom) - [资源](#page-glossary.resource) - [单位](#page-glossary.campus) - [高等教育中的多校区](#page-higher-ed.multi-site) ### 协同教学 *Source: `help/zh-cn/glossary/co-teaching.md` · id: glossary.co-teaching · Updated: 2026-05-10* *Also known as : 双师授课 · 合上 · 主讲与副讲 · 多位授课人员* **协同教学**是指由**两位或更多教师**在同一间教室、面向同一批学生同时授课的课时。 Omniscol对此做了简单的建模:一门课程可以有**多位授课人员**。每位授课人员的统计数据和服务时间中都会计入该课时。 #### 典型情形 - **加强辅导**——一位主讲教师加一位助教,或人数较多时配两位教师。 - **临时客座教授**——当天的课时由校外授课人员共同讲授(参见[外聘教师 / 校外授课人员](#page-glossary.external-teacher))。 - **共同主讲**——整个学期以两人搭档方式讲授的模块。 - **双重专长**——跨学科模块(例如“健康信息学”,由一位医生和一位信息技术教师共同讲授)。 #### 与轮换的区别 协同教学是**两位教师在同一个课时同时授课**。**轮换**([交替周课时 / A-B周](#page-glossary.alternate-lessons))则是**两位教师使用同一时段,但在不同的周授课**。 如果您的两位教师每周轮流授课、从不同时出现,那是交替周课时,不是协同教学。 如果其中一位只参与少数几次临时课时,最简单的做法是在主课程之外,为这些具体日期单独创建一门由客座教授讲授的课程——在[日历模式](#page-glossary.calendar-mode)下尤其如此。 #### 另请参阅 - [课时](#page-glossary.lesson) - [外聘教师](#page-glossary.external-teacher) - [协同教学与授课人员轮换](#page-higher-ed.co-teaching) ### 信息显示屏 *Source: `help/zh-cn/glossary/panel.md` · id: glossary.panel · Updated: 2026-06-13* *Also known as : 迎宾屏 · 入口屏幕 · 大厅屏幕* Omniscol中的**信息显示屏**是一块公开的显示屏,用于持续展示经过筛选的课表。典型用途: - **大厅显示屏**:设在学校入口,滚动显示所有班级当天的课时; - **教室门口显示屏**:固定在门旁,显示该教室当天的使用情况; - **阶梯教室或实验室显示屏**:在专用空间内显示接下来的课时。 #### 每块显示屏都有唯一的网址 创建的每块显示屏都有一个**唯一的网址**,请在浏览器中全屏打开。滚动和刷新会自动进行。 #### 自定义 定义显示屏时,您可以设置: - **所显示课时的筛选条件**:哪些年级、哪些班级、哪些校区、哪些教室; - 显示的**时间范围**; - **字体大小**; - **信息栏**(滚动文字、徽标); - **颜色和主题**。 对于视觉形象要求较高的场景,您还可以完全替换显示该屏幕的网页,以便将其接入现有的动态显示系统。参见[信息显示屏的外观自定义](#page-panels.customization)。 #### 另请参阅 - [为大厅或走廊配置信息显示屏](#page-panels.lobby-panel) - [教室门口的显示屏](#page-panels.room-panel) - [信息显示屏的外观自定义](#page-panels.customization) ### 学年 *Source: `help/zh-cn/glossary/school-year.md` · id: glossary.school-year · Updated: 2026-05-10* *Also known as : 大学学年 · 学术年度* Omniscol中的**学年**是发布课表所依据的参照时期。它是在学校层面、于学年中声明的对象。 #### 为什么必须设置 您必须至少声明**一个**学年,才能发布课表。学年构成了**时间轴**,之后您将在其上为特定时间范围发布课表。 #### 命名约定 为了显示清晰,请用起止年份为学年命名:“2025-2026”,而不是“本学年”。这样既能保留往年的历史,也能同时准备下一学年。 #### 假期 您可以通过以下方式填写学年的假期: - **复制粘贴**表格(来自Excel、Numbers等), - **自动导入**为您所在国家预先填好的日期(如果数据库中有这些日期,会在创建学年时提供), - **手动输入**各个时期。 假期会从时间轴中扣除,已发布的课表不适用于这些时期。 #### 交替周的错位 如果您的学校使用[交替周课时 / A-B周](#page-glossary.alternate-lessons),假期可能会打乱交替顺序。您可以创建**虚拟错位**来处理这类情况(在时间轴上点击相关的周)。 #### 同时设置多个学年 您可以随时同时定义多个学年:当前学年、上一学年(历史)和正在准备的下一学年。时间轴上的下一学年按钮(▶︎)用于在学年之间切换。 **当前学年**在当前学年中设定,它决定用户默认看到的内容。 #### 另请参阅 - [交替周课时 / A-B周](#page-glossary.alternate-lessons) - [学年与假期](#page-admin.school-year) - [准备下一学年](#page-timetables.next-school-year) ### 学生 / 大学生 / 学员 *Source: `help/zh-cn/glossary/student.md` · id: glossary.student · Updated: 2026-05-14* *Also known as : 参训人员 · 培训学员* Omniscol中的**学生**是指注册到某个[班级](#page-glossary.class)、参加课程,并可能在该班级内加入一个或多个[小组](#page-glossary.group)的个人。**学生**是界面中的标准术语;根据学校的类型,日常用语会有所不同: - **中小学**——“学生”, - **高等教育**——“大学生”, - **继续教育**——“学员”、“参训人员”、“培训学员”。 它们都对应Omniscol中的同一个实体。 #### 录入学生是**可选的** 重要一点:即使**完全不录入任何学生**,Omniscol也能很好地运行。课表、教师的可用时间、生成、仪表盘统计,都是在班级 / 小组 / 教师层面工作的。 单独录入学生的好处: - **个人课表**——每位学生登录后看到自己的课表,按其班级和小组筛选。 - **详细统计**——按学生查看的仪表盘(授课小时数、到校天数)。 - **缺勤**——学生可以自行申报缺勤(需经管理员确认)。 - **留级 / 延期毕业的学生**——管理需要修读其他班级课程的学生。 如果您不需要这些功能,就不必录入学生,不会损失任何重要的功能。 #### 分配到班级和小组 学生所在的班级和小组,在第一份课表发布之后,在 学生 中进行分配。您也可以对多选的学生使用 分配班级 操作进行批量分配。 #### 留级和延期毕业的情形 一名学生可以被分配到多个班级(例如,一名三年级的学生还需要修读二年级的一个模块),也可以只被分配到某个班级的部分小组(例如延期毕业的学生只重修一门科目)。这些情形通过分配界面中的多班级 / 多小组选择来处理。 #### 另请参阅 - [班级](#page-glossary.class) - [小组](#page-glossary.group) - [学生管理](#page-admin.students) ### 仪表盘 *Source: `help/zh-cn/glossary/dashboard.md` · id: glossary.dashboard · Updated: 2026-05-18* *Also known as : dashboard · 统计 · 指标* 仪表盘模块提供基于实际课表(已安排的课时,计入缺勤和已执行的代课)在所选时间段内计算的统计数据:周、月、学年,或自定义日期范围。 #### 可用指标 统计数据按分析维度组织:教师、教室、资源、科目、班级和学生。模块的完整页面详细介绍了每个维度的可用指标。 #### 使用场景 - **人力资源报表**——统计已授课小时数,用于薪酬、认证和资质认定。 - **教室优化**——找出利用不足或过度使用的教室。 - **资源管控**——核查移动设备的实际使用情况。 - **教学审核**——核查所有计划的小时数是否都已讲授完毕。 #### 导出 打印按钮会打开一个表格,您可以复制粘贴、打印,或导出为CSV以便外部处理(Excel、Power BI等)。 #### 计算方式 重要:仪表盘模块基于**运行中的课表**(实际已安排并已发布的课时,必要时合并[同时发布多份课表](#page-timetables.multiple-active-timetables))进行计算,并且**会计入已确认的缺勤和代课**。它计算的是实际情况,而不是预先的配置。 #### 另请参阅 - [仪表盘模块概览](#page-dashboard.overview) - [使用表格和图表](#page-dashboard.tools-and-filters) - [教师统计](#page-dashboard.teachers) - [教室统计](#page-dashboard.classrooms) - [科目统计](#page-dashboard.subjects) - [班级统计](#page-dashboard.classes) ### 诊断 *Source: `help/zh-cn/glossary/diagnostic.md` · id: glossary.diagnostic · Updated: 2026-06-26* *Also known as : 检查 · 校验 · 配置警告 · 一致性警告* Omniscol中的**诊断**是系统持续执行的一致性检查, 它会在课表的配置问题导致生成失败或产生错误结果之前, 把这些问题指出来。 #### 严重程度 - **严重**(红色,阻止生成)——会导致生成无法成功: 对齐在结构上无法实现、总容量不足、 教师没有任何空闲时段等。 - **警告**(橙色)——可以保持原样,但提示存在需要确认的风险或不一致: 对齐的授课小时数不平衡、教室容量略小、可用时间过于苛刻。 - **提示**(蓝色)——不阻止生成的说明:“部分教室从未使用”, “某位教师的服务时间远低于同事”。 #### 在哪里查看诊断 - 在课时分配界面和课表可视化界面的**顶部横幅**中。 - 在列表中,位于相关**班级名称**或教师姓名旁边。 - 在 生成 标签页 (或 检查中,取决于课表的模式)中查看详情, 每条诊断都附有针对具体情况的说明。 #### 常见诊断 | 诊断 | 常见原因 | 解决方法 | | --- | --- | --- | | 没有合适的教室 | 要求专业教室类型,但没有对应的教室 | 创建该教室,或取消专业教室类型要求 | | 对齐中的授课小时数不一致 | 同一个对齐小组中,一个班级为2小时,另一个为3小时 | 统一授课小时数,或取消对齐 | | 容量不足 | 人数超过教室容量 | 安排更大的教室,或安排多间教室([多教室(一个课时占用多间教室)](#page-glossary.multi-room)) | | 可用时间内没有可排时段 | 该教师的所有时段都被标记为不可用 | 放宽可用时间,或重新安排课时 | | 课时落在缺勤期间 | 课时被安排在教师缺勤的时间范围内 | 移动课时,或删除该缺勤 | #### 另请参阅 - [冲突](#page-glossary.conflict) - [生成算法](#page-glossary.solver) - [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) ### 周课表 *Source: `help/zh-cn/glossary/weekly-timetable.md` · id: glossary.weekly-timetable · Updated: 2026-05-15* *Also known as : 每周课表 · 标准周 · 按周重复 · 每周日程表* **周课表**以一个**标准周**为基础:课时被定义为在一周的各天按周重复。发布时,您选择标准周适用于学年中的哪些**周次范围**。 以下场景使用此模式: - 小学和中学教育(小学、初中、高中), - 部分院系的本科低年级阶段, - 作息时间固定的语言培训机构。 #### 自动生成 自动生成算法适用于此模式。它在标准周内为课时寻找最优安排,同时遵循: - 教师的可用时间, - 所需的专业教室类型, - 班内分组、对齐、不兼容, - 教学层面的权重(科目在各天的均衡分布)。 参见[生成算法](#page-glossary.solver)。 #### 交替周 使用[交替周课时 / A-B周](#page-glossary.alternate-lessons)功能,您可以让某些课时只在每两周(或每三周等)出现一次——A/B周、1/2周等。在保存中设置。 #### 假期与交替周 学校假期可能打乱A/B周的交替。如果假期前恰好是A周,而您希望假期后从B周开始,可以在时间轴上创建一个**虚拟偏移**(点击相关的周)。 #### 可用时间预先校验 教师的可用时间在生成之前预先校验。之后对教师所做的任何修改都会得到提示,但不会影响已经计算好的课表。这与[日历模式](#page-glossary.calendar-mode)不同,后者的可用时间是实时汇总的。 #### 另请参阅 - [课表](#page-glossary.timetable) - [选择合适的课表类型](#page-overview.timetable-modes) - [生成算法 / 课表自动生成算法](#page-glossary.solver) - [交替周课时](#page-glossary.alternate-lessons) ### 周期课表 *Source: `help/zh-cn/glossary/cyclic-timetable.md` · id: glossary.cyclic-timetable · Updated: 2026-05-10* *Also known as : 循环课表 · 编号日* **周期课表**在任意天数(Day 1、Day 2、……Day 6等)内定义重复出现的课时,不必与5天或7天的一周对齐。 它通常用于**北美体系**(6天或8天为一个周期)、部分国际学校,在欧洲则较少见。 #### 与周课表的区别 | 方面 | 周课表 | 周期课表 | | --- | --- | --- | | 重复单位 | 一周(5-7天) | N天的周期 | | 编号方式 | 周一、周二…… | Day 1、Day 2…… | | 发布时 | 选择发布的周 | 选择周期适用的星期几 | | 自动生成 | 支持 | 支持 | #### 何时使用 如果您的学校按6天周期运行(例如周一是Day 1,周二是Day 2,周三是Day 3,周四是Day 4,周五是Day 5,下周一是Day 6,下周二又是Day 1……),周课表就不适用,周期课表正是为这种情况设计的。 如果您在欧洲,且学校采用与一周严格对齐的5天周期,请继续使用周课表:配置和发布都更简单。 #### 另请参阅 - [课表](#page-glossary.timetable) - [选择合适的课表类型](#page-overview.timetable-modes) ### 专业教室类型 *Source: `help/zh-cn/glossary/classroom-specialization.md` · id: glossary.classroom-specialization · Updated: 2026-05-10* *Also known as : 科目专用教室* **专业教室类型**表示某间教室专用于某类活动:化学实验室、机房、体育馆、多媒体教室、自习室、美术教室、音乐教室等。 这是一个**自由填写**的字段:您可以按自己的命名方式创建所需的专业教室类型,Omniscol没有强制的固定列表。 #### 生成的处理方式 当某个科目要求某种专业教室类型时,生成**只会**分配带有该类型的教室。如果您在科目“化学实验”上要求了“化学”,化学实验室就绝不会被用于语文课。 若强行进行不合理的分配(手动为一节化学课安排一间不具备化学类型的教室),系统**不会阻止**,但会显示提示。 #### 整理或删除专业教室类型 只要至少有一间教室在使用某个专业教室类型,它就会一直存在。要删除它,请从所有带有该类型的教室中移除它,下次保存时它便会从列表中消失。 要**重命名**,请用新名称创建新的专业教室类型,在各教室上替换,旧的类型便会自动消失(前提是它不再被任何地方引用,包括科目中的引用)。 #### 另请参阅 - [教室](#page-glossary.classroom) - [科目](#page-glossary.subject) - [专业教室类型](#page-core-concepts.classroom-specializations) ### 资源 *Source: `help/zh-cn/glossary/resource.md` · id: glossary.resource · Updated: 2026-05-10* *Also known as : 移动设备 · 投影仪 · 平板电脑箱 · 套件* Omniscol中的**资源**是**可移动**的设备,不固定在某间教室。每项资源都有**名称**和**可用数量**。 例如:3台便携式投影仪、1箱30台的平板电脑(一箱算1,不算30——您输入的是箱数,而不是平板电脑的台数)、1套麦克风、一组急救训练人体模型。 #### 使用方式 设置课程时,您可以指定它所需的资源。生成会保证**同一时段的课时所需资源不超过现有数量**:如果您有3台便携式投影仪,同一时段最多只有3个课时能各用到1台。 #### 与教室的区别 [教室](#page-glossary.classroom)属于某个[校区](#page-glossary.site),不会移动。资源不属于任何教室(但属于某个校区,因此A校区的平板电脑箱不能用于B校区的课程)。 #### 无需使用资源的典型情况 许多课程没有声明任何资源,这是默认情况。只有当资源构成**真正的限制**时才需要声明:如果您有30台便携式投影仪,同一时段最多只有4个课时,就无需建模;如果只有3台,而有多个课时都需要它,就应声明,让生成来做取舍。 #### 另请参阅 - [校区](#page-glossary.site) - [教室](#page-glossary.classroom) ### 自由组 *Source: `help/zh-cn/glossary/free-group.md` · id: glossary.free-group · Updated: 2026-06-13* *Also known as : 卫星小组 · 半自主小组 · 开放小组 · 报名制小组* **自由组**是一种**半自主的工作小组**:班级中的一部分学生自主学习, 通常与主课程**在同一间教室、由同一位教师**负责, 与主课程同时进行——可以看作该课程的一种**卫星小组**。排课员希望 把它**显示在课表上**,而不必在对面再设置一套正式的 班内分组。 “**自由**”一词由此而来:这个子小组与它所属课程共用 教室和教师,普通 [小组](#page-glossary.group)(即使在班内分组中)会引发 **教室冲突和教师冲突**。自由组就是那个 **特例**,它**停用所有冲突检查**——与班级其他学生、与教师、与教室 都不产生冲突。因此它可以与原课时并存。 这类需求尤其常见于**艺术院校**和**社会工作专业**, 其中一部分时间是**有指导的自主学习**:一个子小组在教室一角推进自己的项目, 而班级其他学生继续上课。更广泛地说,自由组可用来表示 任何**成员不固定**、且不产生冲突的小组。 #### 与普通小组的区别 普通小组会被生成算法纳入考虑:它会检查 小组学生是否被重复安排(同一时间有两个课时), 以及其**教室**和**教师**是否空闲。这恰恰 会妨碍卫星小组:主课程的教室和教师 已经被占用。 自由组**取消这些检查**。因此它的课时可以与所属课程共用 教室和教师;同时,学生可以属于多个相互重叠的 自由组,而不会触发任何警报。 #### 实际操作:手动安排 自动生成**支持**自由组,但 建议**不要**将其用于这种情况:请**手动安排并锁定** 主课时及其卫星课时到所需的时段。生成算法无法判断哪个是主课时、 哪个是卫星课时——交给自动生成的话, 它们可能被排到任何位置。由于自由组用途很个别、 很特殊,因此属于**手动使用**的范畴。 #### 创建 创建小组时,请在 添加小组 中勾选“自由组”选项。这类小组在界面中会有 可见的标记,以免与有约束的小组混淆。 > _Premium_ 自由组是Premium账户的功能。 #### 另请参阅 - [小组](#page-glossary.group) - [自由组](#page-core-concepts.free-groups) ### API令牌 *Source: `help/zh-cn/glossary/api-token.md` · id: glossary.api-token · Updated: 2026-05-15* *Also known as : API token · API密钥 · 身份验证令牌* **API令牌**(token)允许第三方软件以学校的名义调用Omniscol的API接口:可读取数据;若选择了写入类API接口,也可写入数据。 它的权限很大,因此请谨慎使用。 #### 生成 令牌在分享中生成(导入/导出 > 分享)。您需要提供: - 一把密钥(在Omniscol中生成,带有名称和可选的有效期;有效期日后可以修改), - 一个范围:该令牌可以调用的API接口列表(只授予确实需要的接口), - 可选的**令牌有效期**。该日期写入生成的JWT,之后无法修改。 删除密钥或密钥到期,会立即撤销由它派生的所有令牌。若要更改某个令牌的有效期,请重新生成一个JWT。 #### 使用 令牌通过HTTP请求头`Authorization: Bearer `传递,也可以通过URL中的`?auth=`传递(生产环境不推荐)。 #### 最佳实践 - **一个集成一把密钥**——便于单独撤销。 - **最小范围**——只勾选必需的API,不要默认全选。 - **在合适的层级设置有效期**——长期运行的集成用密钥的有效期来管理;需要不可更改的临时访问时,使用令牌的有效期。 - **定期轮换**——每6至12个月重新生成一次密钥。 - **不要放进Git**——令牌不应被纳入公开代码仓库的版本管理。请使用服务器的环境变量。 #### 与OIDC / SSO的区别 若要让真实用户使用所在机构的身份登录,请使用[OIDC / SSO](#page-integrations.oauth2)。API令牌用于服务器之间的技术集成,不用于用户的日常登录。 #### 另请参阅 - [分享链接](#page-glossary.share-link) - [Omniscol API](#page-integrations.api-tokens) - [MCP——连接外部AI智能体](#page-integrations.mcp) ### iCal(日历导出) *Source: `help/zh-cn/glossary/ical.md` · id: glossary.ical · Updated: 2026-05-15* *Also known as : ics · 日历订阅 · ical链接 · ical导出* **iCal**(扩展名为 `.ics`)是日历交换的标准格式,市面上所有日历应用都能读取,例如Apple Calendar、Google Calendar、Outlook、Thunderbird、Fastmail等。 Omniscol提供两种iCal导出方式: #### 1. 静态下载 在选定的课表上点击 下载 按钮,即可获得一个 `.ics` 文件,导入您的日历应用即可。这是下载那一刻的**快照**:之后课表若有变动,不会自动更新。 适用于通过电子邮件分享一次性的日程。 #### 2. 动态订阅链接 在课表(或教师页面等)上点击 下载 按钮,会生成一个iCal订阅网址。将其作为**订阅**添加到您的日历应用后,Omniscol中的课表一有变化,日历就会自动更新。 教师和学生正是这样把Omniscol课表与个人日历同步的,无需在每次修改后重新下载文件。 Omniscol的iCal链接带有签名,会过期,并与生成它的账户绑定。有效期写在网址的令牌中;若要更改有效期,必须重新生成链接。生成链接的账户修改密码、被停用或被删除后,该账户生成的链接将失效。 #### 同步与更新 订阅的iCal由**日历应用负责刷新**,刷新频率因客户端而异: - Apple Calendar:通常为5-15分钟。 - Google Calendar:最慢可达24小时(但通常更快)。 - Outlook:频率不固定。 这种延迟是iCal协议本身的特性,与Omniscol无关:Omniscol课表中的变动,会在订阅的日历再次拉取数据后显示出来。 #### 另请参阅 - [分享链接](#page-glossary.share-link) - [iCal——订阅与动态链接](#page-integrations.ical) --- ## Index ### 班 - **班级** — [Definition](#page-glossary.class) · [班级、小组、子小组](#page-core-concepts.classes-and-groups) · [班级统计](#page-dashboard.classes) · [创建班级及其小组](#page-timetables.creating-classes) · [范围](#page-admin.planning-domains) · [架构与角色](#page-overview.architecture-and-roles) · [数据组织](#page-core-concepts.data-model) · [完整数据模型](#page-integrations.data-model-full) · [五分钟上手引导](#page-overview.quick-tour) · [Omniscol是什么](#page-overview.what-is-omniscol) · [OneRoster](#page-integrations.oneroster) - **班内分组** — [Definition](#page-glossary.class-division) · [班级、小组、子小组](#page-core-concepts.classes-and-groups) · [班内分组](#page-core-concepts.class-divisions) · [创建班级及其小组](#page-timetables.creating-classes) · [分配规则](#page-timetables.distribution-policy) · [概览](#page-k12.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) · [特殊情况与高级配置](#page-faq.edge-cases) · [完整数据模型](#page-integrations.data-model-full) · [小组层级](#page-core-concepts.group-hierarchy) · [小组对齐](#page-core-concepts.alignments) · [OneRoster](#page-integrations.oneroster) ### 不 - **不兼容(科目之间)** — [Definition](#page-glossary.incompatibility) · [时间限制(通用机制)](#page-core-concepts.time-constraints) ### 冲 - **冲突** — [Definition](#page-glossary.conflict) · [冲突与诊断](#page-timetables.conflicts) · [临时调整](#page-schedules.ad-hoc-changes) · [算法运行机制](#page-faq.solver-behavior) · [锁定课时](#page-timetables.lesson-lock) · [特殊情况与高级配置](#page-faq.edge-cases) · [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) · [自动生成](#page-timetables.generation) · [Omniscol的总体理念](#page-overview.philosophy) · [Omniscol是什么](#page-overview.what-is-omniscol) ### 大 - **大教室** — [Definition](#page-glossary.large-room) · [教室自动分配](#page-timetables.auto-room-assignment) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 代 - **代课 / 替课** — [Definition](#page-glossary.substitution) · [代课规则](#page-absences.substitution-policies) · [教师统计](#page-dashboard.teachers) · [缺勤管理模块概览](#page-absences.overview) · [完整数据模型](#page-integrations.data-model-full) ### 单 - **单位** — [Definition](#page-glossary.campus) · [冲突与诊断](#page-timetables.conflicts) · [创建班级及其小组](#page-timetables.creating-classes) · [范围](#page-admin.planning-domains) · [高级设置与个性化](#page-admin.advanced-parameters) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 多 - **多教室** — [Definition](#page-glossary.multi-room) · [概览](#page-higher-ed.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) · [特殊情况与高级配置](#page-faq.edge-cases) · [通过表格批量导入课程](#page-timetables.mass-import) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 分 - **分享链接** — [Definition](#page-glossary.share-link) · [安全与托管](#page-faq.security-and-hosting) · [集成概览](#page-integrations.overview) · [架构与角色](#page-overview.architecture-and-roles) ### 共 - **共享课程** — [Definition](#page-glossary.transverse-course) ### 关 - **关联课时** — [Definition](#page-glossary.associated-lessons) · [分配课时数并创建课时](#page-timetables.hour-distribution) · [复杂课时](#page-core-concepts.complex-lessons) ### 假 - **假期** — [Definition](#page-glossary.holidays) ### 交 - **交替周课时** — [Definition](#page-glossary.alternate-lessons) · [常规设置](#page-admin.parameters) · [分配课时数并创建课时](#page-timetables.hour-distribution) · [复杂课时](#page-core-concepts.complex-lessons) ### 教 - **教师** — [Definition](#page-glossary.teacher) · [班级统计](#page-dashboard.classes) · [编辑课时](#page-timetables.lesson-edit) · [范围](#page-admin.planning-domains) · [分配教师](#page-timetables.assigning-teachers) · [架构与角色](#page-overview.architecture-and-roles) · [教师的可用时间](#page-core-concepts.wishes-and-availability) · [教师统计](#page-dashboard.teachers) · [科目统计](#page-dashboard.subjects) · [前提条件](#page-timetables.prerequisites) · [上手引导](#page-getting-started.onboarding-tour) · [数据组织](#page-core-concepts.data-model) · [脱离网格的课时](#page-timetables.off-grid-lessons) · [完整数据模型](#page-integrations.data-model-full) · [为批量导入准备数据](#page-getting-started.preparing-data) · [五分钟上手引导](#page-overview.quick-tour) · [邀请并激活用户](#page-getting-started.inviting-users) · [仪表盘模块概览](#page-dashboard.overview) · [用户与角色](#page-admin.users-and-roles) · [Omniscol是什么](#page-overview.what-is-omniscol) · [OneRoster](#page-integrations.oneroster) - **教师的可用时间(意愿)** — [Definition](#page-glossary.wishes) · [分配教师](#page-timetables.assigning-teachers) · [教师的可用时间](#page-core-concepts.wishes-and-availability) · [教学小组组合](#page-core-concepts.groups-of-groups) · [时间限制(通用机制)](#page-core-concepts.time-constraints) · [完整数据模型](#page-integrations.data-model-full) - **教室** — [Definition](#page-glossary.classroom) · [编辑课时](#page-timetables.lesson-edit) · [范围](#page-admin.planning-domains) · [教室统计](#page-dashboard.classrooms) · [教室自动分配](#page-timetables.auto-room-assignment) · [科目统计](#page-dashboard.subjects) · [搜索和筛选](#page-core-concepts.search-and-filter) · [通过表格批量导入课程](#page-timetables.mass-import) · [脱离网格的课时](#page-timetables.off-grid-lessons) · [为批量导入准备数据](#page-getting-started.preparing-data) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) · [仪表盘模块概览](#page-dashboard.overview) - **教学小组组合** — [Definition](#page-glossary.groups-of-groups) · [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) · [概览](#page-higher-ed.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) · [教学小组组合](#page-core-concepts.groups-of-groups) · [特殊情况与高级配置](#page-faq.edge-cases) · [完整数据模型](#page-integrations.data-model-full) · [小组对齐](#page-core-concepts.alignments) · [Omniscol的套餐与选项](#page-overview.plans-and-options) · [OneRoster](#page-integrations.oneroster) ### 科 - **科目** — [Definition](#page-glossary.subject) · [班级统计](#page-dashboard.classes) · [创建班级及其小组](#page-timetables.creating-classes) · [范围](#page-admin.planning-domains) · [科目统计](#page-dashboard.subjects) · [前提条件](#page-timetables.prerequisites) · [上手引导](#page-getting-started.onboarding-tour) · [数据组织](#page-core-concepts.data-model) · [完整数据模型](#page-integrations.data-model-full) · [为批量导入准备数据](#page-getting-started.preparing-data) · [仪表盘模块概览](#page-dashboard.overview) · [OneRoster](#page-integrations.oneroster) ### 课 - **课表** — [Definition](#page-glossary.timetable) · [查看和筛选](#page-schedules.consult-and-filter) · [常规设置](#page-timetables.general-settings) · [创建课表](#page-faq.timetables) · [发布课表](#page-timetables.publication) · [范围](#page-admin.planning-domains) · [教师统计](#page-dashboard.teachers) · [教室统计](#page-dashboard.classrooms) · [课表的显示方式](#page-schedules.schedule-display) · [模块概览](#page-timetables.overview) · [上手引导](#page-getting-started.onboarding-tour) · [时间网格、时段与时长](#page-core-concepts.timetable-grid) · [使用表格和图表](#page-dashboard.tools-and-filters) · [搜索和筛选](#page-core-concepts.search-and-filter) · [脱离网格的课时](#page-timetables.off-grid-lessons) · [五分钟上手引导](#page-overview.quick-tour) · [显示与UX](#page-faq.display-and-ux) · [选择合适的课表类型](#page-overview.timetable-modes) · [仪表盘模块概览](#page-dashboard.overview) · [Omniscol的总体理念](#page-overview.philosophy) · [Omniscol是什么](#page-overview.what-is-omniscol) - **课表发布** — [Definition](#page-glossary.publication) · [创建课表](#page-faq.timetables) · [发布课表](#page-timetables.publication) · [上手引导](#page-getting-started.onboarding-tour) - **课表显示模式** — [Definition](#page-glossary.schedule-view-mode) - **课程** — [Definition](#page-glossary.course) · [分配规则](#page-timetables.distribution-policy) - **课时** — [Definition](#page-glossary.lesson) · [编辑课时](#page-timetables.lesson-edit) · [查看和筛选](#page-schedules.consult-and-filter) · [范围](#page-admin.planning-domains) · [分配规则](#page-timetables.distribution-policy) · [分配课时数并创建课时](#page-timetables.hour-distribution) · [临时调整](#page-schedules.ad-hoc-changes) · [时间网格、时段与时长](#page-core-concepts.timetable-grid) · [手动安排](#page-timetables.manual-placement) · [数据组织](#page-core-concepts.data-model) · [锁定课时](#page-timetables.lesson-lock) · [特殊情况与高级配置](#page-faq.edge-cases) · [通过表格批量导入课程](#page-timetables.mass-import) · [脱离网格的课时](#page-timetables.off-grid-lessons) · [完整数据模型](#page-integrations.data-model-full) · [为批量导入准备数据](#page-getting-started.preparing-data) · [五分钟上手引导](#page-overview.quick-tour) · [Omniscol是什么](#page-overview.what-is-omniscol) - **课时分配规则** — [Definition](#page-glossary.distribution-policy) · [分配规则](#page-timetables.distribution-policy) - **课时类型** — [Definition](#page-glossary.lesson-type) · [数据组织](#page-core-concepts.data-model) · [完整数据模型](#page-integrations.data-model-full) ### 连 - **连堂课** — [Definition](#page-glossary.concatenated-lessons) · [分配课时数并创建课时](#page-timetables.hour-distribution) · [复杂课时](#page-core-concepts.complex-lessons) ### 年 - **年级** — [Definition](#page-glossary.level) · [范围](#page-admin.planning-domains) ### 排 - **排课范围** — [Definition](#page-glossary.planning-domain) · [范围](#page-admin.planning-domains) · [自定义角色](#page-admin.customroles) ### 缺 - **缺勤** — [Definition](#page-glossary.absence) · [代课规则](#page-absences.substitution-policies) · [登记缺勤](#page-absences.declaring) · [教师统计](#page-dashboard.teachers) · [缺勤管理模块概览](#page-absences.overview) · [学生与资源统计](#page-dashboard.students-resources) ### 人 - **人员调度** — [Definition](#page-glossary.staffing) · [完整数据模型](#page-integrations.data-model-full) ### 日 - **日历模式** — [Definition](#page-glossary.calendar-mode) · [创建课表](#page-faq.timetables) · [概览](#page-higher-ed.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) · [模块概览](#page-timetables.overview) · [选择合适的课表类型](#page-overview.timetable-modes) · [Omniscol的套餐与选项](#page-overview.plans-and-options) - **日期窗口** — [Definition](#page-glossary.date-windows) ### 生 - **生成算法** — [Definition](#page-glossary.solver) · [创建课表](#page-faq.timetables) · [教师的可用时间](#page-core-concepts.wishes-and-availability) · [时间限制(通用机制)](#page-core-concepts.time-constraints) · [手动安排](#page-timetables.manual-placement) · [算法运行机制](#page-faq.solver-behavior) · [锁定课时](#page-timetables.lesson-lock) · [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) · [自动生成](#page-timetables.generation) · [Omniscol的总体理念](#page-overview.philosophy) · [Omniscol是什么](#page-overview.what-is-omniscol) ### 时 - **时间网格** — [Definition](#page-glossary.timetable-grid) - **时间轴** — [Definition](#page-glossary.timeline) · [时间轴与时间导航](#page-core-concepts.timeline-navigation) ### 授 - **授课形式** — [Definition](#page-glossary.lesson-modality) ### 脱 - **脱离网格** — [Definition](#page-glossary.off-grid) ### 外 - **外聘教师** — [Definition](#page-glossary.external-teacher) · [分配教师](#page-timetables.assigning-teachers) · [概览](#page-higher-ed.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) ### 小 - **小组** — [Definition](#page-glossary.group) · [班级、小组、子小组](#page-core-concepts.classes-and-groups) · [班级统计](#page-dashboard.classes) · [班内分组](#page-core-concepts.class-divisions) · [编辑课时](#page-timetables.lesson-edit) · [创建班级及其小组](#page-timetables.creating-classes) · [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) · [范围](#page-admin.planning-domains) · [分配规则](#page-timetables.distribution-policy) · [分配课时数并创建课时](#page-timetables.hour-distribution) · [高等教育使用场景](#page-faq.higher-ed-cases) · [教学小组组合](#page-core-concepts.groups-of-groups) · [脱离网格的课时](#page-timetables.off-grid-lessons) · [完整数据模型](#page-integrations.data-model-full) · [小组层级](#page-core-concepts.group-hierarchy) · [小组对齐](#page-core-concepts.alignments) · [学生与资源统计](#page-dashboard.students-resources) · [自由组](#page-core-concepts.free-groups) · [OneRoster](#page-integrations.oneroster) - **小组对齐** — [Definition](#page-glossary.alignment) · [班级、小组、子小组](#page-core-concepts.classes-and-groups) · [对齐与教学小组组合](#page-timetables.alignments-and-groups-of-groups) · [概览](#page-k12.overview) · [高等教育使用场景](#page-faq.higher-ed-cases) · [教学小组组合](#page-core-concepts.groups-of-groups) · [完整数据模型](#page-integrations.data-model-full) · [小组对齐](#page-core-concepts.alignments) ### 校 - **校区** — [Definition](#page-glossary.site) · [范围](#page-admin.planning-domains) · [教室自动分配](#page-timetables.auto-room-assignment) · [时间网格、时段与时长](#page-core-concepts.timetable-grid) · [完整数据模型](#page-integrations.data-model-full) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 协 - **协同教学** — [Definition](#page-glossary.co-teaching) · [复杂课时](#page-core-concepts.complex-lessons) · [高等教育使用场景](#page-faq.higher-ed-cases) ### 信 - **信息显示屏** — [Definition](#page-glossary.panel) · [完整数据模型](#page-integrations.data-model-full) · [显示与UX](#page-faq.display-and-ux) ### 学 - **学年** — [Definition](#page-glossary.school-year) · [常规设置](#page-admin.parameters) · [发布课表](#page-timetables.publication) · [配置学校账户](#page-getting-started.setup-school) · [前提条件](#page-timetables.prerequisites) · [上手引导](#page-getting-started.onboarding-tour) · [数据组织](#page-core-concepts.data-model) · [完整数据模型](#page-integrations.data-model-full) · [OneRoster](#page-integrations.oneroster) - **学生 / 大学生 / 学员** — [Definition](#page-glossary.student) · [架构与角色](#page-overview.architecture-and-roles) · [上手引导](#page-getting-started.onboarding-tour) · [为批量导入准备数据](#page-getting-started.preparing-data) · [学生与资源统计](#page-dashboard.students-resources) · [邀请并激活用户](#page-getting-started.inviting-users) · [用户与角色](#page-admin.users-and-roles) · [Omniscol是什么](#page-overview.what-is-omniscol) · [OneRoster](#page-integrations.oneroster) ### 仪 - **仪表盘** — [Definition](#page-glossary.dashboard) · [班级统计](#page-dashboard.classes) · [教师统计](#page-dashboard.teachers) · [教室统计](#page-dashboard.classrooms) · [科目统计](#page-dashboard.subjects) · [使用表格和图表](#page-dashboard.tools-and-filters) · [学生与资源统计](#page-dashboard.students-resources) · [仪表盘模块概览](#page-dashboard.overview) ### 诊 - **诊断** — [Definition](#page-glossary.diagnostic) · [冲突与诊断](#page-timetables.conflicts) · [算法运行机制](#page-faq.solver-behavior) · [诊断课表生成失败的原因](#page-timetables.diagnosing-generation) · [自动生成](#page-timetables.generation) ### 周 - **周课表** — [Definition](#page-glossary.weekly-timetable) · [创建课表](#page-faq.timetables) · [概览](#page-k12.overview) · [模块概览](#page-timetables.overview) · [算法运行机制](#page-faq.solver-behavior) · [选择合适的课表类型](#page-overview.timetable-modes) - **周期课表** — [Definition](#page-glossary.cyclic-timetable) · [创建课表](#page-faq.timetables) · [选择合适的课表类型](#page-overview.timetable-modes) ### 专 - **专业教室类型** — [Definition](#page-glossary.classroom-specialization) · [教室自动分配](#page-timetables.auto-room-assignment) · [特殊情况与高级配置](#page-faq.edge-cases) · [完整数据模型](#page-integrations.data-model-full) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) ### 状 - **状态** — [Definition](#page-glossary.lesson-status) ### 资 - **资源** — [Definition](#page-glossary.resource) · [编辑课时](#page-timetables.lesson-edit) · [完整数据模型](#page-integrations.data-model-full) · [校区、教室、资源](#page-core-concepts.sites-rooms-resources) · [校区、时间网格、教室、资源](#page-timetables.sites-rooms) · [学生与资源统计](#page-dashboard.students-resources) ### 自 - **自由组** — [Definition](#page-glossary.free-group) · [完整数据模型](#page-integrations.data-model-full) · [自由组](#page-core-concepts.free-groups) ### A - **API令牌** — [Definition](#page-glossary.api-token) · [安全与托管](#page-faq.security-and-hosting) · [高级查询](#page-integrations.advanced-queries) · [集成概览](#page-integrations.overview) · [架构](#page-integrations.architecture) · [课时API](#page-integrations.lessons-api) ### I - **iCal(日历导出)** — [Definition](#page-glossary.ical) · [集成概览](#page-integrations.overview)