用途:渲染 + 质量交付 · 写完 8 章 JS 模块 + 生成 HTML 报告 + 审计 + 交付。 阶段:Phase 5(后半段)+ Phase 6 · Rendering + Quality Delivery 预计耗时:4-8 小时(章节)+ 1-2 小时(审计 + 交付) 输入:
<品类>-analyze.js可用 输出:
scripts/tools/<品类>-components.jsscripts/tools/<品类>-render.jsscripts/tools/<品类>-ch1-*.js...scripts/tools/<品类>-ch8-*.jsscripts/tools/gen-<品类>.jsscripts/tools/_audit-<品类>-voc.jsreports/<品类>-voc-insight-report.html
你是一位报告工程师 + UI 设计师 + 质量审计员。核心信念:
<品类>-components.js(BRAND 色板 + 10 个核心组件)<品类>-render.js(CHAPTERS 元信息 + Cover + Agenda + Divider + 装配)gen 预览,确保每子章都跑得过_audit-<品类>-voc.js 看红灯preview-reports.js 本地预览docs/<品类>/3.采集执行摘要.md 或 4.交付摘要.mdreports/<品类>-voc-insight-report.html参考三个案例的色板定位:
| 案例 | MAIN | 辅色 | tone 哲学 |
|---|---|---|---|
| 肝纯片 | #4A90E2 科技蓝 |
酒红 + 酒精金 | 理性 + 醒目 |
| 猴菇饮 | #B87333 温润铜 |
米白 + 暗绿 | 东方草本 |
| 乳酸菌儿童 | #8FD3B8 薄荷 + #FFB6A3 桃色 |
淡紫 + 亮黄 | 儿童友好 |
你的品类 → MAIN 主色要回答一个问题:
这个品类给用户的第一感觉是「紧张」「放松」「严肃」「温暖」「专业」?
从 templates/components.template.js 复制到 scripts/tools/<品类>-components.js,改 BRAND 色板。
10 个核心组件(不要改函数名,只改内容):
renderVocCard · VOC 证据卡renderSectionHead · 子章节 Hero(eyebrow + title + subtitle)renderStatStrip · KPI 数字条renderDecisionList · 落地决策列表renderInsightHero · 金句观点renderCompareTable · 对比表格renderMatrix2x2 · 无人地带四象限renderTheoryBox · KANO / JTBD 理论盒renderFindingCard · 发现洞察卡esc / fmtLikes · 工具从 templates/render.template.js 复制到 scripts/tools/<品类>-render.js,改:
CHAPTERS 元信息(按 2.VOC 深度思路.md 的 8 章 + 子章列表)SLIDE_RENDERERS require 列表每章先搭空壳(复制 templates/chapter.template.js),然后按子章填:
// 每子章必含 5 件套
function renderSub1(ctx) {
const { chapter, subIdx, sub, slideNum, slideTotal, data } = ctx;
const items = data.items || [];
// ① 查询 VOC 证据(按假设 / 关键词 / 情绪)
const voc = LA.getEvidence(items, { hypotheses: ['H1'], top: 4, seed: 7 });
// ② 渲染 HTML · 严格 5 件套
return `<section class="report-section" id="${chapter.key}-${subIdx}"
data-tone="${chapter.tone}" data-slide-num="${slideNum}/${slideTotal}">
<div class="section-inner">
${C.renderSectionHead({ eyebrow, title, subtitle })}
<!-- ≥ 3 张 VOC 卡 -->
<div class="grid" style="grid-template-columns:1fr 1fr; gap:14px;">
${voc.map((it) => C.renderVocCard(it)).join('')}
</div>
<!-- 1 个结构化组件(StatStrip / CompareTable / Matrix / TheoryBox ...) -->
${C.renderStatStrip([...])}
<!-- DecisionList 落地决策 -->
${C.renderDecisionList([...])}
</div>
</section>`;
}
执行顺序:Ch1 → gen 预览 → Ch2 → gen → ... → Ch8。不要一次写完 8 章再预览。
gen-<品类>.js 入口// scripts/tools/gen-<品类>.js
const fs = require('fs');
const path = require('path');
const LA = require('./<品类>-analyze.js');
const { buildHTML } = require('./<品类>-render.js');
const data = LA.loadMerged();
const html = buildHTML(data);
const out = path.resolve(__dirname, '..', '..', 'reports', `<品类>-voc-insight-report.html`);
fs.writeFileSync(out, html, 'utf8');
const kb = (fs.statSync(out).size / 1024).toFixed(1);
console.log(`✅ ${out} · ${kb} KB`);
每个子章都要自检:
<section class="report-section" id="<key>-<idx>" data-tone="..." data-slide-num="N/T">renderSectionHead 带 eyebrow + title(title 里至少 1 个 <strong> 强调)renderDecisionList 至少 4 条,每条带 P0/P1/P2/P3 优先级反例:只写文字没有 VOC 卡 → 审计会打回。
# 每写完 1 个章节,跑一次
node scripts/tools/gen-<品类>.js
# 看报告大小变化:
# Ch1 → ~220 KB
# Ch2 → ~280 KB
# Ch3 → ~340 KB
# ...
# Ch8 → ~460-500 KB
# 预览
node scripts/tools/preview-reports.js
# 打开 http://localhost:8787/<品类>-voc-insight-report.html
如果单章写完 KB 没涨或涨 < 20 KB,说明模块没被加载或空转 → 去查 SLIDE_RENDERERS 映射。
node scripts/tools/_audit-<品类>-voc.js
必过:
node scripts/tools/preview-reports.js
浏览器打开 http://localhost:8787,检查:
4.交付摘要.md(或 3.采集执行摘要.md 补完)用 templates/4.采集执行摘要.template.md 骨架,加三段:
交付物:
├── reports/<品类>-voc-insight-report.html # 主报告
├── docs/<品类>/
│ ├── 0.基础调研.md
│ ├── 1.场景的补充.md
│ ├── 2.VOC深度思路.md
│ ├── 3.采集矩阵.md
│ ├── 3.采集执行摘要.md (或 4.交付摘要.md)
│ └── raw/
│ ├── _merged.json
│ ├── comments-flat.jsonl
│ ├── audit.log
│ ├── xhs/<kw>.json ...
│ └── douyin/<kw>.json ...
└── scripts/tools/
├── <品类>-collect.js
├── <品类>-analyze.js
├── <品类>-components.js
├── <品类>-render.js
├── <品类>-ch1-*.js ~ <品类>-ch8-*.js
├── gen-<品类>.js
└── _audit-<品类>-voc.js
data-slide-num:导航 JS 不知道当前是第几页../05-phase5-analysis-rendering.md../06-phase6-quality-delivery.md../templates/components.template.js、../templates/render.template.js、../templates/chapter.template.js、../templates/audit.template.jse:\workspace\openclaw-voc-skill\scripts\tools\lactic-*.js(8 章儿童版全量)