houguyin-v2-ch4-fit.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. // 江中猴菇饮 v2 · Ch4 产品适配(4 子章)
  2. // 4.1 产品力实事求是 · 猴头菇的真实效用边界
  3. // 4.2 米稀成功归因 × 可迁移因子 vs 饼干失败红线
  4. // 4.3 精准插入点 · 3大机会×无人地带坐标
  5. // 4.4 场景适配 · PPI伴侣/日常养护/药店推荐/礼品
  6. const HGY = require('./houguyin-analyze.js');
  7. const C = require('./houguyin-components.js');
  8. const { BRAND, esc, renderVocCard, renderSectionHead, renderMatrix2x2 } = C;
  9. // ================================================================
  10. // 4.1 · 产品力实事求是 · 猴头菇的真实效用边界
  11. // ================================================================
  12. function renderSub1(ctx) {
  13. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  14. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  15. <div class="section-inner">
  16. ${renderSectionHead({
  17. eyebrow: `${c.num}.${subIdx} · 产品适配`,
  18. title: '产品力实事求是 · <span style="color:' + BRAND.HOUGU_TAN + ';">效用边界</span>在哪',
  19. subtitle: '不吹不黑——猴头菇(Hericium erinaceus)的真实功效研究和产品实际体验。',
  20. color: BRAND.HOUGU_TAN,
  21. })}
  22. <div style="margin-top:24px; display:grid; grid-template-columns:1fr 1fr; gap:20px;">
  23. <!-- 能做的 -->
  24. <div style="padding:20px; background:${BRAND.JIANG_GREEN}05; border:1px solid ${BRAND.JIANG_GREEN}30; border-radius:var(--radius-md);">
  25. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.12em; margin-bottom:14px; font-weight:700;">✓ 产品能做到的</div>
  26. <div style="display:flex; flex-direction:column; gap:10px;">
  27. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.JIANG_GREEN}20;">
  28. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.JIANG_GREEN};">温热液体的即时舒适感</div>
  29. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">喝完胃里暖暖的 → 这是用户可感知的"体感"</div>
  30. </div>
  31. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.JIANG_GREEN}20;">
  32. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.JIANG_GREEN};">OTC 药品身份的信任背书</div>
  33. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">比食品可信、比处方温和 → 心理安慰有实际价值</div>
  34. </div>
  35. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.JIANG_GREEN}20;">
  36. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.JIANG_GREEN};">猴头菇多糖的胃黏膜保护(文献支持)</div>
  37. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">动物实验和部分临床证据支持,但效力弱于药品</div>
  38. </div>
  39. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.JIANG_GREEN}20;">
  40. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.JIANG_GREEN};">便携即饮的场景适应性</div>
  41. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">不需热水/碗/冲泡 → 办公室/差旅/应酬前后都能喝</div>
  42. </div>
  43. </div>
  44. </div>
  45. <!-- 不能做的 -->
  46. <div style="padding:20px; background:${BRAND.CORAL}05; border:1px solid ${BRAND.CORAL}30; border-radius:var(--radius-md);">
  47. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.12em; margin-bottom:14px; font-weight:700;">✗ 产品做不到的(红线)</div>
  48. <div style="display:flex; flex-direction:column; gap:10px;">
  49. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.CORAL}20;">
  50. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.CORAL};">替代 PPI 的抑酸效果</div>
  51. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">绝不能宣称"可以停药" → 法规红线 + 医学风险</div>
  52. </div>
  53. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.CORAL}20;">
  54. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.CORAL};">治愈胃溃疡/糜烂</div>
  55. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">这是药品领域 → 夸大宣称会毁品牌</div>
  56. </div>
  57. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.CORAL}20;">
  58. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.CORAL};">快速止痛/立竿见影</div>
  59. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">不是止痛药 → 不能和达喜/铝碳酸镁比即时效果</div>
  60. </div>
  61. <div style="padding:10px 14px; background:white; border-radius:var(--radius-sm); border:1px solid ${BRAND.CORAL}20;">
  62. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.CORAL};">显著可量化的疗效指标</div>
  63. <div style="font-size:0.78rem; color:var(--text-2); margin-top:4px;">"喝了一个月胃镜好转"——这个宣称做不到也不该做</div>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <div style="margin-top:16px; padding:14px 20px; background:${BRAND.PURPLE}08; border-left:4px solid ${BRAND.PURPLE}; border-radius:0 var(--radius-sm) var(--radius-sm) 0;">
  69. <div style="font-size:0.85rem; color:var(--text-1); line-height:1.7;">
  70. <strong style="color:${BRAND.PURPLE};">核心策略判断</strong>:猴菇饮的产品力不在"疗效",在<strong>"体验+信任+便捷"</strong>的组合。定位方向不应该是"治胃病",而应该是"养胃日常"。这决定了 Ch5 定位推导的方向。
  71. </div>
  72. </div>
  73. </div>
  74. </section>`;
  75. }
  76. // ================================================================
  77. // 4.2 · 米稀成功归因 × 可迁移因子 vs 饼干失败红线
  78. // ================================================================
  79. function renderSub2(ctx) {
  80. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  81. const items = data.items || [];
  82. const h1Voc = HGY.getEvidence(items, { hypothesis: 'H1', top: 3, seed: 47, contentMatch: /米稀|猴姑|养胃|胃|早餐|暖胃/i });
  83. const h2Voc = HGY.getEvidence(items, { hypothesis: 'H2', top: 3, seed: 53, contentMatch: /饼干|胃胀|胃酸|硬|难吃/i });
  84. const vocCards = [...h1Voc, ...h2Voc].filter(Boolean).slice(0, 4);
  85. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  86. <div class="section-inner">
  87. ${renderSectionHead({
  88. eyebrow: `${c.num}.${subIdx} · 产品适配`,
  89. title: '米稀 <span style="color:' + BRAND.JIANG_GREEN + ';">7.5亿成功</span> vs 饼干<span style="color:' + BRAND.CORAL + ';">失败</span>的教训',
  90. subtitle: '同样是"江中+猴头菇",一个年销7.5亿一个无人买。什么因子可以迁移到猴菇饮?',
  91. color: BRAND.HOUGU_TAN,
  92. })}
  93. <div style="margin-top:24px; display:grid; grid-template-columns:1fr 1fr; gap:20px;">
  94. <!-- 米稀成功因子 -->
  95. <div style="padding:20px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); border-top:4px solid ${BRAND.JIANG_GREEN};">
  96. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.12em; margin-bottom:14px; font-weight:700;">🍚 米稀 7.5 亿成功因子</div>
  97. <div style="display:flex; flex-direction:column; gap:8px;">
  98. ${[
  99. { factor: '早餐场景固定', transferable: true, note: '饮的场景更广(全天)' },
  100. { factor: '口感好/好喝', transferable: true, note: '液态同样好喝' },
  101. { factor: '猴头菇心智占位', transferable: true, note: '同品牌同原料' },
  102. { factor: '超市渠道铺货', transferable: false, note: '猴菇饮走药店渠道' },
  103. { factor: '代餐属性(饱腹)', transferable: false, note: '饮品无饱腹感' },
  104. { factor: '价格亲民(~5元/餐)', transferable: '部分', note: 'OTC 定价更高' },
  105. ].map(f => `
  106. <div style="display:grid; grid-template-columns:24px 1fr 1fr; gap:8px; align-items:center; padding:6px 10px; background:var(--bg-2); border-radius:var(--radius-sm);">
  107. <span style="font-size:0.85rem;">${f.transferable === true ? '✅' : f.transferable === '部分' ? '⚠️' : '❌'}</span>
  108. <span style="font-size:0.82rem; font-weight:600; color:var(--text-1);">${esc(f.factor)}</span>
  109. <span style="font-size:0.72rem; color:var(--text-3);">${esc(f.note)}</span>
  110. </div>`).join('')}
  111. </div>
  112. </div>
  113. <!-- 饼干失败教训 -->
  114. <div style="padding:20px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); border-top:4px solid ${BRAND.CORAL};">
  115. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.12em; margin-bottom:14px; font-weight:700;">🍪 饼干失败红线</div>
  116. <div style="display:flex; flex-direction:column; gap:8px;">
  117. ${[
  118. { lesson: '引发胃酸(产品反效果)', risk: '极高', avoid: '液态不会引发胃酸' },
  119. { lesson: '养胃宣称 vs 实际体验矛盾', risk: '高', avoid: '温热液体有即时舒适感' },
  120. { lesson: '饼干品类无"养护"联想', risk: '中', avoid: '饮品天然有养护联想' },
  121. { lesson: '价格太高(vs 普通饼干)', risk: '中', avoid: 'OTC 定位支撑溢价' },
  122. ].map(l => `
  123. <div style="padding:10px 14px; background:${BRAND.CORAL}05; border-left:3px solid ${BRAND.CORAL}; border-radius:0 var(--radius-sm) var(--radius-sm) 0;">
  124. <div style="font-weight:700; font-size:0.85rem; color:${BRAND.CORAL};">${esc(l.lesson)}</div>
  125. <div style="font-size:0.75rem; color:var(--text-2); margin-top:4px;">
  126. 风险: <span style="color:${BRAND.CORAL};">${l.risk}</span> · 猴菇饮规避: <span style="color:${BRAND.JIANG_GREEN};">${esc(l.avoid)}</span>
  127. </div>
  128. </div>`).join('')}
  129. </div>
  130. </div>
  131. </div>
  132. <div style="margin-top:16px; padding:14px 20px; background:${BRAND.HOUGU_TAN}08; border-left:4px solid ${BRAND.HOUGU_TAN}; border-radius:0 var(--radius-sm) var(--radius-sm) 0;">
  133. <div style="font-size:0.85rem; color:var(--text-1); line-height:1.7;">
  134. <strong style="color:${BRAND.HOUGU_TAN};">可迁移结论</strong>:米稀的 3 个核心成功因子(好喝+猴头菇心智+固定场景)中,前两个可直接迁移,第三个(场景)需要猴菇饮找到自己的"固定场景"——不是早餐,是什么?答案在 4.4。
  135. </div>
  136. </div>
  137. ${vocCards.length > 0 ? `
  138. <div style="margin-top:16px;">
  139. <div class="text-mono text-xs" style="color:var(--text-3); margin-bottom:8px;">VOC 原声 · 米稀/饼干用户</div>
  140. <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px;">
  141. ${vocCards.map(v => renderVocCard(v, { compact: true })).join('')}
  142. </div>
  143. </div>` : ''}
  144. </div>
  145. </section>`;
  146. }
  147. // ================================================================
  148. // 4.3 · 精准插入点 · 3大机会×无人地带坐标
  149. // ================================================================
  150. function renderSub3(ctx) {
  151. const { chapter: c, subIdx, slideNum, slideTotal } = ctx;
  152. const quadrants = {
  153. q1: { title: '高需求 × 低竞争 → 无人地带', color: BRAND.JIANG_GREEN,
  154. items: ['PPI 减量过渡伴侣', '年轻人养胃日常饮', '办公室/差旅即饮养护'],
  155. note: '猴菇饮的精准插入点' },
  156. q2: { title: '高需求 × 高竞争 → 红海', color: BRAND.CORAL,
  157. items: ['急性胃痛缓解', '慢性胃炎治疗', '早餐养胃(米稀)'],
  158. note: '避开' },
  159. q3: { title: '低需求 × 高竞争 → 陷阱', color: '#9E9E9E',
  160. items: ['胃药品类正面对抗', '保健品价格战'],
  161. note: '绝不进入' },
  162. q4: { title: '低需求 × 低竞争 → 验证', color: BRAND.WARM_ORANGE,
  163. items: ['"送胃"礼品装', '糖友无糖版', '夜宵族专属'],
  164. note: '小规模验证后决定' },
  165. };
  166. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  167. <div class="section-inner">
  168. ${renderSectionHead({
  169. eyebrow: `${c.num}.${subIdx} · 产品适配`,
  170. title: '精准插入点 · <span style="color:' + BRAND.JIANG_GREEN + ';">3 大机会</span> × 无人地带坐标',
  171. subtitle: '结合 Ch3 的未满足需求 + Ch4.1 的产品力边界,在"需求强度×竞争烈度"四象限中找到猴菇饮的精准位置。',
  172. color: BRAND.JIANG_GREEN,
  173. })}
  174. <div style="margin-top:24px;">
  175. ${renderMatrix2x2({
  176. xLabel: '竞争烈度', yLabel: '需求强度',
  177. xLow: '低竞争', xHigh: '高竞争',
  178. yLow: '低需求', yHigh: '高需求',
  179. quadrants,
  180. accent: BRAND.JIANG_GREEN,
  181. })}
  182. </div>
  183. <!-- 3大机会详述 -->
  184. <div style="margin-top:20px; display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px;">
  185. ${[
  186. { num: '①', title: 'PPI 减量伴侣', target: '中度→轻度过渡人群', size: '~3000万潜在用户',
  187. value: '"安全减量的温和支撑"', color: BRAND.TECH_BLUE },
  188. { num: '②', title: '年轻代际养护', target: '25-40岁轻度胃不适', size: '~5000万潜在用户',
  189. value: '"比中成药好喝/比食品可信"', color: BRAND.JIANG_GREEN },
  190. { num: '③', title: '全天即饮场景', target: '办公室/差旅/应酬后', size: '~4000万潜在用户',
  191. value: '"米稀到不了的场景"', color: BRAND.WARM_ORANGE },
  192. ].map(o => `
  193. <div style="padding:16px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); border-top:3px solid ${o.color};">
  194. <div style="font-family:var(--font-head); font-size:1.4rem; font-weight:900; color:${o.color};">${o.num}</div>
  195. <div style="font-weight:800; font-size:0.92rem; color:var(--text-1); margin-top:6px;">${esc(o.title)}</div>
  196. <div style="font-size:0.78rem; color:var(--text-2); margin-top:6px;">目标:${esc(o.target)}</div>
  197. <div style="font-size:0.78rem; color:var(--text-2);">规模:${esc(o.size)}</div>
  198. <div style="font-size:0.78rem; color:${o.color}; font-weight:700; margin-top:8px; font-style:italic;">"${esc(o.value)}"</div>
  199. </div>`).join('')}
  200. </div>
  201. </div>
  202. </section>`;
  203. }
  204. // ================================================================
  205. // 4.4 · 场景适配 · PPI伴侣/日常养护/药店推荐/礼品
  206. // ================================================================
  207. function renderSub4(ctx) {
  208. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  209. const items = data.items || [];
  210. const sceneVoc = HGY.getEvidence(items, { hypothesis: 'H5', top: 4, seed: 59, contentMatch: /养胃|胃|猴菇|饮|应酬|夜班|办公/i });
  211. const giftVoc = HGY.getEvidence(items, { hypothesis: 'H8', top: 2, seed: 61 });
  212. const vocCards = [...sceneVoc, ...giftVoc].filter(Boolean).slice(0, 4);
  213. const scenes = [
  214. { name: 'PPI 减量伴侣', when: '医生建议减量时', where: '家里/随身', trigger: '复诊后/自发想减药',
  215. script: '"在减药期间喝,温和养护胃黏膜"', score: 92, color: BRAND.TECH_BLUE },
  216. { name: '办公室日常养护', when: '工作日下午/加班', where: '办公桌', trigger: '胃不舒服/吃完外卖后',
  217. script: '"每天下午一瓶,养胃像喝水一样自然"', score: 88, color: BRAND.WARM_ORANGE },
  218. { name: '药店店员推荐', when: '顾客咨询胃药时', where: '药店', trigger: '买完胃药顺带推荐',
  219. script: '"吃药的同时搭配这个养护,减少对药的依赖"', score: 85, color: BRAND.JIANG_GREEN },
  220. { name: '"送胃"礼品', when: '节假日/探病', where: '走亲访友', trigger: '送礼需求+健康概念',
  221. script: '"送胃比送烟酒更有心意"', score: 75, color: BRAND.DEEP_AMBER },
  222. ];
  223. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  224. <div class="section-inner">
  225. ${renderSectionHead({
  226. eyebrow: `${c.num}.${subIdx} · 产品适配`,
  227. title: '场景适配 · <span style="color:' + BRAND.WARM_ORANGE + ';">4 大切入场景</span>',
  228. subtitle: '猴菇饮在什么时候、什么地方、被什么触发、用什么话术推荐给用户?',
  229. color: BRAND.WARM_ORANGE,
  230. })}
  231. <div style="margin-top:24px; display:flex; flex-direction:column; gap:12px;">
  232. ${scenes.map(s => `
  233. <div style="display:grid; grid-template-columns:160px 1fr 1fr 1fr 60px; gap:12px; align-items:center; padding:14px 16px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-sm); border-left:4px solid ${s.color};">
  234. <div>
  235. <div style="font-weight:800; font-size:0.9rem; color:${s.color};">${esc(s.name)}</div>
  236. </div>
  237. <div>
  238. <div style="font-size:0.68rem; color:var(--text-3);">时间 × 空间</div>
  239. <div style="font-size:0.78rem; color:var(--text-1);">${esc(s.when)} · ${esc(s.where)}</div>
  240. </div>
  241. <div>
  242. <div style="font-size:0.68rem; color:var(--text-3);">触发事件</div>
  243. <div style="font-size:0.78rem; color:var(--text-1);">${esc(s.trigger)}</div>
  244. </div>
  245. <div>
  246. <div style="font-size:0.68rem; color:var(--text-3);">话术</div>
  247. <div style="font-size:0.75rem; color:${s.color}; font-style:italic;">${esc(s.script)}</div>
  248. </div>
  249. <div style="text-align:center;">
  250. <div style="font-family:var(--font-head); font-size:1.2rem; font-weight:900; color:${s.color};">${s.score}</div>
  251. <div style="font-size:0.6rem; color:var(--text-3);">适配分</div>
  252. </div>
  253. </div>`).join('')}
  254. </div>
  255. <div style="margin-top:16px; padding:14px 20px; background:${BRAND.HOUGU_TAN}08; border-left:4px solid ${BRAND.HOUGU_TAN}; border-radius:0 var(--radius-sm) var(--radius-sm) 0;">
  256. <div style="font-size:0.85rem; color:var(--text-1); line-height:1.7;">
  257. <strong style="color:${BRAND.HOUGU_TAN};">场景优先级</strong>:Y1 聚焦"药店推荐"(已有渠道)+"PPI 伴侣"(高痛点),Y2 扩展"办公室日常"(高频次),Y3 开发"礼品装"(高客单价)。
  258. </div>
  259. </div>
  260. ${vocCards.length > 0 ? `
  261. <div style="margin-top:16px;">
  262. <div class="text-mono text-xs" style="color:var(--text-3); margin-bottom:8px;">VOC 原声 · 场景需求</div>
  263. <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px;">
  264. ${vocCards.map(v => renderVocCard(v, { compact: true })).join('')}
  265. </div>
  266. </div>` : ''}
  267. </div>
  268. </section>`;
  269. }
  270. module.exports = { renderSub1, renderSub2, renderSub3, renderSub4 };