| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- // ==============================================================================
- // 乳酸菌 v2 · Ch5 落地行动
- // ==============================================================================
- // 5.1 产品策略 · 包装/剂型/话术
- // 5.2 渠道策略 · 分年龄段打法
- // 5.3 P0/P1 行动清单 × 时间线
- // ==============================================================================
- const LA = require('./lactic-analyze.js');
- const C = require('./lactic-components.js');
- const { BRAND, esc, renderSectionHead, renderVocGrid,
- renderStatStrip, renderCompareTable, renderInsightHero,
- renderFindingCard, renderDecisionList } = C;
- // ============================================================
- // 5.1 产品策略
- // ============================================================
- function renderSub1({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
- return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
- <div class="section-inner">
- ${renderSectionHead({
- eyebrow: `${c.num}.${subIdx} · PRODUCT STRATEGY`,
- title: sub,
- subtitle: '基于 Ch0-Ch4 层层收敛,输出产品层面的具体策略。',
- color: c.color,
- })}
- <div style="display:grid; grid-template-columns:repeat(3, 1fr); gap:18px; margin-top:24px;">
- <!-- 包装 -->
- <div style="padding:22px; background:${BRAND.BERRY_PINK}08; border:1px solid ${BRAND.BERRY_PINK}33; border-top:3px solid ${BRAND.BERRY_PINK}; border-radius:var(--radius-md);">
- <div class="text-mono text-xs" style="color:${BRAND.BERRY_PINK}; font-weight:700; margin-bottom:12px;">📦 包装策略</div>
- <ul style="margin:0; padding-left:18px; color:var(--text-1); font-size:0.84rem; line-height:1.7;">
- <li><strong>正面主视觉</strong>:突出"嚼着吃"+"儿童肠道调理"双信息</li>
- <li><strong>OTC 标识</strong>:蓝帽子显著位置,与食品级拉开距离</li>
- <li><strong>年龄分层</strong>:3-6 岁(小包装/低剂量)vs 6-12 岁(标准装)</li>
- <li><strong>卡通 IP</strong>:可考虑"肠道小卫士"形象,孩子指名要</li>
- <li><strong>便携设计</strong>:单片独立包装,幼儿园/出行场景</li>
- </ul>
- </div>
- <!-- 剂型 -->
- <div style="padding:22px; background:${BRAND.SKY_BLUE}08; border:1px solid ${BRAND.SKY_BLUE}33; border-top:3px solid ${BRAND.SKY_BLUE}; border-radius:var(--radius-md);">
- <div class="text-mono text-xs" style="color:${BRAND.SKY_BLUE}; font-weight:700; margin-bottom:12px;">💊 剂型策略</div>
- <ul style="margin:0; padding-left:18px; color:var(--text-1); font-size:0.84rem; line-height:1.7;">
- <li><strong>核心剂型</strong>:咀嚼片(奶片口感 × 多口味)</li>
- <li><strong>口味矩阵</strong>:原味奶香(经典)/ 草莓 / 酸奶味</li>
- <li><strong>片型优化</strong>:小熊/星星形状(孩子喜欢)</li>
- <li><strong>延伸储备</strong>:软糖剂型(食品级·营养赛道·新品)</li>
- <li><strong>不做</strong>:散剂/胶囊(竞品的弱点不要重复)</li>
- </ul>
- </div>
- <!-- 话术 -->
- <div style="padding:22px; background:${BRAND.JIANG_GREEN}08; border:1px solid ${BRAND.JIANG_GREEN}33; border-top:3px solid ${BRAND.JIANG_GREEN}; border-radius:var(--radius-md);">
- <div class="text-mono text-xs" style="color:${BRAND.JIANG_GREEN}; font-weight:700; margin-bottom:12px;">💬 话术策略</div>
- <ul style="margin:0; padding-left:18px; color:var(--text-1); font-size:0.84rem; line-height:1.7;">
- <li><strong>核心定位句</strong>:"嚼着吃的儿童肠道调理药"</li>
- <li><strong>药店话术</strong>:"孩子拉肚子/便秘/消化不好?嚼一片就行"</li>
- <li><strong>种草话术</strong>:"OTC 药品级效果 + 奶片一样好吃"</li>
- <li><strong>对比话术</strong>:"比妈咪爱好喂,比合生元有保障"</li>
- <li><strong>场景话术</strong>:"入园必备/换季必备/出行必备"</li>
- </ul>
- </div>
- </div>
- ${renderFindingCard({
- icon: '💡',
- title: '产品策略核心逻辑',
- body: '所有产品决策围绕一个核心:<strong style="color:' + c.color + ';">"让家长信任(OTC)+ 让孩子爱吃(咀嚼片)"</strong>。包装要让家长一眼看出"这是正规药品",剂型要让孩子主动要,话术要让药店店员一句话说清楚。',
- accent: c.color,
- })}
- </div>
- </section>`;
- }
- // ============================================================
- // 5.2 渠道策略 · 分年龄段
- // ============================================================
- function renderSub2({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
- return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
- <div class="section-inner">
- ${renderSectionHead({
- eyebrow: `${c.num}.${subIdx} · CHANNEL STRATEGY`,
- title: sub,
- subtitle: '年龄段锁定 3-12 岁(咀嚼片),0-3 岁无法覆盖(王总确认)。',
- color: c.color,
- })}
- ${renderCompareTable({
- title: '分年龄段 × 渠道 × 打法矩阵',
- headers: ['年龄段', '核心场景', '主力渠道', '话术重点', '竞品空位'],
- rows: [
- [
- { html: '<strong style="color:' + BRAND.BABY_PEACH + ';">3-6 岁</strong>', color: BRAND.BABY_PEACH },
- '入园适应/换季生病/积食',
- '药店 + 母婴店',
- '"入园必备·孩子爱吃的肠道药"',
- '妈咪爱喂药难,合生元非药品',
- ],
- [
- { html: '<strong style="color:' + BRAND.PRESCHOOL_LIME + ';">6-9 岁</strong>', color: BRAND.PRESCHOOL_LIME },
- '挑食/消化不良/便秘',
- '药店 + 电商',
- '"调肠道促吸收·不用逼着吃"',
- '营养补剂"瓶瓶罐罐"替代',
- ],
- [
- { html: '<strong style="color:' + BRAND.SCHOOL_LAVENDER + ';">9-12 岁</strong>', color: BRAND.SCHOOL_LAVENDER },
- '课业压力/饮食不规律',
- '电商 + 药店',
- '"像零食一样的肠道调理"',
- '该年龄段几乎无专属产品',
- ],
- ],
- accent: c.color,
- })}
- <div style="display:grid; grid-template-columns:repeat(3, 1fr); gap:14px; margin-top:24px;">
- <div style="padding:18px; background:${BRAND.CORAL}08; border:1px solid ${BRAND.CORAL}33; border-radius:var(--radius-sm);">
- <div class="text-mono text-xs" style="color:${BRAND.CORAL}; font-weight:700; margin-bottom:8px;">药店渠道(主力)</div>
- <div style="color:var(--text-1); font-size:0.82rem; line-height:1.6;">
- OTC 药品天然渠道<br/>
- 店员推荐 = 核心转化<br/>
- 目标:<strong>一心堂/大参林 3w 门店</strong><br/>
- 话术培训 → 店员"一句话推荐"
- </div>
- </div>
- <div style="padding:18px; background:${BRAND.LACTIC_MINT}08; border:1px solid ${BRAND.LACTIC_MINT}33; border-radius:var(--radius-sm);">
- <div class="text-mono text-xs" style="color:${BRAND.LACTIC_MINT}; font-weight:700; margin-bottom:8px;">电商渠道(增量)</div>
- <div style="color:var(--text-1); font-size:0.82rem; line-height:1.6;">
- 种草(小红书/抖音)→ 搜索 → 转化<br/>
- 核心内容:真实妈妈分享<br/>
- 关键词矩阵:宝宝便秘/积食/入园<br/>
- vs 食品级竞品:突出 OTC 身份
- </div>
- </div>
- <div style="padding:18px; background:${BRAND.WARM_ORANGE}08; border:1px solid ${BRAND.WARM_ORANGE}33; border-radius:var(--radius-sm);">
- <div class="text-mono text-xs" style="color:${BRAND.WARM_ORANGE}; font-weight:700; margin-bottom:8px;">母婴渠道(补充)</div>
- <div style="color:var(--text-1); font-size:0.82rem; line-height:1.6;">
- 孩子王/爱婴室等<br/>
- 与食品级益生菌同台竞争<br/>
- 优势:OTC 身份差异化<br/>
- 风险:母婴店偏好食品级毛利
- </div>
- </div>
- </div>
- </div>
- </section>`;
- }
- // ============================================================
- // 5.3 P0/P1 行动清单
- // ============================================================
- function renderSub3({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
- const actions = [
- { priority: 'P0', action: '确认品类定位:"嚼着吃的儿童肠道调理药"', owner: '品牌部', timeline: '1 周内', status: '待确认' },
- { priority: 'P0', action: '包装设计修改:突出 OTC + "嚼着吃" + 年龄分层', owner: '设计部', timeline: '2 周', status: '待启动' },
- { priority: 'P0', action: '药店店员话术培训方案', owner: '渠道部', timeline: '2 周', status: '待启动' },
- { priority: 'P0', action: '补充成人乳酸菌素片 VOC 数据(当前以儿童为主)', owner: '数据团队', timeline: '1 周', status: '数据缺口' },
- { priority: 'P1', action: '口味矩阵测试(原味/草莓/酸奶)', owner: '研发部', timeline: '1 月', status: '待排期' },
- { priority: 'P1', action: '电商种草内容矩阵搭建', owner: '电商部', timeline: '1 月', status: '待启动' },
- { priority: 'P1', action: '3-6 岁低剂量小包装开发', owner: '研发部', timeline: '2 月', status: '待排期' },
- { priority: 'P1', action: '"调肠道促吸收"延伸方向 VOC 深度验证', owner: '数据团队', timeline: '1 月', status: '待启动' },
- { priority: 'P2', action: '软糖新品(食品级·营养赛道)可行性研究', owner: '研发部', timeline: '3 月', status: '远期储备' },
- { priority: 'P2', action: '卡通 IP "肠道小卫士" 设计', owner: '品牌部', timeline: '3 月', status: '远期储备' },
- ];
- const p0 = actions.filter(a => a.priority === 'P0');
- const p1 = actions.filter(a => a.priority === 'P1');
- const p2 = actions.filter(a => a.priority === 'P2');
- return `<section class="report-section" id="${c.key}-${subIdx}" data-tone="${c.tone}" data-slide-num="${slideNum}/${slideTotal}">
- <div class="section-inner">
- ${renderSectionHead({
- eyebrow: `${c.num}.${subIdx} · ACTION PLAN`,
- title: sub,
- subtitle: '从 6000 万到 10 亿的三年路径:P0 立即执行 / P1 一个月内 / P2 远期储备',
- color: c.color,
- })}
- ${renderStatStrip([
- { num: p0.length, label: 'P0 · 立即', color: BRAND.CORAL },
- { num: p1.length, label: 'P1 · 1月内', color: BRAND.WARM_ORANGE },
- { num: p2.length, label: 'P2 · 远期', color: 'var(--text-3)' },
- { num: actions.length, label: '总行动项', color: c.color },
- ])}
- ${renderCompareTable({
- title: 'P0 · 立即执行(本周-2周)',
- headers: ['行动', '负责方', '时间线', '状态'],
- rows: p0.map(a => [
- { html: `<strong>${esc(a.action)}</strong>`, bold: true },
- a.owner,
- a.timeline,
- { html: `<span style="color:${BRAND.CORAL}; font-weight:700;">${esc(a.status)}</span>`, color: BRAND.CORAL },
- ]),
- accent: BRAND.CORAL,
- })}
- <div style="margin-top:18px;">
- ${renderCompareTable({
- title: 'P1 · 1 月内启动',
- headers: ['行动', '负责方', '时间线', '状态'],
- rows: p1.map(a => [
- a.action,
- a.owner,
- a.timeline,
- { html: `<span style="color:${BRAND.WARM_ORANGE};">${esc(a.status)}</span>`, color: BRAND.WARM_ORANGE },
- ]),
- accent: BRAND.WARM_ORANGE,
- })}
- </div>
- <div style="margin-top:18px;">
- ${renderCompareTable({
- title: 'P2 · 远期储备',
- headers: ['行动', '负责方', '时间线', '状态'],
- rows: p2.map(a => [
- a.action,
- a.owner,
- a.timeline,
- a.status,
- ]),
- accent: 'var(--text-3)',
- })}
- </div>
- ${renderInsightHero({
- eyebrow: 'CLOSING',
- title: '从 6000 万到 10 亿:品类重定位是第一步',
- subtitle: `
- 本报告严格遵循王总 5 步分析路径,从品类全景出发,经过成人机会分析、儿童迁移、交叉验证,最终收敛到<strong style="color:${BRAND.JIANG_GREEN};">"嚼着吃的儿童肠道调理药"</strong>这个品类定位。<br/>
- 下一步:<strong>对齐定位方向 → 包装设计 → 话术培训 → 渠道铺货</strong>,启动从 6000 万到 10 亿的三年路径。
- `,
- color: c.color,
- })}
- </div>
- </section>`;
- }
- module.exports = { renderSub1, renderSub2, renderSub3 };
|