schedule-kernel
Version:
The back-end core module used for storing/displaying the course schedule
166 lines (123 loc) • 4.58 kB
Markdown
# RIS Schedule Kernel
一个功能强大的课程表管理核心模块,专注于提供灵活且可扩展的课程表管理功能。
## 主要特性
- **灵活的课程管理**:支持单双周排课,灵活应对各种教学安排
- **临时调课支持**:内置临时调课机制,轻松处理特殊情况
- **多维度管理**:
- 课程时间段管理
- 科目信息管理
- 教师课程关联
- 课表导入导出
- **类型安全**:完整的 TypeScript 类型支持
- **CSES 格式支持**:支持导入/导出 CSES 课表格式
## 安装
```bash
npm install schedule-kernel
```
## 基础使用
### 初始化课程表
```typescript
import { ScheduleKernel } from 'schedule-kernel';
// 创建新的课程表实例
const kernel = new ScheduleKernel('config.json');
```
### 课程管理
```typescript
const lessonManager = kernel.lessonManager;
// 获取今日课程
const todayLessons = lessonManager.getTodayLessons('all');
// 编辑课程(按名称)
lessonManager.editLesson(
1, // 星期一
2, // 第三节课
'物理', // 科目名称
'odd' // 单周
);
// 临时调课
lessonManager.swapLessons(
{ dayIndex: 1, lessonIndex: 0 },
{ dayIndex: 2, lessonIndex: 1 },
new Date('2025-06-05'),
true
);
```
### 科目管理
```typescript
const subjectManager = kernel.subjectManager;
// 创建新科目
subjectManager.createSubject({
name: '物理',
type: 'subject',
teacherName: '张老师',
shortName: '物理'
});
// 获取科目信息
const subject = subjectManager.getSubject('物理');
```
### 时间管理
```typescript
const timeManager = kernel.timeManager;
// 创建课程时间段
timeManager.createTimeTargets('上午', {
startTime: '08:00:00',
endTime: '08:45:00'
});
// 获取当前课程状态
const status = timeManager.getCurrentLessonStatus();
```
## API 文档
### ScheduleKernel
核心类,用于初始化和管理整个课程表系统。
- `constructor(configPath: string)` - 初始化课程表
- `saveConfig(): boolean` - 保存配置到文件
- `setWeekMode(date: Date): void` - 设置单双周状态
### LessonManager
课程管理器,处理具体的课程安排。
- `getTodayLessons(weekMode: string): lessonTarget[]` - 获取今日课程
- `getTeacherLessons(teacherName: string)` - 获取教师课程
- `getSubjectLessons(subjectName: string)` - 获取某科目所有课程
- `editLesson(dayIndex, lessonIndex, subjectName, weekMode, week?)` - 编辑课程
- `swapLessons(source, target, date?, isTemporary?)` - 课程调换
- `createLesson(dayIndex, subjectName, week?)` - 新增课程
- `insertLessonAfter(dayIndex, lessonIndex, subjectName, week?)` - 插入课程
- `deleteLesson(dayIndex, lessonIndex, week?)` - 删除课程
### SubjectManager
科目管理器,处理科目相关信息。
- `createSubject(subject: subjectTarget): boolean` - 创建科目
- `editSubject(name: string, subject: Partial<subjectTarget>): boolean` - 编辑科目
- `deleteSubject(name: string): boolean` - 删除科目
- `getAllSubjects(): subjectTarget[]` - 获取所有科目
- `getSubject(name: string): subjectTarget | undefined` - 获取科目信息
### TimeManager
时间管理器,处理课程时间段。
- `getCurrentLessonStatus()` - 获取当前课程状态
- `createTimeTargets(name: string, target: timeTarget): boolean` - 创建时间表项
- `editTimeTarget(uuid, targetIndex, startTime, endTime): boolean` - 编辑时间段
- `editTimeTargets(uuid, targets): boolean` - 编辑时间表项
- `insertTimeTargetAfter(id, index, startTime, endTime): UUID | undefined` - 插入时间段
- `deleteTimeTarget(uuid, targetIndex): boolean` - 删除时间段
- `deleteTimeTargets(uuid): boolean` - 删除整个时间表项
## 数据类型
```typescript
interface lessonTarget {
subjectName: string;
// 其他字段如 timeUuid、cachedName、cachedShortName 可在实际实现中扩展
}
interface subjectTarget {
name: string;
type: "subject" | "activity";
shortName?: string;
teacherName?: string;
extra?: {
outdoor?: boolean;
};
}
interface timeTarget {
startTime: string; // "HH:mm:ss" 格式
endTime: string; // "HH:mm:ss" 格式
}
```
## 贡献代码
欢迎提交 Issue 和 Pull Request。贡献前请先阅读我们的贡献指南。
## 许可证
该项目采用 LGPL-3.0 许可证。详见 [LICENSE](LICENSE) 文件。