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

8.4 KiB
Raw Blame History

可打印教学设计生成器设计方案

1. 建设目标

在现有 Vue 3 + TypeScript + Vite 项目中建设一个纯前端教学设计生成网站。用户一次上传多份 Markdown 教案后,网站将其解析为一整册可编辑、可打印的 A4 教学设计,并支持调整课次顺序、自动暂存和分别导出修改后的 Markdown 文件。

所有文件均在浏览器本地处理,不上传到服务器。

2. 输入材料与兼容范围

主要输入为 data 目录下的编号 Markdown 教案:

  • data/Web/1.mddata/Web/18.md
  • data/Python/1.mddata/Python/18.md
  • data/C#/1.mddata/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。
  • 全部处理在浏览器本地完成。