liver-v2-ch4-scene.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. // ==============================================================================
  2. // 肝纯片 v2 · Ch4 场景×机会 · 四大独占场景
  3. // ==============================================================================
  4. // 4.1 场景#1 · 应酬解酒 × 液体应急
  5. // 4.2 场景#2 · 脂肪肝调理 × 日常养护
  6. // 4.3 场景#3 · 熬夜前后 × 便携快取
  7. // 4.4 场景#4 · 送长辈 × 孝心礼盒
  8. // ==============================================================================
  9. const LA = require('./liver-analyze.js');
  10. const C = require('./liver-components.js');
  11. const { BRAND, esc, renderSectionHead, renderVocCard, renderVocGrid,
  12. renderStatStrip, renderInsightHero, renderFindingCard, renderDecisionList, LIVER_CONTEXT_RE } = C;
  13. // 场景渲染通用模板
  14. function renderSceneSlide({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta, scene }) {
  15. const items = data?.items || [];
  16. // 双重过滤:场景 regex + 护肝上下文
  17. const matched = items.filter(it => {
  18. const txt = it.content || '';
  19. return scene.re.test(txt) && LIVER_CONTEXT_RE.test(txt);
  20. });
  21. const evidence = LA.getEvidence(matched, { top: 4, seed: 70 + subIdx, minChars: 15, contentMatch: scene.re });
  22. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  23. <div class="section-inner">
  24. ${renderSectionHead({
  25. eyebrow: `${c.num}.${subIdx} · ${scene.eyebrow}`,
  26. title: sub,
  27. subtitle: scene.subtitle,
  28. color: c.color,
  29. })}
  30. ${renderStatStrip([
  31. { num: matched.length, label: '场景相关 VOC', color: scene.color },
  32. { num: scene.tamLabel, label: 'TAM 规模', color: BRAND.TECH_BLUE },
  33. { num: scene.score + '分', label: '场景适配度', color: scene.score >= 85 ? BRAND.JIANG_GREEN : BRAND.WARM_ORANGE },
  34. ])}
  35. <div style="display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:24px;">
  36. <!-- 场景画像 -->
  37. <div style="padding:20px; background:${scene.color}08; border:1px solid ${scene.color}33; border-radius:var(--radius-md);">
  38. <div class="text-mono text-xs" style="color:${scene.color}; font-weight:700; margin-bottom:12px;">${scene.icon} 场景画像</div>
  39. <div style="color:var(--text-1); font-size:0.86rem; line-height:1.7;">
  40. <strong>人群</strong>:${esc(scene.persona)}<br/>
  41. <strong>触发时刻</strong>:${esc(scene.trigger)}<br/>
  42. <strong>核心需求</strong>:${esc(scene.need)}<br/>
  43. <strong>产品形态</strong>:${esc(scene.productForm)}<br/>
  44. <strong>定价区间</strong>:${esc(scene.priceRange)}
  45. </div>
  46. </div>
  47. <!-- 话术 -->
  48. <div style="padding:20px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:var(--radius-md);">
  49. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; font-weight:700; margin-bottom:12px;">💬 场景话术</div>
  50. <div style="color:var(--text-1); font-size:0.86rem; line-height:1.7;">
  51. <strong>药店</strong>:${esc(scene.talkPharm)}<br/>
  52. <strong>电商</strong>:${esc(scene.talkEcom)}<br/>
  53. <strong>种草</strong>:${esc(scene.talkSeed)}
  54. </div>
  55. </div>
  56. </div>
  57. ${evidence.length > 0 ? `
  58. <div style="margin-top:24px;">
  59. <div class="text-mono text-xs" style="color:${scene.color}; letter-spacing:0.15em; margin-bottom:14px; font-weight:700;">场景 VOC 原声</div>
  60. ${renderVocGrid(evidence, { columns: 2, accent: scene.color, compact: true })}
  61. </div>` : ''}
  62. ${renderFindingCard({
  63. icon: scene.icon,
  64. title: scene.finding,
  65. body: scene.findingBody,
  66. accent: scene.color,
  67. })}
  68. </div>
  69. </section>`;
  70. }
  71. // ============================================================
  72. // 4.1 应酬解酒
  73. // ============================================================
  74. function renderSub1(ctx) {
  75. return renderSceneSlide({ ...ctx, scene: {
  76. eyebrow: 'SCENE #1 · DRINKING',
  77. icon: '🍺',
  78. color: BRAND.WINE_RED,
  79. subtitle: '应酬解酒是声量最大的场景——但海王金樽已经把"解酒"做成了负面标签。',
  80. re: /应酬.*肝|酒局.*肝|喝酒.*肝|解酒|宿醉|酒后.*护|酒精肝|酒.*护肝|hangover.*liver/i,
  81. tamLabel: '~20亿',
  82. score: 90,
  83. persona: '30-45 岁男性·商务应酬/朋友聚餐·月均 2-4 次酒局',
  84. trigger: '酒局前/酒局后·宿醉第二天·体检发现酒精肝',
  85. need: '快速解酒·减轻宿醉·长期护肝',
  86. productForm: '液体/口服液(应急)+ 片剂(日常)',
  87. priceRange: '液体 ¥15-30/支 · 片剂 ¥128-198/盒',
  88. talkPharm: '"应酬多?这是藤茶做的天然护肝,比解酒糖靠谱"',
  89. talkEcom: '"千年藤茶·DMY 98%·酒局前后各一片"',
  90. talkSeed: '"老公应酬多,给他备了江中肝纯片,藤茶做的天然不伤胃"',
  91. finding: '应酬解酒场景:最肥但最危险',
  92. findingBody: `声量最大(抖音"醋真的解酒"2038 赞 = 土办法反向需求),但海王金樽已把"解酒"做成<strong style="color:${BRAND.CORAL};">智商税标签</strong>。肝纯片策略:<strong style="color:${BRAND.TENGCHA_GREEN};">不说"解酒",说"护肝"</strong>——从"解酒应急"升级到"应酬人群长期护肝"。`,
  93. }});
  94. }
  95. // ============================================================
  96. // 4.2 脂肪肝调理
  97. // ============================================================
  98. function renderSub2(ctx) {
  99. return renderSceneSlide({ ...ctx, scene: {
  100. eyebrow: 'SCENE #2 · FATTY LIVER',
  101. icon: '📊',
  102. color: BRAND.WARM_ORANGE,
  103. subtitle: '脂肪肝人群 2 亿+,体检后焦虑是最强购买触发器。',
  104. re: /脂肪肝|转氨酶|肝功|ALT|AST|谷丙|体检.*肝|B超.*肝/i,
  105. tamLabel: '~15亿',
  106. score: 88,
  107. persona: '25-50 岁·体检异常人群·BMI偏高·久坐办公',
  108. trigger: '体检报告"脂肪肝"/"转氨酶偏高"·医生嘱咐"注意肝"',
  109. need: '降转氨酶·逆转脂肪肝·日常养护·安全长期吃',
  110. productForm: '片剂(日常)· 28天/盒疗程装',
  111. priceRange: '¥128-168/盒(28天量)',
  112. talkPharm: '"体检转氨酶高?藤茶天然护肝,长期吃也安心"',
  113. talkEcom: '"脂肪肝不用慌·千年藤茶·日常养护从今天开始"',
  114. talkSeed: '"体检查出脂肪肝,医生说注意肝,同事推荐了这个藤茶护肝片"',
  115. finding: '脂肪肝场景:最稳定的日常养护市场',
  116. findingBody: `中国脂肪肝患者 <strong>2 亿+</strong>,年轻化趋势明显。这是一个<strong>长期复购场景</strong>——不像解酒是偶发需求。肝纯片在这个场景的核心卖点 = <strong style="color:${BRAND.TENGCHA_GREEN};">"天然安全·可以长期吃"</strong>(vs 易善复"不能长期吃"的焦虑)。`,
  117. }});
  118. }
  119. // ============================================================
  120. // 4.3 熬夜前后
  121. // ============================================================
  122. function renderSub3(ctx) {
  123. return renderSceneSlide({ ...ctx, scene: {
  124. eyebrow: 'SCENE #3 · LATE NIGHT',
  125. icon: '🌙',
  126. color: BRAND.PURPLE,
  127. subtitle: '打工人/学生的熬夜护肝焦虑——年轻化的增量市场。',
  128. re: /熬夜.*肝|通宵.*肝|打工人.*肝|加班.*肝|肝.*熬夜|护肝.*熬夜/i,
  129. tamLabel: '~8亿',
  130. score: 82,
  131. persona: '22-35 岁·打工人/互联网/学生·经常加班/通宵',
  132. trigger: '通宵加班后·看到"熬夜伤肝"科普·感觉身体发出信号',
  133. need: '便携随身·快速见效·年轻化不像药',
  134. productForm: '小包装便携片剂 · 办公桌/背包常备',
  135. priceRange: '¥68-98/小盒(14天量)',
  136. talkPharm: '"经常熬夜?备一盒藤茶护肝片,天然温和"',
  137. talkEcom: '"打工人护肝神器·千年藤茶·办公桌常备"',
  138. talkSeed: '"互联网人必备·熬夜后来一片·千年藤茶天然护肝"',
  139. finding: '熬夜场景:年轻化入口·品牌年轻化的关键',
  140. findingBody: `熬夜人群是<strong>最年轻的护肝用户</strong>(22-35 岁),也是<strong>社交媒体声量最高</strong>的群体。这个场景的价值不只是销量——更是<strong style="color:${BRAND.PURPLE};">品牌年轻化的入口</strong>。通过"打工人护肝"话题切入,建立年轻用户心智,再向"脂肪肝/送礼"场景延伸。`,
  141. }});
  142. }
  143. // ============================================================
  144. // 4.4 送长辈
  145. // ============================================================
  146. function renderSub4(ctx) {
  147. return renderSceneSlide({ ...ctx, scene: {
  148. eyebrow: 'SCENE #4 · GIFT',
  149. icon: '🎁',
  150. color: BRAND.GOLD,
  151. subtitle: '护肝品类的"送礼"场景几乎空白——对标东阿阿胶"送气血"的成功。',
  152. re: /送.*护肝|护肝.*礼|送.*肝片|礼盒.*肝|孝心.*肝|买给.*爸.*肝|送爸.*肝|护肝.*送|肝.*礼盒/i,
  153. tamLabel: '~10亿',
  154. score: 85,
  155. persona: '25-40 岁·有孝心的子女·节日/体检后触发',
  156. trigger: '父亲节/中秋/春节·父母体检报告·"不知道送什么"焦虑',
  157. need: '包装好看·有面子·品牌可信·安全天然',
  158. productForm: '高端礼盒(双瓶/四瓶装)· 新中式设计',
  159. priceRange: '¥298-898(礼盒装)',
  160. talkPharm: '"给爸妈的护肝礼·千年藤茶·天然安心"',
  161. talkEcom: '"父亲节送什么?千年藤茶护肝礼盒·有面子有心意"',
  162. talkSeed: '"今年父亲节送了江中肝纯片礼盒,爸爸应酬多,藤茶天然的放心"',
  163. finding: '送礼场景:最高客单价·品类蓝海',
  164. findingBody: `护肝品类的送礼场景<strong>几乎空白</strong>——片仔癀太贵(¥590/粒),Swisse 太"外国",葵花太"药"。<strong style="color:${BRAND.GOLD};">"千年藤茶·天然护肝"的新中式礼盒</strong>可以成为"<strong>送肝 = 送江中</strong>"的品类代名词,对标东阿阿胶"送气血"的成功路径。`,
  165. }});
  166. }
  167. module.exports = { renderSub1, renderSub2, renderSub3, renderSub4 };