${renderSectionHead({
eyebrow: `${c.num}.${subIdx} · COMPETITOR PROS & CONS`,
title: sub,
subtitle: '江旭要求:"各个竞品,除了缺点还有哪些优点,全面来分析一下。"——以下优缺点均从真实 VOC 提取。',
color: c.color,
})}
${renderStatStrip([
{ num: cpData.reduce((s, cp) => s + cp.total, 0), label: '竞品相关 VOC 总量', color: c.color },
{ num: cpData.reduce((s, cp) => s + cp.posCount, 0), label: '正面评价', color: BRAND.JIANG_GREEN },
{ num: cpData.reduce((s, cp) => s + cp.negCount, 0), label: '负面评价', color: BRAND.CORAL },
{ num: cpData.length, label: '对标竞品', color: BRAND.PURPLE },
])}
${cpData.map(cp => `
${esc(cp.name)}
${cp.total} 条 VOC · ${cp.posCount} 正 / ${cp.negCount} 负
✅ 用户好评原声
${cp.posEvidence.length > 0
? cp.posEvidence.map(ev => {
const raw = (ev.content || '').slice(0, 90);
const trans = isEnglish(raw) ? getTranslation(ev.content) : null;
const display = trans ? trans.slice(0, 90) : raw;
const badge = trans ? '
🔄已翻译' : (isEnglish(raw) ? '
EN' : '');
return `
"${esc(display)}"${badge}
—${esc(ev.nickname || ev.platform)} · ❤️${ev.likes || 0}
`;
}).join('')
: `
正面 VOC 较少(${cp.posCount} 条)
`
}
❌ 用户差评原声
${cp.negEvidence.length > 0
? cp.negEvidence.map(ev => {
const raw = (ev.content || '').slice(0, 90);
const trans = isEnglish(raw) ? getTranslation(ev.content) : null;
const display = trans ? trans.slice(0, 90) : raw;
const badge = trans ? '
🔄已翻译' : (isEnglish(raw) ? '
EN' : '');
return `
"${esc(display)}"${badge}
—${esc(ev.nickname || ev.platform)} · ❤️${ev.likes || 0}
`;
}).join('')
: `
负面 VOC 较少(${cp.negCount} 条)
`
}
`).join('')}
${renderFindingCard({
icon: '📊',
title: 'VOC 驱动的竞品全景:正反面都来自真实用户声音',
body: `6 大竞品共
${cpData.reduce((s, cp) => s + cp.total, 0)} 条 VOC。正面评价集中在"医生推荐/品牌信任/有效降指标",负面集中在"
没效果/副作用/太贵/智商税"——这正是肝纯片的机会窗口。`,
accent: c.color,
})}
`;
}
// ============================================================
// 2.2 竞品差评 → 机会窗口
// ============================================================
function renderSub2({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
const items = data?.items || [];
const negItems = items.filter(it => it.sentiment === 'negative');
const painToOpp = [
{ pain: '吸收差/没效果', re: /没用|没效|没感觉|no effect|didn.?t work|吸收差/i, opp: '藤茶 DMY 总黄酮 98%·真实科学力', score: 95, color: BRAND.TENGCHA_GREEN },
{ pain: '智商税/广告过度', re: /智商税|骗人|广告|忽悠|scam/i, opp: '千年食饮史·不做硬广做口碑', score: 90, color: BRAND.JIANG_GREEN },
{ pain: '副作用/胃不舒服', re: /副作用|胃不舒服|拉肚子|过敏|side effect/i, opp: '藤茶 = 食饮千年·天然温和', score: 88, color: BRAND.SAGE },
{ pain: '价格贵/不值', re: /贵|不值|expensive|价格/i, opp: 'vs Swisse 便宜 15-30%·OTC 定价', score: 80, color: BRAND.WARM_ORANGE },
{ pain: '包装药盒感/无礼品感', re: /药盒|包装|不好看|礼|面子/i, opp: '新中式礼盒·东方养生美学', score: 85, color: BRAND.GOLD },
{ pain: '处方依赖/不能自购', re: /处方|医嘱|不能自己|医生才能/i, opp: 'OTC 非处方·药店自选', score: 82, color: BRAND.TECH_BLUE },
];
const painStats = painToOpp.map(p => ({
...p, count: negItems.filter(it => p.re.test(it.content || '')).length,
})).sort((a, b) => b.count - a.count);
const negEvidence = LA.getEvidence(negItems, { top: 4, seed: 61, minChars: 15, contentMatch: LIVER_CONTEXT_RE });
return `
${renderSectionHead({
eyebrow: `${c.num}.${subIdx} · PAIN → OPPORTUNITY`,
title: sub,
subtitle: '竞品的每个缺点都是我们的机会窗口。',
color: c.color,
})}
${renderCompareTable({
title: '竞品差评痛点 × 肝纯片应答',
headers: ['竞品痛点', 'VOC 数', '肝纯片应答', '匹配度'],
rows: painStats.map(p => [
{ html: `
${esc(p.pain)}`, bold: true },
`${p.count} 条`,
{ html: `
${esc(p.opp)}`, color: p.color },
{ html: `
${p.score}%` },
]),
accent: c.color,
})}
${negEvidence.length > 0 ? `
竞品差评原声 · 机会证据
${renderVocGrid(negEvidence, { columns: 2, accent: BRAND.CORAL, compact: true })}
` : ''}
${renderFindingCard({
icon: '🎯',
title: '机会窗口结论:藤茶 DMY 可以同时回应 6 个竞品痛点',
body: `"
吸收差"→ DMY 98% 真科学力 · "
智商税"→ 千年食饮不做硬广 · "
副作用"→ 天然温和 · "
价格贵"→ OTC 定价合理 · "
无礼品感"→ 新中式礼盒 · "
处方依赖"→ OTC 自选。`,
accent: c.color,
})}
`;
}
// ============================================================
// 2.3 三轴定位图谱
// ============================================================
function renderSub3({ chapter: c, subIdx, sub, slideNum, slideTotal, data, meta }) {
return `
${renderSectionHead({
eyebrow: `${c.num}.${subIdx} · THREE-AXIS MAP`,
title: sub,
subtitle: '保健品 ↔ OTC 药 ↔ 食品三轴定位图谱 · 肝纯片的无人地带坐标',
color: c.color,
})}
${renderMatrix2x2({
xLabel: '产品形态',
yLabel: '信任层级',
xLow: '←药品形态',
xHigh: '食品形态→',
yLow: '低信任(食品级)',
yHigh: '高信任(医疗级)',
quadrants: {
q1: {
title: '高信任·食品形态',
color: BRAND.JIANG_GREEN,
items: [
'★ 肝纯片目标位',
'保健品信任 + 食品便携',
'藤茶千年食饮史·天然',
'新中式礼盒·送得出手',
],
note: '→ 无人地带·品类创新',
},
q2: {
title: '高信任·药品形态',
color: BRAND.TECH_BLUE,
items: [
'易善复(处方药)',
'葵花护肝片(OTC)',
'水飞蓟片(OTC)',
],
note: '信任高但体验差',
},
q3: {
title: '低信任·药品形态',
color: '#888',
items: [
'不知名护肝片',
'微商保肝产品',
],
note: '→ 避免区',
},
q4: {
title: '低信任·食品形态',
color: BRAND.WARM_ORANGE,
items: [
'Swisse 护肝片(保健品)',
'海王金樽(食品饮料)',
'各类解酒糖果',
],
note: '"智商税"争议最多',
},
},
accent: c.color,
})}
${renderInsightHero({
eyebrow: 'POSITIONING GAP',
title: '肝纯片的无人地带 = "高信任 + 食品体验"象限',
subtitle: `
左上(易善复/葵花):高信任但体验差(药盒感/副作用/处方依赖)
右下(Swisse/海王金樽):好体验但低信任(智商税/没效果)
右上(肝纯片目标):高信任 + 好体验 = 藤茶千年食饮安全 × OTC 品质背书 × 新中式包装美学 → 品类空白
`,
color: c.color,
})}
`;
}
module.exports = { renderSub1, renderSub2, renderSub3 };