houguyin-v2-ch6-action.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. // 江中猴菇饮 v2 · Ch6 行动蓝图(3 子章)
  2. // 6.1 P0 行动 · 产品/渠道/话术立即落地
  3. // 6.2 P1 验证 · 3个月内数据闭环
  4. // 6.3 数据缺口 × 下一轮采集计划
  5. const HGY = require('./houguyin-analyze.js');
  6. const C = require('./houguyin-components.js');
  7. const { BRAND, esc, renderSectionHead } = C;
  8. // ================================================================
  9. // 6.1 · P0 行动 · 产品/渠道/话术立即落地
  10. // ================================================================
  11. function renderSub1(ctx) {
  12. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  13. const actions = [
  14. { id: 'P0-1', action: '定位话术定稿', owner: '品牌部', deadline: '1 周',
  15. detail: '"中国第一款 OTC 养胃饮" → 包装/物料/店员话术统一', priority: 'P0', color: BRAND.CORAL },
  16. { id: 'P0-2', action: '药店渠道首批铺货', owner: '渠道部', deadline: '2 周',
  17. detail: '选 100 家药店试点,搭配"买胃药送猴菇饮体验装"', priority: 'P0', color: BRAND.CORAL },
  18. { id: 'P0-3', action: '店员推荐话术培训', owner: '销售部', deadline: '2 周',
  19. detail: '"顾客买奥美拉唑时,推荐搭配猴菇饮做减量伴侣"', priority: 'P0', color: BRAND.CORAL },
  20. { id: 'P0-4', action: 'SKU 规格确认', owner: '产品部', deadline: '1 周',
  21. detail: '单支装(药店试饮)+ 6 支装(日常)+ 12 支礼盒装', priority: 'P0', color: BRAND.CORAL },
  22. { id: 'P1-1', action: '电商详情页改版', owner: '电商部', deadline: '1 月',
  23. detail: '突出 OTC 身份 + 场景化卖点(办公室/差旅/减药期)', priority: 'P1', color: BRAND.WARM_ORANGE },
  24. { id: 'P1-2', action: '小红书种草测试', owner: '新媒体', deadline: '1 月',
  25. detail: '20 篇 KOC 笔记测试"OTC 养胃饮"认知接受度', priority: 'P1', color: BRAND.WARM_ORANGE },
  26. { id: 'P1-3', action: '"送胃"礼盒设计', owner: '设计部', deadline: '2 月',
  27. detail: '对标东阿阿胶礼品装,¥198-398 双规格', priority: 'P1', color: BRAND.WARM_ORANGE },
  28. { id: 'P1-4', action: '糖友无糖版可行性', owner: '研发部', deadline: '3 月',
  29. detail: '蔗糖替代方案 + 口感测试 + 成本评估', priority: 'P1', color: BRAND.WARM_ORANGE },
  30. ];
  31. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  32. <div class="section-inner">
  33. ${renderSectionHead({
  34. eyebrow: `${c.num}.${subIdx} · 行动蓝图`,
  35. title: 'P0 + P1 · <span style="color:' + BRAND.SAGE + ';">8 项行动</span>清单',
  36. subtitle: '从洞察到落地的最短路径。P0 = 2 周内必须启动,P1 = 3 个月内完成。',
  37. color: BRAND.SAGE,
  38. })}
  39. <div style="margin-top:24px;">
  40. <table style="width:100%; border-collapse:collapse; font-size:0.82rem;">
  41. <thead>
  42. <tr style="background:var(--bg-2);">
  43. <th style="padding:8px 10px; text-align:left; width:50px;">编号</th>
  44. <th style="padding:8px 10px; text-align:left;">行动项</th>
  45. <th style="padding:8px 10px; text-align:left; width:80px;">负责人</th>
  46. <th style="padding:8px 10px; text-align:left; width:60px;">期限</th>
  47. <th style="padding:8px 10px; text-align:left;">具体内容</th>
  48. <th style="padding:8px 10px; text-align:center; width:50px;">优先级</th>
  49. </tr>
  50. </thead>
  51. <tbody>
  52. ${actions.map(a => `
  53. <tr style="border-bottom:1px solid var(--border);">
  54. <td style="padding:8px 10px; font-weight:700; color:${a.color};">${a.id}</td>
  55. <td style="padding:8px 10px; font-weight:600; color:var(--text-1);">${esc(a.action)}</td>
  56. <td style="padding:8px 10px; color:var(--text-2);">${esc(a.owner)}</td>
  57. <td style="padding:8px 10px; color:var(--text-2);">${esc(a.deadline)}</td>
  58. <td style="padding:8px 10px; color:var(--text-2); font-size:0.78rem;">${esc(a.detail)}</td>
  59. <td style="padding:8px 10px; text-align:center;">
  60. <span style="padding:2px 8px; border-radius:10px; font-weight:700; font-size:0.72rem;
  61. background:${a.priority === 'P0' ? BRAND.CORAL + '15' : BRAND.WARM_ORANGE + '15'};
  62. color:${a.priority === 'P0' ? BRAND.CORAL : BRAND.WARM_ORANGE};">${a.priority}</span>
  63. </td>
  64. </tr>`).join('')}
  65. </tbody>
  66. </table>
  67. </div>
  68. </div>
  69. </section>`;
  70. }
  71. // ================================================================
  72. // 6.2 · P1 验证 · 3个月内数据闭环
  73. // ================================================================
  74. function renderSub2(ctx) {
  75. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  76. const milestones = [
  77. { month: 'M1', title: '渠道验证', metrics: ['100 家药店动销率 > 15%', '店员推荐转化率 > 8%', '试饮→购买转化 > 20%'],
  78. decision: '动销率 <10% → 调整话术/陈列;<5% → 重新评估渠道', color: BRAND.SAGE },
  79. { month: 'M2', title: '认知验证', metrics: ['小红书 20 篇 KOC 笔记互动率', '"OTC 养胃饮"搜索量变化', '电商详情页转化率 vs 旧版'],
  80. decision: '互动率 <2% → 调整内容角度;搜索量无变化 → 品类教育不够', color: BRAND.JIANG_GREEN },
  81. { month: 'M3', title: '数据复盘', metrics: ['累计 GMV vs 5000万/12 月度目标', '复购率(关键指标)', 'NPS 净推荐值'],
  82. decision: '复购率 <15% → 产品体验有问题;NPS <30 → 定位偏差', color: BRAND.TECH_BLUE },
  83. ];
  84. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  85. <div class="section-inner">
  86. ${renderSectionHead({
  87. eyebrow: `${c.num}.${subIdx} · 行动蓝图`,
  88. title: '3 个月验证 · <span style="color:' + BRAND.JIANG_GREEN + ';">数据闭环</span>',
  89. subtitle: '每个月有明确的验证指标和决策节点。不盲目扩张,用数据说话。',
  90. color: BRAND.JIANG_GREEN,
  91. })}
  92. <div style="margin-top:24px; display:flex; flex-direction:column; gap:16px;">
  93. ${milestones.map(m => `
  94. <div style="padding:20px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); border-left:5px solid ${m.color};">
  95. <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:12px;">
  96. <div>
  97. <span style="font-family:var(--font-head); font-size:1.3rem; font-weight:900; color:${m.color};">${m.month}</span>
  98. <span style="font-weight:700; font-size:0.95rem; color:var(--text-1); margin-left:10px;">${esc(m.title)}</span>
  99. </div>
  100. </div>
  101. <div style="display:grid; grid-template-columns:1fr 1fr; gap:12px;">
  102. <div>
  103. <div style="font-size:0.72rem; color:${m.color}; font-weight:700; margin-bottom:6px;">验证指标</div>
  104. <ul style="margin:0; padding-left:16px; font-size:0.82rem; color:var(--text-1); line-height:1.7;">
  105. ${m.metrics.map(metric => `<li>${esc(metric)}</li>`).join('')}
  106. </ul>
  107. </div>
  108. <div>
  109. <div style="font-size:0.72rem; color:${BRAND.WARM_ORANGE}; font-weight:700; margin-bottom:6px;">决策规则</div>
  110. <div style="font-size:0.8rem; color:var(--text-2); line-height:1.6;">${esc(m.decision)}</div>
  111. </div>
  112. </div>
  113. </div>`).join('')}
  114. </div>
  115. </div>
  116. </section>`;
  117. }
  118. // ================================================================
  119. // 6.3 · 数据缺口 × 下一轮采集计划
  120. // ================================================================
  121. function renderSub3(ctx) {
  122. const { chapter: c, subIdx, slideNum, slideTotal, meta } = ctx;
  123. const gaps = [
  124. { gap: '药店店员真实推荐行为', current: '无直接数据', needed: '20 家药店店员深访',
  125. impact: '决定店员话术培训方案', priority: '高', color: BRAND.CORAL },
  126. { gap: 'PPI 减量期用户真实体验', current: 'VOC 中间接提及', needed: '30 人深度访谈',
  127. impact: '验证"减量伴侣"场景是否成立', priority: '高', color: BRAND.CORAL },
  128. { gap: '猴菇饮口感/体验反馈', current: '产品未上市', needed: '100 人盲测',
  129. impact: '确认"好喝"是否成立', priority: '高', color: BRAND.CORAL },
  130. { gap: '糖友胃病人群规模', current: 'H7 假设未验证', needed: '医疗数据交叉分析',
  131. impact: '无糖版是否值得开发', priority: '中', color: BRAND.WARM_ORANGE },
  132. { gap: '礼品场景购买意愿', current: 'H8 假设/少量 VOC', needed: '礼品消费者调研',
  133. impact: '礼盒装定价/设计方向', priority: '中', color: BRAND.WARM_ORANGE },
  134. ];
  135. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  136. <div class="section-inner">
  137. ${renderSectionHead({
  138. eyebrow: `${c.num}.${subIdx} · 行动蓝图`,
  139. title: '数据缺口 × <span style="color:' + BRAND.WARM_ORANGE + ';">下一轮采集</span>计划',
  140. subtitle: '本报告基于 ${meta?.comments || "—"} 条 VOC。以下结论还需要补充数据来夯实。',
  141. color: BRAND.WARM_ORANGE,
  142. })}
  143. <div style="margin-top:24px;">
  144. <table style="width:100%; border-collapse:collapse; font-size:0.82rem;">
  145. <thead>
  146. <tr style="background:var(--bg-2);">
  147. <th style="padding:8px 10px; text-align:left;">数据缺口</th>
  148. <th style="padding:8px 10px; text-align:left;">当前状态</th>
  149. <th style="padding:8px 10px; text-align:left;">需要什么</th>
  150. <th style="padding:8px 10px; text-align:left;">影响决策</th>
  151. <th style="padding:8px 10px; text-align:center; width:60px;">优先级</th>
  152. </tr>
  153. </thead>
  154. <tbody>
  155. ${gaps.map(g => `
  156. <tr style="border-bottom:1px solid var(--border);">
  157. <td style="padding:8px 10px; font-weight:600; color:${g.color};">${esc(g.gap)}</td>
  158. <td style="padding:8px 10px; color:var(--text-3);">${esc(g.current)}</td>
  159. <td style="padding:8px 10px; color:var(--text-1);">${esc(g.needed)}</td>
  160. <td style="padding:8px 10px; color:var(--text-2);">${esc(g.impact)}</td>
  161. <td style="padding:8px 10px; text-align:center;">
  162. <span style="padding:2px 8px; border-radius:10px; font-weight:700; font-size:0.72rem;
  163. background:${g.priority === '高' ? BRAND.CORAL + '15' : BRAND.WARM_ORANGE + '15'};
  164. color:${g.priority === '高' ? BRAND.CORAL : BRAND.WARM_ORANGE};">${g.priority}</span>
  165. </td>
  166. </tr>`).join('')}
  167. </tbody>
  168. </table>
  169. </div>
  170. <!-- 总结 -->
  171. <div style="margin-top:20px; padding:16px 20px; background:${BRAND.JIANG_GREEN}08; border:2px solid ${BRAND.JIANG_GREEN}40; border-radius:var(--radius-md);">
  172. <div style="font-size:0.88rem; color:var(--text-1); line-height:1.7;">
  173. <strong style="color:${BRAND.JIANG_GREEN};">本报告的价值边界</strong>:基于 VOC 数据的洞察已经完成了<strong>"方向判断"</strong>——猴菇饮应该定位为"OTC 养胃饮",聚焦轻度胃不适+日常养护人群,通过药店渠道切入。但<strong>"定量验证"</strong>(口感盲测/店员行为/减量场景)需要下一阶段的实地调研来完成。
  174. </div>
  175. </div>
  176. </div>
  177. </section>`;
  178. }
  179. module.exports = { renderSub1, renderSub2, renderSub3 };