liver-v2-ch3-position.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. // ==============================================================================
  2. // 肝纯片 v2 · Ch3 品类定位 · 里斯×特劳特
  3. // ==============================================================================
  4. // 3.1 里斯品类战略 · 护肝品类进化树
  5. // 3.2 特劳特定位 · 一句话方案
  6. // 3.3 差异化 MOAT · 藤茶 DMY 锚点
  7. // ==============================================================================
  8. const LA = require('./liver-analyze.js');
  9. const C = require('./liver-components.js');
  10. const { BRAND, esc, renderSectionHead, renderVocGrid,
  11. renderInsightHero, renderFindingCard, renderDecisionList, isEnglish, getTranslation } = C;
  12. // ============================================================
  13. // 3.1 里斯品类战略
  14. // ============================================================
  15. function renderSub1({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
  16. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  17. <div class="section-inner">
  18. ${renderSectionHead({
  19. eyebrow: `${c.num}.${subIdx} · RIES CATEGORY STRATEGY`,
  20. title: sub,
  21. subtitle: '王总要求用里斯的品类战略组织内容——"我在哪个品类?品类还能怎么分化?"',
  22. color: c.color,
  23. })}
  24. ${renderInsightHero({
  25. eyebrow: '里斯品类战略 · 核心问题',
  26. title: '肝纯片到底在哪个品类?',
  27. subtitle: '回答错了,竞争对手就选错了,渠道就铺错了,话术就说错了。',
  28. color: c.color,
  29. })}
  30. <div style="padding:24px; background:var(--bg-1); border:1px solid var(--border); border-radius:var(--radius-md); margin-top:24px;">
  31. <div class="text-mono text-xs" style="color:${c.color}; letter-spacing:0.15em; margin-bottom:18px; font-weight:700;">品类进化树 · 从护肝大品类到细分定位</div>
  32. <!-- Level 0 -->
  33. <div style="text-align:center; padding:14px; background:${BRAND.TECH_BLUE}12; border:2px solid ${BRAND.TECH_BLUE}55; border-radius:8px; font-weight:700; color:${BRAND.TECH_BLUE}; font-size:1.1rem;">
  34. 护肝大品类(~150 亿)
  35. </div>
  36. <div style="text-align:center; color:var(--text-3); font-size:1.2rem; padding:4px 0;">↓</div>
  37. <!-- Level 1 -->
  38. <div style="display:grid; grid-template-columns:repeat(4, 1fr); gap:10px;">
  39. <div style="padding:12px; background:${BRAND.TECH_BLUE}08; border:1px solid ${BRAND.TECH_BLUE}33; border-radius:6px; text-align:center;">
  40. <div style="font-weight:700; color:${BRAND.TECH_BLUE}; font-size:0.82rem;">处方护肝药</div>
  41. <div style="color:var(--text-3); font-size:0.68rem;">易善复/甘草酸</div>
  42. </div>
  43. <div style="padding:12px; background:${BRAND.WARM_ORANGE}08; border:1px solid ${BRAND.WARM_ORANGE}33; border-radius:6px; text-align:center;">
  44. <div style="font-weight:700; color:${BRAND.WARM_ORANGE}; font-size:0.82rem;">OTC 护肝中成药</div>
  45. <div style="color:var(--text-3); font-size:0.68rem;">葵花/水飞蓟片</div>
  46. </div>
  47. <div style="padding:12px; background:${BRAND.LIVER_AMBER}12; border:2px solid ${BRAND.LIVER_AMBER}55; border-radius:6px; text-align:center;">
  48. <div style="font-weight:700; color:${BRAND.LIVER_AMBER}; font-size:0.82rem;">⭐ 天然草本护肝</div>
  49. <div style="color:${BRAND.LIVER_AMBER}; font-size:0.68rem; font-weight:600;">肝纯片 = 这里</div>
  50. </div>
  51. <div style="padding:12px; background:${BRAND.ROSE}08; border:1px solid ${BRAND.ROSE}33; border-radius:6px; text-align:center;">
  52. <div style="font-weight:700; color:${BRAND.ROSE}; font-size:0.82rem;">进口保健品</div>
  53. <div style="color:var(--text-3); font-size:0.68rem;">Swisse/GNC</div>
  54. </div>
  55. </div>
  56. <div style="text-align:center; color:var(--text-3); font-size:1.2rem; padding:4px 0;">↓ 品类分化方向</div>
  57. <!-- Level 2 -->
  58. <div style="display:grid; grid-template-columns:repeat(3, 1fr); gap:10px;">
  59. ${[
  60. { title: '应酬解酒·液体应急', desc: '酒前酒后即时护肝', color: BRAND.WINE_RED, star: false },
  61. { title: '日常养护·片剂便携', desc: '脂肪肝/熬夜日常护肝', color: BRAND.LIVER_AMBER, star: true },
  62. { title: '孝心礼品·高端礼盒', desc: '送长辈护肝面子工程', color: BRAND.GOLD, star: false },
  63. ].map(item => `
  64. <div style="padding:14px; background:${item.color}08; border:1px solid ${item.color}33; border-radius:6px; text-align:center;">
  65. <div style="font-weight:700; color:${item.color}; font-size:0.82rem;">${item.star ? '★ ' : ''}${esc(item.title)}</div>
  66. <div style="color:var(--text-2); font-size:0.72rem; margin-top:4px;">${esc(item.desc)}</div>
  67. </div>`).join('')}
  68. </div>
  69. </div>
  70. ${renderFindingCard({
  71. icon: '🎯',
  72. title: '里斯品类结论',
  73. body: `肝纯片应定位在 <strong style="color:${BRAND.LIVER_AMBER};">"天然草本护肝"</strong> 品类——<br/>
  74. · 不是"处方药"品类(处方依赖·用户买不了)<br/>
  75. · 不是"保健品"品类(Swisse 先占·智商税争议)<br/>
  76. · 不是"OTC 中成药"品类(葵花先占·药味老化)<br/>
  77. · 而是 <strong>"藤茶 DMY 天然草本护肝"</strong>——新品类无先占者,可以成为第一品牌。`,
  78. accent: c.color,
  79. })}
  80. </div>
  81. </section>`;
  82. }
  83. // ============================================================
  84. // 3.2 特劳特定位 · 一句话
  85. // ============================================================
  86. function renderSub2({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
  87. const items = data?.items || [];
  88. // 用户品类认知 VOC:用户对天然/草本/藤茶/水飞蓟的认知表达
  89. const positionRe = /天然|草本|植物|化学|西药|中药|副作用|温和|安全|水飞蓟.*吸收|不伤|藤茶|二氢杨梅素|DMY|选哪个|到底.*用|不敢吃药/i;
  90. const positionItems = items.filter(it => positionRe.test(it.content || ''));
  91. const positionEvidence = LA.getEvidence(positionItems, { top: 3, seed: 321, minChars: 15, contentMatch: /天然|草本|植物|藤茶|中草药|传统|千年|herbal|natural|botanical/i });
  92. const options = [
  93. {
  94. slogan: '千年藤茶·天然护肝',
  95. strategy: '品类占位',
  96. troutMethod: '开创新品类',
  97. pros: '历史背书+天然安全+品类空白',
  98. cons: '"藤茶"用户不认识,需教育成本',
  99. score: 90,
  100. },
  101. {
  102. slogan: 'DMY 98%·科学护肝新选择',
  103. strategy: '差异化定位',
  104. troutMethod: '重新定位竞品',
  105. pros: '科学数据支撑·对标水飞蓟"吸收差"',
  106. cons: '"DMY"太学术·记不住',
  107. score: 78,
  108. },
  109. {
  110. slogan: '不伤胃的护肝片',
  111. strategy: '痛点占位',
  112. troutMethod: '聚焦法则',
  113. pros: '直击易善复/水飞蓟副作用痛点',
  114. cons: '防御性定位·天花板低',
  115. score: 72,
  116. },
  117. ];
  118. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  119. <div class="section-inner">
  120. ${renderSectionHead({
  121. eyebrow: `${c.num}.${subIdx} · TROUT POSITIONING`,
  122. title: sub,
  123. subtitle: '能写在盒子上的一句话 · 能让店员一句话推荐 · 能让用户一句话记住',
  124. color: c.color,
  125. })}
  126. <div style="display:grid; gap:18px; margin-top:24px;">
  127. ${options.map((opt, i) => `
  128. <div style="padding:24px; background:${i === 0 ? c.color + '10' : 'var(--bg-1)'}; border:${i === 0 ? '2px' : '1px'} solid ${i === 0 ? c.color + '55' : 'var(--border)'}; border-radius:var(--radius-md); position:relative;">
  129. ${i === 0 ? `<div style="position:absolute; top:12px; right:16px; padding:4px 12px; background:${c.color}; color:#fff; border-radius:12px; font-size:0.7rem; font-weight:700;">★ 推荐</div>` : ''}
  130. <div style="display:grid; grid-template-columns:1fr 140px; gap:20px; align-items:center;">
  131. <div>
  132. <div class="text-mono text-xs" style="color:${c.color}; letter-spacing:0.12em; font-weight:700; margin-bottom:8px;">方案 ${i+1} · ${esc(opt.strategy)}</div>
  133. <div style="font-family:var(--font-head); font-size:1.5rem; font-weight:800; color:var(--text-1); margin-bottom:12px;">"${esc(opt.slogan)}"</div>
  134. <div style="color:var(--text-2); font-size:0.82rem; line-height:1.6;">
  135. <strong>特劳特方法</strong>:${esc(opt.troutMethod)}<br/>
  136. <strong style="color:${BRAND.JIANG_GREEN};">优势</strong>:${esc(opt.pros)}<br/>
  137. <strong style="color:${BRAND.CORAL};">风险</strong>:${esc(opt.cons)}
  138. </div>
  139. </div>
  140. <div style="text-align:center;">
  141. <div style="width:100px; height:100px; border-radius:50%; background:${i === 0 ? c.color : 'var(--text-3)'}15; border:3px solid ${i === 0 ? c.color : 'var(--text-3)'}44; display:flex; align-items:center; justify-content:center; flex-direction:column; margin:0 auto;">
  142. <div style="font-family:var(--font-head); font-size:2rem; font-weight:900; color:${i === 0 ? c.color : 'var(--text-3)'};">${opt.score}</div>
  143. <div style="font-size:0.62rem; color:var(--text-3);">综合评分</div>
  144. </div>
  145. </div>
  146. </div>
  147. </div>`).join('')}
  148. </div>
  149. ${positionEvidence.length > 0 ? `
  150. <div style="margin-top:20px; padding:16px; background:${BRAND.TENGCHA_GREEN}06; border:1px solid ${BRAND.TENGCHA_GREEN}30; border-radius:var(--radius-md);">
  151. <div class="text-mono text-xs" style="color:${BRAND.TENGCHA_GREEN}; letter-spacing:0.12em; margin-bottom:10px; font-weight:700;">VOC 验证 · 用户天然/草本品类认知(${positionItems.length} 条相关 VOC)</div>
  152. <div style="display:grid; grid-template-columns:repeat(${Math.min(positionEvidence.length, 3)}, 1fr); gap:10px;">
  153. ${positionEvidence.map(ev => {
  154. const raw = (ev.content || '').slice(0, 90);
  155. const trans = isEnglish(raw) ? getTranslation(ev.content) : null;
  156. const display = trans ? trans.slice(0, 90) : raw;
  157. const badge = trans ? ' <span style="color:' + BRAND.WARM_ORANGE + ';font-size:0.56rem;">🔄已翻译</span>' : (isEnglish(raw) ? ' <span style="color:' + BRAND.WARM_ORANGE + ';font-size:0.56rem;">EN</span>' : '');
  158. return `
  159. <div style="padding:10px 12px; background:var(--bg-1); border-left:3px solid ${BRAND.TENGCHA_GREEN}; border-radius:4px;">
  160. <div style="font-size:0.74rem; color:var(--text-1); line-height:1.45;">"${esc(display)}"${badge}</div>
  161. <div style="color:var(--text-3); font-size:0.6rem; margin-top:4px;">—${esc(ev.nickname || ev.platform)} · ❤️${ev.likes || 0}</div>
  162. </div>`;
  163. }).join('')}
  164. </div>
  165. </div>` : ''}
  166. ${renderInsightHero({
  167. eyebrow: 'TROUT VERDICT',
  168. title: '推荐定位:"千年藤茶 · 天然护肝"',
  169. subtitle: `
  170. <strong>心智阶梯</strong>:想到"天然护肝" → 第一反应"藤茶" → 江中肝纯片<br/>
  171. <strong>写在盒子上</strong>:<span style="padding:4px 12px; background:${BRAND.TENGCHA_GREEN}15; border:1px solid ${BRAND.TENGCHA_GREEN}44; border-radius:4px; font-weight:700; color:${BRAND.TENGCHA_GREEN};">千年藤茶 · 天然护肝</span><br/>
  172. <strong>店员话术</strong>:"这是用千年藤茶做的天然护肝片,不像水飞蓟那么伤胃"<br/>
  173. <strong>教育路径</strong>:"藤茶"先行(安全/文化)→ "DMY"跟进(科学/数据)
  174. `,
  175. color: BRAND.TENGCHA_GREEN,
  176. })}
  177. </div>
  178. </section>`;
  179. }
  180. // ============================================================
  181. // 3.3 差异化 MOAT
  182. // ============================================================
  183. function renderSub3({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
  184. const moats = [
  185. { name: '千年食饮史', desc: '藤茶(显齿蛇葡萄叶)在中国西南被食饮千年,不是新发明的化学成分。用户心理:历史=安全。', icon: '📜', color: BRAND.TENGCHA_GREEN, type: '文化壁垒' },
  186. { name: 'DMY 总黄酮 98%', desc: '二氢杨梅素纯度远超水飞蓟宾(30-80%),有临床研究支持(解酒/抗氧化/保肝)。', icon: '🔬', color: BRAND.TECH_BLUE, type: '科学壁垒' },
  187. { name: '中国特有原料', desc: '藤茶是中国西南特有植物,国际品牌无法复制原料供应链。对标:片仔癀的"国宝配方"逻辑。', icon: '🇨🇳', color: BRAND.CORAL, type: '供应链壁垒' },
  188. { name: 'OTC 药品身份', desc: '相比 Swisse/汤臣倍健的"保健品"身份,OTC 药品 = 功效背书 + 医疗级信任 + 药店核心陈列。', icon: '💊', color: BRAND.LIVER_AMBER, type: '监管壁垒' },
  189. { name: '江中品牌资产', desc: '江中 = 胃肠道专家(健胃消食片国民认知),延伸到"肝"符合品牌心智——从"胃"到"肝"是自然延伸。', icon: '🏷️', color: BRAND.JIANG_GREEN, type: '品牌壁垒' },
  190. ];
  191. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  192. <div class="section-inner">
  193. ${renderSectionHead({
  194. eyebrow: `${c.num}.${subIdx} · DIFFERENTIATION MOAT`,
  195. title: sub,
  196. subtitle: '五重壁垒构成肝纯片的差异化护城河——竞品很难同时复制。',
  197. color: c.color,
  198. })}
  199. <div style="display:grid; gap:14px; margin-top:24px;">
  200. ${moats.map((m, i) => `
  201. <div style="display:grid; grid-template-columns:60px 1fr; gap:16px; padding:18px 22px; background:${m.color}06; border:1px solid ${m.color}33; border-left:4px solid ${m.color}; border-radius:var(--radius-md);">
  202. <div style="text-align:center;">
  203. <div style="font-size:1.6rem; margin-bottom:4px;">${m.icon}</div>
  204. <div style="color:${m.color}; font-size:0.62rem; font-weight:700;">${esc(m.type)}</div>
  205. </div>
  206. <div>
  207. <div style="font-weight:700; color:var(--text-1); font-size:0.92rem; margin-bottom:6px;">${esc(m.name)}</div>
  208. <div style="color:var(--text-2); font-size:0.84rem; line-height:1.6;">${esc(m.desc)}</div>
  209. </div>
  210. </div>`).join('')}
  211. </div>
  212. ${renderDecisionList([
  213. '五重壁垒中<strong>任何一重</strong>都不够独特——但<strong>五重叠加</strong>后形成独一无二的组合',
  214. '对标"右旋"案例:右旋靠"左旋不吸收"的科学故事重新定位品类——肝纯片靠"水飞蓟吸收差"做同样的事',
  215. '教育路径分两步:先推"藤茶"(情感·安全·文化),再推"DMY"(理性·科学·数据)',
  216. '风险:如果"藤茶"认知教育失败,需准备 Plan B = "不伤胃的护肝片"(痛点占位)',
  217. ], { accent: c.color, title: 'MOAT VERDICT · 护城河结论' })}
  218. </div>
  219. </section>`;
  220. }
  221. module.exports = { renderSub1, renderSub2, renderSub3 };