# 新增功能指南 —— 怎么往功能墙加一个按钮

> 这台工作台的核心不是某个功能,是**这套可复用的框架**:加一个新功能 = 复制一个模板页 + 让 Claude Code 改写 + 在清单里加一行。
> 本指南就是收入流③"培训"里最该教会客户折腾者的那件事。

---

## 一、先搞清楚三层结构(为什么加按钮这么快)

```
功能墙首页 index.html ──读取──> shared/shell.js 里的 Platform.FEATURES(按钮清单)
每个功能页 pages/xxx.html ──引入──> shared/platform.css(统一样式)
                                     shared/shell.js(页头/导航/模型设置抽屉)
                                     shared/runtime.js(抽取引擎,已验证)
                                     extract-core.js(解析规则,共用)
```

- **你加按钮时,90% 的东西不用碰**:样式、页头、模型切换、文件拖拽、Excel 导出、PDF/Word/图片读取——全在共享层,自动复用。
- **你只写"这个功能长什么样 + 抽哪些字段"**。

---

## 二、最快路径:让 Claude Code 一句话造(推荐)

在 VS Code 里打开这个项目,对 Claude Code 说类似这样的话:

> "复制 `web/pages/_template.html` 成 `web/pages/检测报告.html`,把它改成'检测报告批量抽取'功能:标题图标用 🧪,抽取这些字段——报告编号、样品名称、检测项目、检测结果、是否合格、检测日期。然后在 `web/shared/shell.js` 的 `Platform.FEATURES` 里加一行让它出现在功能墙。再在 `web/extract-core.js` 里加一个'检测报告'的离线解析分支。"

Claude Code 会自己改这几个文件、自己跑、自己修。**这就是你交付/培训的核心演示**——当场用一句话长出一个新按钮。

> 模型用哪个:打开 cc-switch,日常切 **DeepSeek 国内直连**(`https://api.deepseek.com/anthropic`),合规又稳;想要最强能力临时切 Claude 官方。详见 [设置页](pages/settings.html)。

---

## 三、手动路径:三步(给想自己懂原理的人)

### 第 1 步:复制模板
把 `pages/_template.html` 复制成 `pages/你的功能.html`,改 4 处(模板顶部注释里写了):
1. `<title>` 和 `<body data-page="你的功能id">`
2. `.pf-head` 里的图标 / 标题 / 说明
3. 演示按钮文案(没有内置样本就删掉①卡片)
4. 底部 `Runtime.mountFeature({ id, title, demoKind, expectType })`

### 第 2 步:在功能墙登记
打开 `shared/shell.js`,在 `Platform.FEATURES` 数组里加一行:
```js
{ id: "你的功能id", ic: "🧪", name: "你的功能名", desc: "一摞X → 变成Y表", href: "pages/你的功能.html", status: "ready" },
```
功能墙首页会自动多出这个按钮。

### 第 3 步(可选):加离线解析规则
如果要离线(不联网)也能抽,在 `extract-core.js` 里:
- `detectType()` 加一个关键词分支识别你的文档类型;
- 仿照 `_invoice_offline / _contract_offline / _resume_offline` 写一个 `_你的类型_offline()`,用正则抽字段;
- 在 `extractOffline()` 的分派里挂上。

> 不写离线规则也行:直接用在线模型模式,`buildTextPrompt` 会让模型按通用方式抽成 JSON。离线规则是"免费 + 数据不出本机"的加分项。

---

## 四、验证(每次加完都做)

1. 双击 `index.html`,看功能墙有没有新按钮、点进去能不能打开。
2. 点新页面的演示按钮(若有样本)或拖一个真实文件进②,看③有没有出表、能不能下载 Excel。
3. 右上角【模型】切在线/离线都试一遍。

---

## 五、设计原则(别破坏框架的几条线)

- **数据默认不出本机**:含个人信息的功能(发票/合同/简历/客户资料)优先离线或国产模型。
- **一个功能一个页**:别把多个功能塞进一页,功能墙按钮才清晰。
- **共享层别乱改**:`platform.css / shell.js / runtime.js` 是所有页的地基,改它们前先想清楚影响面。
- **样本是虚构的**:演示样本一律虚构数据,真实文件只走②号区、只在本机处理。

---

这套流程本身就是产品的护城河:**别人卖你一个做好的功能,我们给你一台会长功能的工作台 + 教你自己加。**
