// ============================================================================== // 江中猴菇饮 OTC · VOC 深度洞察报告 v2 · 主渲染器 // ============================================================================== // v2 设计哲学:用户决策路径追踪(不再是"方法论展示") // 叙事线:全景漏斗 → 嵌套洞察 → 痛声地图 → 产品适配 → 定位推导 → 行动蓝图 // // 报告结构(6 章 × ~24 slides): // 01 · Cover // 02 · Agenda(新叙事线说明) // 03-05 · Ch1 全景漏斗(3 子章):TAM/SAM/SOM + 6级病程 + 目标区间 // 06-10 · Ch2 嵌套洞察(5 子章):每个病程阶段×细分症状×用户选择 // 11-14 · Ch3 痛声地图(4 子章):每层未满足需求 + 需求空白矩阵 // 15-18 · Ch4 产品适配(4 子章):产品力边界 + 米稀归因 + 插入点 + 场景 // 19-22 · Ch5 定位推导(4 子章):心智阶梯 + 差异化 + 聚焦 + 定位陈述 // 23-25 · Ch6 行动蓝图(3 子章):P0/P1 + 验证 + 数据缺口 // ============================================================================== const STYLES = require('./voc-styles.js'); const SCRIPTS = require('./voc-scripts.js'); const HGY = require('./houguyin-analyze.js'); const CH1 = require('./houguyin-v2-ch1-funnel.js'); const CH2 = require('./houguyin-v2-ch2-nested.js'); const CH3 = require('./houguyin-v2-ch3-pain.js'); const CH4 = require('./houguyin-v2-ch4-fit.js'); const CH5 = require('./houguyin-v2-ch5-position.js'); const CH6 = require('./houguyin-v2-ch6-action.js'); // ============================================================ // 主题色(猴菇饮专属色板 · v2 沿用) // ============================================================ const BRAND = { JIANG_GREEN: '#2D9C5D', // 江中主色(品牌/机会/定位) HOUGU_TAN: '#E8A87C', // 猴菇暖棕(产品适配) DEEP_AMBER: '#C96E3F', // 猴头菇深色(礼品/传统) CREAM: '#F5E6D3', // 米黄色(米稀联想) TECH_BLUE: '#0085CA', // 信任蓝(市场全景/TAM) WARM_ORANGE: '#FF8C42', // 温暖橙(嵌套洞察/场景) CORAL: '#FF6B6B', // 珊瑚红(痛声/痛点) SAGE: '#87A96B', // 鼠尾草绿(行动蓝图) PURPLE: '#8B5CF6', // 紫色(定位推导/理论) ROSE: '#FF4D8D', // 玫瑰(竞品对比) }; // ============================================================ // 6 章元信息(用户决策路径递进) // ============================================================ const CHAPTERS = [ { id: 1, num: '1', key: 'funnel', title: '全景漏斗', en: 'MARKET FUNNEL', tone: 'blue', color: BRAND.TECH_BLUE, icon: '🔭', summary: 'TAM 2.5亿胃病人群 → SAM 可服务市场 → SOM 猴菇饮的战场。6级病程分层,锁定我们的目标区间。' }, { id: 2, num: '2', key: 'nested', title: '嵌套洞察', en: 'NESTED INSIGHT', tone: 'orange', color: BRAND.WARM_ORANGE, icon: '🔬', summary: '每个病程阶段 × 每个细分症状 × 用户选了什么产品。嵌套逻辑:先看阶段,再看症状,再看选择。' }, { id: 3, num: '3', key: 'pain', title: '痛声地图', en: 'PAIN MAP', tone: 'rose', color: BRAND.CORAL, icon: '🔥', summary: '每一层产品的用户都在痛苦。把 VOC 痛声按层铺开,提炼跨层共性未满足需求,画出"声量×满足度"四象限。' }, { id: 4, num: '4', key: 'fit', title: '产品适配', en: 'PRODUCT FIT', tone: 'amber', color: BRAND.HOUGU_TAN, icon: '🎯', summary: '猴菇饮的真实能力边界在哪?米稀成功的可迁移因子 × 饼干失败的红线 × 精准插入点 × 场景适配。' }, { id: 5, num: '5', key: 'position', title: '定位推导', en: 'POSITIONING', tone: 'purple', color: BRAND.PURPLE, icon: '💡', summary: '里斯品类战略 × 特劳特定位。心智阶梯分析 → 差异化锚点 → 聚焦方向 → 一句话定位陈述 → VOC验证。' }, { id: 6, num: '6', key: 'action', title: '行动蓝图', en: 'ACTION PLAN', tone: 'green', color: BRAND.SAGE, icon: '🚀', summary: 'P0 立即行动 + P1 三个月验证 + 数据缺口与下一轮采集计划。从洞察到落地的最短路径。' }, ]; // ============================================================ // 各章节 subsections 清单 // ============================================================ const CHAPTER_SUBSECTIONS = { 'funnel': [ 'TAM · 2.5亿胃病人群 × 100亿市场全景', 'SAM · 可服务市场 × 6级病程分层', 'SOM · 猴菇饮的目标区间 × 5000万→5亿路径', ], 'nested': [ '治疗级+化药级 · 5大症状 × 对应产品 × 未满足需求', '中成药养护 · 4大症状 × 中成药产品 × 未满足需求', '保健+功能食品 · 4大需求场景 × 产品 × 未满足需求', '未病/预防 · 4大触发场景 × 行为 × 空白', '嵌套全景 · 4阶段×全症状×产品×机会 总览矩阵', ], 'pain': [ '化药级痛声 · "有效但不敢停" × PPI依赖焦虑', '中成药痛声 · "苦涩难咽年轻人不买" × 代际断层', '功能食品痛声 · "吃了个寂寞" × 无OTC信任', '跨层汇总 · 5大共性未满足需求 × 声量-满足度四象限', ], 'fit': [ '产品力实事求是 · 猴头菇的真实效用边界', '米稀成功归因 × 可迁移因子 vs 饼干失败红线', '精准插入点 · 3大机会×无人地带坐标', '场景适配 · PPI伴侣/日常养护/药店推荐/礼品', ], 'position': [ '里斯品类战略 · 品类进化树 × 品类分化机会', '特劳特心智阶梯 · 胃病用户脑中的产品序列', '差异化锚点 · vs 药品 / vs 保健品 / vs 食品', '定位陈述 · 一句话定位 × VOC 验证证据', ], 'action': [ 'P0 行动 · 产品/渠道/话术立即落地', 'P1 验证 · 3个月内数据闭环', '数据缺口 × 下一轮采集计划', ], }; // ============================================================ // 每章 hero line(divider 用) // ============================================================ const CHAPTER_HERO_LINES = { 'funnel': '中国 2.5 亿胃病患者,100 亿 OTC 胃药市场。从全量到可服务再到可获取——TAM → SAM → SOM 三级漏斗,帮总经理看清"几亿人里我们能切多少"。6 级病程分层锁定猴菇饮的精准战场。', 'nested': '嵌套逻辑来了:第一层按病程阶段(由重到轻 6 级),第二层在每个阶段内按细分症状展开(胃酸/胃痛/胃胀/嗳气),第三层看这个症状下用户选了什么产品、有什么未满足需求。从用户真实决策路径中找出猴菇饮的切入缝隙。', 'pain': '每一层产品的用户都在痛苦。PPI 用户"有效但不敢停",中成药用户"苦涩难咽年轻人不买账",功能食品用户"吃了个寂寞无 OTC 信任"。把每层的 VOC 痛声铺开,提炼出 5 大跨层共性未满足需求——哪里最痛、哪里最空。', 'fit': '猴菇饮的真实能力边界在哪?不吹不黑——猴头菇的效用是什么?米稀 7.5 亿成功的因子哪些可以迁移?饼干失败的红线在哪?实事求是画出"我们能接住的需求"和"绝对不能碰的区域",找到精准插入点。', 'position': '洞察做完了,是时候收敛为定位。用里斯品类战略看"我在哪个品类竞争",用特劳特定位看"我在用户心智中占什么位置"。从心智阶梯 → 差异化锚点 → 聚焦方向,推导出一句话定位——能写在盒子上、药店店员能说出来、用户能记住的那一句。', 'action': '从洞察到落地的最短路径。P0 立即行动:产品规格/渠道选择/话术定稿。P1 三个月验证:数据闭环 + 定位验证。数据缺口:哪些结论还需要补充 VOC 采集来夯实。5000 万 → 5 亿的 3 阶段路径。', }; // ============================================================ // utils // ============================================================ function esc(s) { return String(s ?? '').replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c])); } function fmtNum(n) { if (n == null || isNaN(n)) return '—'; if (n >= 10000) return (n / 10000).toFixed(1).replace(/\.0$/, '') + 'w'; if (n >= 1000) return (n / 1000).toFixed(1).replace(/\.0$/, '') + 'k'; return String(n); } function sn(n) { return String(n).padStart(2, '0'); } // ============================================================ // SLIDE_RENDERERS 注册表 // ============================================================ const SLIDE_RENDERERS = { // Ch1 全景漏斗 'funnel-1': CH1.renderSub1, 'funnel-2': CH1.renderSub2, 'funnel-3': CH1.renderSub3, // Ch2 嵌套洞察 'nested-1': CH2.renderSub1, 'nested-2': CH2.renderSub2, 'nested-3': CH2.renderSub3, 'nested-4': CH2.renderSub4, 'nested-5': CH2.renderSub5, // Ch3 痛声地图 'pain-1': CH3.renderSub1, 'pain-2': CH3.renderSub2, 'pain-3': CH3.renderSub3, 'pain-4': CH3.renderSub4, // Ch4 产品适配 'fit-1': CH4.renderSub1, 'fit-2': CH4.renderSub2, 'fit-3': CH4.renderSub3, 'fit-4': CH4.renderSub4, // Ch5 定位推导 'position-1': CH5.renderSub1, 'position-2': CH5.renderSub2, 'position-3': CH5.renderSub3, 'position-4': CH5.renderSub4, // Ch6 行动蓝图 'action-1': CH6.renderSub1, 'action-2': CH6.renderSub2, 'action-3': CH6.renderSub3, }; // ============================================================ // 共用组件 // ============================================================ function renderNav() { const dots = [ { tip: '封面', href: '#s0' }, { tip: '目录', href: '#agenda' }, ...CHAPTERS.map((c) => ({ tip: `${c.num} ${c.title}`, href: `#${c.key}` })), ]; return `
`; } function renderCover(opts = {}) { const data = HGY.loadMerged(); const meta = HGY.getMeta(data); return ``; } function renderAgenda(opts = {}) { return ``; } function renderDivider(chapter, slideNum, slideTotal) { const c = chapter; const heroLine = CHAPTER_HERO_LINES[c.key] || c.summary; return ``; } function renderComingSoon(ctx) { const { chapter: c, subIdx, slideNum, slideTotal, subTitle } = ctx; return `