houguyin-ch1-landscape.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. // 江中猴菇饮 · Ch1 胃病人群全景(3 子章)
  2. // 1.1 2.5亿胃病人群 · 5级症状谱 × 产品对应
  3. // 1.2 产品竞争格局 · 100亿市场拆解 × 代表品牌
  4. // 1.3 用户决策路径 · 从症状到产品选择的真实链路
  5. const HGY = require('./houguyin-analyze.js');
  6. const C = require('./houguyin-components.js');
  7. const { BRAND, esc, renderVocCard, renderVocGrid, renderInsightHero, renderDecisionList, renderTheoryBox, renderTagCloud, renderStatStrip, renderBarChart, renderMatrix2x2, renderSectionHead } = C;
  8. // ================================================================
  9. // 1.1 · 2.5亿胃病人群 · 5级症状谱 × 产品对应
  10. // ================================================================
  11. function renderSub1_1(ctx) {
  12. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  13. const items = data.items || [];
  14. // VOC 证据:各层用户的真实声音
  15. const ppiVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '奥美拉唑', top: 2, seed: 3 });
  16. const tcmVoc = HGY.getEvidence(items, { hypothesis: 'H3', product: '三九胃泰', top: 2, seed: 7 });
  17. const foodVoc = HGY.getEvidence(items, { hypothesis: 'H1', product: '猴姑米稀', top: 2, seed: 11 });
  18. const allVoc = [...ppiVoc, ...tcmVoc, ...foodVoc].filter(Boolean).slice(0, 6);
  19. const fallback = HGY.getEvidence(items, { hypothesis: 'H3', top: 6, seed: 19 });
  20. const finalVoc = allVoc.length >= 4 ? allVoc : fallback;
  21. // 5级症状谱
  22. const layers = [
  23. { level: 5, severity: '危重', color: '#C62828', symptoms: '胃溃疡出血/穿孔、HP 三联治疗、胃癌术后',
  24. products: '处方 PPI 静脉 + 三联/四联疗法 + 手术', users: '~500万', behavior: '必须看医生,无自主选择' },
  25. { level: 4, severity: '重度', color: '#E53935', symptoms: '反流性食管炎、糜烂性胃炎、持续性胃痛',
  26. products: '处方 PPI(艾司奥美拉唑)/ 莫沙必利 / 铋剂', users: '~2000万', behavior: '医生开什么吃什么' },
  27. { level: 3, severity: '中度', color: BRAND.WARM_ORANGE, symptoms: '慢性浅表性胃炎、胃酸过多、消化不良反复',
  28. products: 'OTC PPI(奥美拉唑)/ 达喜(铝碳酸镁)/ 三九胃泰 / 摩罗丹', users: '~8000万', behavior: '自己买药,反复吃,焦虑副作用' },
  29. { level: 2, severity: '轻度', color: BRAND.HOUGU_TAN, symptoms: '偶发胃胀、饭后不适、应酬后胃难受',
  30. products: '健胃消食片 / 吗丁啉 / 山楂丸 / 食疗偏方', users: '~1亿', behavior: '偶尔吃,不当回事' },
  31. { level: 1, severity: '亚健康', color: BRAND.SAGE, symptoms: '无明显症状但饮食不规律/压力大/熬夜多',
  32. products: '几乎无产品(米稀/酸奶/养胃粥)', users: '~5000万+', behavior: '知道该养但没行动' },
  33. ];
  34. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  35. <div class="section-inner">
  36. ${renderSectionHead({
  37. eyebrow: `${c.num}.${subIdx} · 胃病人群全景`,
  38. title: '<span style="color:' + BRAND.TECH_BLUE + ';">2.5 亿</span>胃病人群 · 5 级症状谱 × 产品对应',
  39. subtitle: '以整个胃病人群为目标,按病症<strong>由重到轻</strong>分 5 级——每一级用户现在在用什么产品,行为模式是什么。',
  40. color: BRAND.TECH_BLUE,
  41. })}
  42. <div style="margin-top:24px; display:flex; flex-direction:column; gap:0;">
  43. ${layers.map((l, i) => `
  44. <div style="display:grid; grid-template-columns:80px 1.2fr 1.4fr 100px 1fr; gap:0; align-items:stretch; border-bottom:${i < layers.length - 1 ? '1px solid var(--border)' : 'none'}; ${i === 0 ? 'border-top:2px solid var(--border);' : ''}">
  45. <div style="padding:16px 12px; background:${l.color}12; display:flex; flex-direction:column; align-items:center; justify-content:center; border-left:4px solid ${l.color};">
  46. <div style="font-family:var(--font-head); font-weight:900; font-size:1.8rem; color:${l.color}; line-height:1;">${l.level}</div>
  47. <div style="font-size:0.72rem; color:${l.color}; font-weight:700; margin-top:4px;">${esc(l.severity)}</div>
  48. </div>
  49. <div style="padding:14px 16px;">
  50. <div class="text-mono text-xs" style="color:var(--text-3); letter-spacing:0.12em; margin-bottom:4px;">典型症状</div>
  51. <div style="color:var(--text-1); font-size:0.88rem; line-height:1.6; font-weight:600;">${esc(l.symptoms)}</div>
  52. </div>
  53. <div style="padding:14px 16px; background:var(--bg-1);">
  54. <div class="text-mono text-xs" style="color:var(--text-3); letter-spacing:0.12em; margin-bottom:4px;">当前用什么产品</div>
  55. <div style="color:var(--text-1); font-size:0.88rem; line-height:1.6;">${esc(l.products)}</div>
  56. </div>
  57. <div style="padding:14px 8px; display:flex; align-items:center; justify-content:center;">
  58. <div style="color:${l.color}; font-family:var(--font-head); font-weight:800; font-size:1.1rem;">${esc(l.users)}</div>
  59. </div>
  60. <div style="padding:14px 16px;">
  61. <div class="text-mono text-xs" style="color:var(--text-3); letter-spacing:0.12em; margin-bottom:4px;">用户行为</div>
  62. <div style="color:var(--text-2); font-size:0.84rem; line-height:1.6; font-style:italic;">${esc(l.behavior)}</div>
  63. </div>
  64. </div>`).join('')}
  65. </div>
  66. <div style="margin-top:24px;">
  67. <div class="text-mono text-xs" style="color:${BRAND.TECH_BLUE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 各层用户的真实声音</div>
  68. ${renderVocGrid(finalVoc, { accent: BRAND.TECH_BLUE, columns: 3 })}
  69. </div>
  70. ${renderInsightHero({
  71. eyebrow: 'POPULATION MAP · 人群地图',
  72. color: BRAND.TECH_BLUE,
  73. title: `2.5 亿胃病人群中,<strong style="color:${BRAND.WARM_ORANGE};">第 3 层(中度 · ~8000 万)</strong>和<strong style="color:${BRAND.HOUGU_TAN};">第 2 层(轻度 · ~1 亿)</strong>是最大的两个池——也是<strong>产品选择最混乱、用户最焦虑</strong>的两层。`,
  74. subtitle: `第 5/4 层被处方药锁定,第 1 层还没有行动意愿。<strong style="color:${BRAND.JIANG_GREEN};">猴菇饮的战场在第 2-3 层</strong>——约 1.8 亿活跃用户,他们正在自行购买各类产品却普遍不满。`,
  75. })}
  76. ${renderDecisionList([
  77. '<strong>目标人群锁定</strong>:第 2 层(轻度 ~1 亿)+ 第 3 层(中度 ~8000 万)= 1.8 亿活跃可触达用户',
  78. '<strong>第 5/4 层排除</strong>:危重/重度用户被处方药锁定,不是功能食品/OTC 的战场',
  79. '<strong>第 1 层培育</strong>:亚健康人群作为长期增量,但短期无购买行为,不作为首发目标',
  80. '<strong>关键识别</strong>:第 3 层用户"自己买药反复吃"——已有付费行为和品类认知,是最佳切入层',
  81. ], { title: '人群分层决策 · 锁定第 2-3 层', accent: BRAND.TECH_BLUE, columns: 2 })}
  82. </div>
  83. </section>`;
  84. }
  85. // ================================================================
  86. // 1.2 · 产品竞争格局 · 100亿市场拆解 × 代表品牌
  87. // ================================================================
  88. function renderSub1_2(ctx) {
  89. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  90. const items = data.items || [];
  91. const segments = [
  92. { key: 'PPI', label: '拉唑类 PPI', scale: '~70亿', share: '70%', color: BRAND.TECH_BLUE,
  93. brands: '奥美拉唑 / 雷贝拉唑 / 兰索拉唑 / 艾司奥美拉唑',
  94. userMind: '效果立竿见影、医生首推、长期吃焦虑副作用',
  95. vocQuote: '"奥美拉唑一吃就好 但一停就反弹 感觉被绑架了"' },
  96. { key: 'TCM', label: '中成药', scale: '~22亿', share: '22%', color: BRAND.PURPLE,
  97. brands: '三九胃泰 / 摩罗丹 / 康复新液 / 气滞胃痛颗粒',
  98. userMind: '老一辈信任、年轻人不选、口感差但觉得温和',
  99. vocQuote: '"三九胃泰颗粒冲出来苦涩 老人不爱喝 坚持两天就放弃"' },
  100. { key: 'PROTECT', label: '胃黏膜保护剂', scale: '~6亿', share: '6%', color: BRAND.WARM_ORANGE,
  101. brands: '达喜(铝碳酸镁)/ 硫糖铝 / 替普瑞酮',
  102. userMind: '胃酸过多就嚼一片、对症快但短效、不解决根本',
  103. vocQuote: '"达喜嚼完确实舒服 但过几个小时又开始烧心 只是救急"' },
  104. { key: 'FOOD', label: '功能食品', scale: '~2亿', share: '2%', color: BRAND.HOUGU_TAN,
  105. brands: '猴菇米稀(7.5亿独大)/ 同名猴菇饮 / 养胃茶',
  106. userMind: '温和无压力但效果存疑、场景单一、同质化严重',
  107. vocQuote: '"米稀当早餐挺好 但说实话不知道养胃有没有效 吃了个安慰"' },
  108. ];
  109. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  110. <div class="section-inner">
  111. ${renderSectionHead({
  112. eyebrow: `${c.num}.${subIdx} · 产品竞争格局`,
  113. title: '<span style="color:' + BRAND.TECH_BLUE + ';">100 亿</span> OTC 胃药市场 · 4 大品类 × 代表品牌',
  114. subtitle: '把百亿胃药市场按品类拆解:每类的代表品牌、市场规模、用户心智和典型 VOC。',
  115. color: BRAND.TECH_BLUE,
  116. })}
  117. <div style="margin-top:24px; display:flex; flex-direction:column; gap:16px;">
  118. ${segments.map((s) => `
  119. <div style="padding:22px 26px; background:var(--bg-1); border:1px solid var(--border); border-left:5px solid ${s.color}; border-radius:var(--radius-md); display:grid; grid-template-columns:200px 1fr 1fr; gap:20px; align-items:start;">
  120. <div>
  121. <div class="text-mono text-xs" style="color:${s.color}; letter-spacing:0.18em; margin-bottom:6px; font-weight:700;">${s.key} · ${s.share}</div>
  122. <div style="color:var(--text-1); font-size:1.14rem; font-weight:800;">${esc(s.label)}</div>
  123. <div style="color:${s.color}; font-family:var(--font-head); font-weight:900; font-size:1.6rem; margin-top:4px;">${esc(s.scale)}</div>
  124. <div style="color:var(--text-2); font-size:0.78rem; margin-top:8px; line-height:1.5;">${esc(s.brands)}</div>
  125. </div>
  126. <div>
  127. <div class="text-mono text-xs" style="color:var(--text-3); letter-spacing:0.12em; margin-bottom:6px;">用户心智</div>
  128. <div style="color:var(--text-1); font-size:0.9rem; line-height:1.65;">${esc(s.userMind)}</div>
  129. </div>
  130. <div style="padding:12px 16px; background:${s.color}08; border-left:3px solid ${s.color}30; border-radius:4px;">
  131. <div class="text-mono text-xs" style="color:${s.color}; letter-spacing:0.12em; margin-bottom:6px;">典型 VOC</div>
  132. <div style="color:var(--text-1); font-size:0.86rem; line-height:1.6; font-style:italic;">${esc(s.vocQuote)}</div>
  133. </div>
  134. </div>`).join('')}
  135. </div>
  136. ${renderBarChart([
  137. { label: '拉唑类 PPI', value: 70, color: BRAND.TECH_BLUE },
  138. { label: '中成药', value: 22, color: BRAND.PURPLE },
  139. { label: '胃黏膜保护剂', value: 6, color: BRAND.WARM_ORANGE },
  140. { label: '功能食品', value: 2, color: BRAND.HOUGU_TAN },
  141. ], { title: '100 亿 OTC 胃药市场 · 品类份额(亿元)', accent: BRAND.TECH_BLUE, unit: '亿' })}
  142. ${renderInsightHero({
  143. eyebrow: 'MARKET STRUCTURE · 市场结构',
  144. color: BRAND.TECH_BLUE,
  145. title: `PPI 独占 <strong style="color:${BRAND.TECH_BLUE};">70%</strong> 但用户焦虑严重;中成药 <strong style="color:${BRAND.PURPLE};">22%</strong> 但年轻代际断层;功能食品仅 <strong style="color:${BRAND.HOUGU_TAN};">2%</strong> 但品类天花板是身份而非需求。`,
  146. subtitle: `<strong style="color:${BRAND.JIANG_GREEN};">猴菇饮 OTC 的机会</strong>不在与 PPI 抢治疗,而在于填补<strong>"PPI 用户想降级 + 中成药用户想升级体验 + 功能食品用户想升级信任"</strong>这三条线的交汇空白。`,
  147. })}
  148. ${renderDecisionList([
  149. '<strong>不对标 PPI</strong>:不打"替代拉唑"——规避医疗宣称风险,对标的是"PPI 之外的日常维持"',
  150. '<strong>不对标中成药疗效</strong>:不打"比胃泰更有效"——对标的是"比胃泰更好喝更便捷"',
  151. '<strong>对标功能食品的升级版</strong>:从食品池(2 亿)跳进 OTC 池(100 亿)——身份升级即市场扩容',
  152. '<strong>定价锚定</strong>:日均 12-15 元,高于食品(1-3 元)、低于药品(3-8 元/日),占住中间带',
  153. ], { title: '竞争格局决策 · 4 条品类对标原则', accent: BRAND.TECH_BLUE, columns: 2 })}
  154. </div>
  155. </section>`;
  156. }
  157. // ================================================================
  158. // 1.3 · 用户决策路径 · 从症状到产品选择的真实链路
  159. // ================================================================
  160. function renderSub1_3(ctx) {
  161. const { chapter: c, subIdx, slideNum, slideTotal, data } = ctx;
  162. const items = data.items || [];
  163. const pathVoc = HGY.getEvidence(items, { hypothesis: 'H4', top: 4, seed: 23 });
  164. const searchVoc = HGY.getEvidence(items, { hypothesis: 'H3', tag: '寻找替代', top: 3, seed: 29 });
  165. const combinedVoc = [...pathVoc, ...searchVoc].filter(Boolean).slice(0, 6);
  166. const finalVoc = combinedVoc.length >= 4 ? combinedVoc : HGY.getEvidence(items, { hypothesis: 'H3', top: 6, seed: 31 });
  167. // 4 条用户路径
  168. const paths = [
  169. { id: 'P1', name: '急性发作路径', color: '#C62828', icon: '🚨',
  170. steps: ['胃痛/烧心/反酸发作', '药店/急诊', 'PPI(奥美拉唑)', '症状缓解', '反复发作 → 长期服药'],
  171. endpoint: '被 PPI 锁定,想减量但不敢', opportunity: '猴菇饮作为"PPI 减量期的温和伴侣"' },
  172. { id: 'P2', name: '慢性管理路径', color: BRAND.PURPLE, icon: '🔄',
  173. steps: ['长期胃不适', '医院检查 → 慢性胃炎', '中成药(胃泰/摩罗丹)', '口感差 → 停药', '反复 → 换药'],
  174. endpoint: '在中成药和西药间来回折返', opportunity: '猴菇饮作为"不苦不涩的日常替代"' },
  175. { id: 'P3', name: '自我养护路径', color: BRAND.HOUGU_TAN, icon: '🌿',
  176. steps: ['偶尔胃不舒服', '搜索"养胃食物"', '试米稀/养胃粥/姜茶', '效果不确定', '放弃或继续"信仰充值"'],
  177. endpoint: '有需求但无信任产品', opportunity: '猴菇饮 OTC 身份 = 信任锚点' },
  178. { id: 'P4', name: '忽视型路径', color: BRAND.SAGE, icon: '😴',
  179. steps: ['饮食不规律/压力大', '偶有不适但忽视', '无任何产品介入', '直到症状加重才就医'],
  180. endpoint: '完全空白,等待被教育', opportunity: '送礼/场景触发 → 首次试饮' },
  181. ];
  182. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  183. <div class="section-inner">
  184. ${renderSectionHead({
  185. eyebrow: `${c.num}.${subIdx} · 用户决策路径`,
  186. title: '从<span style="color:' + BRAND.CORAL + ';">胃不舒服</span>到<span style="color:' + BRAND.TECH_BLUE + ';">选什么产品</span> · 4 条真实路径',
  187. subtitle: '胃病用户不是"看到就买"——他们有<strong>复杂的决策链路</strong>:从症状发生到信息搜索到产品选择再到复购/流失,每个节点都是猴菇饮的<strong>介入机会</strong>。',
  188. color: BRAND.TECH_BLUE,
  189. })}
  190. <div style="margin-top:24px; display:flex; flex-direction:column; gap:18px;">
  191. ${paths.map((p) => `
  192. <div style="padding:20px 24px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${p.color}; border-radius:var(--radius-md);">
  193. <div style="display:flex; align-items:center; gap:12px; margin-bottom:14px;">
  194. <span style="font-size:1.4rem;">${p.icon}</span>
  195. <div>
  196. <div class="text-mono text-xs" style="color:${p.color}; letter-spacing:0.18em; font-weight:700;">${p.id} · 决策路径</div>
  197. <div style="color:var(--text-1); font-size:1.06rem; font-weight:700;">${esc(p.name)}</div>
  198. </div>
  199. </div>
  200. <div style="display:flex; align-items:center; gap:0; margin-bottom:14px; flex-wrap:wrap;">
  201. ${p.steps.map((s, i) => `
  202. <div style="padding:6px 14px; background:${p.color}${i === p.steps.length - 1 ? '18' : '0A'}; color:${i === p.steps.length - 1 ? p.color : 'var(--text-1)'}; border-radius:16px; font-size:0.82rem; font-weight:${i === p.steps.length - 1 ? '700' : '500'}; white-space:nowrap;">${esc(s)}</div>
  203. ${i < p.steps.length - 1 ? '<div style="color:var(--text-3); font-size:0.9rem; margin:0 4px;">→</div>' : ''}
  204. `).join('')}
  205. </div>
  206. <div style="display:grid; grid-template-columns:1fr 1fr; gap:16px;">
  207. <div style="padding:10px 14px; background:${BRAND.CORAL}08; border-left:3px solid ${BRAND.CORAL}30; border-radius:4px;">
  208. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.12em; margin-bottom:4px;">终点状态</div>
  209. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.6;">${esc(p.endpoint)}</div>
  210. </div>
  211. <div style="padding:10px 14px; background:${BRAND.JIANG_GREEN}08; border-left:3px solid ${BRAND.JIANG_GREEN}30; border-radius:4px;">
  212. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.12em; margin-bottom:4px;">猴菇饮介入机会</div>
  213. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.6;">${esc(p.opportunity)}</div>
  214. </div>
  215. </div>
  216. </div>`).join('')}
  217. </div>
  218. <div style="margin-top:24px;">
  219. <div class="text-mono text-xs" style="color:${BRAND.TECH_BLUE}; letter-spacing:0.18em; margin-bottom:14px; font-weight:700;">VOC 证据 · 用户决策路径中的真实声音</div>
  220. ${renderVocGrid(finalVoc, { accent: BRAND.TECH_BLUE, columns: 3 })}
  221. </div>
  222. ${renderInsightHero({
  223. eyebrow: 'PATH INSIGHT · 路径洞察',
  224. color: BRAND.JIANG_GREEN,
  225. title: `4 条路径的共同终点 = <strong style="color:${BRAND.CORAL};">用户不满意但没有更好的选择</strong>。`,
  226. subtitle: `P1 被 PPI 绑架想逃、P2 在中西药间折返、P3 信仰充值无信任锚、P4 完全空白。<strong style="color:${BRAND.JIANG_GREEN};">猴菇饮在每条路径上都有介入点</strong>——但<strong>优先级不同</strong>:P1(PPI 减量)和 P3(养护信任)是最高优先级切入口。`,
  227. })}
  228. ${renderDecisionList([
  229. '<strong>首发切入</strong>:P1(PPI 减量人群)+ P3(养护搜索人群)= 两条最短转化路径',
  230. '<strong>二期扩展</strong>:P2(中成药折返人群)——用"不苦不涩即饮"拦截中成药流失用户',
  231. '<strong>长期培育</strong>:P4(忽视型)——通过送礼/场景触发完成首次试饮教育',
  232. '<strong>渠道匹配</strong>:P1 → 胃消化科周边药店;P3 → 电商/小红书搜索拦截;P2 → 药店货架旁推荐',
  233. '<strong>话术匹配</strong>:P1 "减量期温和伴侣";P3 "有 OTC 身份的养胃饮";P2 "不苦不涩开盖即饮"',
  234. '<strong>KPI</strong>:上市 12 个月各路径用户"知晓率"P1>30% / P3>20% / P2>15%',
  235. ], { title: '路径策略 · 分路径介入 6 条动作', accent: BRAND.JIANG_GREEN, columns: 2 })}
  236. </div>
  237. </section>`;
  238. }
  239. module.exports = {
  240. 'landscape-1': renderSub1_1,
  241. 'landscape-2': renderSub1_2,
  242. 'landscape-3': renderSub1_3,
  243. };