103 lines
4.7 KiB
JSON
103 lines
4.7 KiB
JSON
{
|
|
"slug": "treetable",
|
|
"end": "html",
|
|
"curated": true,
|
|
"summary": "原生树形表格:展开集合与选中集合两个 Set,父子勾选联动靠 descendantKeys 传播。",
|
|
"usage": [
|
|
"行由 flatten 按 expanded 集合展开成一维数组后逐行拼字符串,缩进写成 padding-left: depth * 16px,不是嵌套表格。",
|
|
"展开箭头是 .tt-arrow 叠 is-open,用行内 onclick=\"toggle(key)\" 触发;无子节点的行留一个 .tt-arrow-placeholder 占位对齐。",
|
|
"父级数值不是自己的字段而是子节点合计:leafSum() 递归求和,命中时另加一个 .tt-summary 标记「(汇总)」。",
|
|
"勾选联动走递归:check() 先按 descendantKeys 收集全部后代一起增删,再由 propagate() 自底向上把父级补进或移出选中集合。",
|
|
"行本身带 role=\"row\"、tabindex=\"0\"、aria-selected 与行内 onkeydown 处理 Enter / Space,选中态另加 is-selected 类。",
|
|
"表尾合计由 treeData.reduce 求和后写进 #sumCount 与 #sumBudget 两个单元格。"
|
|
],
|
|
"bestPractices": [
|
|
"expand 与 selected 都是 Set,重渲染时全表重建,行数大时性能会明显下降。",
|
|
"缩进 16px 与列宽 48px 写死在模板与行内样式里,调整层级视觉要改这两处。",
|
|
"表头全选框 #ttAll 在 HTML 里给了节点,脚本里没有为它绑定分支,接入时需要自己接。",
|
|
"树数据是两层硬编码,超过两层的 children 也能递归处理,但示例未验证三层缩进与汇总。"
|
|
],
|
|
"a11y": [
|
|
"表格容器带 role=\"table\"、行带 role=\"row\",行内还有 tabindex 与键盘处理(Enter / Space),方向正确。",
|
|
"没有 role=\"treegrid\" 或 aria-level / aria-expanded,层级与展开状态读屏拿不到。",
|
|
"行内 onclick 与 onkeydown 混用字符串拼接,选择框的 click 还带 event.stopPropagation(),事件责任分散。"
|
|
],
|
|
"apiCarrier": {
|
|
"kind": "attrs",
|
|
"note": "H5 端是类名加集合状态:.kole-tt 容器(role=\"table\")内是原生 table,行由 flatten 生成并叠 is-selected,箭头 .tt-arrow 叠 is-open、占位 .tt-arrow-placeholder、勾选框 .tt-check、汇总标记 .tt-summary,展开与选中各存一个 Set。",
|
|
"table": [
|
|
{
|
|
"name": "align-right",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:21)。"
|
|
},
|
|
{
|
|
"name": "col-selection",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:40)。"
|
|
},
|
|
{
|
|
"name": "demo",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:10)。"
|
|
},
|
|
{
|
|
"name": "kole-tt",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:14)。"
|
|
},
|
|
{
|
|
"name": "sub",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:12)。"
|
|
},
|
|
{
|
|
"name": "tree-cell",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:22)。"
|
|
},
|
|
{
|
|
"name": "tt-arrow",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:23)。"
|
|
},
|
|
{
|
|
"name": "tt-arrow-placeholder",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:25)。"
|
|
},
|
|
{
|
|
"name": "tt-check",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:26)。"
|
|
},
|
|
{
|
|
"name": "tt-summary",
|
|
"type": "类名",
|
|
"desc": "H5 端结构里使用的类名(frameworks/TreeTable.html:27)。"
|
|
}
|
|
]
|
|
},
|
|
"resources": [
|
|
{
|
|
"file": "frameworks/TreeTable.html",
|
|
"kind": "H5 原生",
|
|
"desc": "该端实现(本页 API 与用法的唯一权威来源)。"
|
|
},
|
|
{
|
|
"file": "frameworks/TreeTable.css",
|
|
"kind": "样式",
|
|
"desc": "该组件的样式文件,类名口径以它为准。"
|
|
}
|
|
],
|
|
"exampleIds": [
|
|
"treetable-ex-1"
|
|
],
|
|
"notes": [
|
|
"容器与表头结构见(frameworks/TreeTable.html:36-48),全选框 #ttAll 见(frameworks/TreeTable.html:40)。",
|
|
"展开行模板与 is-open / is-selected / 缩进见(frameworks/TreeTable.html:88)与(frameworks/TreeTable.html:94-98)。",
|
|
"leafSum 汇总见(frameworks/TreeTable.html:68-71),父子联动见(frameworks/TreeTable.html:106-113),自底向上传播见(frameworks/TreeTable.html:118-122)。",
|
|
"表尾合计写入见(frameworks/TreeTable.html:101-102)。"
|
|
]
|
|
}
|