Files
teaching-design/docs/superpowers/specs/2026-06-15-printable-teaching-design-generator-design.md
2026-06-15 00:55:47 -06:00

300 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 可打印教学设计生成器设计方案
## 1. 建设目标
在现有 Vue 3 + TypeScript + Vite 项目中建设一个纯前端教学设计生成网站。用户一次上传多份 Markdown 教案后,网站将其解析为一整册可编辑、可打印的 A4 教学设计,并支持调整课次顺序、自动暂存和分别导出修改后的 Markdown 文件。
所有文件均在浏览器本地处理,不上传到服务器。
## 2. 输入材料与兼容范围
主要输入为 `data` 目录下的编号 Markdown 教案:
- `data/Web/1.md``data/Web/18.md`
- `data/Python/1.md``data/Python/18.md`
- `data/C#/1.md``data/C#/19.md`
标准教案通常包含:
1. 一级标题
2. 基本信息表
3. `## 教学过程`
4. 教学过程五列表格
5. `## 板书设计`
6. `## 教学成效与反思`
7. 教学成效与反思表
部分 C# 教案缺少板书、教学过程或反思章节。系统必须尽量解析这些文件,不因局部缺失拒绝整批导入。
## 3. 核心产品决策
- 采用左侧课次导航、右侧 A4 页面直接编辑的工作区。
- 上传后按文件名中的数字自然排序。
- 左侧列表支持拖拽调整课次顺序。
- 整册包含一张封面,不生成目录。
- 封面可编辑课程名称和教师姓名。
- 每份教案在打印时独立起页。
- 板书设计保留在教案中并参与打印。
- 编辑结果自动暂存在浏览器本地。
- 修改后的 Markdown 按原文件分别生成,并打包为 ZIP 下载。
- 格式不完整的文件仍然导入,缺失区域留空并显示警告。
## 4. 技术方案
采用结构化解析器和统一教案数据模型,而不是直接编辑 Markdown DOM。
技术栈:
- Vue 3
- TypeScript
- Vite
- 浏览器 File API
- 浏览器打印 API
- `localStorage` 或等价浏览器本地存储
- 用于生成 ZIP 的轻量前端库
系统不依赖后端、数据库或外部文件服务。
## 5. 系统架构
### 5.1 MarkdownParser
负责把单个 Markdown 文件解析为统一的 `TeachingDesign` 对象。
职责:
- 识别一级标题及课题名称。
- 解析基本信息表。
- 拆分知识目标、技能目标和素养目标。
- 拆分重点和难点。
- 解析教学过程表及每个教学环节的时间。
- 提取板书设计代码块或正文。
- 解析教学成效和教学反思。
- 保存无法归类的附加内容。
- 生成不阻断导入的解析警告。
### 5.2 TeachingDesign 数据模型
每个教案包含:
- 唯一标识
- 原文件名
- 当前排序位置
- 标题
- 课题
- 课时
- 知识目标
- 技能目标
- 素养目标
- 教学重点
- 教学难点
- 教学资源准备
- 教学过程环节数组
- 板书设计
- 教学成效
- 教学反思
- 附加内容
- 解析警告数组
每个教学环节包含:
- 教学环节名称
- 时间
- 教学内容
- 教师活动
- 学生活动
- 设计意图
### 5.3 Workspace
工作区由固定工具栏、课次侧栏和 A4 编辑区组成。
工具栏提供:
- 上传或追加 Markdown
- 打印整册
- 导出 Markdown ZIP
- 清空当前整册
课次侧栏提供:
- 封面入口
- 课次编号和课题摘要
- 拖拽排序
- 当前选中状态
- 每课解析警告状态
### 5.4 A4Editor
右侧仅展示封面或当前选中的一份教案。
编辑方式:
- 表格字段在 A4 页面内直接编辑。
- 教学过程支持增删环节。
- 板书设计使用适合多行文本的编辑区域。
- 缺失字段显示空白可编辑区域。
- 编辑状态只在屏幕上可见,打印时隐藏。
页面宽度按 A4 比例显示,并允许根据浏览器宽度缩放预览。
### 5.5 PrintBook
打印时渲染完整整册,而不是只打印当前选中教案。
规则:
- 第一页为封面。
- 每份教案从新页开始。
- 隐藏工具栏、侧栏、按钮、拖拽控件、警告和编辑边框。
- A4 页面使用统一页边距和中文字体栈。
- 教学过程表允许跨页。
- 跨页后重复教学过程表头。
- 单个教学环节行尽量避免拆分。
- 板书和反思标题避免与正文分离。
### 5.6 Storage
系统在内容、顺序或封面信息变化后自动暂存。
暂存内容包括:
- 封面课程名称
- 教师姓名
- 全部教案结构化数据
- 当前课次顺序
- 当前选中页面
重新打开页面时提示恢复最近一次未清空的整册。存储失败不得中断编辑。
### 5.7 MarkdownExporter
导出器把当前结构化数据重新生成规范 Markdown。
导出规则:
- 每份教案保留原文件名。
- ZIP 内文件顺序通过文件名和当前排序清单体现。
- 输出统一使用标准标题、基本信息表、教学过程表、板书设计和反思表结构。
- 保留加粗、行内代码、列表、换行和代码块等 Markdown 内容。
- 附加内容放在明确的附加章节,避免导入时无法识别的正文丢失。
- 不保证原文件空格、换行和表格对齐符完全不变。
## 6. 解析兼容规则
解析器需要兼容:
- LF 和 CRLF 换行。
- 全角和半角冒号。
- `1课时40分钟``1课时(40分钟)`
- 不同长度的 Markdown 表格分隔符。
- `<br>``<br/>``<br />`
- 带序号或不带序号的教学环节。
- `6分钟``(6分钟)` 等时间写法。
- 板书使用围栏代码块或普通段落。
- 缺失章节、空单元格和额外正文。
解析失败分为字段级警告,不将单个字段问题升级为整份文件失败。只有无法读取文件文本时,才把该文件标记为导入失败。
## 7. 用户流程
1. 用户在初始页拖入或选择多份 `.md` 文件。
2. 系统自然排序并批量解析文件。
3. 系统显示工作区及解析结果摘要。
4. 用户编辑封面课程名称和教师姓名。
5. 用户在左侧切换课次,直接编辑右侧 A4 页面。
6. 用户通过拖拽调整课次顺序。
7. 系统在每次修改后自动暂存。
8. 用户点击打印整册,浏览器打开打印界面。
9. 用户点击导出 Markdown下载包含所有修改后文件的 ZIP。
用户可以追加文件。文件名冲突时必须提示用户选择替换或保留两份,不能静默覆盖。
## 8. 错误与状态反馈
系统应提供以下反馈:
- 文件格式不支持。
- 文件读取失败。
- 单份教案缺少章节或字段。
- 教学过程表列数异常。
- 暂存失败或空间不足。
- ZIP 生成失败。
- 当前没有可打印或可导出的教案。
错误提示不得清除已经成功解析或编辑的内容。
## 9. 视觉设计
整体采用克制的教学文档工具风格:
- 页面背景使用浅灰色A4 纸张使用白色和轻阴影。
- 主色使用稳重的绿色,用于当前课次、按钮和章节标识。
- 正文优先使用系统中文无衬线字体。
- A4 标题可使用中文宋体类字体栈增强正式文档感。
- 编辑边框、警告和辅助提示只在屏幕模式显示。
- 移动端允许浏览和轻量编辑,但主要使用场景为桌面浏览器。
## 10. 测试策略
### 10.1 单元测试
覆盖:
- 数字文件名自然排序。
- 标准 Web 教案完整解析。
- Python 教案的半角标点和 CRLF 解析。
- C# 教案缺失章节时的容错处理。
- 教学目标和重难点拆分。
- 教学环节时间提取。
- Markdown 重新生成。
- 暂存序列化和恢复。
### 10.2 组件测试
覆盖:
- 批量上传。
- 课次切换。
- 页面内字段编辑。
- 教学环节增删。
- 拖拽排序。
- 警告展示。
- 封面编辑。
- ZIP 导出触发。
### 10.3 打印验证
使用浏览器打印预览人工检查:
- 封面独立一页。
- 每份教案独立起页。
- 控件全部隐藏。
- 长教学过程表跨页正常。
- 表头重复。
- 中文、代码和板书不溢出。
### 10.4 语料回归
批量导入仓库内全部编号教案,确认:
- Web 18 份均可解析。
- Python 18 份均可解析。
- C# 19 份均不会导致整批中断。
- 缺失章节会产生警告和空白编辑区。
- 导出后文件可再次导入。
## 11. 验收标准
- 可一次上传至少 20 份 Markdown 文件。
- 文件按数字自然排序,并可拖拽调整。
- 每份教案可在 A4 页面中直接编辑。
- 标准教案主要字段均能正确解析。
- 不完整教案可容错导入并显示警告。
- 板书设计可编辑且参与打印。
- 封面包含可编辑的课程名称和教师姓名。
- 自动暂存可恢复。
- 打印整册包含封面,且每份教案独立起页。
- 可下载包含全部修改后 Markdown 的 ZIP。
- 全部处理在浏览器本地完成。