feat: 知识库树形视图调整:大类固定排序、节目文稿按作者二级分组、左右Grid双列对齐

This commit is contained in:
simonkoson
2026-05-27 13:54:14 +08:00
parent b3157216bb
commit a00bcd6c73
3 changed files with 167 additions and 64 deletions
@@ -8,7 +8,13 @@
*
* 数据分组逻辑完全委托给 useKnowledgeGrouping(数据分组层),
* 本组件只管交互,不感知分组的业务含义。
* 将来切换分组维度时,只改 useKnowledgeGrouping,本组件一行不动。
*
* 二级节点 key 格式(由 useKnowledgeGrouping 控制):
* - 大类节点: "manuscript"
* - 二级节点(新格式): "manuscript|author|左鑫"
* type|二级字段名|字段值
*
* 将来切换分组维度时,只改 useKnowledgeGrouping,本组件只调整 key 解析逻辑(解包字段数)。
*/
import { useState, useCallback } from 'react'
@@ -20,7 +26,7 @@ const { TreeNode } = Tree
export default function KnowledgeTree({
treeData, // 来自 getGroupedItems() API 的原始树数据(含全部节点)
onNodeSelect, // 选中节点时回调,参数: { key, type, detail } | null(全部)
onNodeSelect, // 选中节点时回调,参数: { key, type, secondaryField, secondaryValue } | null(全部)
selectedKey, // 当前选中的 key(用于高亮)
}) {
const [expandedKeys, setExpandedKeys] = useState(() => {
@@ -60,18 +66,27 @@ export default function KnowledgeTree({
const key = selectedKeys[0]
// 解析 key 格式:
// "all" → 全部根节点
// "manuscript" → 大类节点
// "manuscript|具体出处" → 二级节点
// "all" → 全部根节点
// "manuscript" → 大类节点
// "manuscript|author|左鑫" → 二级节点(type|二级字段名|字段值)
if (key === 'all') {
onNodeSelect(null)
return
}
const parts = key.split('|')
const type = parts[0]
const detail = parts[1] || null
onNodeSelect({ key, type, detail })
if (parts.length === 1) {
// 大类节点
onNodeSelect({ key, type: parts[0], secondaryField: null, secondaryValue: null })
} else {
// 二级节点:新格式 type|fieldName|fieldValue
onNodeSelect({
key,
type: parts[0],
secondaryField: parts[1],
secondaryValue: parts[2],
})
}
}, [onNodeSelect])
// 渲染节点