global-demand-demo-options.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <style>
  2. .intro { max-width: 980px; margin-bottom: 20px; }
  3. .intro strong { color: #123f35; }
  4. .demo-grid { display: grid; gap: 20px; }
  5. .demo-card {
  6. overflow: hidden;
  7. border: 1px solid #d8ddd8;
  8. border-radius: 18px;
  9. background: #fff;
  10. box-shadow: 0 14px 38px rgba(32,55,47,.07);
  11. cursor: pointer;
  12. }
  13. .demo-card.selected { border: 2px solid #14745f; box-shadow: 0 0 0 4px rgba(20,116,95,.12); }
  14. .demo-title { display:flex; align-items:flex-start; gap:14px; padding:18px 20px 14px; border-bottom:1px solid #e5e8e5; }
  15. .demo-letter { display:grid; place-items:center; width:34px; height:34px; border-radius:50%; background:#173f36; color:white; font-weight:800; }
  16. .demo-title h3 { margin:0 0 4px; font-size:17px; }
  17. .demo-title p { margin:0; color:#6d766f; font-size:12px; }
  18. .recommended { margin-left:auto; padding:5px 8px; border-radius:6px; background:#e4f2ec; color:#17604f; font-size:10px; font-weight:750; }
  19. .screen { padding:14px; background:#f4f5f1; }
  20. .appbar { display:flex; align-items:center; justify-content:space-between; padding:10px 13px; background:#17332c; color:white; border-radius:10px 10px 0 0; }
  21. .appbar b { font-size:12px; }
  22. .appbar span { color:#b8ccc4; font-size:8px; }
  23. .heat-legend { display:flex; gap:8px; align-items:center; font-size:8px; color:#657069; }
  24. .heat-legend i { display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:2px; }
  25. .workspace { display:grid; grid-template-columns:minmax(0,1.45fr) minmax(260px,.55fr); min-height:330px; background:white; border:1px solid #dde2de; border-top:0; border-radius:0 0 10px 10px; }
  26. .map { position:relative; padding:15px; overflow:hidden; background:linear-gradient(90deg,rgba(34,57,49,.035) 1px,transparent 1px),#fbfcfa; background-size:80px 100%; }
  27. .map-head { display:flex; justify-content:space-between; margin-bottom:12px; font-size:9px; }
  28. .map-head strong { font-size:11px; }
  29. .branch { display:grid; grid-template-columns:90px 1fr; align-items:center; gap:10px; margin:7px 0; }
  30. .branch-name { padding:7px 8px; border-radius:6px; font-size:9px; font-weight:700; color:white; }
  31. .children { display:flex; align-items:center; gap:5px; }
  32. .node { min-width:55px; padding:6px 7px; border-radius:5px; color:#fff; font-size:8px; text-align:center; position:relative; }
  33. .node:before { content:""; position:absolute; left:-6px; top:50%; width:6px; border-top:1px solid #aeb8b2; }
  34. .hot { background:#d94f3f; }
  35. .warm { background:#e58b3c; }
  36. .mid { background:#d5a943; }
  37. .cool { background:#7c9a91; }
  38. .cold { background:#cbd2ce; color:#53615b; }
  39. .selected-node { outline:3px solid rgba(20,116,95,.22); box-shadow:0 0 0 1px #fff inset; }
  40. .insight { margin-top:13px; padding:10px 11px; border-left:3px solid #d94f3f; background:#fff3ef; font-size:9px; line-height:1.6; }
  41. .output { padding:13px; border-left:1px solid #e0e4e1; background:#f9faf8; }
  42. .output h4 { margin:0 0 3px; font-size:11px; }
  43. .output > p { margin:0 0 10px; color:#748078; font-size:8px; }
  44. .demand { margin-bottom:8px; padding:9px; border:1px solid #dce2de; border-radius:7px; background:#fff; }
  45. .demand-top { display:flex; justify-content:space-between; gap:8px; }
  46. .demand strong { font-size:9px; line-height:1.4; }
  47. .tag { flex:0 0 auto; height:17px; padding:2px 5px; border-radius:4px; color:#fff; font-size:7px; font-weight:750; }
  48. .tag.yes { background:#168065; }
  49. .tag.watch { background:#b8893d; }
  50. .tag.no { background:#929c96; }
  51. .reason { margin-top:5px; color:#6d776f; font-size:7px; line-height:1.5; }
  52. .evidence { display:flex; flex-wrap:wrap; gap:3px; margin-top:6px; }
  53. .evidence span { padding:2px 4px; border-radius:3px; background:#edf1ee; color:#5c6861; font-size:6px; }
  54. .evidence .missing { border:1px dashed #c5cbc7; background:#fafafa; color:#929994; }
  55. .matrix { display:grid; grid-template-columns:repeat(4,1fr); gap:5px; margin-top:10px; }
  56. .tile { min-height:65px; padding:8px; border-radius:6px; color:white; }
  57. .tile b { display:block; font-size:9px; }
  58. .tile small { display:block; margin-top:3px; font-size:6px; opacity:.86; }
  59. .pipeline { display:flex; align-items:stretch; gap:6px; margin-top:14px; }
  60. .stage { flex:1; padding:8px; border:1px solid #dce1dd; border-radius:6px; background:#fff; }
  61. .stage b { display:block; font-size:8px; }
  62. .stage small { color:#768079; font-size:6px; line-height:1.4; }
  63. .arrow { align-self:center; color:#98a19b; }
  64. .river { position:relative; height:245px; margin-top:10px; }
  65. .river-line { position:absolute; left:35px; right:35px; height:1px; background:#d9dfdb; transform-origin:left; }
  66. .river-node { position:absolute; display:grid; place-items:center; border-radius:50%; color:white; font-size:7px; text-align:center; box-shadow:0 0 0 5px rgba(255,255,255,.75); }
  67. .demo-foot { padding:11px 18px 14px; color:#626d66; font-size:10px; line-height:1.55; }
  68. .logic-strip { display:grid; grid-template-columns:1fr auto 1fr auto 1fr; align-items:center; gap:8px; margin-top:18px; padding:14px; border:1px solid #dbe2dd; border-radius:12px; background:#f8faf8; }
  69. .logic-strip div { padding:9px; border-radius:7px; background:white; font-size:9px; }
  70. .logic-strip strong { display:block; margin-bottom:3px; }
  71. .logic-strip span { color:#737d76; font-size:8px; line-height:1.45; }
  72. @media(max-width:900px){ .workspace{grid-template-columns:1fr}.output{border-left:0;border-top:1px solid #e0e4e1}.matrix{grid-template-columns:1fr 1fr} }
  73. </style>
  74. <div class="intro">
  75. <h2>三种“全局判断并产出需求”的 Demo</h2>
  76. <p class="subtitle">它们都只有一套判断视角,不再切换“先验/后验/机会”等模式。颜色回答哪里热,需求卡回答系统最终提出什么,reason 回答为什么成立或为什么暂不成立。</p>
  77. <p style="margin:-8px 0 14px;color:#9a6b32;font-size:11px;">说明:节点名称和“居家生活 / 家务劳动 / 阅读”的证据来自现有上游数据;界面中的需求总数、模块需求条数仅用于比较版式,不代表已经完成的真实计算结果。</p>
  78. <div class="logic-strip">
  79. <div><strong>上游事实</strong><span>树位置、四项热度、真实 ROV / VOV、元素与原始 reason</span></div>
  80. <b>→</b>
  81. <div><strong>语义判断</strong><span>维度缺失不等于零;结合父子热度、语义具体度、证据一致性判断</span></div>
  82. <b>→</b>
  83. <div><strong>最终输出</strong><span>生成需求 / 继续观察 / 暂不生成,并输出可读 reason</span></div>
  84. </div>
  85. </div>
  86. <div class="demo-grid">
  87. <section class="demo-card" data-choice="a" onclick="toggleSelect(this)">
  88. <div class="demo-title">
  89. <div class="demo-letter">A</div>
  90. <div><h3>全局热力树 + 需求输出栏</h3><p>保留树的层级关系,但只展示当前有判断价值的骨架;右边持续输出大量需求。</p></div>
  91. <span class="recommended">推荐</span>
  92. </div>
  93. <div class="screen">
  94. <div class="appbar"><b>全局需求热力树</b><div class="heat-legend"><span><i style="background:#d94f3f"></i>高热</span><span><i style="background:#e58b3c"></i>升温</span><span><i style="background:#d5a943"></i>稳定</span><span><i style="background:#cbd2ce"></i>弱信号</span></div><span>数据日期 2026-07-14</span></div>
  95. <div class="workspace">
  96. <div class="map">
  97. <div class="map-head"><strong>全局模块热度</strong><span>节点颜色由多维证据综合判断,不显示技术分数</span></div>
  98. <div class="branch"><div class="branch-name warm">行为</div><div class="children"><div class="node mid">日常活动</div><div class="node hot selected-node">居家生活</div><div class="node warm">个人护理</div><div class="node warm">家务劳动</div><div class="node mid">阅读</div><div class="node cool">物品处置</div></div></div>
  99. <div class="branch"><div class="branch-name mid">人物</div><div class="children"><div class="node mid">现实人物</div><div class="node warm">历史名人</div><div class="node warm">政治领袖</div><div class="node mid">共和国领导人</div></div></div>
  100. <div class="branch"><div class="branch-name cool">知识</div><div class="children"><div class="node cool">方法</div><div class="node mid">生活技巧</div><div class="node cold">居家生活</div></div></div>
  101. <div class="branch"><div class="branch-name warm">事件</div><div class="children"><div class="node warm">历史事件</div><div class="node mid">抗日战争</div><div class="node mid">解放战争</div></div></div>
  102. <div class="insight"><strong>全局判断:</strong>“行为 → 日常活动 → 居家生活”是当前值得扩充需求的高热区域。它的外部热度明显,但真实 ROV / VOV 暂无数据,因此结论是“高热待验证”,不是“低需求”。</div>
  103. </div>
  104. <aside class="output">
  105. <h4>系统提出的需求</h4>
  106. <p>当前全局共形成 386 条,按价值与证据完整度排序</p>
  107. <div class="demand">
  108. <div class="demand-top"><strong>补充家庭清洁的分步骤、省力技巧与常见误区内容</strong><span class="tag yes">生成需求</span></div>
  109. <div class="reason">Reason:父级“居家生活”外部热度高;子类“家务劳动”存在同期信号;上游元素“家庭清洁”语义具体。虽无真实 ROV / VOV,证据仍足以形成待验证需求。</div>
  110. <div class="evidence"><span>父级高热</span><span>同期信号</span><span>元素:家庭清洁</span><span class="missing">后验待验证</span></div>
  111. </div>
  112. <div class="demand">
  113. <div class="demand-top"><strong>围绕居家阅读场景补充内容</strong><span class="tag watch">继续观察</span></div>
  114. <div class="reason">Reason:只有较弱的同期信号;元素“书本翻页”描述的是动作,不足以说明用户想解决的问题。需要更多上游语言或内容表现后再生成明确需求。</div>
  115. <div class="evidence"><span>单一弱信号</span><span>元素语义偏浅</span><span class="missing">缺少问题表达</span></div>
  116. </div>
  117. <div class="demand">
  118. <div class="demand-top"><strong>泛化生成“所有居家用品介绍”</strong><span class="tag no">不生成</span></div>
  119. <div class="reason">Reason:范围过宽,无法映射到明确用户问题;即便父节点热度高,也不能直接把所有下级主题都判为需求。</div>
  120. </div>
  121. </aside>
  122. </div>
  123. </div>
  124. <div class="demo-foot">优点:最接近你的业务目标——全局图负责发现热区,右侧直接成为“需求生产结果”。逐层下钻只用于解释需求,不是页面主任务。</div>
  125. </section>
  126. <section class="demo-card" data-choice="b" onclick="toggleSelect(this)">
  127. <div class="demo-title">
  128. <div class="demo-letter">B</div>
  129. <div><h3>热度地图 + 需求生产流水线</h3><p>弱化树线条,用模块面积和颜色展示全局;下方展示需求如何被判断出来。</p></div>
  130. </div>
  131. <div class="screen">
  132. <div class="appbar"><b>平台需求全景</b><span>热度区域 → 判断证据 → 平台需求</span></div>
  133. <div class="workspace">
  134. <div class="map">
  135. <div class="map-head"><strong>全局需求地形</strong><span>面积代表该模块下可提取的信息规模</span></div>
  136. <div class="matrix">
  137. <div class="tile hot" style="grid-column:span 2"><b>居家生活</b><small>高热 · 8 个直接子类 · 外部信号强</small></div>
  138. <div class="tile warm"><b>历史人物</b><small>升温 · 多节点交织</small></div>
  139. <div class="tile mid"><b>战争历史</b><small>稳定 · 有事件关系</small></div>
  140. <div class="tile mid"><b>个人护理</b><small>稳定热度</small></div>
  141. <div class="tile warm"><b>家务劳动</b><small>可形成具体需求</small></div>
  142. <div class="tile cool"><b>阅读</b><small>证据尚浅</small></div>
  143. <div class="tile cold"><b>物品处置</b><small>弱信号</small></div>
  144. </div>
  145. <div class="pipeline">
  146. <div class="stage"><b>发现热区</b><small>居家生活外部信号突出</small></div><span class="arrow">→</span>
  147. <div class="stage"><b>寻找具体语义</b><small>家务劳动 / 家庭清洁</small></div><span class="arrow">→</span>
  148. <div class="stage"><b>判断证据缺口</b><small>无后验,但不是零需求</small></div><span class="arrow">→</span>
  149. <div class="stage"><b>生成需求</b><small>家庭清洁分步骤内容</small></div>
  150. </div>
  151. </div>
  152. <aside class="output">
  153. <h4>需求生产结果</h4><p>按模块汇总,适合快速浏览数百条需求</p>
  154. <div class="demand"><div class="demand-top"><strong>居家生活 · 42 条需求</strong><span class="tag yes">重点扩充</span></div><div class="reason">家务劳动 12 · 个人护理 9 · 家庭互动 8 · 其他 13</div></div>
  155. <div class="demand"><div class="demand-top"><strong>历史人物 · 31 条需求</strong><span class="tag yes">持续供给</span></div><div class="reason">人物、事件、情感、作品多个挂靠点共同支持。</div></div>
  156. <div class="demand"><div class="demand-top"><strong>阅读 · 3 条候选</strong><span class="tag watch">需补证据</span></div><div class="reason">热度信号与用户问题表达都不足,暂不批量生成。</div></div>
  157. </aside>
  158. </div>
  159. </div>
  160. <div class="demo-foot">优点:最干净、最有“全局地形感”,适合管理层看重点方向;缺点是树的父子挂靠关系不如方案 A 直观。</div>
  161. </section>
  162. <section class="demo-card" data-choice="c" onclick="toggleSelect(this)">
  163. <div class="demo-title">
  164. <div class="demo-letter">C</div>
  165. <div><h3>需求河流图</h3><p>从左侧全局分类流向右侧需求簇,线条表达哪些证据共同形成一条需求。</p></div>
  166. </div>
  167. <div class="screen">
  168. <div class="appbar"><b>需求形成关系图</b><span>分类与信号在左 · 最终需求在右</span></div>
  169. <div class="workspace">
  170. <div class="map">
  171. <div class="map-head"><strong>全局证据 → 需求</strong><span>线宽表示支持该需求的证据数量</span></div>
  172. <div class="river">
  173. <div class="river-line" style="top:47px;left:95px;right:190px;transform:rotate(4deg)"></div>
  174. <div class="river-line" style="top:105px;left:95px;right:190px;transform:rotate(-8deg)"></div>
  175. <div class="river-line" style="top:160px;left:95px;right:190px;transform:rotate(-17deg)"></div>
  176. <div class="river-node warm" style="left:15px;top:24px;width:64px;height:64px">居家生活<br>高热</div>
  177. <div class="river-node mid" style="left:130px;top:62px;width:55px;height:55px">家务劳动</div>
  178. <div class="river-node cool" style="left:130px;top:145px;width:48px;height:48px">阅读</div>
  179. <div class="river-node warm" style="left:245px;top:75px;width:52px;height:52px">家庭清洁</div>
  180. <div class="river-node hot" style="right:15px;top:35px;width:105px;height:105px">家庭清洁<br>步骤 / 技巧 / 误区<br>生成需求</div>
  181. <div class="river-node cold" style="right:35px;top:175px;width:60px;height:60px">阅读场景<br>继续观察</div>
  182. </div>
  183. </div>
  184. <aside class="output">
  185. <h4>为什么形成这条需求</h4><p>每条线都是一个可追溯证据</p>
  186. <div class="demand"><div class="demand-top"><strong>家庭清洁分步骤内容</strong><span class="tag yes">成立</span></div><div class="reason">① 父模块高热<br>② 子分类有同期信号<br>③ 元素语义具体<br>④ 后验缺失,被识别为验证缺口而非负反馈</div></div>
  187. <div class="demand"><div class="demand-top"><strong>居家阅读内容</strong><span class="tag watch">不成立</span></div><div class="reason">同样缺少后验,但只有单一弱信号,且“书本翻页”不能表达明确问题,所以不生成需求。</div></div>
  188. </aside>
  189. </div>
  190. </div>
  191. <div class="demo-foot">优点:最能解释“相同维度缺失,为什么一个成为需求、另一个不成为需求”;缺点是面对数百条需求时容易再次出现线条拥挤。</div>
  192. </section>
  193. </div>