|
|
@@ -10,6 +10,10 @@ const PARTS_KEY = { // 家族 axes 里的轴名 → 每条 query 的 parts
|
|
|
const AXIS_LABEL = { // 列头显示用的标注(取值层级)
|
|
|
'实质': '实质(3-4层)', '形式': '形式(3-4层)',
|
|
|
}
|
|
|
+const USED_ONLY = new Set(['实质', '形式']) // 仅这两轴只显示这批 query 用到的去重值;其余轴显示完整池
|
|
|
+const POOL_KEY = { // 完整池轴名 → axis_values 键
|
|
|
+ '作用/感受/意图': '目的池', '模态': '模态', '知识类型': '知识类型',
|
|
|
+}
|
|
|
|
|
|
// 该家族 query 在某轴上实际用过的去重值(按首次出现顺序)
|
|
|
function usedValues(items, pk) {
|
|
|
@@ -22,26 +26,32 @@ function usedValues(items, pk) {
|
|
|
}
|
|
|
|
|
|
function AxisCol({ ax, fam, axisValues }) {
|
|
|
- const used = usedValues(fam.items, PARTS_KEY[ax])
|
|
|
- const usedSet = new Set(used)
|
|
|
const grouping = axisValues['业务阶段'] // {灵感:[...],选题:[...],脚本:[...]}
|
|
|
- let body
|
|
|
+ let body, count
|
|
|
if (ax === '业务阶段' && grouping && !Array.isArray(grouping)) {
|
|
|
+ // 业务阶段:完整分组 + 缩进(不按用到与否过滤)
|
|
|
const groups = Object.entries(grouping)
|
|
|
- .map(([grp, words]) => [grp, words.filter(w => usedSet.has(w))])
|
|
|
- .filter(([, words]) => words.length)
|
|
|
+ count = groups.reduce((n, [, w]) => n + w.length, 0)
|
|
|
body = groups.map(([grp, words]) => (
|
|
|
<div key={grp}>
|
|
|
<div className="axv grp">{grp}</div>
|
|
|
{words.map((w, i) => <div className="axv child" key={i}>{w}</div>)}
|
|
|
</div>
|
|
|
))
|
|
|
- } else {
|
|
|
+ } else if (USED_ONLY.has(ax)) {
|
|
|
+ // 实质/形式:只显示这批 query 用到的去重值
|
|
|
+ const used = usedValues(fam.items, PARTS_KEY[ax])
|
|
|
+ count = used.length
|
|
|
body = used.map((v, i) => <div className="axv" key={i}>{v}</div>)
|
|
|
+ } else {
|
|
|
+ // 作用/感受/意图、模态、知识类型:完整池
|
|
|
+ const pool = axisValues[POOL_KEY[ax]] || []
|
|
|
+ count = pool.length
|
|
|
+ body = pool.map((v, i) => <div className="axv" key={i}>{v}</div>)
|
|
|
}
|
|
|
return (
|
|
|
<div className="axcol">
|
|
|
- <div className="axhd">{AXIS_LABEL[ax] || ax}<span className="gn">{used.length}</span></div>
|
|
|
+ <div className="axhd">{AXIS_LABEL[ax] || ax}<span className="gn">{count}</span></div>
|
|
|
<div className="axlist">{body}</div>
|
|
|
</div>
|
|
|
)
|