# 软件项目管理 · 本地备课台（使用说明）

> 位置：`dl-hub/22-软件项目管理教学包/备课台/`
> 用途：把 **课件每一页 ＋ 对应讲稿 ＋ 笔记框** 放在同一屏，备课时边看边记。
> 范围：**框架覆盖全书 16 次课**（已有课件的讲次显示真实幻灯片，未制作的讲次显示"待制作"并提供该章《教案》兜底）。
> 部署：**仅本地/局域网，未发布到腾讯云**。

---

## 一、怎么打开（已在 DSH 机上启用为常驻服务）

备课台已注册为 **systemd 服务 `spm-prep.service`**（端口 8910）：**开机自启 ＋ 崩溃自动重启**，不依赖任何会话进程。浏览器直接打开（**认准一个地址长期使用**）：

| 地址 | 适用 |
|---|---|
| http://127.0.0.1:8910/备课台/index.html | 本机使用 |
| http://192.168.31.76:8910/备课台/index.html | 局域网其它设备（笔记本/平板/手机） |

控制命令（脚本内部走 `systemctl`，需要 sudo 密码）：

```bash
bash "/home/zyw/Downloads/dl-hub/22-软件项目管理教学包/备课台/启动备课台.sh" status    # 状态（含自启/端口/PID）
bash ".../启动备课台.sh" restart   # 重启
bash ".../启动备课台.sh" stop      # 临时停止（开机仍会自启）
bash ".../启动备课台.sh" log       # 看访问日志
```

等价的原生命令：`systemctl status spm-prep.service`、`sudo systemctl restart spm-prep.service`、`tail -f /home/zyw/Downloads/spm-prep.log`。
彻底停用（不再开机自启）：`sudo systemctl disable --now spm-prep.service`。

> ⚠️ **务必用同一个地址**：笔记存在浏览器的 localStorage 里，**按"地址(含端口)"隔离**。用 8910 记的笔记不会出现在 8899（下载中心）打开的同一页面里。
> ⚠️ 直接双击 `index.html`（file:// 方式）会出现黄色警告条：笔记与课件内嵌可能被浏览器限制，请改用上面的服务方式。

---

## 二、界面与操作

```
┌──────────┬───────────────────────┬─────────────────────────────┐
│ 全书目录  │  课件预览（可交互/锁定） │ 📝讲稿 / 📋教案 / 🗂本课笔记  │
│ 16 次课   │                       ├─────────────────────────────┤
│ 每课展开  │  ◀ 上一页 2.6/28 下一页 ▶│ ✍️ 我的备课笔记（自动保存）      │
└──────────┴───────────────────────┴─────────────────────────────┘
```

| 操作 | 说明 |
|---|---|
| 点左侧讲次 | 展开该次课的页面清单；有笔记的页显示绿点 |
| **← / →** | 上一页 / 下一页（焦点不在输入框时） |
| **Ctrl+S** | 立即保存当前笔记（平时 0.4 秒自动保存） |
| 搜索框 | 按讲稿内容/标题筛选，命中词在左侧高亮 |
| **A－ / A＋** | 调整右侧讲稿字号 |
| 目录 / 讲稿 | 折叠左右栏，给中间课件让出整屏 |
| 🔓 解锁交互 | 默认屏蔽课件内的滚轮/方向键翻页（避免备课时误翻页）；需要点课件里的答题按钮或翻页时开启 |
| ↗ 新窗口打开 | 单独打开当前幻灯片（讲课时可直接用它投影） |
| 导出笔记 | 同时导出 **Markdown**（整理进教案）＋ **JSON**（完整备份，可再导入） |
| 打印本课 | 生成"讲稿＋我的笔记"打印版（自动分页，可打印成册） |
| 导入备份 | 换电脑/换浏览器时恢复笔记 |

---

## 三、笔记保存在哪、怎么备份

- 存在**本机浏览器**的 localStorage：`spm.prep.note.<讲次>.<页>`（逐页笔记）、`spm.prep.lecnote.<讲次>`（整课笔记，用于还没有课件的讲次）。
- **不上传、不联网**；清理浏览器数据/换浏览器会丢失 → 请每周点一次「导出笔记」备份到 `22-软件项目管理教学包/讲稿/` 或网盘。
- 导入：点「导入备份」选择之前导出的 JSON 即可原样恢复。

---

## 四、讲稿/课件更新后怎么同步

| 场景 | 操作 |
|---|---|
| 改了讲稿 Markdown（`讲稿/*.md`） | 运行 `python3 _build_prep.py` → 刷新备课台页面（笔记不受影响） |
| 新做了某次课课件（如第 3 章） | 把 `N.1.html…` 放进 `课件成品-HTML/软件项目管理-16周课件/lectureN/`，再运行 `python3 _build_prep.py`，左侧该讲次会自动变成"真实页数" |
| 新增某次课讲稿 | 在 `讲稿/` 下按 `第N章-…-讲稿.md` 命名（页内锚点用 `### 【N.M】标题（时长）`），并在 `_build_prep.py` 的 `SCRIPT_FILE` 里登记，再运行脚本 |
| 课件样式/页码变了 | 讲稿锚点格式不变即可；`_build_prep.py` 会按页码自动配对 |

> 数据文件 `data.js` 即"课件页 ↔ 讲稿"的配对结果，由脚本生成，不用手工编辑。

---

## 五、文件清单

| 文件 | 说明 |
|---|---|
| `index.html` | 备课台主程序（单文件，无外部依赖） |
| `data.js` | 生成的数据：16 次课 / 80 页课件 / 2 次课讲稿 / 16 章教案 |
| `_build_prep.py` | 数据构建脚本（解析讲稿 Markdown ＋ 课件标题 ＋ 教案） |
| `启动备课台.sh` | 本地服务启停脚本（端口 8910） |
| `README.md` | 本文件 |

## 六、已知说明

- 未制作课件的讲次（第 3–16 次课）：中间显示"课件尚未制作"，右侧「教案」标签已给出该章《教案》全文，可直接对照写讲稿或记笔记。
- 讲稿源文件在 `讲稿/`：第 1 章（52 页全覆盖）、第 2 章（28 页全覆盖）；其余章待撰写。
- 本工具**不进入腾讯云部署包**（cloud 发布只打包 `index.html styles.css logo.png quiz.js assets lecture*`）。
