lactic-ch6-competitor.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. // ==============================================================================
  2. // 江中乳酸菌素片儿童版 · Ch6 三轴图谱 × 无人地带(3 子章)
  3. // ==============================================================================
  4. // 6.1 三轴图谱·药品 / 食品 / 营养软糖
  5. // 6.2 无人地带坐标·乳酸菌素片独占位
  6. // 6.3 8 竞品精对标·VOC 差异化 MOAT
  7. // ==============================================================================
  8. const LA = require('./lactic-analyze.js');
  9. const C = require('./lactic-components.js');
  10. const { BRAND, esc, fmtLikes } = C;
  11. // ==========================================================
  12. // 6.1 · 三轴图谱
  13. // ==========================================================
  14. function renderSub6_1(ctx) {
  15. const { chapter: c, subIdx, sub, slideNum, slideTotal } = ctx;
  16. const axes = [
  17. {
  18. name: '药品益生菌轴', color: BRAND.TECH_BLUE, icon: '💊',
  19. top: '妈咪爱 / 亿活 / 金双岐',
  20. mid: '宝乐安 / 妈咪爱钙维KD',
  21. bottom: '复方中药颗粒 / 儿保科处方',
  22. insight: '痛点:活菌冷链 / 处方门槛 / 停药反弹',
  23. },
  24. {
  25. name: '食品益生菌轴', color: BRAND.SUNNY_YELLOW, icon: '🍬',
  26. top: '合生元 / 万益蓝 / 拜奥',
  27. mid: 'inne 噗噗宝 / 小胖瓶 / 康萃乐',
  28. bottom: 'lifespace / 白贝优品 / 小品牌',
  29. insight: '痛点:无药效背书 / 菌株混乱 / 效果不稳定',
  30. },
  31. {
  32. name: '儿童营养软糖轴', color: BRAND.BERRY_PINK, icon: '🍭',
  33. top: '澳乐乳 / Pokeka / Swisse 钙软糖',
  34. mid: '汤臣倍健儿童 / 飞鹤营养包',
  35. bottom: '小魔兽 / 自制 DIY / 进口代购',
  36. insight: '痛点:瓶瓶罐罐 / 糖分焦虑 / 补了不吸收',
  37. },
  38. ];
  39. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  40. <div class="section-inner">
  41. ${C.renderSectionHead({
  42. eyebrow: `${c.num}.${subIdx} · 三轴图谱`,
  43. title: '<span style="color:' + BRAND.ROSE + ';">药品 ↔ 食品 ↔ 营养软糖</span> 三轴图谱',
  44. subtitle: '儿童肠道 / 营养赛道是<strong>三个重叠市场</strong>——药品的权威信任 / 食品的日常友好 / 软糖的孩子喜欢。每轴都有玩家、有痛点、有未满足需求。',
  45. color: BRAND.ROSE,
  46. })}
  47. <div class="grid" style="grid-template-columns:repeat(3, 1fr); gap:20px; margin-top:24px;">
  48. ${axes.map((a) => `
  49. <div style="padding:22px; background:var(--bg-1); border:1px solid var(--border); border-top:4px solid ${a.color}; border-radius:var(--radius-md);">
  50. <div style="display:flex; align-items:center; gap:10px; margin-bottom:16px;">
  51. <div style="font-size:1.8rem;">${a.icon}</div>
  52. <div>
  53. <div class="text-mono text-xs" style="color:${a.color}; letter-spacing:0.15em; font-weight:700;">AXIS</div>
  54. <div style="color:var(--text-1); font-weight:800; font-size:1.12rem;">${esc(a.name)}</div>
  55. </div>
  56. </div>
  57. <div style="display:flex; flex-direction:column; gap:10px; margin-bottom:16px;">
  58. <div style="padding:10px 12px; background:${a.color}14; border-radius:4px;">
  59. <div class="text-mono text-xs" style="color:${a.color}; font-weight:700; margin-bottom:2px;">TOP TIER</div>
  60. <div style="color:var(--text-1); font-size:0.84rem; line-height:1.5;">${a.top}</div>
  61. </div>
  62. <div style="padding:10px 12px; background:${a.color}0C; border-radius:4px;">
  63. <div class="text-mono text-xs" style="color:${a.color}; font-weight:700; margin-bottom:2px;">MID TIER</div>
  64. <div style="color:var(--text-2); font-size:0.84rem; line-height:1.5;">${a.mid}</div>
  65. </div>
  66. <div style="padding:10px 12px; background:${a.color}06; border-radius:4px;">
  67. <div class="text-mono text-xs" style="color:${a.color}; font-weight:700; margin-bottom:2px;">BOTTOM</div>
  68. <div style="color:var(--text-3); font-size:0.84rem; line-height:1.5;">${a.bottom}</div>
  69. </div>
  70. </div>
  71. <div style="padding:12px 14px; background:${BRAND.CORAL}0A; border-left:3px solid ${BRAND.CORAL}; border-radius:4px;">
  72. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.1em; margin-bottom:4px; font-weight:700;">PAIN POINT</div>
  73. <div style="color:var(--text-1); font-size:0.82rem; line-height:1.5;">${esc(a.insight)}</div>
  74. </div>
  75. </div>`).join('')}
  76. </div>
  77. <div class="fade-up" style="margin-top:28px;">
  78. ${C.renderInsightHero({
  79. eyebrow: 'THREE-AXIS CONVERGENCE · 三轴交汇',
  80. color: BRAND.ROSE,
  81. title: `单轴里都有老玩家。乳酸菌素片儿童版要做的不是在药品轴上赢妈咪爱,也不是在食品轴上赢合生元——而是<strong style="color:${BRAND.JIANG_GREEN};">把三轴最有利的心智全拉到一起</strong>:<br/>药品的<em>权威</em> + 食品的<em>日常</em> + 软糖的<em>爱吃</em>。`,
  82. subtitle: `下一节 6.2 展示"三轴交汇点"坐标——那就是乳酸菌素片儿童版的<strong>独家地带</strong>。`,
  83. })}
  84. </div>
  85. ${C.renderDecisionList([
  86. `<strong>药品轴战术</strong>:用 OTC 蓝帽 + 非活菌差异压过妈咪爱的冷链痛点`,
  87. `<strong>食品轴战术</strong>:用药品级背书 + 江中国货压过合生元"食品没效果"质疑`,
  88. `<strong>软糖轴战术</strong>:用水果味咀嚼片 + 低糖承接软糖赛道但无糖分焦虑`,
  89. `<strong>三轴共识</strong>:"像药一样有效 × 像食品一样温和 × 像糖一样爱吃"`,
  90. ], { title: '落地决策 · 三轴协同战术', accent: BRAND.ROSE, columns: 2 })}
  91. </div>
  92. </section>`;
  93. }
  94. // ==========================================================
  95. // 6.2 · 无人地带坐标
  96. // ==========================================================
  97. function renderSub6_2(ctx) {
  98. const { chapter: c, subIdx, sub, slideNum, slideTotal } = ctx;
  99. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  100. <div class="section-inner">
  101. ${C.renderSectionHead({
  102. eyebrow: `${c.num}.${subIdx} · 无人地带坐标`,
  103. title: '<span style="color:' + BRAND.JIANG_GREEN + ';">无人地带</span>:乳酸菌素片儿童版的独家定位坐标',
  104. subtitle: '三轴 × 两维(急救 / 日常 × 严肃 / 活泼)= 6 象限。5/6 象限都有强竞品,<strong>唯独"日常 × 活泼 × 药品级"</strong>无人占——这就是乳酸菌素片的坐标。',
  105. color: BRAND.JIANG_GREEN,
  106. })}
  107. ${C.renderMatrix2x2({
  108. xLabel: '场景频次 × 使用门槛',
  109. yLabel: '药品级 vs 日常感',
  110. xLow: '急救 · 病了才吃',
  111. xHigh: '日常 · 每天吃',
  112. yLow: '日常感(活泼)',
  113. yHigh: '严肃感(专业)',
  114. accent: BRAND.JIANG_GREEN,
  115. quadrants: {
  116. q1: {
  117. title: '右上 · 专业 × 日常(部分竞品)',
  118. color: BRAND.TECH_BLUE,
  119. items: [
  120. '<strong>妈咪爱</strong>(OTC 药但口感严肃)',
  121. '<strong>金双岐</strong>(三联活菌片)',
  122. '<strong>亿活</strong>(原研药 · 短疗程)',
  123. ],
  124. note: '痛点:活菌冷链 / 医嘱依赖 / 口感不友好',
  125. },
  126. q2: {
  127. title: '左上 · 专业 × 急救(竞品)',
  128. color: BRAND.WINE_RED,
  129. items: [
  130. '<strong>蒙脱石散</strong>(止泻药)',
  131. '<strong>头孢 / 抗生素</strong>',
  132. '<strong>小儿化毒散</strong>',
  133. ],
  134. note: '痛点:必须医嘱 / 不能日常 / 副作用担忧',
  135. },
  136. q3: {
  137. title: '左下 · 日常 × 急救(辅助品)',
  138. color: BRAND.WARM_ORANGE,
  139. items: [
  140. '<strong>拜奥滴剂</strong>(0-3 月)',
  141. '<strong>inne 噗噗宝</strong>(便秘单点)',
  142. '<strong>民间食疗</strong>(山楂 / 陈皮)',
  143. ],
  144. note: '痛点:单场景 / 价格贵 / 非标准化',
  145. },
  146. q4: {
  147. title: '右下 · 日常 × 活泼 <strong style="color:' + BRAND.JIANG_GREEN + ';">(✨ 无人地带)</strong>',
  148. color: BRAND.JIANG_GREEN,
  149. items: [
  150. '<strong style="color:' + BRAND.JIANG_GREEN + ';">✨ 乳酸菌素片儿童版(独占)</strong>',
  151. '(合生元部分覆盖但食品级)',
  152. '(万益蓝主打成人减肥)',
  153. ],
  154. note: '✅ 机会:药品级 + 日常 + 儿童友好',
  155. },
  156. },
  157. })}
  158. <div class="fade-up" style="margin-top:28px;">
  159. <div style="padding:24px 28px; background:linear-gradient(135deg, ${BRAND.JIANG_GREEN}10, ${BRAND.LACTIC_MINT}06); border:2px solid ${BRAND.JIANG_GREEN}44; border-radius:var(--radius-lg);">
  160. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.2em; margin-bottom:10px; font-weight:700;">🎯 POSITIONING STATEMENT · 定位宣言</div>
  161. <div style="font-size:1.2rem; line-height:1.8; color:var(--text-1); font-weight:600;">
  162. <strong style="color:${BRAND.JIANG_GREEN};">江中乳酸菌素片儿童版</strong> 是为<br/>
  163. <em style="color:var(--text-2);">「有日常肠道养护需求但又不想吃药、想给孩子吃食品又怕没效果、想用软糖又怕糖分」</em><br/>
  164. 的<strong style="color:${BRAND.LACTIC_MINT};">中国 3-12 岁儿童家长</strong>准备的<br/>
  165. <strong style="color:${BRAND.BERRY_PINK};">儿童肠道调理专属 OTC 咀嚼片</strong>。<br/>
  166. <br/>
  167. 不同于<strong style="color:${BRAND.TECH_BLUE};">药品益生菌</strong>需要医嘱和冷链,<br/>
  168. 不同于<strong style="color:${BRAND.SUNNY_YELLOW};">食品益生菌</strong>的效果不稳定和菌株混乱,<br/>
  169. 不同于<strong style="color:${BRAND.BERRY_PINK};">营养软糖</strong>的糖分焦虑和瓶瓶罐罐,<br/>
  170. 乳酸菌素片儿童版提供<strong style="color:${BRAND.JIANG_GREEN};">"江中 OTC 药品 × 非活菌稳定 × 水果咀嚼 × 分龄专属"</strong>的四重复合心智。
  171. </div>
  172. </div>
  173. </div>
  174. ${C.renderDecisionList([
  175. `<strong>锁定象限 Q4</strong>:日常 × 活泼 × 药品级(唯一无人地带)`,
  176. `<strong>瓦解 Q1 妈咪爱</strong>:非活菌 + 无需冷链 + 儿童友好咀嚼`,
  177. `<strong>瓦解 Q2 合生元</strong>:OTC 药品级 + 江中国货信任`,
  178. `<strong>瓦解 Q3 拜奥/inne</strong>:全场景覆盖 + 全年龄段 + 亲民价格`,
  179. `<strong>瓦解 Q4 营养软糖</strong>:内源调理吸收 + 无糖配方 + "1 片替代十几种"`,
  180. `<strong>H1-H8 假设全覆盖</strong>:H1✓ 药品痛点 / H2✓ 食品信任 / H3✓ 儿童刚需 / H5✓ 喂药依从`,
  181. ], { title: '落地决策 · 定位坐标 6 条战术', accent: BRAND.JIANG_GREEN, columns: 2 })}
  182. </div>
  183. </section>`;
  184. }
  185. // ==========================================================
  186. // 6.3 · 8 竞品精对标 · VOC 差异化 MOAT
  187. // ==========================================================
  188. function renderSub6_3(ctx) {
  189. const { chapter: c, subIdx, sub, slideNum, slideTotal, data } = ctx;
  190. const items = data.items || [];
  191. const maomi = LA.getEvidence(items, { keyword: '妈咪爱', minChars: 25, top: 1, seed: 5 })[0];
  192. const yihuo = LA.getEvidence(items, { keyword: '亿活 儿童', minChars: 25, top: 1, seed: 9 })[0];
  193. const jinshuangqi = LA.getEvidence(items, { keyword: '金双岐', minChars: 25, top: 1, seed: 13 })[0];
  194. const baolean = LA.getEvidence(items, { keyword: '宝乐安', minChars: 20, top: 1, seed: 17 })[0];
  195. const hesheng = LA.getEvidence(items, { keyword: '合生元益生菌', minChars: 25, top: 1, seed: 21 })[0];
  196. const wanyilan = LA.getEvidence(items, { keyword: '万益蓝益生菌', minChars: 25, top: 1, seed: 25 })[0];
  197. const baiao = LA.getEvidence(items, { keyword: '拜奥益生菌', minChars: 25, top: 1, seed: 29 })[0];
  198. const kangcuile = LA.getEvidence(items, { keyword: '康萃乐益生菌', minChars: 15, top: 1, seed: 33 })[0];
  199. const moatRows = [
  200. { name: '妈咪爱', axis: '药品益生菌 · 头部', color: BRAND.TECH_BLUE,
  201. moat: '<strong>非活菌无冷链</strong> · <strong>无需医生处方</strong> · <strong>可日常长期服用</strong>', voc: maomi },
  202. { name: '亿活', axis: '药品益生菌 · 原研', color: BRAND.TECH_BLUE,
  203. moat: '<strong>价格便宜 30-50%</strong> · <strong>可长期服用</strong> · <strong>儿童友好咀嚼片</strong>', voc: yihuo },
  204. { name: '金双岐', axis: '药品益生菌 · 三联', color: BRAND.SAGE,
  205. moat: '<strong>独立水果味咀嚼片 + 分龄</strong>(金双岐片大难吞)· <strong>包装儿童化</strong>', voc: jinshuangqi },
  206. { name: '宝乐安', axis: '药品益生菌 · 长尾', color: BRAND.SAGE,
  207. moat: '<strong>江中国民品牌背书</strong> · <strong>OTC 蓝帽+更强辨识度</strong>', voc: baolean },
  208. { name: '合生元', axis: '食品益生菌 · 头部', color: BRAND.SUNNY_YELLOW,
  209. moat: '<strong>OTC 药品级</strong> · <strong>江中国货信任</strong> · <strong>价格带便宜 50%</strong>', voc: hesheng },
  210. { name: '万益蓝', axis: '食品益生菌 · 成人', color: BRAND.BERRY_PINK,
  211. moat: '<strong>明确儿童专属</strong> · <strong>不混用成人减肥场景</strong> · <strong>分龄包装</strong>', voc: wanyilan },
  212. { name: '拜奥', axis: '食品益生菌 · 进口', color: BRAND.SKY_BLUE,
  213. moat: '<strong>无冷链便携</strong> · <strong>价格降 60%</strong> · <strong>覆盖 3-12 岁全龄</strong>', voc: baiao },
  214. { name: '康萃乐', axis: '食品益生菌 · 美国', color: BRAND.WARM_ORANGE,
  215. moat: '<strong>国货中国味</strong> · <strong>中文说明可查</strong> · <strong>价格便宜 3-4 倍</strong>', voc: kangcuile },
  216. ];
  217. return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
  218. <div class="section-inner">
  219. ${C.renderSectionHead({
  220. eyebrow: `${c.num}.${subIdx} · 8 竞品精对标`,
  221. title: '<span style="color:' + BRAND.ROSE + ';">VOC 差异化 MOAT</span>·每个竞品一条护城河',
  222. subtitle: '逐个竞品列出:<strong>(1) 代表性 VOC 证据 / (2) 乳酸菌素片差异化 MOAT</strong>——8 条护城河共同构成竞争壁垒。',
  223. color: BRAND.ROSE,
  224. })}
  225. <div class="grid" style="grid-template-columns:1fr; gap:14px; margin-top:20px;">
  226. ${moatRows.map((r) => `
  227. <div style="padding:16px 20px; background:var(--bg-1); border:1px solid var(--border); border-left:4px solid ${r.color}; border-radius:var(--radius-md);">
  228. <div style="display:grid; grid-template-columns:200px 1.3fr 1.3fr; gap:20px; align-items:center;">
  229. <div>
  230. <div class="text-mono text-xs" style="color:${r.color}; letter-spacing:0.15em; margin-bottom:4px; font-weight:700;">${esc(r.axis.toUpperCase())}</div>
  231. <div style="color:var(--text-1); font-weight:800; font-size:1.05rem;">${esc(r.name)}</div>
  232. </div>
  233. <div>
  234. <div class="text-mono text-xs" style="color:${BRAND.CORAL}; letter-spacing:0.1em; margin-bottom:6px; font-weight:700;">VOC 代表性声音</div>
  235. ${r.voc ? C.renderVocCard(r.voc, { accent: r.color, compact: true, maxChars: 120 }) : '<div style="color:var(--text-3); font-size:0.82rem; padding:10px; background:var(--bg-2); border-radius:4px;">— VOC 暂缺 —</div>'}
  236. </div>
  237. <div>
  238. <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; letter-spacing:0.1em; margin-bottom:6px; font-weight:700;">乳酸菌素片 MOAT</div>
  239. <div style="padding:14px 16px; background:${BRAND.JIANG_GREEN}0A; border:1px solid ${BRAND.JIANG_GREEN}33; border-radius:4px; color:var(--text-1); font-size:0.86rem; line-height:1.7;">
  240. ${r.moat}
  241. </div>
  242. </div>
  243. </div>
  244. </div>`).join('')}
  245. </div>
  246. <div class="fade-up" style="margin-top:28px;">
  247. ${C.renderInsightHero({
  248. eyebrow: 'MOAT SUMMARY · 护城河总结',
  249. color: BRAND.JIANG_GREEN,
  250. title: `<strong style="color:${BRAND.JIANG_GREEN};">8 条 MOAT = 8 种替换场景</strong>。乳酸菌素片不争单一赛道冠军,而是<strong>在每个赛道赢 10-15% 的替换份额</strong>—— 累计就是<strong>26 亿 × 10-15% = 2.6-4 亿</strong>的可达市场。`,
  251. subtitle: `关键是每条护城河都是<strong>真材实料</strong>(OTC 药品级 / 江中品牌 / 非活菌技术 / 水果咀嚼剂型),而不是营销话术——这是乳酸菌素片与所有食品益生菌的根本区别。`,
  252. })}
  253. </div>
  254. ${C.renderDecisionList([
  255. `<strong>精准 MOAT 投放</strong>:8 条护城河 = 8 条内容 / KOL / 渠道的精准攻击路径`,
  256. `<strong>MOAT 优先级</strong>:妈咪爱 + 合生元 优先(两大头部)· 亿活 + 金双岐 次之`,
  257. `<strong>避免对冲</strong>:不做全赛道正面对决,在每个赛道抢"痛点替换"`,
  258. `<strong>H1-H8 假设全部在章节里成立 → 为 Ch7/8 奠基</strong>`,
  259. ], { title: '落地决策 · MOAT 组合战术', accent: BRAND.ROSE, columns: 2 })}
  260. </div>
  261. </section>`;
  262. }
  263. module.exports = {
  264. 'competitor-1': renderSub6_1,
  265. 'competitor-2': renderSub6_2,
  266. 'competitor-3': renderSub6_3,
  267. };