# 栀夏气泡乌龙上市项目周报 第 38 周

> 活页公开模板 `sample-weekly-report` · 场景: 工作汇报 · 行业: 餐饮茶饮 / 企业内部
> 任何人、任何 Agent 都可以读、照着改，不需要账号。示例内容均为虚构。
> 真页面: https://space.24haowan.com/s/Uyxw6EOsunbh · 详情: https://space.24haowan.com/examples/sample-weekly-report

## 这是什么

周报 · 每周发给同事

## 什么时候用

要反复更新、链接不变的东西：周报、进度页、月报。想知道谁看了、看到哪一节时也选它。一次性的方案给客户看选 sample-client-proposal。

## 用户对助手说的原话

把我们项目这周的进展做成一份正式的内部周报，发成一个网页链接：页头是公司抬头和报告要素（报告周期、报告人、报送、抄送）；接着一条按真实日期比例画的上市时间线，标出已完成的节点、今天（带一点呼吸动效）和离上线还有几天；然后是本周完成（每条带负责人，配一张关键成果的图）、四个关键数字和一张按周累计的柱状图（带备货目标虚线，点柱子能看当周新增与来源）、下周按周一到周五排的日程；最后「需要您确认」做成一张紧凑的表单，每件事一行、选项是短标签，一个发送按钮，回复存到一张数据表里。少用底色块，用细线分隔；手机上时间线改竖排。以后每周更新到同一个链接。

如果你还没有活页连接器（MCP），先读 https://space.24haowan.com/for-agents.md ，照里面的说明接入，或不登录直接发布。

## 照着做一份

1. 读入口文件 https://space.24haowan.com/examples/sample-weekly-report/source/index.html（它引用的其他文件见下方列表）。
2. 保留结构、版式和交互，把内容**全部**换成用户自己的；模板里的公司、人名、数字都是虚构的，一样都别留。
3. 交付一个自包含的单文件 HTML：样式写在页面里，不引外部字体 / 脚本 / CDN；手机 375 宽和电脑 1440 宽都要好看，模板有暗色就保留暗色。
4. 要发成微信里能打开、改了链接不变的网页：接入活页（https://space.24haowan.com/for-agents.md）后发布；没有账号也可以让用户在 https://space.24haowan.com/quick 上传这个文件。
5. 没有活页工具、但能发 HTTPS 请求：把做好的 HTML 以 Content-Type: text/html POST 到 https://space.24haowan.com/api/quick?client=template-sample-weekly-report ，返回预览链接、7 天分享与认领链接（登录后保留、链接不变）。

## 页面结构

- 上市进度
- 本周完成
- 数字
- 下周安排
- 需要您确认

## 文件（公开，纯文本）

- https://space.24haowan.com/examples/sample-weekly-report/source/index.html（入口）
- https://space.24haowan.com/examples/sample-weekly-report/source/packaging.webp

## 发成活页之后还能做的

- 同一链接更新不变
- 阅读回执（谁看了 / 看到哪一节）
- 页内确认回写数据表（原生表单 POST ./_data/confirmations）

## 发之前要备好

- 数据表 confirmations（列 legal / price / note，append_open=true）：文末确认表单写进这里；新工作区种入时自动建好

## 模板说明（README）

「示例 · 五种用法」文件夹的第 1 份（总览见 `core/space/examples/README.md`）。示例数据均为虚构。

## 演示哪个特色

**同一条链接每周更新不变 + 阅读回执。**

- 周报每周只往**同一个页面**上发一个新版本：`proposal_id` 不变 ⇒ 默认链接不变，同事收藏一次就够。
- 发出去之后发布者能看到**谁打开过、看到哪一节、停了多久**：MCP `list_sessions`（谁、哪台设备、几点）、
  `get_session_timeline`（一次阅读逐节的轨迹）、`get_engagement_summary`（整份汇总）。「看到哪一节」的锚点
  就是页里每个 `<section>` 的 `data-track-section`，与目录锚点（`manifest.sections[].anchor`）同一个 id。
- **没有外链**，末尾一小段脚本只做柱状图进场与点按提示（不跑时图照常完整）；manifest 不写 `render`（`inline` 已对新版本停用，#8655），节的跟踪由平台注入的 SDK 按 `data-track-section` 自动做。
- 按 `core/space/examples/QUALITY.md` 重做（EPIC #9032 C1 打样）：记忆点是按真实日期比例画的上市时间线（标出今天、离上市 N 天），手机上改竖排。

## 改哪里变成我的

