hongcheng-render.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // ==============================================================================
  2. // 洪城到家 · VOC 报告渲染引擎
  3. // ==============================================================================
  4. const HC = require('./hongcheng-components.js');
  5. const CHAPTERS = [
  6. { id: 'ch1', title: '诘问起点', subtitle: '江西母婴服务市场现状与机会' },
  7. { id: 'ch2', title: '竞品获客策略', subtitle: '头部品牌VOC拆解' },
  8. { id: 'ch3', title: '用户痛点VOC', subtitle: '选择月嫂的三大顾虑' },
  9. { id: 'ch4', title: 'KANO×JTBD', subtitle: '需求分类与价值分层' },
  10. { id: 'ch5', title: '场景四元素地图', subtitle: '核心使用场景拆解' },
  11. { id: 'ch6', title: '三轴×无人地带', subtitle: '竞争定位分析' },
  12. { id: 'ch7', title: '新机会×新渠道', subtitle: '增长突破口' },
  13. { id: 'ch8', title: '4P配称蓝图', subtitle: '落地执行计划' },
  14. ];
  15. const CHAPTER_SUBSECTIONS = {
  16. ch1: ['市场现状', '机会分析', '增长路径'],
  17. ch2: ['天鹅到家', '好孕妈妈', '多喜娃', '妈咪无忧'],
  18. ch3: ['价格透明', '专业度验证', '服务保障'],
  19. ch4: ['KANO五类', '功能价值', '情绪价值', '社会价值'],
  20. ch5: ['产前决策', '月子期服务', '产后恢复', '职场复工'],
  21. ch6: ['三轴图谱', '无人地带', 'MOAT对标'],
  22. ch7: ['医院地推', '短剧营销', '多渠道组合'],
  23. ch8: ['4P配称', '增长路径'],
  24. };
  25. function buildHTML({ product = '洪城到家', collectedAt = new Date().toISOString().slice(0, 10) } = {}) {
  26. const brand = HC.BRAND;
  27. return `<!DOCTYPE html>
  28. <html lang="zh-CN">
  29. <head>
  30. <meta charset="UTF-8">
  31. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  32. <title>${product} · VOC 深度洞察报告</title>
  33. <style>
  34. :root {
  35. --bg-0: #ffffff;
  36. --bg-1: #f7f8fa;
  37. --bg-2: #eef0f4;
  38. --border: #e2e5ed;
  39. --text-1: #1a1d23;
  40. --text-2: #4a5568;
  41. --text-3: #8896a6;
  42. --font-sans: 'Inter', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  43. --font-head: 'Inter', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  44. --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
  45. --radius-sm: 6px;
  46. --radius-md: 10px;
  47. }
  48. *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
  49. body { font-family: var(--font-sans); background: var(--bg-0); color: var(--text-1); font-size: 15px; line-height: 1.6; }
  50. .report-container { max-width: 1100px; margin: 0 auto; padding: 40px 24px; }
  51. .report-section { margin-bottom: 64px; scroll-margin-top: 24px; }
  52. .section-head { margin-bottom: 32px; padding-bottom: 20px; border-bottom: 2px solid var(--border); }
  53. .section-eyebrow { font-size: 0.72rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; margin-bottom: 8px; }
  54. .text-h1 { font-size: 1.8rem; font-weight: 800; color: var(--text-1); margin-bottom: 8px; }
  55. .section-sub { color: var(--text-2); font-size: 1rem; }
  56. .text-mono { font-family: var(--font-mono); }
  57. .text-xs { font-size: 0.75rem; }
  58. .rise-in { animation: riseIn 0.5s ease-out; }
  59. .fade-up { animation: fadeUp 0.5s ease-out; }
  60. .headline-anim { }
  61. @keyframes riseIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
  62. @keyframes fadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
  63. .footer { text-align: center; padding: 40px 0 20px; color: var(--text-3); font-size: 0.8rem; border-top: 1px solid var(--border); margin-top: 60px; }
  64. </style>
  65. </head>
  66. <body>
  67. <div class="report-container">
  68. <!-- 封面 -->
  69. <section class="report-section" style="text-align:center; padding:60px 20px; background:linear-gradient(135deg, ${brand.HONGCHENG_RED}08, ${brand.HONGCHENG_GOLD}08); border-radius:16px; margin-bottom:48px;">
  70. <div style="font-size:0.8rem; font-weight:700; letter-spacing:0.2em; color:${brand.HONGCHENG_RED}; margin-bottom:16px;">VOC 深度洞察报告</div>
  71. <h1 style="font-size:2.4rem; font-weight:900; color:var(--text-1); margin-bottom:12px;">${product}</h1>
  72. <p style="font-size:1.1rem; color:var(--text-2); margin-bottom:24px;">从 3000 单到 3万单 · 江西母婴服务市场增长策略</p>
  73. <div style="display:inline-flex; gap:12px; flex-wrap:wrap; justify-content:center;">
  74. <span style="padding:6px 16px; background:${brand.HONGCHENG_RED}15; color:${brand.HONGCHENG_RED}; border-radius:20px; font-size:0.78rem; font-weight:600;">小红书</span>
  75. <span style="padding:6px 16px; background:${brand.HONGCHENG_RED}15; color:${brand.HONGCHENG_RED}; border-radius:20px; font-size:0.78rem; font-weight:600;">抖音</span>
  76. <span style="padding:6px 16px; background:${brand.HONGCHENG_RED}15; color:${brand.HONGCHENG_RED}; border-radius:20px; font-size:0.78rem; font-weight:600;">美团</span>
  77. </div>
  78. <div style="margin-top:24px; color:var(--text-3); font-size:0.8rem;">采集日期:${collectedAt}</div>
  79. </section>
  80. <!-- Ch1: 诘问起点 -->
  81. <section class="report-section" id="ch1">
  82. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 01', title: '诘问起点', subtitle: '江西母婴服务市场现状与机会', color: brand.HONGCHENG_RED })}
  83. ${HC.renderInsightHero({ eyebrow: '核心问题', title: '现状:3000单/年 → 目标:3万单/年(10倍增长)', subtitle: '江西30万新生儿/年,洪诚到家目前市场渗透率仅1%,目标吃下10%市场', color: brand.HONGCHENG_RED })}
  84. ${HC.renderStatStrip([
  85. { num: '30万', label: '江西新生儿/年', color: brand.HONGCHENG_RED },
  86. { num: '1%', label: '当前市场渗透率', color: brand.SERVICE_ORANGE },
  87. { num: '10%', label: '目标市场占有率', color: brand.TRUST_GREEN },
  88. { num: '10x', label: '订单增长目标', color: brand.HONGCHENG_GOLD },
  89. ], { accent: brand.HONGCHENG_RED })}
  90. ${HC.renderDecisionList([
  91. '医院地推:最高效的精准获客场景,直接触达即将生产的精准用户',
  92. '短剧破圈:借南昌万亿短剧政策东风,低成本实现品牌曝光',
  93. '多渠道组合:抖音+小红书+美团+私域,老带新机制提升LTV',
  94. ], { accent: brand.CORE_STRATEGY, title: '核心策略三句话' })}
  95. </section>
  96. <!-- Ch2: 竞品获客策略 -->
  97. <section class="report-section" id="ch2">
  98. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 02', title: '竞品获客策略', subtitle: '头部品牌VOC拆解', color: brand.SERVICE_ORANGE })}
  99. ${HC.renderCompareTable({
  100. title: '核心竞品渠道策略对比',
  101. headers: ['竞品', '核心获客渠道', '可借鉴点'],
  102. rows: [
  103. ['天鹅到家', '多平台全覆盖+AI驱动', '标准化体系+多渠道组合'],
  104. ['好孕妈妈', '医院深度合作+CRM', '医院渠道是最高效场景'],
  105. ['多喜娃', '医院地推+美团战略合作', '自营模式+医院地推三步走'],
  106. ['妈咪无忧', '小红书KOS矩阵', '账号矩阵打法'],
  107. ],
  108. accent: brand.SERVICE_ORANGE,
  109. })}
  110. </section>
  111. <!-- Ch3: 用户痛点VOC -->
  112. <section class="report-section" id="ch3">
  113. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 03', title: '用户痛点VOC', subtitle: '选择月嫂的三大顾虑', color: brand.MATERNITY_PINK })}
  114. ${HC.renderFindingCard({ icon: '💰', title: '价格透明顾虑', body: '用户对月嫂价格不透明是核心痛点,希望能够线上统一定价、价格公开', accent: brand.SERVICE_ORANGE })}
  115. ${HC.renderFindingCard({ icon: '🏆', title: '专业度信任顾虑', body: '用户判断月嫂专业度的核心信号是资质证书、客户评价、实体规模', accent: brand.TRUST_GREEN })}
  116. ${HC.renderFindingCard({ icon: '🛡️', title: '服务保障顾虑', body: '用户担心月嫂临时变更或服务不达标,承诺不满意换人能显著降低决策门槛', accent: brand.HONGCHENG_RED })}
  117. </section>
  118. <!-- Ch4: KANO×JTBD -->
  119. <section class="report-section" id="ch4">
  120. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 04', title: 'KANO×JTBD', subtitle: '需求分类与价值分层', color: brand.SOCIAL_PURPLE })}
  121. ${HC.renderTheoryBox({
  122. theory: 'KANO Model',
  123. mapping: '<b>必备型需求</b>:专业护理能力、真实资质证明<br><b>期望型需求</b>:价格透明、服务保障<br><b>兴奋型需求</b>:短剧内容种草、私人定制服务',
  124. accent: brand.SOCIAL_PURPLE,
  125. })}
  126. </section>
  127. <!-- Ch5: 场景四元素地图 -->
  128. <section class="report-section" id="ch5">
  129. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 05', title: '场景四元素地图', subtitle: '核心使用场景拆解', color: brand.BABY_BLUE })}
  130. ${HC.renderChannelCard({
  131. icon: '🤰',
  132. title: '产前焦虑准备',
  133. desc: '孕中晚期(28-40周),开始考虑坐月子方案',
  134. metrics: [{ value: '高', label: '紧迫性' }, { value: '30万/年', label: '潜在用户' }],
  135. accent: brand.BABY_BLUE,
  136. })}
  137. ${HC.renderChannelCard({
  138. icon: '👶',
  139. title: '月子期专业护理',
  140. desc: '宝宝出生后,需要专业护理',
  141. metrics: [{ value: '极高', label: '紧迫性' }, { value: '1-3月', label: '服务周期' }],
  142. accent: brand.MATERNITY_PINK,
  143. })}
  144. </section>
  145. <!-- Ch6: 三轴×无人地带 -->
  146. <section class="report-section" id="ch6">
  147. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 06', title: '三轴×无人地带', subtitle: '竞争定位分析', color: brand.COMPETITOR_GRAY })}
  148. ${HC.renderMatrix2x2({
  149. xLabel: '价格',
  150. yLabel: '专业度',
  151. xLow: '低价',
  152. xHigh: '高价',
  153. yLow: '低专业度',
  154. yHigh: '高专业度',
  155. quadrants: {
  156. q1: { color: brand.TRUST_GREEN, title: '高端专业', items: ['月子会所', '天鹅到家'] },
  157. q2: { color: brand.HONGCHENG_RED, title: '高专业+中价', items: ['洪诚到家(目标)', '好孕妈妈'] },
  158. q3: { color: brand.COMPETITOR_GRAY, title: '低专业+低价', items: ['社区月嫂'] },
  159. q4: { color: brand.SERVICE_ORANGE, title: '中专业+低价', items: ['部分社区店升级'] },
  160. },
  161. accent: brand.COMPETITOR_GRAY,
  162. })}
  163. </section>
  164. <!-- Ch7: 新机会×新渠道 -->
  165. <section class="report-section" id="ch7">
  166. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 07', title: '新机会×新渠道', subtitle: '增长突破口', color: brand.TRUST_GREEN })}
  167. ${HC.renderChannelCard({
  168. icon: '🏥',
  169. title: '医院地推',
  170. desc: '直接触达即将生产的精准用户,转化率远高于泛流量',
  171. metrics: [{ value: '50-100元', label: '客资成本' }, { value: '极高', label: '转化率' }],
  172. accent: brand.TRUST_GREEN,
  173. })}
  174. ${HC.renderChannelCard({
  175. icon: '🎬',
  176. title: '短剧营销',
  177. desc: '借南昌万亿短剧政策东风,低成本实现品牌曝光',
  178. metrics: [{ value: '3-5万/部', label: '冠名成本' }, { value: '高', label: '曝光性价比' }],
  179. accent: brand.HONGCHENG_GOLD,
  180. })}
  181. </section>
  182. <!-- Ch8: 4P配称蓝图 -->
  183. <section class="report-section" id="ch8">
  184. ${HC.renderSectionHead({ eyebrow: 'CHAPTER 08', title: '4P配称蓝图', subtitle: '落地执行计划', color: brand.CORE_STRATEGY })}
  185. ${HC.renderDecisionList([
  186. '阶段一(1-3月):搭建抖音/小红书账号矩阵 + 医院渠道BD + 美团店铺优化',
  187. '阶段二(3-6月):短视频日常运营 + 首部合作短剧 + 微信私域搭建',
  188. '阶段三(6-12月):多渠道付费投放 + 短剧系列化 + 医院渠道规模化',
  189. ], { accent: brand.CORE_STRATEGY, title: '3阶段执行路径' })}
  190. </section>
  191. <!-- 页脚 -->
  192. <div class="footer">
  193. <div>${product} · VOC 深度洞察报告</div>
  194. <div style="margin-top:8px;">Generated by OpenClaw VOC System · ${new Date().toLocaleDateString('zh-CN')}</div>
  195. </div>
  196. </div>
  197. <script>
  198. // 简单的动画效果
  199. document.querySelectorAll('.report-section').forEach((section, i) => {
  200. section.style.opacity = '0';
  201. section.style.transform = 'translateY(16px)';
  202. setTimeout(() => {
  203. section.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
  204. section.style.opacity = '1';
  205. section.style.transform = 'translateY(0)';
  206. }, i * 80);
  207. });
  208. </script>
  209. </body>
  210. </html>`;
  211. }
  212. module.exports = { buildHTML, CHAPTERS, CHAPTER_SUBSECTIONS };