REAL SHOWCASE SOURCEtree-grid-maintenance
1 个文件 · 72 行 · TypeScript
// ===== showcase/src/examples/components/tree_grid.ts ===== import { RenderPageHeader, RenderStackPanel, RenderText, RenderTreeGrid, type GridColumnDef, type TreeGridNode,} from 'ds-ui' interface CatalogRow { name: string code: string kind: string count: number enabled: boolean} const columns: GridColumnDef<CatalogRow>[] = [ { type: 'text', key: 'name', title: '目录 / 项目', width: 260, editable: true, sortable: true }, { type: 'text', key: 'code', title: '编码', width: 130, editable: true, sortable: true }, { type: 'text', key: 'kind', title: '类型', width: 110, sortable: true }, { type: 'number', key: 'count', title: '数量', width: 90, align: 'right', sortable: true }, { type: 'boolean', key: 'enabled', title: '启用', width: 90, align: 'center', editable: true },] const roots: TreeGridNode<CatalogRow>[] = [ { key: 'widgets', icon: '📁', row: { name: '组件', code: 'WIDGETS', kind: '目录', count: 42, enabled: true }, children: [ { key: 'data-grid', icon: '▦', row: { name: 'DataGrid', code: 'DATA-01', kind: '数据', count: 18, enabled: true } }, { key: 'tree-grid', icon: '⌘', row: { name: 'TreeGrid', code: 'DATA-02', kind: '数据', count: 9, enabled: true } }, { key: 'charts', icon: '◒', row: { name: 'Charts', code: 'VIS-01', kind: '可视化', count: 7, enabled: true } }, ], }, { key: 'runtime', icon: '📁', row: { name: 'Runtime', code: 'RUNTIME', kind: '目录', count: 12, enabled: true }, children: [ { key: 'scheduler', icon: '⚙', row: { name: 'Scheduler', code: 'RUN-01', kind: '调度', count: 4, enabled: true } }, { key: 'compositor', icon: '◫', row: { name: 'Compositor', code: 'RUN-02', kind: '渲染', count: 6, enabled: true } }, ], },] export function createTreeGridExample(): RenderStackPanel { const status = new RenderText('展开目录、选择行、点击表头排序,或双击可编辑单元格') const grid = new RenderTreeGrid<CatalogRow>({ columns, roots, treeColumnKey: 'name', defaultExpandAll: true, sortable: true, resizableColumns: true, editable: true, onSelect: node => { status.text = `已选择:${node.row.name} · ${node.row.code}` }, onExpand: (node, expanded) => { status.text = `${expanded ? '展开' : '折叠'}:${node.row.name}` }, onCellChange: (node, key, value) => { status.text = `已修改 ${node.row.name}.${String(key)} = ${String(value)}` }, getCellDisplayText: ({ column, defaultDisplayText }) => column.key === 'enabled' ? (defaultDisplayText === 'true' ? '是' : '否') : undefined, }) const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 12, crossAxisAlignment: 'stretch' }) panel.addChild(new RenderPageHeader({ title: 'TreeGrid 层级数据维护', description: '树结构、表格列、排序、调整列宽和编辑共享一个可访问的 Canvas 控件。', })) panel.addChild(grid, 1) panel.addChild(status) panel.padding = 18 return panel}