| 位置 | 改什么 |
|---|---|
| `index.html` 顶部 `<header>` | 周数、项目名、日期、发布人、一句话结论 |
| 里程碑轨道 `.stops` | 每站一个 `<li>`：已完成加 `done`、本周加 `now`、终点加 `launch`；进度线的填充比例在 `.stops::before` 的两处 `40%`（= 本周那站前面的段数 ÷ 总段数）；「还有 N 天」 |
| 页头 `.org` / `.facts` | 公司抬头（内联 SVG 标志）、文档编号、报告周期 / 报告人 / 报送 / 抄送 |
| 时间线 `.tl` | 两段内联 SVG（`.tl.wide` 电脑 / `.tl.narrow` 手机），按真实日期比例：坐标 = 起点 + 距 8/17 的天数 × 每天的像素（电脑 11.4px、手机 7.2px），改日期后两段都要重算 |
| 「需要您确认」（文末） | 一张原生 `<form class="confirm" action="./_data/confirmations">`：每件事一个 `fieldset.q`（标题、截止日、一句背景、两个短标签单选），单选的 `name` 就是表里的列名（`legal` / `price`），加一个备注 `note`、一个发送按钮。末尾脚本把它改成页内提交并显示「已发送」 |
| 包装图 `packaging.webp` | 换成你们这周的关键成果图（WebP，≤ 300 KB）；不需要就删掉 `figure.shot` |
| 页脚 | 平台标志与名称（与 `core/space/src/theme.ts` 的 `MARK_SVG` / `PUBLIC_NAME` 逐字一致，测试咬着）+ 一句这份模板的适用场景；发自己的周报时整段删掉 |
| 「本周完成」「下周安排」 | 整段换掉；两张清单共用 `.rows` 三列网格，`<span class="who">` 是负责人 |
| 「数字」 | 四格 `.fig`；柱状图是两段内联 SVG（`.chart.wide` / `.chart.narrow`，各一套坐标、字号 1:1），每根柱子一个 `<g class="b">` 带当周明细 `.tip`；末尾脚本只管进场动画与点按，改数字要两段都改，`aria-label` 同步 |
| `manifest.json` | `title` / `share.title` / `share.desc`（微信卡片上的字）；节增减时 `sections` 与页里的 `id` / `data-track-section` 三处同改 |

不要动的：每节的 `id` 与 `data-track-section` 必须相等且与 `sections[].anchor` 一致，
否则目录点了不跳、回执里那一节没名字（`src/upload/example-deck.test.ts` 咬着）。

## 数据表

文末「需要您确认」的表单写进数据表 `confirmations`（列 `legal` / `price` / `note`，一次提交一行，`append_open=true`）。新工作区种入时由 `SAMPLE_DATA_TABLES` 建好；自己发的时候先建表：

```
set_data  proposal_id: <id>  table: "confirmations"  columns: ["legal","price","note"]  rows: []  append_open: true  revision: 0
```

领导回复后用 `list_data_rows table=confirmations` 读回。本地 `space-cli serve` 会把提交写进包里的 `_data/confirmations.json`，试完记得改回 `[]`。

## 怎么发出去

单文件，最省事的是 MCP `publish_file`（不需要终端）：

```
publish_file
  filename: "index.html"
  content: <index.html 全文>
  title: "新品上市项目组周报 第 38 周"
  manifest: <manifest.json 的内容，去掉 entry>
  hold: true            # 先看预览，确认后 publish_version
```

回执里有 `proposal_id`。**下周更新**：同一份内容换掉，再调一次 `publish_file`，这次传 `proposal_id` 而不是 `title` —— 链接不变。

有终端时用 CLI（可以整目录推）：

```bash
export SPACE_TOKEN=sk-space-…            # MCP create_cli_token
node core/space/cli/space-cli.mjs push core/space/examples/sample-weekly-report \
  --proposal <proposal_id> --manifest core/space/examples/sample-weekly-report/manifest.json \
  --note "第 38 周" --hold
```

给谁看：默认仅自己可见；发给同事用 `set_visibility`（`passcode` 口令可看，或 `public`）。

## 素材

- `packaging.webp`：生成图，品牌「栀夏」与公司「青屿饮品」均为虚构。
- `thumb.webp`：画廊缩略图，由 `examples/verify-shots.mjs --write-thumb` 从成品截出，不进发布包。

## 纪律

- 回执说的是**设备与页面行为**，不是人名；别把「某人没看」写进周报里当事实。
- 数字是示例，发之前整段换掉；页脚那句「示例内容，均为虚构」删掉。
