` 包裹图片 |
| debug 开关 | 设置中关闭全部调试日志 |
| 目录缓存 | 减少频繁 IO |
## 15. 风险与规避
| 风险 | 缓解 |
|------|------|
| 简化 frontmatter 误判 | 提示限制 + 计划引入 YAML 解析 |
| 正则误伤 | 增加单元测试覆盖边界字符 |
| Gallery IO 阻塞 | 后续异步 + loading 占位 |
| 移动端缺 fs | try/catch + 环境判断 |
| 样式散落行内 | 后续集中到主题 CSS |
## 16. 示例复盘
示例:
```
---
title: 6月特种兵式观展
author: 大童
image: "/img/shufa/a.jpg"
---
前言

![[c-second.png]]
```
结果:
- 封面:`![[a.jpg]]`(frontmatter 优先)
- 若删去 image 行 → 封面:`![[b-first.png]]`(首图)
## 17. 迭代优先级建议
| 优先级 | 项目 |
|--------|------|
| 高 | 封面 UI 选择确认 |
| 中 | YAML 解析器集成 |
| 中 | Gallery 参数化(count/random) |
| 中 | tags/categories 抽取 |
| 低 | 图廊 HTML figure 模式 |
## 18. 关键函数索引
| 函数 | 作用 |
|------|------|
| `extractWeChatMeta` | 抽取标题/作者/封面回退 |
| `transformGalleryShortcodes` | gallery 短代码 → wikilinks |
| `selectGalleryImages` | 画廊图片选择封装 |
| `preprocessContent` | 行级语法 HTML 化 |
| `getWeChatArticleMeta` | 获取抽取的 meta |
| `getMetadata` | 最终上传元数据(含封面回填) |
| `MarkdownImage.tokenizer` | 标准图片转 LocalImage token |
| `LocalFileRegex` | 统一匹配图片语法 |
## 19. 总结
通过“标准化 → 抽取 → 预处理 → 渲染 → 上传”分层设计,确保各功能模块低耦合并可独立演进。当前设计已满足基础运营发布需求,后续可按优先级增强 YAML 解析、封面配置、多图策略与 gallery 表现力。
---
*若需我继续实现 tags/categories 抽取或 gallery 参数扩展,请直接提出。*
## 附录 A. 草稿箱清空功能
### A.1 背景
运营过程中测试/多次上传会堆积大量“草稿”,需要一键清理能力,并具备安全保护与预览模式。
### A.2 接口
| 方法 | 说明 |
|------|------|
| `clearAllDrafts(appid, { confirm, batchSize=20, retainLatest=0, dryRun=false })` | 批量列出并删除草稿;需 `confirm:true` 才执行实际删除 |
### A.3 选项说明
| 选项 | 类型 | 说明 |
|------|------|------|
| confirm | boolean | 必须显式 true,否则抛错中止 |
| batchSize | number | 分页拉取条数(默认 20,受微信接口限制) |
| retainLatest | number | 保留最新 N 条(按接口返回顺序) |
| dryRun | boolean | 仅统计将删除的数量,不执行删除 |
### A.4 返回结构
```
{
total: number, // 收集到的全部 media_id 数
skip: number, // 被保留的数量(= retainLatest 实际保留)
success: number, // 实际删除成功数(dryRun= true 时恒 0)
fail: number, // 删除失败数
fails: Array<{ media_id, status? , errcode?, errmsg?, text? }>,
dryRun: boolean
}
```
### A.5 安全措施
1. `confirm` 必须为 true。
2. 可设置 `retainLatest` 防止误删全部。
3. `dryRun` 先预览再正式执行。
4. 删除逐条执行,可在失败时保留失败列表审计。
### A.6 未来增强
| 方向 | 说明 |
|------|------|
| 并发删除 | Promise pool 控制并发提升速度 |
| 过滤条件 | 按标题关键词/日期范围选择性删除 |
| 进度通知 | 分批实时进度 Notice / 状态栏 |
| UI 集成 | 命令面板 + 二次确认弹窗 |
| 时间排序校验 | 根据返回 `update_time` 明确排序而非假设 |
### A.7 命令面板入口
已添加命令:`清空微信草稿箱 (危险)` (id: `note-to-mp-clear-drafts`)
流程:
1. 首次 confirm:提示风险。
2. 询问是否 dryRun(输入 y 仅预览)。
3. 若非 dryRun,再询问保留最近 N 条。
4. 二次 confirm 再次确认删除范围。
5. 调用 `clearAllDrafts(null, { confirm:true, dryRun, retainLatest })`。
失败处理:捕获异常并 Notice 显示;控制台输出详细错误。
### A.8 可视化操作面板 (Modal)
新增 `ClearDraftsModal`:提供表单而非多级 confirm/prompt。
表单字段:
- appid (可留空自动从当前文章 frontmatter 获取)
- 保留最近 N 条(number,默认 0)
- DryRun 复选框(默认勾选)
交互流程:
1. 打开命令 → 弹出 Modal。
2. 用户填写/确认参数,首次点“执行”→ 若为真实删除且非 dryRun,会再弹出 confirm。
3. 结果以 JSON 形式写入下方 区域,便于复制。
4. Notice 简要提示(DryRun 或 完成)。
错误处理:
- try/catch 包裹,失败写入 resultPre 文本 + Notice。
- run 按钮在执行期间 disabled,防止重复触发。
后续增强设想:
| 项目 | 说明 |
|------|------|
| 进度条 | 删除大批量时显示当前进度/总数 |
| 失败重试 | 针对 fails 列表单独重试按钮 |
| 过滤条件 | 增加标题关键词 / 日期起止输入 |
| 多账号选择 | 下拉列出已配置的 appid 列表 |
| 日志导出 | 一键复制 JSON 结果 |