@taocompany/magic-grid 0.1.6 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1321 -226
- package/dist/components/ColumnSettings/ColumnFilterPanelEmbed.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnFilterPanelEmbed.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsButton.vue.d.ts +6 -5
- package/dist/components/ColumnSettings/ColumnSettingsButton.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsClearFiltersBar.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsClearFiltersBar.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsGroupedLists.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsGroupedLists.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsList.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsList.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsMenu.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsMenu.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsMenuIcon.vue.d.ts +3 -2
- package/dist/components/ColumnSettings/ColumnSettingsMenuIcon.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsMenuItem.vue.d.ts +2 -1
- package/dist/components/ColumnSettings/ColumnSettingsMenuItem.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsPanel.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsPanel.vue.d.ts.map +1 -1
- package/dist/components/ColumnSettings/ColumnSettingsRow.vue.d.ts +4 -3
- package/dist/components/ColumnSettings/ColumnSettingsRow.vue.d.ts.map +1 -1
- package/dist/components/MagicGrid/MagicGrid.vue.d.ts +191 -167
- package/dist/components/MagicGrid/MagicGrid.vue.d.ts.map +1 -1
- package/dist/components/MagicGrid/resolveMagicGridDefaults.d.ts +1 -1
- package/dist/components/MagicGrid/resolveMagicGridDefaults.d.ts.map +1 -1
- package/dist/components/MagicGrid/useStatusBarContext.d.ts +3 -3
- package/dist/components/StatusBar/StatusBarDefaultPanels.vue.d.ts +3 -2
- package/dist/components/StatusBar/StatusBarDefaultPanels.vue.d.ts.map +1 -1
- package/dist/components/StatusBar/StatusBarRangeAggregationPanels.vue.d.ts +3 -2
- package/dist/components/StatusBar/StatusBarRangeAggregationPanels.vue.d.ts.map +1 -1
- package/dist/components/StatusBar/hasStatusBarAggregationContent.d.ts +4 -0
- package/dist/components/StatusBar/hasStatusBarAggregationContent.d.ts.map +1 -0
- package/dist/components/StatusBar/resolveStatusBarRangeAggregationPrecision.d.ts +1 -1
- package/dist/components/StatusBar/resolveStatusBarRangeAggregationPrecision.d.ts.map +1 -1
- package/dist/components/cellEditor/index.d.ts +1 -1
- package/dist/components/cellEditor/index.d.ts.map +1 -1
- package/dist/components/cellEditor/{useMagicGridCellEditor.d.ts → useCellEditor.d.ts} +4 -4
- package/dist/components/cellEditor/useCellEditor.d.ts.map +1 -0
- package/dist/core/api/gridApi.d.ts +35 -23
- package/dist/core/api/gridApi.d.ts.map +1 -1
- package/dist/core/cellComment/cellCommentService.d.ts +2 -2
- package/dist/core/column/columnModel.d.ts +1 -1
- package/dist/core/column/columnModel.d.ts.map +1 -1
- package/dist/core/column/createExpandColumnDef.d.ts +1 -1
- package/dist/core/column/createGroupColumnDef.d.ts +1 -1
- package/dist/core/column/createIndexColumnDef.d.ts +1 -1
- package/dist/core/column/createSelectionColumnDef.d.ts +1 -1
- package/dist/core/column/prepareGridColumnDefs.d.ts +1 -1
- package/dist/core/column/resolveColumnAlign.d.ts +3 -3
- package/dist/core/column/resolveColumnAlign.d.ts.map +1 -1
- package/dist/core/editing/cellDisablePipeline.d.ts +1 -1
- package/dist/core/editing/cellEditPipeline.d.ts +5 -5
- package/dist/core/editing/cellEditPipeline.d.ts.map +1 -1
- package/dist/core/editing/gridValidation.d.ts +2 -2
- package/dist/core/grid/cellEditing/types.d.ts +4 -3
- package/dist/core/grid/cellEditing/types.d.ts.map +1 -1
- package/dist/core/grid/cellRangeDragSelect.d.ts +1 -1
- package/dist/core/grid/cellRangeDragSelect.d.ts.map +1 -1
- package/dist/core/grid/grid.d.ts +15 -13
- package/dist/core/grid/grid.d.ts.map +1 -1
- package/dist/core/grid/gridColumnLayout.d.ts +10 -5
- package/dist/core/grid/gridColumnLayout.d.ts.map +1 -1
- package/dist/core/grid/gridInteraction/focusController.d.ts +2 -2
- package/dist/core/grid/gridInteraction/focusController.d.ts.map +1 -1
- package/dist/core/grid/gridInteraction/indexSelectionDragSession.d.ts +2 -1
- package/dist/core/grid/gridInteraction/indexSelectionDragSession.d.ts.map +1 -1
- package/dist/core/grid/gridInteraction/rowDragSession.d.ts +3 -2
- package/dist/core/grid/gridInteraction/rowDragSession.d.ts.map +1 -1
- package/dist/core/grid/gridInteraction/types.d.ts +18 -13
- package/dist/core/grid/gridInteraction/types.d.ts.map +1 -1
- package/dist/core/grid/gridOptions.d.ts +6 -5
- package/dist/core/grid/gridOptions.d.ts.map +1 -1
- package/dist/core/grid/gridRowMutation.d.ts +5 -4
- package/dist/core/renderer/cellRangeVisualController.d.ts +2 -1
- package/dist/core/renderer/cellRangeVisualController.d.ts.map +1 -1
- package/dist/core/renderer/rowRenderer.d.ts +19 -12
- package/dist/core/renderer/rowRenderer.d.ts.map +1 -1
- package/dist/core/row/cellComp.d.ts +2 -1
- package/dist/core/row/cellComp.d.ts.map +1 -1
- package/dist/core/row/rowComp.d.ts +10 -5
- package/dist/core/row/rowComp.d.ts.map +1 -1
- package/dist/core/rowModel/clientSideRowModel.d.ts +1 -1
- package/dist/core/rowModel/createRowNodes.d.ts +1 -1
- package/dist/core/rowModel/rowDataExport.d.ts +1 -1
- package/dist/core/selection/cellClipboardService.d.ts +2 -1
- package/dist/core/selection/cellClipboardService.d.ts.map +1 -1
- package/dist/core/selection/selectable.d.ts +1 -1
- package/dist/core/styling/cellStylePipeline.d.ts +1 -1
- package/dist/core/theme/gridSize.d.ts +14 -10
- package/dist/core/theme/gridSize.d.ts.map +1 -1
- package/dist/core/theme/gridTheme.d.ts +7 -7
- package/dist/core/theme/gridTheme.d.ts.map +1 -1
- package/dist/core/theme/index.d.ts +3 -3
- package/dist/core/theme/index.d.ts.map +1 -1
- package/dist/core/transaction/applyTransaction.d.ts +1 -1
- package/dist/core/treeTable/treeLazyLoadService.d.ts +1 -1
- package/dist/core/types/align.d.ts +16 -20
- package/dist/core/types/align.d.ts.map +1 -1
- package/dist/core/types/businessRowId.d.ts +3 -2
- package/dist/core/types/businessRowId.d.ts.map +1 -1
- package/dist/core/types/cellClipboard.d.ts +3 -2
- package/dist/core/types/cellClipboard.d.ts.map +1 -1
- package/dist/core/types/cellColor.d.ts +1 -1
- package/dist/core/types/cellComment.d.ts +3 -2
- package/dist/core/types/cellComment.d.ts.map +1 -1
- package/dist/core/types/cellDisable.d.ts +1 -1
- package/dist/core/types/cellEditor.d.ts +4 -3
- package/dist/core/types/cellEditor.d.ts.map +1 -1
- package/dist/core/types/cellRangeSelection.d.ts +15 -23
- package/dist/core/types/cellRangeSelection.d.ts.map +1 -1
- package/dist/core/types/cellRenderer.d.ts +1 -1
- package/dist/core/types/cellSpan.d.ts +1 -1
- package/dist/core/types/column.d.ts +47 -32
- package/dist/core/types/column.d.ts.map +1 -1
- package/dist/core/types/columnAvailability.d.ts +6 -0
- package/dist/core/types/columnAvailability.d.ts.map +1 -0
- package/dist/core/types/columnFilter.d.ts +1 -1
- package/dist/core/types/columnMove.d.ts +1 -1
- package/dist/core/types/columnResize.d.ts +1 -1
- package/dist/core/types/columnSettingsPanel.d.ts +2 -2
- package/dist/core/types/columnSettingsPanel.d.ts.map +1 -1
- package/dist/core/types/columnSort.d.ts +1 -1
- package/dist/core/types/columnVisibility.d.ts +1 -1
- package/dist/core/types/events.d.ts +8 -6
- package/dist/core/types/events.d.ts.map +1 -1
- package/dist/core/types/gridOptions.d.ts +9 -6
- package/dist/core/types/gridOptions.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +5 -4
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/indexColumn.d.ts +14 -14
- package/dist/core/types/indexColumn.d.ts.map +1 -1
- package/dist/core/types/overflowTooltip.d.ts +1 -1
- package/dist/core/types/pipeline.d.ts +1 -1
- package/dist/core/types/rowComp.d.ts +10 -5
- package/dist/core/types/rowComp.d.ts.map +1 -1
- package/dist/core/types/rowDrag.d.ts +1 -1
- package/dist/core/types/rowExpansion.d.ts +1 -1
- package/dist/core/types/rowGrouping.d.ts +2 -2
- package/dist/core/types/rowGrouping.d.ts.map +1 -1
- package/dist/core/types/rowHeight.d.ts +1 -1
- package/dist/core/types/rowMutation.d.ts +1 -1
- package/dist/core/types/rowMutationAsync.d.ts +1 -1
- package/dist/core/types/rowNode.d.ts +1 -1
- package/dist/core/types/selectionColumn.d.ts +14 -14
- package/dist/core/types/selectionColumn.d.ts.map +1 -1
- package/dist/core/types/summary.d.ts +1 -1
- package/dist/core/types/transaction.d.ts +1 -1
- package/dist/core/types/treeTable.d.ts +1 -1
- package/dist/core/types/validation.d.ts +1 -1
- package/dist/index.cjs.js +5 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +3746 -3652
- package/dist/index.es.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/core.cjs.js +0 -0
- package/dist/types/core.d.ts +3038 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.es.js +0 -0
- package/dist/types/magic-grid-expose.d.ts +13 -2
- package/dist/types/magic-grid-expose.d.ts.map +1 -1
- package/dist/types/magic-grid.d.ts +331 -244
- package/dist/types/magic-grid.d.ts.map +1 -1
- package/dist/types/{statusBar.d.ts → status-bar.d.ts} +7 -1
- package/dist/types/status-bar.d.ts.map +1 -0
- package/dist/types/validation.cjs.js +0 -0
- package/dist/types/validation.d.ts +9 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.es.js +0 -0
- package/dist/validation/asyncValidatorAdapter.d.ts +5 -6
- package/dist/validation/asyncValidatorAdapter.d.ts.map +1 -1
- package/dist/validation/index.d.ts +0 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/{validation-DWDC_zL7.js → validation-BHqm5Flb.js} +33 -33
- package/dist/validation-BHqm5Flb.js.map +1 -0
- package/dist/validation-CD6lt5wS.cjs.map +1 -1
- package/dist/validation.cjs.js +1 -1
- package/dist/validation.es.js +1 -1
- package/package.json +13 -2
- package/dist/components/cellEditor/useMagicGridCellEditor.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/statusBar.d.ts.map +0 -1
- package/dist/validation-DWDC_zL7.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,21 +5,32 @@
|
|
|
5
5
|
## 目录
|
|
6
6
|
|
|
7
7
|
- [概述](#概述)
|
|
8
|
+
- [架构与设计](#架构与设计)
|
|
8
9
|
- [快速开始](#快速开始)
|
|
10
|
+
- [数据与性能最佳实践](#数据与性能最佳实践)
|
|
11
|
+
- [默认配置](#默认配置)
|
|
9
12
|
- [Props](#props)
|
|
10
13
|
- [MagicGrid Props](#magicgrid-props)
|
|
11
14
|
- [Grid 级默认与列级覆盖](#grid-级默认与列级覆盖)
|
|
12
15
|
- [ColumnDef 列定义](#columndef-列定义)
|
|
16
|
+
- [列有效性与显隐](#列有效性与显隐)
|
|
13
17
|
- [Options 类型参考](#options-类型参考)
|
|
18
|
+
- [筛选模型参考](#筛选模型参考)
|
|
14
19
|
- [Events](#events)
|
|
15
20
|
- [Expose](#expose)
|
|
16
21
|
- [Slots](#slots)
|
|
22
|
+
- [单元格编辑](#单元格编辑)
|
|
23
|
+
- [数据校验](#数据校验)
|
|
24
|
+
- [键盘导航与快捷键](#键盘导航与快捷键)
|
|
17
25
|
- [辅助组件](#辅助组件)
|
|
18
26
|
- [ColumnSettingsButton](#columnsettingsbutton)
|
|
19
27
|
- [ColumnSettingsPanel](#columnsettingspanel)
|
|
20
28
|
- [ColumnSettingsMenuItem](#columnsettingsmenuitem)
|
|
21
29
|
- [ColumnSettingsMenuIcon](#columnsettingsmenuicon)
|
|
22
|
-
- [
|
|
30
|
+
- [包入口与导出](#包入口与导出)
|
|
31
|
+
- [TypeScript 集成](#typescript-集成)
|
|
32
|
+
- [类型与校验子路径](#类型与校验子路径)
|
|
33
|
+
- [本地开发与 Playground](#本地开发与-playground)
|
|
23
34
|
|
|
24
35
|
---
|
|
25
36
|
|
|
@@ -32,9 +43,12 @@
|
|
|
32
43
|
| **性能** | 行/列双轴虚拟化、DOM 池复用、RAF 帧预算分片、增量数据管线 |
|
|
33
44
|
| **数据** | 排序、列筛选、Quick Filter、事务增量更新(`applyTransaction`)、行 CRUD |
|
|
34
45
|
| **交互** | 单元格/行编辑、校验、行选择、索引列定位、框选与剪贴板 |
|
|
35
|
-
| **布局** |
|
|
46
|
+
| **布局** | 固定列、列拖拽/调整宽度、列有效性与显隐(`available` / `hidden`)、合并单元格、动态行高、主从展开行 |
|
|
36
47
|
| **结构** | 行分组、树形表格(含懒加载)、表尾汇总 |
|
|
37
48
|
| **体验** | 溢出 Tooltip、单元格批注、空态 Overlay、暗色主题、底部状态栏 |
|
|
49
|
+
| **扩展** | 列设置面板、Vue 第三方编辑器 Composable、inline 常驻编辑器、async-validator 校验 |
|
|
50
|
+
|
|
51
|
+
当前版本:**0.3.0**(`@taocompany/magic-grid`)。
|
|
38
52
|
|
|
39
53
|
### 环境要求
|
|
40
54
|
|
|
@@ -58,6 +72,40 @@ import '@taocompany/magic-grid/style.css'
|
|
|
58
72
|
|
|
59
73
|
> **ColumnSettingsButton / ColumnSettingsPanel** 与 MagicGrid 共用同一份 `style.css`。按钮或下拉菜单若放在页头工具栏等 **MagicGrid 容器外**,同样必须引入该文件;样式 token 已在 `.mg-column-settings-button` / `.mg-column-settings-portal` 上自带 fallback,脱离 `.magic-grid` 也可正常显示。
|
|
60
74
|
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 架构与设计
|
|
79
|
+
|
|
80
|
+
Magic Grid 采用 **命令式渲染内核 + Vue 薄封装** 的分层架构,对标 AG Grid 社区版 API 语义,渲染路径针对百万级行数据做了专门优化。
|
|
81
|
+
|
|
82
|
+
### 分层结构
|
|
83
|
+
|
|
84
|
+
| 层级 | 职责 | 关键模块 |
|
|
85
|
+
|------|------|----------|
|
|
86
|
+
| **Vue 层** | Props / Events / Slots 绑定、主题 CSS 变量、辅助 UI | `MagicGrid.vue`、ColumnSettings、StatusBar |
|
|
87
|
+
| **Grid API** | 命令式数据、列、编辑、选择、框选 | `GridApi` |
|
|
88
|
+
| **渲染引擎** | 双轴虚拟化、行 DOM 池、增量 cell 刷新 | `rowRenderer`、`rowPool` |
|
|
89
|
+
| **数据管线** | 排序 / 筛选 / 分组 / 树形 / 映射 | pipeline stages |
|
|
90
|
+
| **交互层** | 焦点、框选、编辑、拖拽、剪贴板、批注 | `gridInteraction` |
|
|
91
|
+
|
|
92
|
+
### 渲染模型
|
|
93
|
+
|
|
94
|
+
- **行虚拟化**:仅渲染视口 + `rowBuffer` 缓冲行;行 DOM 在行池内按 `rowKey` 复用,滚动时更新内容与位置。
|
|
95
|
+
- **列布局**:左固定 / 中心 / 右固定三 lane;中心 lane 随横滚分配列宽。
|
|
96
|
+
- **增量更新**:`applyTransaction`、`setData` 走 RowNode 增量管线;`beginUpdate` / `endUpdate` 可合并多次刷新。
|
|
97
|
+
- **帧预算**:大批量 DOM 写入分片到 `requestAnimationFrame`;测试场景可调用 `flushFrames()` 同步 flush。
|
|
98
|
+
|
|
99
|
+
### 数据管线顺序
|
|
100
|
+
|
|
101
|
+
| 模式 | Stage 顺序 |
|
|
102
|
+
|------|------------|
|
|
103
|
+
| 扁平表格 | `sort` → `filter` → `map` |
|
|
104
|
+
| 行分组 | `group` → `filter` → `sort` → `aggregate` → `map` |
|
|
105
|
+
| 树形表格 | `tree` → `filter` → `sort` → `map` |
|
|
106
|
+
|
|
107
|
+
`summaryScope: 'displayed'`、状态栏行数、框选聚合均基于 `rowsToDisplay`;`summaryScope: 'all'` 对 `sourceRows` 全量汇总(忽略 filter)。
|
|
108
|
+
|
|
61
109
|
---
|
|
62
110
|
|
|
63
111
|
## 快速开始
|
|
@@ -66,7 +114,7 @@ import '@taocompany/magic-grid/style.css'
|
|
|
66
114
|
<script setup lang="ts">
|
|
67
115
|
import { ref } from 'vue'
|
|
68
116
|
import { MagicGrid } from '@taocompany/magic-grid'
|
|
69
|
-
import type { ColumnDef, MagicGridExpose, RowData } from '@taocompany/magic-grid'
|
|
117
|
+
import type { ColumnDef, MagicGridExpose, RowData } from '@taocompany/magic-grid/types/core'
|
|
70
118
|
import '@taocompany/magic-grid/style.css'
|
|
71
119
|
|
|
72
120
|
const gridRef = ref<MagicGridExpose>()
|
|
@@ -121,17 +169,250 @@ const columns: ColumnDef[] = [
|
|
|
121
169
|
<MagicGrid :columns="columns" :data="data" row-key="id" height="400" />
|
|
122
170
|
```
|
|
123
171
|
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 数据与性能最佳实践
|
|
176
|
+
|
|
177
|
+
### 行数据
|
|
178
|
+
|
|
179
|
+
- **`data` 使用普通对象数组**,不要对行数据做 `reactive()` 深代理;Grid 内部维护 RowNode,深代理会显著拖慢增量更新。
|
|
180
|
+
- **`rowKey` 必须稳定唯一**(业务主键);临时新增行可省略主键,内核分配 `__mg_tmp_*`,落库后调用 `promoteRowId`。
|
|
181
|
+
- **大批量写入**优先 `applyTransaction` 或 `beginUpdate` / `endUpdate` 包裹多次 API 调用,避免连续 `setData` 全量替换。
|
|
182
|
+
|
|
183
|
+
### 列定义
|
|
184
|
+
|
|
185
|
+
- 动态列用 `columns` prop 热更新即可;`available: false` 从模型裁剪,`hidden: true` 保留模型仅不渲染。
|
|
186
|
+
- flex 列与固定 `width` 列混用时,剩余空间由 flex 权重分配;`sizeColumnsToFit` / `autoSizeStrategy` 可首屏自适应。
|
|
187
|
+
- 需要权限裁剪时用 `available`,需要用户临时隐藏列时用 `hidden` + 列设置面板。
|
|
188
|
+
|
|
189
|
+
### 性能提示
|
|
190
|
+
|
|
191
|
+
- 避免在 `cellRenderer` / `formatter` / `valueGetter` 中创建重量级对象或触发外部副作用;这些函数在滚动时会高频调用。
|
|
192
|
+
- 合并单元格(`enableCellSpan`)会启用 `style.top` 行定位并增加 span cache 开销,仅在确有需求时开启。
|
|
193
|
+
- Playground 内置 `getMetrics()` 可观察 `activeDomRowCount`、`lastSetDataMs` 等指标;生产环境可通过 `scroll` / `data-rendered` 事件订阅。
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 默认配置
|
|
198
|
+
|
|
199
|
+
以下为 `<MagicGrid>` **未显式传入 prop** 时的生效值。部分 prop 在组件层与内核层默认不同(标注 **MG** = MagicGrid 组件层覆盖),使用时以组件行为为准。
|
|
200
|
+
|
|
201
|
+
### 尺寸 preset(`size`)
|
|
202
|
+
|
|
203
|
+
`rowHeight` / `headerHeight` / `statusBarHeight`(`statusBarHeight: 'auto'` 时)未显式传入时,由 `size` 推导:
|
|
204
|
+
|
|
205
|
+
| `size` | 行高 | 表头高 | 状态栏高 | 字号 | 间距 | 圆角(`rounded: true` 时) |
|
|
206
|
+
|--------|------|--------|----------|------|------|---------------------------|
|
|
207
|
+
| `mini` | 20 | 20 | 20 | 12 | 4 | 4 |
|
|
208
|
+
| `small` | 24 | 24 | 24 | 12 | 8 | 8 |
|
|
209
|
+
| `default` | 32 | 32 | 32 | 12 | 8 | 8 |
|
|
210
|
+
| `large` | 40 | 40 | 40 | 14 | 12 | 8 |
|
|
211
|
+
|
|
212
|
+
### 基础与外观
|
|
213
|
+
|
|
214
|
+
| 配置项 | 默认值 | 说明 |
|
|
215
|
+
|--------|--------|------|
|
|
216
|
+
| `rowKey` | `'id'` | 行主键字段 |
|
|
217
|
+
| `height` / `width` | `'100%'` | 容器尺寸 |
|
|
218
|
+
| `stripe` | `false` | 斑马纹 |
|
|
219
|
+
| `border` | `'border'` | 全网格线 |
|
|
220
|
+
| `theme` | `'light'` | 亮色主题 |
|
|
221
|
+
| `size` | `'default'` | 尺寸 preset |
|
|
222
|
+
| `rounded` | `false` | 无圆角(`0`) |
|
|
223
|
+
| `rowHeight` / `headerHeight` | — | 跟随 `size` preset |
|
|
224
|
+
| `summaryRowHeight` | — | 跟随 `rowHeight` |
|
|
225
|
+
|
|
226
|
+
### 对齐
|
|
227
|
+
|
|
228
|
+
| 配置项 | 默认值 |
|
|
229
|
+
|--------|--------|
|
|
230
|
+
| `headerAlign` / `headerValign` | `'center'` |
|
|
231
|
+
| `align` / `valign` | `'center'` |
|
|
232
|
+
| `footerAlign` / `footerValign` | `'center'` |
|
|
233
|
+
|
|
234
|
+
### 虚拟化与导航
|
|
235
|
+
|
|
236
|
+
| 配置项 | 默认值 | 说明 |
|
|
237
|
+
|--------|--------|------|
|
|
238
|
+
| `rowBuffer` | `10` | 行虚拟化缓冲行数 |
|
|
239
|
+
| `navigateHeader` | `false` | 不允许焦点进入表头 |
|
|
240
|
+
| `navigateFooter` | `false` | 不允许焦点进入表尾 |
|
|
241
|
+
| `enableHeaderHighlight` | `true` | 框选时表头列高亮 |
|
|
242
|
+
| `enableIndexColumnHighlight` | `true` | 框选时索引列高亮 |
|
|
243
|
+
|
|
244
|
+
### 索引列
|
|
245
|
+
|
|
246
|
+
| 配置项 | 默认值 | 说明 |
|
|
247
|
+
|--------|--------|------|
|
|
248
|
+
| `showIndexColumn` | `false` | 不显示索引列 |
|
|
249
|
+
| `indexColumn.label` | `''` | 表头文案 |
|
|
250
|
+
| `indexColumn.width` | `40` | 列宽 px(最小 40) |
|
|
251
|
+
| `indexColumn.start` | `1` | 起始序号 |
|
|
252
|
+
| `indexColumn.focusMode` | `'multiple'` | 辅助定位模式 |
|
|
253
|
+
| `indexColumn.syncToSelectionColumn` | `true` **(MG)** | 索引定位单向同步行选择 |
|
|
254
|
+
| `indexColumn.showRowDragHandle` | `false` | 不显示行拖拽把柄 |
|
|
255
|
+
| `indexColumn.enableRowResizer` | `false` | 不可拖拽调整行高 |
|
|
256
|
+
|
|
257
|
+
### 行选择
|
|
258
|
+
|
|
259
|
+
| 配置项 | 默认值 | 说明 |
|
|
260
|
+
|--------|--------|------|
|
|
261
|
+
| `rowSelection` | `'single'` | 单选模式 |
|
|
262
|
+
| `selectionColumn.width` | `40` | 列宽 px |
|
|
263
|
+
| `selectionColumn.selectAllLabel` | `'全选'` | 全选 checkbox aria-label |
|
|
264
|
+
| `reserveSelection` | `false` | 数据刷新后不保留选中 |
|
|
265
|
+
|
|
266
|
+
`rowSelection` 对象形式时,`groupSelectsChildren` 默认 `true`(tree 模式父节点级联子孙)。
|
|
267
|
+
|
|
268
|
+
### 表尾汇总
|
|
269
|
+
|
|
270
|
+
| 配置项 | 默认值 | 说明 |
|
|
271
|
+
|--------|--------|------|
|
|
272
|
+
| `showSummary` | `false` | 不展示汇总行 |
|
|
273
|
+
| `summaryScope` | `'displayed'` | 按当前可见行汇总 |
|
|
274
|
+
|
|
275
|
+
### 排序 / 筛选 / 列操作
|
|
276
|
+
|
|
277
|
+
| 配置项 | 默认值 | 说明 |
|
|
278
|
+
|--------|--------|------|
|
|
279
|
+
| `sortable` | `false` | 全列默认不可排序 |
|
|
280
|
+
| `filterable` | `false` | 全列默认不可筛选 |
|
|
281
|
+
| `resizable` | `true` | 全列默认可调整列宽 |
|
|
282
|
+
| `columnMovable` | `true` | 全列默认可拖拽重排 |
|
|
283
|
+
| `quickFilterText` | `''` | 无 quick filter |
|
|
284
|
+
| `floatingFilter` | `false` | 无 floating filter 行 |
|
|
285
|
+
| `filterSetValueMode` | `'current'` | 值选择勾选投影模式 |
|
|
286
|
+
| `filterSetDateLayoutMode` | `'tree'` | 日期列值选择树形展示 |
|
|
287
|
+
| `colResizeDefault` | — | 未启用 Shift 邻列补偿 |
|
|
288
|
+
| `skipHeaderOnAutoSize` | `false` | auto-size 含表头宽度 |
|
|
289
|
+
| `autoSizePadding` | `16` | auto-size 额外 padding(px) |
|
|
290
|
+
| `suppressMoveWhenColumnDragging` | `false` | drag 过程中 live move |
|
|
291
|
+
| `suppressColumnMoveAnimation` | `false` | 列移动有过渡动画 |
|
|
292
|
+
| `allowCrossLaneColumnMove` | `false` | 不可跨 fixed lane 移动 |
|
|
293
|
+
| `showUnsortedSortHintOnHover` | `false` | 未排序列 hover 无双三角提示 |
|
|
294
|
+
|
|
295
|
+
### 编辑
|
|
296
|
+
|
|
297
|
+
| 配置项 | 默认值 | 说明 |
|
|
298
|
+
|--------|--------|------|
|
|
299
|
+
| `editBehavior` | `'cell'` | 单格编辑 |
|
|
300
|
+
| `editType` | `'singleClick'` | 单击进入编辑 |
|
|
301
|
+
| `invalidEditValueMode` | `'block'` | 校验失败保持编辑态 |
|
|
302
|
+
|
|
303
|
+
### 行拖拽与行高
|
|
304
|
+
|
|
305
|
+
| 配置项 | 默认值 | 说明 |
|
|
306
|
+
|--------|--------|------|
|
|
307
|
+
| `rowDragManaged` | `true` | managed 拖拽实时改序 |
|
|
308
|
+
| `rowDragCommitMode` | `'sync'` | 同步提交 |
|
|
309
|
+
| `rowHeightMin` | — | 跟随 size / rowHeight |
|
|
310
|
+
| `rowHeightMax` | — | 无上限 |
|
|
311
|
+
|
|
312
|
+
### 合并 / 展开 / 分组 / 树
|
|
313
|
+
|
|
314
|
+
| 配置项 | 默认值 | 说明 |
|
|
315
|
+
|--------|--------|------|
|
|
316
|
+
| `enableCellSpan` | `false` | 不启用单元格合并 |
|
|
317
|
+
| `masterDetail` | `false` | 不启用主从展开 |
|
|
318
|
+
| `masterDefaultExpanded` | `0` | 默认不展开(启用 masterDetail 后) |
|
|
319
|
+
| `detailRowHeight` | `200` | 详情行高度 px |
|
|
320
|
+
| `detailRowAutoHeight` | `false` | 详情行固定高度 |
|
|
321
|
+
| `embedFullWidthRows` | `false` | 详情 overlay 不随横滚 |
|
|
322
|
+
| `showExpandColumn` | `false` | 不展示专用展开列 |
|
|
323
|
+
| `rowGrouping` | `false` | 不启用行分组 |
|
|
324
|
+
| `groupDefaultExpanded` | `-1` | 全部分组默认展开 |
|
|
325
|
+
| `showGroupHeader` / `showGroupFooter` | `false` | 不展示分组头/尾行 |
|
|
326
|
+
| `groupDisplayType` | `'singleColumn'` | 单列分组展示 |
|
|
327
|
+
| `showGroupColumn` | `false` | 不展示 auto group 列 |
|
|
328
|
+
| `tree` | `false` | 不启用树形表格 |
|
|
329
|
+
| `showTreeColumn` | `true` | 展示 tree 系统列(启用 tree 后) |
|
|
330
|
+
| `treeDragScope` | `'siblings'` | 树拖拽仅同层兄弟 |
|
|
331
|
+
| `treeDisplayType` | `'singleColumn'` | 单列树展示 |
|
|
332
|
+
| `treeLazyLoad` | `false` | 不启用懒加载 |
|
|
333
|
+
|
|
334
|
+
### 批注
|
|
335
|
+
|
|
336
|
+
| 配置项 | 默认值 | 说明 |
|
|
337
|
+
|--------|--------|------|
|
|
338
|
+
| `suppressCellComments` | `false` | 不抑制批注 |
|
|
339
|
+
| `cellCommentTrigger` | `'click'` | 点击角标查看 |
|
|
340
|
+
| `cellCommentShowDelay` | `180` | hover 展示延迟 ms |
|
|
341
|
+
| `cellCommentHideDelay` | `220` | 离开隐藏延迟 ms |
|
|
342
|
+
|
|
343
|
+
### 框选与剪贴板
|
|
344
|
+
|
|
345
|
+
| 配置项 | 默认值 | 说明 |
|
|
346
|
+
|--------|--------|------|
|
|
347
|
+
| `cellSelection` | `true` **(MG)** | 启用框选(Grid API 直连默认 `false`) |
|
|
348
|
+
| `cellSelection.enableColumnSelection` | `true` **(MG)** | 点击表头选中整列(Grid API 默认 `false`) |
|
|
349
|
+
| `cellSelection.suppressMultiRanges` | `true` | 仅允许单个 range |
|
|
350
|
+
| `cellSelection.handleMode` | `'off'` | 无 Fill/Range 拖拽柄 |
|
|
351
|
+
| `cellSelection.direction` | `'xy'` | fill 方向(handleMode 为 fill 时) |
|
|
352
|
+
| `cellSelection.fillStrategy` | `'copy'` | 填充策略 |
|
|
353
|
+
| `cellSelection.fillReverseStrategy` | `'default'` | 反拖缩小行为 |
|
|
354
|
+
| `enableCellCopy` | `true` | Ctrl+C / 复制 API |
|
|
355
|
+
| `enableCellPaste` | `false` | Ctrl+V / 粘贴 API |
|
|
356
|
+
|
|
357
|
+
### Tooltip
|
|
358
|
+
|
|
359
|
+
| 配置项 | 默认值 | 说明 |
|
|
360
|
+
|--------|--------|------|
|
|
361
|
+
| `enableTooltips` | `true` | 启用溢出 tooltip |
|
|
362
|
+
| `tooltipShowMode` | `'whenTruncated'` | 仅溢出时展示 |
|
|
363
|
+
| `tooltipShowDelay` | `500` | 首次 hover 延迟 ms |
|
|
364
|
+
| `tooltipSwitchShowDelay` | `200` | 格间切换延迟 ms |
|
|
365
|
+
| `tooltipHideDelay` | `3000` | 离开后隐藏延迟 ms |
|
|
366
|
+
| `tooltipInteraction` | `false` | tooltip 不可交互 |
|
|
367
|
+
| `tooltipMouseTrack` | `false` | tooltip 不跟随鼠标 |
|
|
368
|
+
|
|
369
|
+
### 空态 Overlay
|
|
370
|
+
|
|
371
|
+
| 配置项 | 默认值 | 说明 |
|
|
372
|
+
|--------|--------|------|
|
|
373
|
+
| `loading` | `undefined` | 挂载后首次 `setData` 前自动 loading |
|
|
374
|
+
| `overlayInteraction` | `false` | overlay 内容不可交互 |
|
|
375
|
+
|
|
376
|
+
### 状态栏
|
|
377
|
+
|
|
378
|
+
| 配置项 | 默认值 | 说明 |
|
|
379
|
+
|--------|--------|------|
|
|
380
|
+
| `showStatusBar` | `true` | 显示底部状态栏 |
|
|
381
|
+
| `showDefaultStatusBarPanels` | `true` | 显示默认左侧面板 |
|
|
382
|
+
| `statusBarHeight` | `'auto'` | 跟随 size preset |
|
|
383
|
+
| `showStatusBarRangeAggregation` | `true` | 框选时展示聚合 |
|
|
384
|
+
| `statusBarRangeAggregationPosition` | `'right'` | 聚合 panel 在右栏 |
|
|
385
|
+
| `statusBarRangeAggregationPrecision` | `2` | 平均值/求和各 2 位小数 |
|
|
386
|
+
|
|
387
|
+
### ColumnDef 列级默认
|
|
388
|
+
|
|
389
|
+
| 字段 | 默认值 | 说明 |
|
|
390
|
+
|------|--------|------|
|
|
391
|
+
| `available` | `true` | 列有效;`false` 时不进入列模型(表格中无此列) |
|
|
392
|
+
| `hidden` | `false` | 列可见;`true` 时仍在列模型中但不渲染(可 API/菜单恢复) |
|
|
393
|
+
| `sortable` / `filterable` | 继承 Grid 级(默认 `false`) | 列级显式配置优先 |
|
|
394
|
+
| `resizable` / `movable` | 继承 Grid 级(默认 `true`) | 列级显式配置优先 |
|
|
395
|
+
| `filterType` | `'text'` | 文本筛选 |
|
|
396
|
+
| `cellEditorMode` | `'overlay'` | 编辑 overlay 呈现 |
|
|
397
|
+
| `editType` | 继承 Grid 级 | — |
|
|
398
|
+
| `useParserForClipboard` | `true` | 粘贴走 valueParser |
|
|
399
|
+
| `useFormatterForClipboard` | `true` | 复制走 formatter |
|
|
400
|
+
| `summary` | 有 `summaryAgg` 时为 `true` | 否则 `false` |
|
|
401
|
+
| 对齐字段 | `'center'` | header / body / footer |
|
|
402
|
+
|
|
124
403
|
---
|
|
125
404
|
|
|
126
405
|
## Props
|
|
127
406
|
|
|
407
|
+
> 各 prop 的默认值汇总见上一节 [默认配置](#默认配置)。下列按功能分组逐项说明类型、默认值与行为。
|
|
408
|
+
|
|
128
409
|
### MagicGrid Props
|
|
129
410
|
|
|
130
411
|
#### 基础
|
|
131
412
|
|
|
132
413
|
| Prop | 类型 | 默认值 | 说明 |
|
|
133
414
|
|------|------|--------|------|
|
|
134
|
-
| `columns` | `ColumnDef[]` | — |
|
|
415
|
+
| `columns` | `ColumnDef[]` | — | **必填**。列定义数组;`available: false` 的项仍可在 prop 中保留,但不会进入 Grid 列模型 |
|
|
135
416
|
| `data` | `RowData[]` | — | **必填**。行数据(普通对象,禁止 reactive 深代理) |
|
|
136
417
|
| `rowKey` | `string` | `'id'` | 行主键字段名,用于行池复用与增量更新 |
|
|
137
418
|
| `height` | `string \| number` | `'100%'` | 容器高度 |
|
|
@@ -190,7 +471,7 @@ const columns: ColumnDef[] = [
|
|
|
190
471
|
| `index` | `(rowIndex) => number \| string` | — | 自定义序号展示 |
|
|
191
472
|
| `showRowDragHandle` | `boolean` | `false` | 在索引列显示行拖拽把柄 |
|
|
192
473
|
| `enableRowResizer` | `boolean` | `false` | 索引列底边可拖拽调整行高 |
|
|
193
|
-
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` |
|
|
474
|
+
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | `'center'` | 对齐配置 |
|
|
194
475
|
|
|
195
476
|
#### 行选择
|
|
196
477
|
|
|
@@ -218,7 +499,7 @@ interface RowSelectionConfig {
|
|
|
218
499
|
| `width` | `number` | `40` | 列宽 px(最小 40) |
|
|
219
500
|
| `selectAllLabel` | `string` | `'全选'` | 表头全选 checkbox 的 aria-label |
|
|
220
501
|
| `rowLabel` | `(rowIndex) => string` | — | 行 checkbox 的 aria-label 工厂 |
|
|
221
|
-
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` |
|
|
502
|
+
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | `'center'` | 对齐配置 |
|
|
222
503
|
|
|
223
504
|
#### 表尾汇总
|
|
224
505
|
|
|
@@ -265,7 +546,7 @@ interface RowSelectionConfig {
|
|
|
265
546
|
|
|
266
547
|
| Prop | 类型 | 默认值 | 说明 |
|
|
267
548
|
|------|------|--------|------|
|
|
268
|
-
| `
|
|
549
|
+
| `editBehavior` | `CellEditBehavior` | `'cell'` | 编辑范围:单格 / 整行 |
|
|
269
550
|
| `editType` | `CellEditType` | `'singleClick'` | 进入编辑态的触发方式 |
|
|
270
551
|
| `invalidEditValueMode` | `'block' \| 'revert' \| 'keep'` | `'block'` | 校验失败后:`block` 保持编辑;`revert` 退出并恢复旧值;`keep` 退出编辑但保留无效值 |
|
|
271
552
|
| `rowValidator` | `RowValidator` | — | 行编辑跨字段校验 |
|
|
@@ -349,10 +630,9 @@ interface RowSelectionConfig {
|
|
|
349
630
|
|
|
350
631
|
| Prop | 类型 | 默认值 | 说明 |
|
|
351
632
|
|------|------|--------|------|
|
|
352
|
-
| `cellSelection` | `boolean \| CellSelectionOptions` | `true` | 单元格框选;MagicGrid 默认开启、`enableColumnSelection` 为 `true`、`
|
|
633
|
+
| `cellSelection` | `boolean \| CellSelectionOptions` | `true` | 单元格框选;MagicGrid 默认开启、`enableColumnSelection` 为 `true`、`handleMode` 为 off;Grid API 未传时默认关闭 |
|
|
353
634
|
| `enableCellCopy` | `boolean` | `true` | Ctrl+C / `copySelectedRangeToClipboard` |
|
|
354
635
|
| `enableCellPaste` | `boolean` | `false` | Ctrl+V / `pasteFromClipboard` |
|
|
355
|
-
| `enableCellClipboard` | `boolean` | — | **已废弃**;未单独指定 copy/paste 时二者均继承本值 |
|
|
356
636
|
| `processCellForClipboard` | `ProcessCellForClipboardFn` | — | 复制单格时自定义导出值 |
|
|
357
637
|
| `processCellFromClipboard` | `ProcessCellFromClipboardFn` | — | 粘贴单格时预处理 clipboard 字符串 |
|
|
358
638
|
| `processDataFromClipboard` | `ProcessDataFromClipboardFn` | — | 整表粘贴前处理 TSV 矩阵;return null 取消粘贴 |
|
|
@@ -363,21 +643,21 @@ interface RowSelectionConfig {
|
|
|
363
643
|
|------|------|--------|------|
|
|
364
644
|
| `suppressMultiRanges` | `boolean` | `true` | `true` 时仅允许单个 range |
|
|
365
645
|
| `enableColumnSelection` | `boolean` | MagicGrid `true` / Grid API `false` | 点击表头选中整列 |
|
|
366
|
-
| `
|
|
367
|
-
|
|
368
|
-
`FillHandleOptions`(`handle: { mode: 'fill', ... }`):
|
|
369
|
-
|
|
370
|
-
| 字段 | 类型 | 默认值 | 说明 |
|
|
371
|
-
|------|------|--------|------|
|
|
372
|
-
| `mode` | `'fill'` | — | **必填** |
|
|
373
|
-
| `direction` | `'x' \| 'y' \| 'xy'` | `'xy'` | 填充方向 |
|
|
646
|
+
| `handleMode` | `'off' \| 'fill' \| 'range'` | `'off'` | Fill / Range 拖拽柄 |
|
|
647
|
+
| `direction` | `'x' \| 'y' \| 'xy'` | `'xy'` | `handleMode: 'fill'` 时填充方向 |
|
|
374
648
|
| `fillStrategy` | `'auto' \| 'copy'` | `'copy'` | `'auto'`:数字递增、非数字复制;`'copy'`:始终复制源边值 |
|
|
375
649
|
| `fillReverseStrategy` | `'default' \| 'clear'` | `'default'` | 反拖缩小时:`'default'` 不处理;`'clear'` 置空缩出初始选区的格 |
|
|
376
650
|
| `setFillValue` | `(params: FillOperationParams) => unknown` | — | 自定义填充值;缺省按 `fillStrategy` |
|
|
377
651
|
|
|
378
|
-
`
|
|
652
|
+
`FillOperationParams`:`{ rowNode, column, baseValue, step, direction }`。
|
|
653
|
+
|
|
654
|
+
框选行为要点:
|
|
379
655
|
|
|
380
|
-
|
|
656
|
+
- 鼠标拖拽或 Shift+方向键扩展选区;`suppressMultiRanges: true` 时仅保留单个 range。
|
|
657
|
+
- `enableColumnSelection: true` 时点击表头选中整列;MagicGrid 默认开启。
|
|
658
|
+
- `handleMode: 'fill'` 启用填充柄;`'range'` 启用范围扩展柄;`'off'` 无柄(MagicGrid 默认)。
|
|
659
|
+
- Delete 键清空选区内可编辑格,触发 `cell-selection-delete-start` / `cell-selection-delete-end`。
|
|
660
|
+
- Ctrl+C / `copySelectedRangeToClipboard` 复制 TSV;Ctrl+V / `pasteFromClipboard` 粘贴(需 `enableCellPaste: true`)。
|
|
381
661
|
|
|
382
662
|
#### Tooltip
|
|
383
663
|
|
|
@@ -420,8 +700,10 @@ interface RowSelectionConfig {
|
|
|
420
700
|
| Prop | 类型 | 默认值 | 说明 |
|
|
421
701
|
|------|------|--------|------|
|
|
422
702
|
| `showStatusBar` | `boolean` | `true` | 是否显示底部状态栏 |
|
|
703
|
+
| `statusBarHeight` | `'auto' \| number` | `'auto'` | 状态栏高度;`auto` 跟随 size preset |
|
|
423
704
|
| `showDefaultStatusBarPanels` | `boolean` | `true` | 显示默认状态栏左侧面板(行数/筛选态/选中数);`false` 时仍可自定义 `#status-bar-left` |
|
|
424
705
|
| `showStatusBarRangeAggregation` | `boolean` | `true` | 框选时在状态栏展示平均值/计数/求和 |
|
|
706
|
+
| `statusBarRangeAggregationPosition` | `'left' \| 'right'` | `'right'` | 框选聚合 panel 位置(左栏/右栏内侧) |
|
|
425
707
|
| `statusBarRangeAggregationPrecision` | `number \| { average?: number; sum?: number }` | `2` | 平均值/求和展示小数位数 |
|
|
426
708
|
|
|
427
709
|
#### Grid 级默认与列级覆盖
|
|
@@ -465,7 +747,48 @@ interface RowSelectionConfig {
|
|
|
465
747
|
| `key` | `string` | 列唯一标识(colId),缺省等于 `prop` |
|
|
466
748
|
| `prop` | `string` | 数据字段 |
|
|
467
749
|
| `label` | `string` | 表头文案 |
|
|
468
|
-
|
|
750
|
+
|
|
751
|
+
#### 列有效性与显隐
|
|
752
|
+
|
|
753
|
+
通过 `available` 与 `hidden` 控制列是否参与表格。二者均可在 `columns` prop 中动态修改;Grid 会重解析列模型并刷新布局。
|
|
754
|
+
|
|
755
|
+
| 字段 | 类型 | 默认 | 说明 |
|
|
756
|
+
|------|------|------|------|
|
|
757
|
+
| `available` | `boolean` | `true` | `false` 时该列**不存在于表格**(解析前从列模型裁剪 · 不参与布局/DOM · 无 `setColumnsHidden`) |
|
|
758
|
+
| `hidden` | `boolean` | `false` | `true` 时列**仍在列模型**中,仅不渲染(可通过 `setColumnsHidden` / 列菜单 / 列设置面板恢复) |
|
|
759
|
+
|
|
760
|
+
**语义对照**:
|
|
761
|
+
|
|
762
|
+
| | `available: false` | `hidden: true` |
|
|
763
|
+
|---|-------------------|----------------|
|
|
764
|
+
| `getColumns()` | **不含**该列 | **含**该列 |
|
|
765
|
+
| `getDisplayedColumns()` | **不含** | **不含** |
|
|
766
|
+
| DOM / 布局 | 不参与 | 不参与 |
|
|
767
|
+
| `setColumnsHidden` | 不适用(列不在模型中) | 可恢复显示 |
|
|
768
|
+
| sort / filter 模型 | 不应再引用该 colId | 仍可保留 · 表头无 UI |
|
|
769
|
+
| 列设置面板 | 不出现(未注册进模型) | 出现在「隐藏」分组 |
|
|
770
|
+
| 典型用途 | 按权限/场景裁剪列定义 | 用户临时隐藏列 |
|
|
771
|
+
|
|
772
|
+
```ts
|
|
773
|
+
const columns: ColumnDef[] = [
|
|
774
|
+
{ prop: 'name', label: '名称' },
|
|
775
|
+
// 表格中完全没有这一列(行数据字段可保留)
|
|
776
|
+
{ prop: 'internalCode', label: '内部编码', available: false },
|
|
777
|
+
// 列仍在模型中,默认隐藏,API/菜单可恢复
|
|
778
|
+
{ prop: 'note', label: '备注', hidden: true },
|
|
779
|
+
]
|
|
780
|
+
|
|
781
|
+
// hidden 列:全量 vs 展示
|
|
782
|
+
api.getColumns().map((c) => c.colId) // 含 note
|
|
783
|
+
api.getDisplayedColumnIds() // 不含 note(除非已显示)
|
|
784
|
+
|
|
785
|
+
// available: false 的列不在 getColumns() 中
|
|
786
|
+
api.getColumns().some((c) => c.colId === 'internalCode') // false
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
修改 `columns` 中某列的 `available` 或 `hidden` 后,Grid 会走 `setColumns` 重解析。`hidden` 在 `columnDefs` 未改 `hidden` 声明时,会保留运行时 API/菜单设置的值(与 Phase 22 列显隐语义一致)。
|
|
790
|
+
|
|
791
|
+
Playground 验收:开发环境 `/phase22` · **T14–T15**(`legacyToken` 列可切换 `available`)。
|
|
469
792
|
|
|
470
793
|
#### 尺寸
|
|
471
794
|
|
|
@@ -556,9 +879,9 @@ interface RowSelectionConfig {
|
|
|
556
879
|
|
|
557
880
|
| 字段 | 类型 | 说明 |
|
|
558
881
|
|------|------|------|
|
|
559
|
-
| `headerAlign` / `headerValign` |
|
|
560
|
-
| `align` / `valign` |
|
|
561
|
-
| `footerAlign` / `footerValign` |
|
|
882
|
+
| `headerAlign` / `headerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | 表头对齐;默认 `center` |
|
|
883
|
+
| `align` / `valign` | `GridHorizontalAlign` / `GridVerticalAlign` | 表体对齐;默认 `center` |
|
|
884
|
+
| `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | 表尾对齐;默认 `center` |
|
|
562
885
|
|
|
563
886
|
#### 禁用与样式
|
|
564
887
|
|
|
@@ -601,7 +924,7 @@ interface RowSelectionConfig {
|
|
|
601
924
|
| `index` | `(rowIndex) => number \| string` | — | 自定义序号展示 |
|
|
602
925
|
| `showRowDragHandle` | `boolean` | `false` | 在索引列显示行拖拽把柄 |
|
|
603
926
|
| `enableRowResizer` | `boolean` | `false` | 索引列底边可拖拽调整行高 |
|
|
604
|
-
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` |
|
|
927
|
+
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | `'center'` | 对齐配置 |
|
|
605
928
|
|
|
606
929
|
### SelectionColumnOptions
|
|
607
930
|
|
|
@@ -612,7 +935,7 @@ interface RowSelectionConfig {
|
|
|
612
935
|
| `width` | `number` | `40` | 列宽 px(最小 40) |
|
|
613
936
|
| `selectAllLabel` | `string` | `'全选'` | 表头全选 checkbox 的 aria-label |
|
|
614
937
|
| `rowLabel` | `(rowIndex) => string` | — | 行 checkbox 的 aria-label 工厂 |
|
|
615
|
-
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` |
|
|
938
|
+
| `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | `'center'` | 对齐配置 |
|
|
616
939
|
|
|
617
940
|
### RowSelectionConfig
|
|
618
941
|
|
|
@@ -634,21 +957,14 @@ interface RowSelectionConfig {
|
|
|
634
957
|
|------|------|--------|------|
|
|
635
958
|
| `suppressMultiRanges` | `boolean` | `true` | 仅允许单个 range |
|
|
636
959
|
| `enableColumnSelection` | `boolean` | MagicGrid `true` / Grid API `false` | 点击表头选中整列 |
|
|
637
|
-
| `
|
|
638
|
-
|
|
639
|
-
**FillHandleOptions**(`mode: 'fill'`):
|
|
640
|
-
|
|
641
|
-
| 字段 | 类型 | 默认值 | 说明 |
|
|
642
|
-
|------|------|--------|------|
|
|
643
|
-
| `direction` | `'x' \| 'y' \| 'xy'` | `'xy'` | 填充方向 |
|
|
960
|
+
| `handleMode` | `'off' \| 'fill' \| 'range'` | `'off'` | Fill / Range 拖拽柄 |
|
|
961
|
+
| `direction` | `'x' \| 'y' \| 'xy'` | `'xy'` | `handleMode: 'fill'` 时填充方向 |
|
|
644
962
|
| `fillStrategy` | `'auto' \| 'copy'` | `'copy'` | 数字递增策略 |
|
|
645
963
|
| `fillReverseStrategy` | `'default' \| 'clear'` | `'default'` | 反拖缩小行为 |
|
|
646
964
|
| `setFillValue` | `(params: FillOperationParams) => unknown` | — | 自定义填充值 |
|
|
647
965
|
|
|
648
966
|
`FillOperationParams`:`{ rowNode, column, baseValue, step, direction }`。
|
|
649
967
|
|
|
650
|
-
**RangeHandleOptions**:`{ mode: 'range' }`,右下角拖拽扩展选区。
|
|
651
|
-
|
|
652
968
|
**CellRange**(`addCellRange` / `getCellRanges` 返回值):
|
|
653
969
|
|
|
654
970
|
```ts
|
|
@@ -896,124 +1212,458 @@ type StatusBarRangeAggregationPrecisionInput =
|
|
|
896
1212
|
|
|
897
1213
|
**ProcessDataFromClipboardParams**:`{ data: string[][], anchor: CellPosition }`,其中 `anchor` 为 `{ rowIndex, colId }`。
|
|
898
1214
|
|
|
1215
|
+
|
|
1216
|
+
---
|
|
1217
|
+
|
|
1218
|
+
## 筛选模型参考
|
|
1219
|
+
|
|
1220
|
+
筛选状态由 `FilterModel` 表示:`Record<colId, FilterCondition>`。通过 `setFilterModel` / `getFilterModel` / `filter-changed` 事件读写。
|
|
1221
|
+
|
|
1222
|
+
### ColumnFilter(内置 UI / API 通用)
|
|
1223
|
+
|
|
1224
|
+
单列条件结构(`filterType` 决定可用算子):
|
|
1225
|
+
|
|
1226
|
+
```ts
|
|
1227
|
+
interface ColumnFilter {
|
|
1228
|
+
type: FilterType // 算子,见下表
|
|
1229
|
+
filter?: string // 主比较值(文本 / 数字 / ISO 日期字符串)
|
|
1230
|
+
filterTo?: string // date inRange 第二端点
|
|
1231
|
+
operator?: 'AND' | 'OR' // 多条件组合,默认 AND
|
|
1232
|
+
conditions?: ColumnFilterOperatorCondition[] // 多条件列表,存在时优先于顶层 type/filter
|
|
1233
|
+
setValues?: string[] // 值选择:选中 key;缺省 = 全选(不约束)
|
|
1234
|
+
}
|
|
1235
|
+
```
|
|
1236
|
+
|
|
1237
|
+
**文本列**(`filterType: 'text'`,默认)算子:
|
|
1238
|
+
|
|
1239
|
+
| type | 说明 |
|
|
1240
|
+
|------|------|
|
|
1241
|
+
| `contains` / `notContains` | 包含 / 不包含 |
|
|
1242
|
+
| `equals` / `notEqual` | 等于 / 不等于 |
|
|
1243
|
+
| `startsWith` / `endsWith` | 前缀 / 后缀 |
|
|
1244
|
+
| `blank` / `notBlank` | 空 / 非空 |
|
|
1245
|
+
|
|
1246
|
+
**数字列**(`filterType: 'number'`)额外支持:`lessThan`、`lessThanOrEqual`、`greaterThan`、`greaterThanOrEqual`。
|
|
1247
|
+
|
|
1248
|
+
**日期列**(`filterType: 'date'`)v1 使用 ISO 文本(如 `2026-08-07`);支持 `inRange`(需 `filter` + `filterTo`)。
|
|
1249
|
+
|
|
1250
|
+
**值选择(set filter)**:表头 filter 面板勾选 distinct 值时写入 `setValues`;`filterSetValueMode: 'current'`(默认)在搜索时投影当前可见勾选,`'reserve'` 保留历史勾选。
|
|
1251
|
+
|
|
1252
|
+
**Quick Filter**:Grid 级 `quickFilterText` 对全部 `filterable` 用户列做 OR 式 `contains`(不走 ColumnFilter 结构)。
|
|
1253
|
+
|
|
1254
|
+
### CustomColumnFilter(编程式)
|
|
1255
|
+
|
|
1256
|
+
```ts
|
|
1257
|
+
interface CustomColumnFilter {
|
|
1258
|
+
predicate: (value: unknown, row: RowData) => boolean
|
|
1259
|
+
}
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
通过 `setColumnFilter(colId, { predicate: ... })` 设置;`getColumnFilter` 可读回。与内置 UI 筛选可并存(同一 colId 以后写入者为准)。
|
|
1263
|
+
|
|
1264
|
+
### 示例
|
|
1265
|
+
|
|
1266
|
+
```ts
|
|
1267
|
+
// 单列文本 contains
|
|
1268
|
+
api.setColumnFilter('name', { type: 'contains', filter: '张' })
|
|
1269
|
+
|
|
1270
|
+
// 数字 greaterThanOrEqual
|
|
1271
|
+
api.setColumnFilter('amount', { type: 'greaterThanOrEqual', filter: '1000' })
|
|
1272
|
+
|
|
1273
|
+
// 多条件 AND
|
|
1274
|
+
api.setColumnFilter('status', {
|
|
1275
|
+
operator: 'AND',
|
|
1276
|
+
conditions: [
|
|
1277
|
+
{ type: 'notEqual', filter: 'draft' },
|
|
1278
|
+
{ type: 'notEqual', filter: 'archived' },
|
|
1279
|
+
],
|
|
1280
|
+
})
|
|
1281
|
+
|
|
1282
|
+
// 清除单列
|
|
1283
|
+
api.setColumnFilter('name', null)
|
|
1284
|
+
|
|
1285
|
+
// 清除全部(含 quick filter)
|
|
1286
|
+
api.clearAllFilters()
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
---
|
|
1290
|
+
|
|
899
1291
|
---
|
|
900
1292
|
|
|
901
1293
|
## Events
|
|
902
1294
|
|
|
903
|
-
MagicGrid 通过 Vue 事件向外暴露 Grid 内核事件。事件名采用 kebab-case
|
|
1295
|
+
MagicGrid 通过 Vue 事件向外暴露 Grid 内核事件。事件名采用 **kebab-case**。除 Vue 事件外,也可通过 `gridRef.api.on(...)` 订阅 camelCase 内核事件(见 [Expose](#expose))。
|
|
904
1296
|
|
|
905
1297
|
### 渲染与滚动
|
|
906
1298
|
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
1299
|
+
#### `scroll`
|
|
1300
|
+
|
|
1301
|
+
滚动后触发,payload 为 `GridMetrics`:
|
|
1302
|
+
|
|
1303
|
+
| 字段 | 类型 | 说明 |
|
|
1304
|
+
|------|------|------|
|
|
1305
|
+
| `rowCount` | `number` | 过滤后显示行数 |
|
|
1306
|
+
| `sourceRowCount` | `number` | 源数据总行数 |
|
|
1307
|
+
| `columnCount` | `number` | 列数 |
|
|
1308
|
+
| `activeDomRowCount` | `number` | 行池活跃 DOM 行数 |
|
|
1309
|
+
| `domCellCount` | `number` | 表体单元格 DOM 数 |
|
|
1310
|
+
| `scrollTop` / `scrollLeft` | `number` | 当前滚动位置(px) |
|
|
1311
|
+
| `totalHeight` / `totalWidth` | `number` | 内容区总尺寸(px) |
|
|
1312
|
+
| `renderedFirstRow` / `renderedLastRow` | `number` | 渲染窗口行下标范围 |
|
|
1313
|
+
| `renderedFirstCol` / `renderedLastCol` | `number` | 渲染窗口列下标范围 |
|
|
1314
|
+
| `lastSetDataMs` | `number` | 最近一次 setData 耗时(ms) |
|
|
1315
|
+
|
|
1316
|
+
#### `data-rendered`
|
|
1317
|
+
|
|
1318
|
+
数据渲染完成后触发,payload 同 `GridMetrics`。
|
|
911
1319
|
|
|
912
1320
|
### 交互
|
|
913
1321
|
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
|
919
|
-
|
|
920
|
-
| `
|
|
1322
|
+
#### `cell-clicked`
|
|
1323
|
+
|
|
1324
|
+
payload 为 `CellClickedEvent`:
|
|
1325
|
+
|
|
1326
|
+
| 字段 | 类型 | 说明 |
|
|
1327
|
+
|------|------|------|
|
|
1328
|
+
| `rowId` | `BusinessRowId` | 行 id |
|
|
1329
|
+
| `colId` | `string` | 列 id |
|
|
1330
|
+
| `rowIndex` | `number` | `rowsToDisplay` 中的行下标 |
|
|
1331
|
+
| `rowNode` | `RowNode` | 行节点快照 |
|
|
1332
|
+
|
|
1333
|
+
#### `row-click` / `row-dblclick`
|
|
1334
|
+
|
|
1335
|
+
payload 为 `RowClickedEvent` / `RowDoubleClickedEvent`:
|
|
1336
|
+
|
|
1337
|
+
| 字段 | 类型 | 说明 |
|
|
1338
|
+
|------|------|------|
|
|
1339
|
+
| `rowId` | `BusinessRowId` | 行 id |
|
|
1340
|
+
| `rowIndex` | `number` | 行下标 |
|
|
1341
|
+
| `rowNode` | `RowNode` | 行节点快照 |
|
|
1342
|
+
| `colId` | `string` | 触发点击/双击的列 id |
|
|
1343
|
+
|
|
1344
|
+
> 不含分组头行、详情行、表尾汇总行。
|
|
1345
|
+
|
|
1346
|
+
#### `selection-changed`
|
|
1347
|
+
|
|
1348
|
+
payload 为 `SelectionChangedEvent`:
|
|
1349
|
+
|
|
1350
|
+
| 字段 | 类型 | 说明 |
|
|
1351
|
+
|------|------|------|
|
|
1352
|
+
| `selectedRowIds` | `BusinessRowId[]` | 当前 checkbox 选中的行 id 列表 |
|
|
1353
|
+
|
|
1354
|
+
#### `index-focus-changed`
|
|
1355
|
+
|
|
1356
|
+
payload 为 `IndexFocusChangedEvent`:
|
|
1357
|
+
|
|
1358
|
+
| 字段 | 类型 | 说明 |
|
|
1359
|
+
|------|------|------|
|
|
1360
|
+
| `focusedRowIds` | `BusinessRowId[]` | 索引列辅助定位的行 id 列表 |
|
|
921
1361
|
|
|
922
1362
|
### 编辑
|
|
923
1363
|
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
|
927
|
-
|
|
928
|
-
| `
|
|
929
|
-
| `
|
|
930
|
-
| `
|
|
931
|
-
| `
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
|
936
|
-
|
|
1364
|
+
#### `cell-editing-started`
|
|
1365
|
+
|
|
1366
|
+
| 字段 | 类型 | 说明 |
|
|
1367
|
+
|------|------|------|
|
|
1368
|
+
| `rowId` | `BusinessRowId` | 行 id |
|
|
1369
|
+
| `colId` | `string` | 列 id |
|
|
1370
|
+
| `rowIndex` | `number` | 行下标 |
|
|
1371
|
+
| `value` | `unknown` | 进入编辑时的值 |
|
|
1372
|
+
|
|
1373
|
+
#### `cell-editing-stopped`
|
|
1374
|
+
|
|
1375
|
+
| 字段 | 类型 | 说明 |
|
|
1376
|
+
|------|------|------|
|
|
1377
|
+
| `rowId` / `colId` / `rowIndex` | — | 格位置 |
|
|
1378
|
+
| `committed` | `boolean` | 是否成功提交 |
|
|
1379
|
+
| `oldValue` / `newValue` | `unknown` | 编辑前后值 |
|
|
1380
|
+
|
|
1381
|
+
#### `cell-value-changed`
|
|
1382
|
+
|
|
1383
|
+
| 字段 | 类型 | 说明 |
|
|
1384
|
+
|------|------|------|
|
|
1385
|
+
| `rowId` / `colId` | — | 格位置 |
|
|
1386
|
+
| `oldValue` / `newValue` | `unknown` | 变更前后值 |
|
|
1387
|
+
| `rowNode` | `RowNode` | 行节点快照 |
|
|
1388
|
+
|
|
1389
|
+
#### `cell-commit-started` / `cell-commit-finished`
|
|
1390
|
+
|
|
1391
|
+
异步提交生命周期:
|
|
1392
|
+
|
|
1393
|
+
| 字段 | 类型 | 说明 |
|
|
1394
|
+
|------|------|------|
|
|
1395
|
+
| `rowId` / `colId` / `rowIndex` | — | 格位置 |
|
|
1396
|
+
| `committed` | `boolean` | (finished)是否成功提交 |
|
|
1397
|
+
| `aborted` | `boolean` | (finished)是否被中断 |
|
|
1398
|
+
|
|
1399
|
+
#### `edit-commit-aborted`
|
|
1400
|
+
|
|
1401
|
+
| 字段 | 类型 | 说明 |
|
|
1402
|
+
|------|------|------|
|
|
1403
|
+
| `rowId` / `colId` / `rowIndex` | 可选 | 被中断的编辑格 |
|
|
1404
|
+
|
|
1405
|
+
#### `row-editing-started`
|
|
1406
|
+
|
|
1407
|
+
| 字段 | 类型 | 说明 |
|
|
1408
|
+
|------|------|------|
|
|
1409
|
+
| `rowId` / `rowIndex` | — | 行位置 |
|
|
1410
|
+
| `editableColIds` | `string[]` | 该行可编辑列 id 列表 |
|
|
1411
|
+
|
|
1412
|
+
#### `row-editing-stopped`
|
|
1413
|
+
|
|
1414
|
+
| 字段 | 类型 | 说明 |
|
|
1415
|
+
|------|------|------|
|
|
1416
|
+
| `rowId` / `rowIndex` | — | 行位置 |
|
|
1417
|
+
| `committed` | `boolean` | 是否成功提交 |
|
|
1418
|
+
| `changes` | `RowEditChange[]` | 变更列列表(`colId` / `oldValue` / `newValue`) |
|
|
1419
|
+
|
|
1420
|
+
#### `row-value-changed`
|
|
1421
|
+
|
|
1422
|
+
| 字段 | 类型 | 说明 |
|
|
1423
|
+
|------|------|------|
|
|
1424
|
+
| `rowId` / `rowIndex` | — | 行位置 |
|
|
1425
|
+
| `rowNode` | `RowNode` | 行节点快照 |
|
|
1426
|
+
| `data` | `RowData` | 提交后的行数据 |
|
|
1427
|
+
| `changes` | `RowEditChange[]` | 变更列列表 |
|
|
1428
|
+
|
|
1429
|
+
#### `row-commit-started` / `row-commit-finished`
|
|
1430
|
+
|
|
1431
|
+
行级异步提交,字段语义同单元格 commit 事件。
|
|
937
1432
|
|
|
938
1433
|
### 校验
|
|
939
1434
|
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
|
943
|
-
|
|
1435
|
+
#### `cell-validation-failed`
|
|
1436
|
+
|
|
1437
|
+
| 字段 | 类型 | 说明 |
|
|
1438
|
+
|------|------|------|
|
|
1439
|
+
| `rowId` / `colId` / `rowIndex` | — | 格位置 |
|
|
1440
|
+
| `errors` | `string[]` | 错误消息列表 |
|
|
1441
|
+
| `mode` | `'block' \| 'revert' \| 'keep'` | 当前 `invalidEditValueMode` |
|
|
1442
|
+
|
|
1443
|
+
#### `row-validation-failed`
|
|
1444
|
+
|
|
1445
|
+
| 字段 | 类型 | 说明 |
|
|
1446
|
+
|------|------|------|
|
|
1447
|
+
| `rowId` / `rowIndex` | — | 行位置 |
|
|
1448
|
+
| `failedColId` | `string` | 首个失败列 id |
|
|
1449
|
+
| `cellErrors` | `{ colId, errors }[]` | 各列错误(可选) |
|
|
1450
|
+
| `rowErrors` | `string[]` | 行级校验错误(可选) |
|
|
1451
|
+
| `mode` | `'block' \| 'revert' \| 'keep'` | 当前 invalid 模式 |
|
|
944
1452
|
|
|
945
1453
|
### 排序与筛选
|
|
946
1454
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
1455
|
+
#### `sort-changed`
|
|
1456
|
+
|
|
1457
|
+
payload 为 `SortModelItem[]`(v1 至多 1 项):
|
|
1458
|
+
|
|
1459
|
+
| 字段 | 类型 | 说明 |
|
|
1460
|
+
|------|------|------|
|
|
1461
|
+
| `colId` | `string` | 排序列 id |
|
|
1462
|
+
| `sort` | `'asc' \| 'desc'` | 排序方向 |
|
|
1463
|
+
|
|
1464
|
+
#### `filter-changed`
|
|
1465
|
+
|
|
1466
|
+
payload 为 `FilterModel`(`Record<colId, FilterCondition>`)。各列条件结构因 `filterType` 而异(text / number / date / set / custom)。
|
|
951
1467
|
|
|
952
1468
|
### 列
|
|
953
1469
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
|
957
|
-
|
|
958
|
-
| `
|
|
959
|
-
| `
|
|
1470
|
+
#### `column-moved`
|
|
1471
|
+
|
|
1472
|
+
| 字段 | 类型 | 说明 |
|
|
1473
|
+
|------|------|------|
|
|
1474
|
+
| `columnOrder` | `string[]` | 移动后的完整 colId 顺序(含系统列) |
|
|
1475
|
+
| `fromColId` | `string` | 被移动列 id |
|
|
1476
|
+
| `toIndex` | `number` | 目标全局下标 |
|
|
1477
|
+
| `finished` | `boolean` | `false` = drag 中 live move;`true` = mouseup 最终提交 |
|
|
1478
|
+
| `toFixed` | `'left' \| 'right' \| null` | 跨 lane 时移动列的新 fixed(lane 内省略) |
|
|
1479
|
+
|
|
1480
|
+
#### `column-resized`
|
|
1481
|
+
|
|
1482
|
+
| 字段 | 类型 | 说明 |
|
|
1483
|
+
|------|------|------|
|
|
1484
|
+
| `columns` | `{ colId, width }[]` | 本次宽度变化的列 |
|
|
1485
|
+
| `column` | `{ colId, width } \| null` | 仅单列变化时的便捷引用 |
|
|
1486
|
+
| `finished` | `boolean` | 拖拽过程 / 最终提交 |
|
|
1487
|
+
| `flexColumns` | `{ colId, width }[] \| null` | flex 被动调整的列 |
|
|
1488
|
+
| `source` | `ColumnResizeSource` | 触发来源(ui / api / autosize 等) |
|
|
1489
|
+
|
|
1490
|
+
#### `column-pinned`
|
|
1491
|
+
|
|
1492
|
+
| 字段 | 类型 | 说明 |
|
|
1493
|
+
|------|------|------|
|
|
1494
|
+
| `colId` | `string` | 列 id |
|
|
1495
|
+
| `pinned` | `'left' \| 'right' \| null` | 新的 fixed 状态 |
|
|
1496
|
+
| `source` | `string` | 变更来源 |
|
|
1497
|
+
|
|
1498
|
+
#### `column-hidden-changed`
|
|
1499
|
+
|
|
1500
|
+
批量列显隐变更(**仅 `hidden` 列** · 不对 `available: false` 列触发)。
|
|
1501
|
+
|
|
1502
|
+
| 字段 | 类型 | 说明 |
|
|
1503
|
+
|------|------|------|
|
|
1504
|
+
| `colIds` | `string[]` | 受影响的列 id |
|
|
1505
|
+
| `hidden` | `boolean` | 新的 hidden 状态 |
|
|
1506
|
+
| `source` | `'api' \| 'columnDefs' \| 'menu'` | 变更来源 |
|
|
960
1507
|
|
|
961
1508
|
### 行 CRUD 与拖拽
|
|
962
1509
|
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
|
966
|
-
|
|
967
|
-
| `
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
|
972
|
-
|
|
1510
|
+
#### `rows-added`
|
|
1511
|
+
|
|
1512
|
+
| 字段 | 类型 | 说明 |
|
|
1513
|
+
|------|------|------|
|
|
1514
|
+
| `rows` | `RowMutationRowSnapshot[]` | 新增行快照(含 `rowId` / `data`) |
|
|
1515
|
+
|
|
1516
|
+
#### `rows-removed`
|
|
1517
|
+
|
|
1518
|
+
| 字段 | 类型 | 说明 |
|
|
1519
|
+
|------|------|------|
|
|
1520
|
+
| `rows` | `RowMutationRemovedSnapshot[]` | 删除行快照 |
|
|
1521
|
+
|
|
1522
|
+
#### `row-id-promoted`
|
|
1523
|
+
|
|
1524
|
+
| 字段 | 类型 | 说明 |
|
|
1525
|
+
|------|------|------|
|
|
1526
|
+
| `oldRowId` | `BusinessRowId` | 临时 id(`__mg_tmp_*`) |
|
|
1527
|
+
| `newRowId` | `BusinessRowId` | 正式业务主键 |
|
|
1528
|
+
| `data` | `RowData` | 更新后的行数据 |
|
|
1529
|
+
|
|
1530
|
+
#### `row-moved`
|
|
1531
|
+
|
|
1532
|
+
| 字段 | 类型 | 说明 |
|
|
1533
|
+
|------|------|------|
|
|
1534
|
+
| `rowId` | `BusinessRowId` | 被移动行 id |
|
|
1535
|
+
| `fromIndex` / `toIndex` | `number` | source 顺序下的起止下标 |
|
|
1536
|
+
| `source` | `RowMoveSource` | `'uiRowDrag'` / `'api'` 等 |
|
|
1537
|
+
| `finished` | `boolean` | live drag 中间态为 `false` |
|
|
1538
|
+
|
|
1539
|
+
#### `row-drag-end`
|
|
1540
|
+
|
|
1541
|
+
`rowDragManaged: false` 时由业务自行改序。payload 为 `RowDragEndEvent`:
|
|
1542
|
+
|
|
1543
|
+
| 字段 | 类型 | 说明 |
|
|
1544
|
+
|------|------|------|
|
|
1545
|
+
| `rowId` | `BusinessRowId` | 被拖拽行 id |
|
|
1546
|
+
| `rowIds` | `BusinessRowId[]` | 多行 drag 时的全部 id |
|
|
1547
|
+
| `displayIndex` | `number` | drop 时 display 插入位;`-1` = 无效 |
|
|
1548
|
+
| `finished` | `boolean` | 是否 mouseup 最终提交 |
|
|
1549
|
+
| `parentRowId` / `siblingIndex` / `treeLevel` | 可选 | 树形 drop 上下文 |
|
|
1550
|
+
|
|
1551
|
+
#### `row-drag-commit-started` / `row-drag-commit-finished`
|
|
1552
|
+
|
|
1553
|
+
deferred 模式(`rowDragCommitMode: 'deferred'`)commit 生命周期事件。
|
|
1554
|
+
|
|
1555
|
+
#### `row-height-changed`
|
|
1556
|
+
|
|
1557
|
+
| 字段 | 类型 | 说明 |
|
|
1558
|
+
|------|------|------|
|
|
1559
|
+
| `rowId` | `BusinessRowId` | 行 id |
|
|
1560
|
+
| `height` | `number` | 新的行高 px |
|
|
1561
|
+
| `finished` | `boolean` | resize 过程 / 最终提交 |
|
|
1562
|
+
| `source` | `string` | 触发来源 |
|
|
973
1563
|
|
|
974
1564
|
### 展开行
|
|
975
1565
|
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
1566
|
+
#### `row-expanded` / `row-collapsed`
|
|
1567
|
+
|
|
1568
|
+
payload 为 `RowExpansionChangedEvent`:
|
|
1569
|
+
|
|
1570
|
+
| 字段 | 类型 | 说明 |
|
|
1571
|
+
|------|------|------|
|
|
1572
|
+
| `rowId` | `BusinessRowId` | 主行 id |
|
|
1573
|
+
| `expanded` | `boolean` | 展开 / 折叠 |
|
|
980
1574
|
|
|
981
1575
|
### 行分组
|
|
982
1576
|
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
|
986
|
-
|
|
1577
|
+
#### `row-group-opened`
|
|
1578
|
+
|
|
1579
|
+
| 字段 | 类型 | 说明 |
|
|
1580
|
+
|------|------|------|
|
|
1581
|
+
| `groupId` | `string` | 分组节点 id |
|
|
1582
|
+
| `expanded` | `boolean` | 展开 / 折叠 |
|
|
1583
|
+
| `field` | `string` | 分组字段 |
|
|
1584
|
+
| `key` | `string` | 分组键值 |
|
|
1585
|
+
| `level` | `number` | 分组层级 |
|
|
1586
|
+
| `source` | `RowGroupingSource` | 触发来源 |
|
|
1587
|
+
|
|
1588
|
+
#### `row-group-changed`
|
|
1589
|
+
|
|
1590
|
+
| 字段 | 类型 | 说明 |
|
|
1591
|
+
|------|------|------|
|
|
1592
|
+
| `columns` | `string[]` | 当前分组列 id 列表 |
|
|
1593
|
+
| `source` | `RowGroupingSource` | 触发来源 |
|
|
987
1594
|
|
|
988
1595
|
### 树形表格
|
|
989
1596
|
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
|
993
|
-
|
|
994
|
-
| `
|
|
995
|
-
| `
|
|
1597
|
+
#### `tree-node-opened`
|
|
1598
|
+
|
|
1599
|
+
| 字段 | 类型 | 说明 |
|
|
1600
|
+
|------|------|------|
|
|
1601
|
+
| `rowId` | `BusinessRowId` | 节点 id |
|
|
1602
|
+
| `expanded` | `boolean` | 展开 / 折叠 |
|
|
1603
|
+
| `level` | `number` | 树层级 |
|
|
1604
|
+
| `dataPath` | `string[]` | 节点路径 |
|
|
1605
|
+
| `source` | `TreeTableSource` | 触发来源 |
|
|
1606
|
+
|
|
1607
|
+
#### `tree-children-loading`
|
|
1608
|
+
|
|
1609
|
+
| 字段 | 类型 | 说明 |
|
|
1610
|
+
|------|------|------|
|
|
1611
|
+
| `parentRowId` | `BusinessRowId` | 父节点 id |
|
|
1612
|
+
| `dataPath` | `string[]` | 父节点路径 |
|
|
1613
|
+
| `treeLevel` | `number` | 树层级 |
|
|
1614
|
+
| `source` | `TreeTableSource` | 触发来源 |
|
|
1615
|
+
|
|
1616
|
+
#### `tree-children-loaded`
|
|
1617
|
+
|
|
1618
|
+
| 字段 | 类型 | 说明 |
|
|
1619
|
+
|------|------|------|
|
|
1620
|
+
| `parentRowId` | `BusinessRowId` | 父节点 id |
|
|
1621
|
+
| `children` | `RowData[]` | 加载的子行数据 |
|
|
1622
|
+
| `childCount` | `number` | 子行数量 |
|
|
1623
|
+
| `source` | `TreeTableSource` | 触发来源 |
|
|
1624
|
+
|
|
1625
|
+
#### `tree-children-load-failed`
|
|
1626
|
+
|
|
1627
|
+
| 字段 | 类型 | 说明 |
|
|
1628
|
+
|------|------|------|
|
|
1629
|
+
| `parentRowId` | `BusinessRowId` | 父节点 id |
|
|
1630
|
+
| `reason` | `string` | 失败原因(可选) |
|
|
1631
|
+
| `aborted` | `boolean` | 是否被中断 |
|
|
996
1632
|
|
|
997
1633
|
### 批注
|
|
998
1634
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
|
1635
|
+
#### `cell-comment-changed`
|
|
1636
|
+
|
|
1637
|
+
| 字段 | 类型 | 说明 |
|
|
1638
|
+
|------|------|------|
|
|
1639
|
+
| `rowId` / `colId` | — | 格位置 |
|
|
1640
|
+
| `comment` | `CellComment \| undefined` | 新批注;`undefined` 表示删除 |
|
|
1002
1641
|
|
|
1003
1642
|
### 框选
|
|
1004
1643
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
|
1008
|
-
|
|
1009
|
-
| `
|
|
1644
|
+
#### `cell-selection-changed`
|
|
1645
|
+
|
|
1646
|
+
| 字段 | 类型 | 说明 |
|
|
1647
|
+
|------|------|------|
|
|
1648
|
+
| `ranges` | `CellRange[]` | 当前选区列表 |
|
|
1649
|
+
| `source` | `CellSelectionSource` | 变更来源(ui / api 等) |
|
|
1650
|
+
|
|
1651
|
+
`CellRange`:`{ startRowIndex, endRowIndex, startColId, endColId }`。
|
|
1652
|
+
|
|
1653
|
+
#### `cell-selection-delete-start` / `cell-selection-delete-end`
|
|
1654
|
+
|
|
1655
|
+
| 字段 | 类型 | 说明 |
|
|
1656
|
+
|------|------|------|
|
|
1657
|
+
| `ranges` | `CellRange[]` | 被清空的选区 |
|
|
1658
|
+
| `changedCellCount` | `number` | (end)实际变更的格数 |
|
|
1010
1659
|
|
|
1011
1660
|
### 空态
|
|
1012
1661
|
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
|
1016
|
-
|
|
1662
|
+
#### `overlay-shown` / `overlay-hidden`
|
|
1663
|
+
|
|
1664
|
+
| 字段 | 类型 | 说明 |
|
|
1665
|
+
|------|------|------|
|
|
1666
|
+
| `overlayType` | `'loading' \| 'noRows' \| 'noMatchingRows'` | overlay 类型 |
|
|
1017
1667
|
|
|
1018
1668
|
### 事件监听示例
|
|
1019
1669
|
|
|
@@ -1025,41 +1675,44 @@ MagicGrid 通过 Vue 事件向外暴露 Grid 内核事件。事件名采用 keba
|
|
|
1025
1675
|
/>
|
|
1026
1676
|
```
|
|
1027
1677
|
|
|
1028
|
-
除 Vue 事件外,也可通过 `gridRef.api` 订阅内核事件(见 [Expose](#expose))。
|
|
1029
|
-
|
|
1030
1678
|
---
|
|
1031
1679
|
|
|
1032
1680
|
## Expose
|
|
1033
1681
|
|
|
1034
1682
|
通过组件 `ref` 获取 `MagicGridExpose` 实例,进行命令式操作。
|
|
1035
1683
|
|
|
1684
|
+
### MagicGridExpose 方法
|
|
1685
|
+
|
|
1686
|
+
| 成员 | 类型 | 说明 |
|
|
1687
|
+
|------|------|------|
|
|
1688
|
+
| `api` | `Ref<GridApi \| undefined>` | GridApi 实例;挂载完成后可用 |
|
|
1689
|
+
| `getMetrics()` | `() => GridMetrics \| undefined` | 读取渲染与滚动指标(同 `scroll` / `data-rendered` 事件 payload) |
|
|
1690
|
+
| `scrollTo(scrollTop, scrollLeft?)` | `(number, number?) => void` | 编程式滚动;scrollLeft 省略时保持当前值 |
|
|
1691
|
+
| `setSortModel(model)` | `(SortModelItem[]) => void` | 设置排序模型并重算 display 行 |
|
|
1692
|
+
| `getSortModel()` | `() => SortModelItem[]` | 读取当前排序模型 |
|
|
1693
|
+
| `setFilterModel(model)` | `(FilterModel) => void` | 设置筛选模型并重算 display 行 |
|
|
1694
|
+
| `getData(options?)` | `(GetDataOptions?) => RowData[]` | 导出业务数据;等价于 `api.getData()` |
|
|
1695
|
+
| `applyTransaction(tx)` | `(RowTransaction) => Promise<RowNodeTransaction \| undefined>` | 增量事务 add/update/remove |
|
|
1696
|
+
| `beginUpdate()` | `() => void` | 开启批量更新;与 `endUpdate` 配对 |
|
|
1697
|
+
| `endUpdate()` | `() => void` | 结束批量更新并 flush 累积变更 |
|
|
1698
|
+
| `ensureIndexVisible(index, position?)` | `(number, 'top'\|'bottom'\|'middle'?) => void` | 滚动使行下标进入视口;position 默认 `'middle'` |
|
|
1699
|
+
| `flushFrames()` | `() => void` | 强制 flush 待渲染帧(测试/同步场景) |
|
|
1700
|
+
|
|
1036
1701
|
### 类型定义
|
|
1037
1702
|
|
|
1038
1703
|
```ts
|
|
1039
1704
|
interface MagicGridExpose {
|
|
1040
|
-
/** GridApi 实例(Ref) */
|
|
1041
1705
|
api: Ref<GridApi | undefined>
|
|
1042
|
-
/** 读取渲染与滚动指标 */
|
|
1043
1706
|
getMetrics: () => GridMetrics | undefined
|
|
1044
|
-
/** 编程式滚动 */
|
|
1045
1707
|
scrollTo: (scrollTop: number, scrollLeft?: number) => void
|
|
1046
|
-
/** 设置排序模型 */
|
|
1047
1708
|
setSortModel: (model: SortModelItem[]) => void
|
|
1048
|
-
/** 读取排序模型 */
|
|
1049
1709
|
getSortModel: () => SortModelItem[]
|
|
1050
|
-
/** 设置筛选模型 */
|
|
1051
1710
|
setFilterModel: (model: FilterModel) => void
|
|
1052
|
-
/** 导出当前表格业务数据 */
|
|
1053
1711
|
getData: (options?: GetDataOptions) => RowData[]
|
|
1054
|
-
/** 增量事务:add / update / remove */
|
|
1055
1712
|
applyTransaction: (transaction: RowTransaction) => Promise<RowNodeTransaction | undefined>
|
|
1056
|
-
/** 开启批量更新(与 endUpdate 配对) */
|
|
1057
1713
|
beginUpdate: () => void
|
|
1058
|
-
/** 结束批量更新并 flush */
|
|
1059
1714
|
endUpdate: () => void
|
|
1060
|
-
/** 滚动使指定行下标进入视口 */
|
|
1061
1715
|
ensureIndexVisible: (index: number, position?: 'top' | 'bottom' | 'middle') => void
|
|
1062
|
-
/** 强制 flush 待渲染帧 */
|
|
1063
1716
|
flushFrames: () => void
|
|
1064
1717
|
}
|
|
1065
1718
|
```
|
|
@@ -1069,7 +1722,7 @@ interface MagicGridExpose {
|
|
|
1069
1722
|
```vue
|
|
1070
1723
|
<script setup lang="ts">
|
|
1071
1724
|
import { ref } from 'vue'
|
|
1072
|
-
import type { MagicGridExpose } from '@taocompany/magic-grid'
|
|
1725
|
+
import type { MagicGridExpose } from '@taocompany/magic-grid/types/core'
|
|
1073
1726
|
|
|
1074
1727
|
const gridRef = ref<MagicGridExpose>()
|
|
1075
1728
|
|
|
@@ -1095,109 +1748,109 @@ function scrollToRow(index: number) {
|
|
|
1095
1748
|
|
|
1096
1749
|
### GridApi(`gridRef.api`)
|
|
1097
1750
|
|
|
1098
|
-
`api` 是完整的命令式 API
|
|
1751
|
+
`api` 是完整的命令式 API 面。以下按职责分组列出全部公开方法;入参 rowId 均接受 `string | number`,出参 rowId 恒为 `string`。
|
|
1099
1752
|
|
|
1100
1753
|
#### 数据
|
|
1101
1754
|
|
|
1102
|
-
| 方法 | 说明 |
|
|
1103
|
-
|
|
1104
|
-
| `setData(rows)` |
|
|
1105
|
-
| `applyTransaction(tx)` | 增量事务 add/update/remove |
|
|
1106
|
-
| `addRows(options)` |
|
|
1107
|
-
| `removeRows(options)` | 按 rowId
|
|
1108
|
-
| `getData(options?)` |
|
|
1109
|
-
| `promoteRowId(options)` |
|
|
1110
|
-
| `moveRow(rowId, toIndex, indexMode?)` | 编程式移动行 |
|
|
1755
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
1756
|
+
|------|------|--------|------|
|
|
1757
|
+
| `setData(rows)` | `RowData[]` | `void` | 全量替换数据;触发完整重绘 |
|
|
1758
|
+
| `applyTransaction(tx)` | `{ add?, update?, remove? }` | `Promise<RowNodeTransaction>` | 增量事务 add/update/remove |
|
|
1759
|
+
| `addRows(options)` | `AddRowsOptions` | `Promise<RowNodeTransaction>` | 指定位置插入行;省略 rowKey 生成临时行 |
|
|
1760
|
+
| `removeRows(options)` | `{ rowIds?, indexes?, indexMode? }` | `Promise<RowNodeTransaction>` | 按 rowId 或下标删除 |
|
|
1761
|
+
| `getData(options?)` | `{ sourceOrder?: boolean }` | `RowData[]` | 导出业务数据;默认 source 顺序 |
|
|
1762
|
+
| `promoteRowId(options)` | `{ rowId, businessId }` | `PromoteRowIdResult` | 临时 id 提升为正式主键 |
|
|
1763
|
+
| `moveRow(rowId, toIndex, indexMode?)` | rowId / 目标下标 / `'source'\|'display'` | `RowMoveResult` | 编程式移动行 |
|
|
1111
1764
|
|
|
1112
1765
|
#### 排序 / 筛选
|
|
1113
1766
|
|
|
1114
|
-
| 方法 | 说明 |
|
|
1115
|
-
|
|
1116
|
-
| `setSortModel(model)` / `getSortModel()` |
|
|
1117
|
-
| `setFilterModel(model)` / `getFilterModel()` |
|
|
1118
|
-
| `setColumnFilter(colId, condition)` | 设置单列筛选 |
|
|
1119
|
-
| `getColumnFilter(colId)` |
|
|
1120
|
-
| `isColumnFilterActive(colId)` | 单列是否有有效筛选 |
|
|
1121
|
-
| `isAnyFilterActive()` | 任一列 filter 或 quick filter 是否 active |
|
|
1122
|
-
| `setQuickFilterText(text)` / `getQuickFilterText()` | Quick filter 读写 |
|
|
1123
|
-
| `clearAllFilters()` |
|
|
1124
|
-
| `getColumnDistinctFilterValues(colId)` | 列 distinct 值(set filter 勾选列表) |
|
|
1767
|
+
| 方法 | 参数 | 说明 |
|
|
1768
|
+
|------|------|------|
|
|
1769
|
+
| `setSortModel(model)` / `getSortModel()` | `SortModelItem[]` | 排序模型读写;触发 `sortChanged` |
|
|
1770
|
+
| `setFilterModel(model)` / `getFilterModel()` | `FilterModel` | 筛选模型读写;触发 `filterChanged` |
|
|
1771
|
+
| `setColumnFilter(colId, condition)` | condition 或 `null` 清除 | 设置单列筛选 |
|
|
1772
|
+
| `getColumnFilter(colId)` | — | 读取单列条件;未设置返回 `null` |
|
|
1773
|
+
| `isColumnFilterActive(colId)` | — | 单列是否有有效筛选 |
|
|
1774
|
+
| `isAnyFilterActive()` | — | 任一列 filter 或 quick filter 是否 active |
|
|
1775
|
+
| `setQuickFilterText(text)` / `getQuickFilterText()` | `string` | Quick filter 读写 |
|
|
1776
|
+
| `clearAllFilters()` | — | 清除全部列筛选 + quick filter |
|
|
1777
|
+
| `getColumnDistinctFilterValues(colId)` | — | 列 distinct 值(set filter 勾选列表) |
|
|
1125
1778
|
|
|
1126
1779
|
#### 列
|
|
1127
1780
|
|
|
1128
|
-
| 方法 | 说明 |
|
|
1129
|
-
|
|
1130
|
-
| `moveColumn(colId, toIndex)` | 编程式移动列 |
|
|
1131
|
-
| `resetColumnOrder()` | 各 lane 内用户列恢复 defOrder |
|
|
1132
|
-
| `resetColumnWidths()` | 用户列恢复 defWidth/defFlex |
|
|
1133
|
-
| `setColumnFixed(colId, fixed)` | 运行时改列 fixed |
|
|
1134
|
-
| `setColumnsHidden(colIds, hidden)` | 批量设置列 hidden |
|
|
1135
|
-
| `isColumnHidden(colId)` | 列是否 hidden |
|
|
1136
|
-
| `getDisplayedColumnIds()` | 当前 UI
|
|
1137
|
-
| `getColumns()` / `getDisplayedColumns()` |
|
|
1138
|
-
| `setColumnWidth(colId, width, finished?, source?)` | 设置单列宽度 |
|
|
1139
|
-
| `setColumnWidths(payloads, finished?, source?)` | 批量设置列宽 |
|
|
1140
|
-
| `getColumnWidth(colId)` | 读取列当前像素宽度 |
|
|
1141
|
-
| `autoSizeColumn(colId, skipHeader?)` |
|
|
1142
|
-
| `autoSizeColumns(colIds, skipHeader?)` | 批量 auto-size |
|
|
1143
|
-
| `sizeColumnsToFit(params?)` | 列宽按比例分配至视口 |
|
|
1781
|
+
| 方法 | 参数 | 说明 |
|
|
1782
|
+
|------|------|------|
|
|
1783
|
+
| `moveColumn(colId, toIndex)` | 全局 columns 下标 | 编程式移动列 |
|
|
1784
|
+
| `resetColumnOrder()` | — | 各 lane 内用户列恢复 defOrder |
|
|
1785
|
+
| `resetColumnWidths()` | — | 用户列恢复 defWidth/defFlex |
|
|
1786
|
+
| `setColumnFixed(colId, fixed)` | `'left' \| 'right' \| null` | 运行时改列 fixed |
|
|
1787
|
+
| `setColumnsHidden(colIds, hidden)` | — | 批量设置列 hidden(仅对列模型中存在的列生效) |
|
|
1788
|
+
| `isColumnHidden(colId)` | — | 列是否 hidden |
|
|
1789
|
+
| `getDisplayedColumnIds()` | — | 当前 UI 展示列 id(左→右 · 跳过 hidden) |
|
|
1790
|
+
| `getColumns()` / `getDisplayedColumns()` | — | 全量列(含 hidden · 不含 `available: false`)/ 展示列(不含 hidden) |
|
|
1791
|
+
| `setColumnWidth(colId, width, finished?, source?)` | finished 默认 `true` | 设置单列宽度 |
|
|
1792
|
+
| `setColumnWidths(payloads, finished?, source?)` | `{ colId, width }[]` | 批量设置列宽 |
|
|
1793
|
+
| `getColumnWidth(colId)` | — | 读取列当前像素宽度 |
|
|
1794
|
+
| `autoSizeColumn(colId, skipHeader?)` | skipHeader 默认 `false` | 按内容 auto-size |
|
|
1795
|
+
| `autoSizeColumns(colIds, skipHeader?)` | — | 批量 auto-size |
|
|
1796
|
+
| `sizeColumnsToFit(params?)` | `SizeColumnsToFitParams` | 列宽按比例分配至视口 |
|
|
1144
1797
|
|
|
1145
1798
|
#### 行高
|
|
1146
1799
|
|
|
1147
|
-
| 方法 | 说明 |
|
|
1148
|
-
|
|
1149
|
-
| `setRowHeight(rowId, height, finished?)` |
|
|
1150
|
-
| `setRowHeights(changes, finished?)` | 批量设置行高 |
|
|
1151
|
-
| `getRowHeight(rowId)` |
|
|
1152
|
-
| `resetRowHeights(rowIds?)` | 清除 pinned 并重算行高 |
|
|
1153
|
-
| `updateDimensions(params)` | 热更新默认行高与 clamp
|
|
1800
|
+
| 方法 | 参数 | 说明 |
|
|
1801
|
+
|------|------|------|
|
|
1802
|
+
| `setRowHeight(rowId, height, finished?)` | finished 默认 `true` | 设置单行高度并 pinned |
|
|
1803
|
+
| `setRowHeights(changes, finished?)` | `{ rowId, height }[]` | 批量设置行高 |
|
|
1804
|
+
| `getRowHeight(rowId)` | — | 读取行当前有效高度;不存在返回 `null` |
|
|
1805
|
+
| `resetRowHeights(rowIds?)` | 省略则全部 | 清除 pinned 并重算行高 |
|
|
1806
|
+
| `updateDimensions(params)` | `{ rowHeight?, rowHeightMin?, rowHeightMax? }` | 热更新默认行高与 clamp |
|
|
1154
1807
|
|
|
1155
1808
|
#### 渲染 / 视口
|
|
1156
1809
|
|
|
1157
|
-
| 方法 | 说明 |
|
|
1158
|
-
|
|
1159
|
-
| `refreshCells(params?)` |
|
|
1160
|
-
| `refreshCellSpans()` |
|
|
1161
|
-
| `getCellSpan(rowId, colId)` | 查询 span 信息 |
|
|
1162
|
-
| `ensureIndexVisible(index, position?)` | 滚动使行下标进入视口 |
|
|
1163
|
-
| `getRowNode(id)` | 按
|
|
1164
|
-
| `getMetrics()` | 读取渲染与滚动指标 |
|
|
1165
|
-
| `beginUpdate()` / `endUpdate()` |
|
|
1166
|
-
| `scrollTo(scrollTop, scrollLeft?)` | 编程式滚动 |
|
|
1810
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
1811
|
+
|------|------|--------|------|
|
|
1812
|
+
| `refreshCells(params?)` | `{ rowIds?, colIds?, force? }` | `number` | 刷新指定格 DOM |
|
|
1813
|
+
| `refreshCellSpans()` | — | `void` | 强制重建合并 cache |
|
|
1814
|
+
| `getCellSpan(rowId, colId)` | — | `CellSpanInfo \| null` | 查询 span 信息 |
|
|
1815
|
+
| `ensureIndexVisible(index, position?)` | position 默认 `'middle'` | `void` | 滚动使行下标进入视口 |
|
|
1816
|
+
| `getRowNode(id)` | rowId | `RowNode \| undefined` | 按 id 获取行节点 |
|
|
1817
|
+
| `getMetrics()` | — | `GridMetrics` | 读取渲染与滚动指标 |
|
|
1818
|
+
| `beginUpdate()` / `endUpdate()` | — | `void` | 批量更新(与 applyTransaction 配对) |
|
|
1819
|
+
| `scrollTo(scrollTop, scrollLeft?)` | px | `void` | 编程式滚动 |
|
|
1167
1820
|
|
|
1168
1821
|
#### 编辑
|
|
1169
1822
|
|
|
1170
|
-
| 方法 | 说明 |
|
|
1171
|
-
|
|
1172
|
-
| `startEditingCell({ rowIndex, colKey })` |
|
|
1173
|
-
| `stopEditing(cancel?)` |
|
|
1174
|
-
| `isEditing()` | 是否存在编辑态 |
|
|
1175
|
-
| `isCommitting()` | 是否正在异步提交 |
|
|
1176
|
-
| `cancelCommit()` |
|
|
1177
|
-
| `getEditSessionPhase()` |
|
|
1178
|
-
| `getEditingCell()` |
|
|
1179
|
-
| `getEditingCells()` |
|
|
1180
|
-
| `registerCellEditor(name, editor)` |
|
|
1181
|
-
| `unregisterCellEditor(name)` | 注销实例级编辑器 |
|
|
1823
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
1824
|
+
|------|------|--------|------|
|
|
1825
|
+
| `startEditingCell({ rowIndex, colKey })` | colKey = colId 或 prop | `void` | 编程式进入编辑 |
|
|
1826
|
+
| `stopEditing(cancel?)` | cancel 默认 `false` | `Promise<void>` | 结束编辑;`true` 丢弃修改 |
|
|
1827
|
+
| `isEditing()` | — | `boolean` | 是否存在编辑态 |
|
|
1828
|
+
| `isCommitting()` | — | `boolean` | 是否正在异步提交 |
|
|
1829
|
+
| `cancelCommit()` | — | `void` | 中断异步提交 |
|
|
1830
|
+
| `getEditSessionPhase()` | — | `'idle' \| 'editing' \| 'committing' \| 'cancelling'` | 编辑会话阶段 |
|
|
1831
|
+
| `getEditingCell()` | — | `{ rowId, colId } \| null` | 当前主编辑格 |
|
|
1832
|
+
| `getEditingCells()` | — | `EditingCellPosition[]` | 行编辑模式下全部编辑格 |
|
|
1833
|
+
| `registerCellEditor(name, editor)` | — | `void` | 注册实例级命名编辑器 |
|
|
1834
|
+
| `unregisterCellEditor(name)` | — | `boolean` | 注销实例级编辑器 |
|
|
1182
1835
|
|
|
1183
1836
|
#### 校验
|
|
1184
1837
|
|
|
1185
|
-
| 方法 | 说明 |
|
|
1186
|
-
|
|
1187
|
-
| `validate(options?)` | 校验全表或指定行 |
|
|
1188
|
-
| `validateRows(options)` |
|
|
1189
|
-
| `validateCells(options)` |
|
|
1190
|
-
| `clearValidation(options?)` | 清除校验视觉反馈 |
|
|
1191
|
-
| `clearRowValidation(options)` |
|
|
1192
|
-
| `clearCellValidation(options)` |
|
|
1838
|
+
| 方法 | 参数 | 返回值 | 说明 |
|
|
1839
|
+
|------|------|--------|------|
|
|
1840
|
+
| `validate(options?)` | `ValidateGridOptions` | `Promise<GridValidationResult>` | 校验全表或指定行 |
|
|
1841
|
+
| `validateRows(options)` | rowIds 必填 | `Promise<GridValidationResult>` | 校验指定行 |
|
|
1842
|
+
| `validateCells(options)` | cells 必填 | `Promise<GridValidationResult>` | 校验指定格 |
|
|
1843
|
+
| `clearValidation(options?)` | — | `void` | 清除校验视觉反馈 |
|
|
1844
|
+
| `clearRowValidation(options)` | rowIds 必填 | `void` | 清除指定行反馈 |
|
|
1845
|
+
| `clearCellValidation(options)` | cells 必填 | `void` | 清除指定格反馈 |
|
|
1193
1846
|
|
|
1194
1847
|
#### 行选择 / 索引定位
|
|
1195
1848
|
|
|
1196
|
-
| 方法 | 说明 |
|
|
1197
|
-
|
|
1198
|
-
| `toggleRowSelection(rowIds, selected?, force?)` |
|
|
1199
|
-
| `toggleAllSelection(selected?)` |
|
|
1200
|
-
| `setIndexFocus(rowIds)` | 设置索引列辅助定位 |
|
|
1849
|
+
| 方法 | 参数 | 说明 |
|
|
1850
|
+
|------|------|------|
|
|
1851
|
+
| `toggleRowSelection(rowIds, selected?, force?)` | selected 省略时 toggle | 切换/设置 checkbox 选中 |
|
|
1852
|
+
| `toggleAllSelection(selected?)` | 仅 multiple 模式 | 表头全选操作 |
|
|
1853
|
+
| `setIndexFocus(rowIds)` | — | 设置索引列辅助定位 |
|
|
1201
1854
|
|
|
1202
1855
|
#### 展开 / 分组 / 树
|
|
1203
1856
|
|
|
@@ -1219,9 +1872,12 @@ function scrollToRow(index: number) {
|
|
|
1219
1872
|
|------|------|
|
|
1220
1873
|
| `getCellComment(rowId, colId)` / `setCellComment(...)` | 批注读写 |
|
|
1221
1874
|
| `refreshCellComments(params?)` | 刷新批注角标 |
|
|
1222
|
-
| `getCellRanges()`
|
|
1223
|
-
| `
|
|
1224
|
-
| `
|
|
1875
|
+
| `getCellRanges()` | 读取当前框选 range 列表 |
|
|
1876
|
+
| `clearCellSelection()` | 清除框选 |
|
|
1877
|
+
| `addCellRange(params)` | 编程式添加 range |
|
|
1878
|
+
| `getCellSelectionAggregation()` | 选区聚合统计(count / sum / average) |
|
|
1879
|
+
| `copySelectedRangeToClipboard()` | 复制选区至剪贴板 |
|
|
1880
|
+
| `pasteFromClipboard()` | 从剪贴板粘贴至选区 |
|
|
1225
1881
|
| `showLoadingOverlay()` / `showNoRowsOverlay()` / `hideOverlay()` | overlay 控制 |
|
|
1226
1882
|
| `isOverlayShowing()` / `getOverlayType()` | overlay 状态查询 |
|
|
1227
1883
|
| `refreshDisabledState(params?)` | 重算 disabled 投影 |
|
|
@@ -1229,13 +1885,24 @@ function scrollToRow(index: number) {
|
|
|
1229
1885
|
|
|
1230
1886
|
#### 事件订阅
|
|
1231
1887
|
|
|
1888
|
+
GridApi 支持 `on(eventType, handler)` 订阅内核事件(camelCase),返回取消函数:
|
|
1889
|
+
|
|
1890
|
+
| 内核事件名 | 对应 Vue 事件 |
|
|
1891
|
+
|------------|---------------|
|
|
1892
|
+
| `selectionChanged` | `selection-changed` |
|
|
1893
|
+
| `cellValueChanged` | `cell-value-changed` |
|
|
1894
|
+
| `sortChanged` | `sort-changed` |
|
|
1895
|
+
| `filterChanged` | `filter-changed` |
|
|
1896
|
+
| `columnMoved` | `column-moved` |
|
|
1897
|
+
| `cellSelectionChanged` | `cell-selection-changed` |
|
|
1898
|
+
| … | 其余见 [Events](#events) |
|
|
1899
|
+
|
|
1232
1900
|
```ts
|
|
1233
1901
|
const api = gridRef.value?.api
|
|
1234
1902
|
const off = api?.on('selectionChanged', (event) => {
|
|
1235
1903
|
console.log(event.selectedRowIds)
|
|
1236
1904
|
})
|
|
1237
|
-
// 取消订阅
|
|
1238
|
-
off?.()
|
|
1905
|
+
off?.() // 取消订阅
|
|
1239
1906
|
```
|
|
1240
1907
|
|
|
1241
1908
|
### rowId 约定
|
|
@@ -1248,7 +1915,23 @@ off?.()
|
|
|
1248
1915
|
|
|
1249
1916
|
## Slots
|
|
1250
1917
|
|
|
1251
|
-
MagicGrid
|
|
1918
|
+
MagicGrid 提供**静态插槽**(固定名称)与**动态列插槽**(`#cell-{colId}` / `#cell-editor-{colId}`)两类。插槽与同名 prop / 列配置的优先级见文末 [插槽优先级说明](#插槽优先级说明)。
|
|
1919
|
+
|
|
1920
|
+
### 插槽一览
|
|
1921
|
+
|
|
1922
|
+
| 插槽名 | 类型 | 说明 |
|
|
1923
|
+
|--------|------|------|
|
|
1924
|
+
| `#toolbar` | 静态 | 表格顶部工具栏 |
|
|
1925
|
+
| `#status-bar` | 静态 | 完全自定义底部状态栏(提供时替换默认布局) |
|
|
1926
|
+
| `#status-bar-left` | 静态 | 默认状态栏左侧区域 |
|
|
1927
|
+
| `#status-bar-right` | 静态 | 默认状态栏右侧区域 |
|
|
1928
|
+
| `#cell-{colId}` | 动态 | 自定义单元格渲染 |
|
|
1929
|
+
| `#cell-editor-{colId}` | 动态 | 自定义单元格编辑器 |
|
|
1930
|
+
| `#detail-row` | 静态 | 主从展开行详情区 |
|
|
1931
|
+
| `#tooltip` | 静态 | 全局自定义 tooltip |
|
|
1932
|
+
| `#loading` | 静态 | loading overlay 内容 |
|
|
1933
|
+
| `#no-rows` | 静态 | 无数据 overlay 内容 |
|
|
1934
|
+
| `#no-matching-rows` | 静态 | 筛选无匹配 overlay 内容 |
|
|
1252
1935
|
|
|
1253
1936
|
### 布局插槽
|
|
1254
1937
|
|
|
@@ -1259,7 +1942,7 @@ MagicGrid 提供静态插槽与动态列插槽两类。
|
|
|
1259
1942
|
| 插槽 prop | 类型 | 说明 |
|
|
1260
1943
|
|-----------|------|------|
|
|
1261
1944
|
| `api` | `GridApi \| undefined` | GridApi 实例 |
|
|
1262
|
-
| `size` | `
|
|
1945
|
+
| `size` | `GridSize` | 当前尺寸 preset |
|
|
1263
1946
|
| `portalEl` | `HTMLElement \| undefined` | 浮层挂载 portal 元素 |
|
|
1264
1947
|
|
|
1265
1948
|
```vue
|
|
@@ -1418,6 +2101,228 @@ MagicGrid 提供静态插槽与动态列插槽两类。
|
|
|
1418
2101
|
|
|
1419
2102
|
---
|
|
1420
2103
|
|
|
2104
|
+
|
|
2105
|
+
## 单元格编辑
|
|
2106
|
+
|
|
2107
|
+
Magic Grid 支持 **overlay**(点击/Enter 进入编辑浮层)与 **inline**(控件常驻单元格内)两种呈现模式,以及内置编辑器、函数编辑器、Vue 组件编辑器与命名注册表。
|
|
2108
|
+
|
|
2109
|
+
### 呈现模式:overlay 与 inline
|
|
2110
|
+
|
|
2111
|
+
| 模式 | 配置 | 行为 |
|
|
2112
|
+
|------|------|------|
|
|
2113
|
+
| **overlay**(默认) | `cellEditorMode: 'overlay'` 或省略 | 非编辑态展示 formatter / cellRenderer;进入编辑态后在单元格上方挂载编辑器 |
|
|
2114
|
+
| **inline** | `cellEditorMode: 'inline'` + 必须配置 `cellEditor` | 编辑器始终渲染在格内;空格切换 checkbox;适合布尔列、简单输入 |
|
|
2115
|
+
|
|
2116
|
+
**inline 限制**(开发模式会 console.warn):
|
|
2117
|
+
|
|
2118
|
+
- 系统列(索引 / 行选择)不支持 inline。
|
|
2119
|
+
- 推荐搭配内置 `'text'` / `'number'` / `'checkbox'`;依赖 teleport/下拉的第三方组件(如 Select)应使用 overlay + `useCellEditor({ strategy: 'overlay' })`。
|
|
2120
|
+
- inline 列通过 `params.commit()` / 空格(checkbox)提交;不走 overlay 的 Enter 捕获逻辑。
|
|
2121
|
+
|
|
2122
|
+
```ts
|
|
2123
|
+
const columns: ColumnDef[] = [
|
|
2124
|
+
{ prop: 'done', label: '完成', width: 80, cellEditorMode: 'inline', cellEditor: 'checkbox' },
|
|
2125
|
+
{ prop: 'qty', label: '数量', cellEditorMode: 'inline', cellEditor: 'number', editable: true },
|
|
2126
|
+
]
|
|
2127
|
+
```
|
|
2128
|
+
|
|
2129
|
+
Grid 级 `editBehavior: 'row'` 时整行同时进入编辑;Tab 在同行可编辑列间循环。`editType: 'doubleClick'` 改为双击进入编辑。
|
|
2130
|
+
|
|
2131
|
+
### 内置编辑器
|
|
2132
|
+
|
|
2133
|
+
| 名称 | 说明 |
|
|
2134
|
+
|------|------|
|
|
2135
|
+
| `'text'` | 单行文本 input |
|
|
2136
|
+
| `'number'` | `type="number"` input |
|
|
2137
|
+
| `'checkbox'` | 布尔 checkbox;inline 模式下空格切换 |
|
|
2138
|
+
|
|
2139
|
+
列定义引用:`cellEditor: 'text'`。内置名不可用于 `registerCellEditor` 覆盖。
|
|
2140
|
+
|
|
2141
|
+
### Vue 自定义编辑器
|
|
2142
|
+
|
|
2143
|
+
包导出以下工具,用于集成 Element Plus 等 Vue 组件:
|
|
2144
|
+
|
|
2145
|
+
| 导出 | 用途 |
|
|
2146
|
+
|------|------|
|
|
2147
|
+
| `useCellEditor` | Composable:注册 `setGetValue`、键盘 Enter/Esc、change 提交策略 |
|
|
2148
|
+
| `createVueCellEditor` | 将 Vue 组件包装为 `CellEditorFn` |
|
|
2149
|
+
| `createSlotCellEditor` | 将 `#cell-editor-{colId}` 插槽包装为 `CellEditorFn`(MagicGrid 内部使用) |
|
|
2150
|
+
| `VueCellEditorHost` | Vue 编辑器挂载宿主 |
|
|
2151
|
+
|
|
2152
|
+
**`useCellEditor` 策略**:
|
|
2153
|
+
|
|
2154
|
+
| strategy | Enter | change 时提交 | 典型场景 |
|
|
2155
|
+
|----------|-------|---------------|----------|
|
|
2156
|
+
| `'input'`(默认) | 立即提交 | 否 | ElInput、原生 input |
|
|
2157
|
+
| `'overlay'` | 延迟(由组件确认) | 是 | ElSelect、DatePicker |
|
|
2158
|
+
|
|
2159
|
+
```vue
|
|
2160
|
+
<!-- MyInputEditor.vue -->
|
|
2161
|
+
<script setup lang="ts">
|
|
2162
|
+
import { ref } from 'vue'
|
|
2163
|
+
import type { CellEditorParams } from '@taocompany/magic-grid/types/core'
|
|
2164
|
+
import { useCellEditor } from '@taocompany/magic-grid'
|
|
2165
|
+
|
|
2166
|
+
const props = defineProps<{ params: CellEditorParams }>()
|
|
2167
|
+
const draft = ref(props.params.formattedValue)
|
|
2168
|
+
|
|
2169
|
+
useCellEditor(props.params, {
|
|
2170
|
+
strategy: 'input',
|
|
2171
|
+
getValue: () => draft.value,
|
|
2172
|
+
})
|
|
2173
|
+
</script>
|
|
2174
|
+
|
|
2175
|
+
<template>
|
|
2176
|
+
<input v-model="draft" class="my-cell-editor" />
|
|
2177
|
+
</template>
|
|
2178
|
+
```
|
|
2179
|
+
|
|
2180
|
+
```ts
|
|
2181
|
+
import { createVueCellEditor } from '@taocompany/magic-grid'
|
|
2182
|
+
import MyInputEditor from './MyInputEditor.vue'
|
|
2183
|
+
|
|
2184
|
+
const columns: ColumnDef[] = [
|
|
2185
|
+
{
|
|
2186
|
+
prop: 'note',
|
|
2187
|
+
label: '备注',
|
|
2188
|
+
editable: true,
|
|
2189
|
+
cellEditor: createVueCellEditor(MyInputEditor),
|
|
2190
|
+
},
|
|
2191
|
+
]
|
|
2192
|
+
```
|
|
2193
|
+
|
|
2194
|
+
`CellEditorParams` 主要字段:`value`、`data`、`stopEditing(commit?)`、`validate()`、`cancelCommit()`、`setGetValue`、`setKeyboardPolicy`、`inline`、`commit`(inline 模式)。
|
|
2195
|
+
|
|
2196
|
+
### 命名编辑器注册表
|
|
2197
|
+
|
|
2198
|
+
除列级函数 / 内置名外,可通过 **命名引用** 复用编辑器:
|
|
2199
|
+
|
|
2200
|
+
```ts
|
|
2201
|
+
import { registerCellEditor } from '@taocompany/magic-grid'
|
|
2202
|
+
|
|
2203
|
+
registerCellEditor('statusSelect', createVueCellEditor(StatusSelectEditor))
|
|
2204
|
+
|
|
2205
|
+
// 列定义
|
|
2206
|
+
{ prop: 'status', cellEditor: 'statusSelect', editable: true }
|
|
2207
|
+
|
|
2208
|
+
// 或实例级(仅当前 Grid)
|
|
2209
|
+
<MagicGrid :cell-editor-registry="{ statusSelect: myEditorFn }" ... />
|
|
2210
|
+
```
|
|
2211
|
+
|
|
2212
|
+
优先级:**列级函数** > **实例 `cellEditorRegistry`** > **全局 `registerCellEditor`** > **内置名**。
|
|
2213
|
+
|
|
2214
|
+
异步提交:`valueSetter` 返回 Promise 时进入 `committing` 阶段;Esc 可 `cancelCommit()`。配合 `asyncRowMutation` 做服务端持久化。
|
|
2215
|
+
|
|
2216
|
+
---
|
|
2217
|
+
|
|
2218
|
+
|
|
2219
|
+
## 数据校验
|
|
2220
|
+
|
|
2221
|
+
校验可在 **编辑提交时**(inline / overlay 共用)与 **编程式 API**(`validate` / `validateRows` / `validateCells`)两个入口触发。
|
|
2222
|
+
|
|
2223
|
+
### 列级规则
|
|
2224
|
+
|
|
2225
|
+
| 方式 | 字段 | 优先级 |
|
|
2226
|
+
|------|------|--------|
|
|
2227
|
+
| 手写 | `cellValidator` | 最高 |
|
|
2228
|
+
| async-validator | `validationRules` | 次之 |
|
|
2229
|
+
| 必填标记 | `validationRequired` | 与 rules.required 联动 |
|
|
2230
|
+
|
|
2231
|
+
`validationRules` 使用 [async-validator](https://github.com/yiminghe/async-validator) 语法;magic-grid 会将异步 `validator` 自动映射为 `asyncValidator`。
|
|
2232
|
+
|
|
2233
|
+
### enrichColumnsWithValidation
|
|
2234
|
+
|
|
2235
|
+
在传入 Grid 前编译 rules 为运行时 `cellValidator`(可选,也可直接写 `cellValidator`):
|
|
2236
|
+
|
|
2237
|
+
```ts
|
|
2238
|
+
import { enrichColumnsWithValidation } from '@taocompany/magic-grid/validation'
|
|
2239
|
+
|
|
2240
|
+
const rawColumns: ColumnDef[] = [
|
|
2241
|
+
{
|
|
2242
|
+
prop: 'email',
|
|
2243
|
+
label: '邮箱',
|
|
2244
|
+
validationRules: [
|
|
2245
|
+
{ required: true, message: '必填' },
|
|
2246
|
+
{ type: 'email', message: '格式不正确' },
|
|
2247
|
+
],
|
|
2248
|
+
},
|
|
2249
|
+
]
|
|
2250
|
+
|
|
2251
|
+
const columns = enrichColumnsWithValidation(rawColumns)
|
|
2252
|
+
```
|
|
2253
|
+
|
|
2254
|
+
### 行级校验
|
|
2255
|
+
|
|
2256
|
+
`rowValidator` 在 **行编辑模式** 提交时运行,返回 `string[]` 错误或 `{ errors, failedColIds }` 结构。失败触发 `row-validation-failed`。
|
|
2257
|
+
|
|
2258
|
+
### 失败后行为
|
|
2259
|
+
|
|
2260
|
+
由 `invalidEditValueMode` 控制:
|
|
2261
|
+
|
|
2262
|
+
| 值 | 行为 |
|
|
2263
|
+
|----|------|
|
|
2264
|
+
| `'block'`(默认) | 保持编辑态,展示错误 |
|
|
2265
|
+
| `'revert'` | 退出编辑并恢复旧值 |
|
|
2266
|
+
| `'keep'` | 退出编辑但保留无效值 |
|
|
2267
|
+
|
|
2268
|
+
### 编程式校验 API
|
|
2269
|
+
|
|
2270
|
+
```ts
|
|
2271
|
+
const result = await api.validate({ rowIds: [1, 2], showFeedback: true })
|
|
2272
|
+
// result.valid · result.cellErrors · result.rowErrors
|
|
2273
|
+
|
|
2274
|
+
await api.validateCells({ cells: [{ rowId: 1, colId: 'email' }] })
|
|
2275
|
+
api.clearValidation()
|
|
2276
|
+
```
|
|
2277
|
+
|
|
2278
|
+
---
|
|
2279
|
+
|
|
2280
|
+
|
|
2281
|
+
## 键盘导航与快捷键
|
|
2282
|
+
|
|
2283
|
+
焦点在表格视口内时(非编辑态),内核处理以下按键。编辑态下 Enter / Esc 等由编辑器或 `useCellEditor` 优先处理。
|
|
2284
|
+
|
|
2285
|
+
### 导航
|
|
2286
|
+
|
|
2287
|
+
| 按键 | 行为 |
|
|
2288
|
+
|------|------|
|
|
2289
|
+
| `↑` `↓` `←` `→` | 移动单元格焦点 |
|
|
2290
|
+
| `Shift` + 方向键 | 扩展框选 range(`cellSelection` 开启时) |
|
|
2291
|
+
| `Ctrl/Cmd` + 方向键 | 跳转到首/末行或导航序首/末列 |
|
|
2292
|
+
| `Tab` / `Shift+Tab` | 下一 / 上一可聚焦格(表头 ↔ 表体可衔接,`navigateHeader` / `navigateFooter` 控制) |
|
|
2293
|
+
| `Enter` | 表头:排序 / 全选;索引列:定位;树/分组:展开折叠;数据格:进入编辑 |
|
|
2294
|
+
| `Space` | 行选择 checkbox;inline checkbox 切换;表头/索引/树/分组同 Enter 的切换逻辑 |
|
|
2295
|
+
| `F2` | 进入编辑(若列可编辑) |
|
|
2296
|
+
| `Shift+F2` | 新建/打开单元格批注(批注功能启用时) |
|
|
2297
|
+
|
|
2298
|
+
### 框选与剪贴板
|
|
2299
|
+
|
|
2300
|
+
| 按键 | 行为 |
|
|
2301
|
+
|------|------|
|
|
2302
|
+
| `Delete` / `Backspace` | 清空选区内可编辑格(触发 `cell-selection-delete-*` 事件) |
|
|
2303
|
+
| `Ctrl/Cmd+C` | 复制选区为 TSV(需 `enableCellCopy`) |
|
|
2304
|
+
| `Ctrl/Cmd+V` | 从剪贴板粘贴至选区锚点(需 `enableCellPaste: true`) |
|
|
2305
|
+
|
|
2306
|
+
### 列宽(表头焦点)
|
|
2307
|
+
|
|
2308
|
+
| 按键 | 行为 |
|
|
2309
|
+
|------|------|
|
|
2310
|
+
| `Alt+←/→` | 键盘调整列宽 |
|
|
2311
|
+
| `Shift+Alt+←/→` | 邻列补偿(需 `colResizeDefault: 'shift'`) |
|
|
2312
|
+
| `Shift+←/→` | 移动表头焦点列(列拖拽排序辅助) |
|
|
2313
|
+
|
|
2314
|
+
### 编辑态
|
|
2315
|
+
|
|
2316
|
+
| 按键 | 行为 |
|
|
2317
|
+
|------|------|
|
|
2318
|
+
| `Esc` | 取消编辑;若正在 async commit 则 `cancelCommit()` |
|
|
2319
|
+
| `Enter` | overlay input 策略:提交;overlay 策略由组件处理 |
|
|
2320
|
+
| `Tab` | 行编辑模式:同行下一可编辑列 |
|
|
2321
|
+
|
|
2322
|
+
---
|
|
2323
|
+
|
|
2324
|
+
---
|
|
2325
|
+
|
|
1421
2326
|
## 辅助组件
|
|
1422
2327
|
|
|
1423
2328
|
表格列设置(Phase 27)提供一组**独立组件**,对标 AG Grid 的 Side Bar + Columns Tool Panel。只要持有 `GridApi` 即可使用,不强依赖 MagicGrid 内部 DOM。
|
|
@@ -1446,7 +2351,7 @@ import {
|
|
|
1446
2351
|
ColumnSettingsMenuItem,
|
|
1447
2352
|
ColumnSettingsMenuIcon,
|
|
1448
2353
|
} from '@taocompany/magic-grid'
|
|
1449
|
-
import type { GridApi, ColumnDef, RowData } from '@taocompany/magic-grid'
|
|
2354
|
+
import type { GridApi, ColumnDef, RowData } from '@taocompany/magic-grid/types/core'
|
|
1450
2355
|
import '@taocompany/magic-grid/style.css'
|
|
1451
2356
|
|
|
1452
2357
|
const columns: ColumnDef[] = [/* ... */]
|
|
@@ -1489,7 +2394,7 @@ function onResetColumnOrder(api: GridApi) {
|
|
|
1489
2394
|
<script setup lang="ts">
|
|
1490
2395
|
import { ref } from 'vue'
|
|
1491
2396
|
import { MagicGrid, ColumnSettingsButton } from '@taocompany/magic-grid'
|
|
1492
|
-
import type { GridApi, MagicGridExpose } from '@taocompany/magic-grid'
|
|
2397
|
+
import type { GridApi, MagicGridExpose } from '@taocompany/magic-grid/types/core'
|
|
1493
2398
|
|
|
1494
2399
|
const gridRef = ref<MagicGridExpose>()
|
|
1495
2400
|
</script>
|
|
@@ -1588,7 +2493,7 @@ const gridRef = ref<MagicGridExpose>()
|
|
|
1588
2493
|
|
|
1589
2494
|
### ColumnSettingsPanel
|
|
1590
2495
|
|
|
1591
|
-
列设置面板本体。按 **左固定 / 中心 / 右固定 / 隐藏**
|
|
2496
|
+
列设置面板本体。按 **左固定 / 中心 / 右固定 / 隐藏** 四组展示**已注册进列模型**的用户列(`available: false` 的列不会出现);每行支持拖拽排序、排序切换、筛选面板、固定列、显隐控制;面板头部提供「清除全部筛选」。
|
|
1592
2497
|
|
|
1593
2498
|
> 通常由 `ColumnSettingsButton` 内嵌使用;也可单独 import 嵌入任意容器。
|
|
1594
2499
|
|
|
@@ -1600,7 +2505,7 @@ const gridRef = ref<MagicGridExpose>()
|
|
|
1600
2505
|
| 列排序 | 点击循环 none → asc → desc | `setSortModel` |
|
|
1601
2506
|
| 列筛选 | 行内展开筛选面板(与表头 filter 同源) | `setColumnFilter` / `clearAllFilters` |
|
|
1602
2507
|
| 列固定 | 切换 null / left / right | `setColumnFixed` |
|
|
1603
|
-
| 列显隐 | checkbox 切换 hidden | `setColumnsHidden` |
|
|
2508
|
+
| 列显隐 | checkbox 切换 `hidden`(不含 `available: false` 列) | `setColumnsHidden` |
|
|
1604
2509
|
| 清除全部筛选 | 面板头部按钮 | `clearAllFilters` |
|
|
1605
2510
|
| 显示全部隐藏列 | hidden 分组底部操作 | `setColumnsHidden(colIds, false)` |
|
|
1606
2511
|
|
|
@@ -1722,7 +2627,7 @@ const gridRef = ref<MagicGridExpose>()
|
|
|
1722
2627
|
类型 `ColumnSettingsMenuIconName` 已从包导出:
|
|
1723
2628
|
|
|
1724
2629
|
```ts
|
|
1725
|
-
import type { ColumnSettingsMenuIconName } from '@taocompany/magic-grid'
|
|
2630
|
+
import type { ColumnSettingsMenuIconName } from '@taocompany/magic-grid/types/core'
|
|
1726
2631
|
```
|
|
1727
2632
|
|
|
1728
2633
|
#### Slots / Events / Expose
|
|
@@ -1731,23 +2636,213 @@ import type { ColumnSettingsMenuIconName } from '@taocompany/magic-grid'
|
|
|
1731
2636
|
|
|
1732
2637
|
---
|
|
1733
2638
|
|
|
1734
|
-
## 相关文档
|
|
1735
2639
|
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
|
1741
|
-
|
|
1742
|
-
|
|
|
2640
|
+
## 包入口与导出
|
|
2641
|
+
|
|
2642
|
+
`package.json` `exports` 字段:
|
|
2643
|
+
|
|
2644
|
+
| 子路径 | 说明 |
|
|
2645
|
+
|--------|------|
|
|
2646
|
+
| `@taocompany/magic-grid` | 主入口:组件、编辑器工具、常量、部分 core 工具 |
|
|
2647
|
+
| `@taocompany/magic-grid/types/core` | Grid / 列 / 事件 / API 类型(`ColumnDef`、`GridApi`、`MagicGridExpose` 等) |
|
|
2648
|
+
| `@taocompany/magic-grid/types/validation` | async-validator 类型别名(`Rule`、`Rules`) |
|
|
2649
|
+
| `@taocompany/magic-grid/validation` | 校验运行时(`enrichColumnsWithValidation`、`Schema` 等) |
|
|
2650
|
+
| `@taocompany/magic-grid/style.css` | 全局样式(**必须**手动引入) |
|
|
2651
|
+
|
|
2652
|
+
### 主入口运行时导出
|
|
2653
|
+
|
|
2654
|
+
**组件**
|
|
2655
|
+
|
|
2656
|
+
- `MagicGrid`
|
|
2657
|
+
- `ColumnSettingsButton` / `ColumnSettingsPanel` / `ColumnSettingsMenuItem` / `ColumnSettingsMenuIcon`
|
|
2658
|
+
|
|
2659
|
+
**单元格编辑器**
|
|
2660
|
+
|
|
2661
|
+
- `useCellEditor`、`VueCellEditorHost`、`createVueCellEditor`、`createSlotCellEditor`
|
|
2662
|
+
- `textCellEditor`、`numberCellEditor`、`checkboxCellEditor`(内置实现,高级场景)
|
|
2663
|
+
- `registerCellEditor` / `unregisterCellEditor` / `getCellEditor` / `hasCellEditor` / `getRegisteredCellEditorNames`
|
|
2664
|
+
- `BUILTIN_CELL_EDITOR_NAMES`、`isBuiltInCellEditor`
|
|
2665
|
+
- `DEFAULT_CELL_EDITOR_MODE`、`resolveCellEditorMode`、`isInlineEditorColumn`
|
|
2666
|
+
|
|
2667
|
+
**常量**
|
|
2668
|
+
|
|
2669
|
+
- `INDEX_COLUMN_ID`、`DEFAULT_INDEX_COLUMN_START`、`INDEX_COLUMN_MIN_WIDTH`
|
|
2670
|
+
- `SELECTION_COLUMN_ID`、`SELECTION_COLUMN_DEFAULT_WIDTH`、`SELECTION_COLUMN_MIN_WIDTH`
|
|
2671
|
+
- `DEFAULT_STATUS_BAR_RANGE_AGGREGATION_PRECISION`
|
|
2672
|
+
- `COLUMN_DRAG_THRESHOLD_PX`、`SORT_AFTER_MOVE_GUARD_MS`
|
|
2673
|
+
|
|
2674
|
+
**工具**
|
|
2675
|
+
|
|
2676
|
+
- `toggleHeaderSort`
|
|
2677
|
+
- `toBusinessRowId`、`toBusinessRowIdFromInternal`、`toBusinessRowIdsFromInternal`、`isSyntheticRow`
|
|
2678
|
+
- `evaluateGridAcceptance`、`getGridAcceptanceThresholds`、`getGridSetDataLimit`(性能验收)
|
|
2679
|
+
- `RowMutationPersistError`
|
|
1743
2680
|
|
|
1744
|
-
|
|
2681
|
+
---
|
|
2682
|
+
|
|
2683
|
+
|
|
2684
|
+
## TypeScript 集成
|
|
2685
|
+
|
|
2686
|
+
### 行数据泛型
|
|
2687
|
+
|
|
2688
|
+
`ColumnDef` 与 `MagicGridProps` 支持泛型推导列 `prop` 与行数据字段:
|
|
1745
2689
|
|
|
1746
2690
|
```ts
|
|
1747
|
-
|
|
2691
|
+
interface UserRow {
|
|
2692
|
+
id: number
|
|
2693
|
+
name: string
|
|
2694
|
+
age: number
|
|
2695
|
+
}
|
|
2696
|
+
|
|
2697
|
+
const columns: ColumnDef<UserRow>[] = [
|
|
2698
|
+
{ prop: 'name', label: '姓名' }, // prop 自动收窄为 'name' | 'age' | 'id'
|
|
2699
|
+
]
|
|
2700
|
+
|
|
2701
|
+
// MagicGridProps<UserRow> 可用于包装组件 props 类型
|
|
2702
|
+
import type { MagicGridProps } from '@taocompany/magic-grid/types/core'
|
|
2703
|
+
```
|
|
2704
|
+
|
|
2705
|
+
### 组件 ref 类型
|
|
2706
|
+
|
|
2707
|
+
```ts
|
|
2708
|
+
import type { MagicGridExpose, GridApi } from '@taocompany/magic-grid/types/core'
|
|
2709
|
+
|
|
2710
|
+
const gridRef = ref<MagicGridExpose>()
|
|
2711
|
+
const api = computed(() => gridRef.value?.api) // Ref<GridApi | undefined>
|
|
2712
|
+
```
|
|
2713
|
+
|
|
2714
|
+
### 事件 payload
|
|
2715
|
+
|
|
2716
|
+
事件回调参数类型均从 `@taocompany/magic-grid/types/core` 导出,例如 `CellValueChangedEvent`、`SelectionChangedEvent`、`FilterModel`、`SortModelItem`。
|
|
2717
|
+
|
|
2718
|
+
### 严格模式建议
|
|
2719
|
+
|
|
2720
|
+
- 项目启用 `strict: true`;避免对 `RowData` 使用 `any`。
|
|
2721
|
+
- 自定义 `cellRenderer` / `valueGetter` 返回值使用 `unknown`,formatter 负责展示字符串。
|
|
2722
|
+
|
|
2723
|
+
---
|
|
2724
|
+
|
|
2725
|
+
|
|
2726
|
+
## 类型与校验子路径
|
|
2727
|
+
|
|
2728
|
+
类型按职责拆分为多个子路径,避免主包体积膨胀。
|
|
2729
|
+
|
|
2730
|
+
### `@taocompany/magic-grid/types/core`
|
|
2731
|
+
|
|
2732
|
+
Grid / 列 / 事件 / API 的完整类型面。常用导出:
|
|
2733
|
+
|
|
2734
|
+
```ts
|
|
2735
|
+
import type {
|
|
2736
|
+
// 数据与列
|
|
2737
|
+
RowData,
|
|
2738
|
+
ColumnDef,
|
|
2739
|
+
MagicGridProps,
|
|
2740
|
+
MagicGridExpose,
|
|
2741
|
+
GridApi,
|
|
2742
|
+
RowNode,
|
|
2743
|
+
BusinessRowId,
|
|
2744
|
+
RowIdInput,
|
|
2745
|
+
// 排序 / 筛选
|
|
2746
|
+
SortModelItem,
|
|
2747
|
+
FilterModel,
|
|
2748
|
+
FilterCondition,
|
|
2749
|
+
ColumnFilter,
|
|
2750
|
+
// 编辑
|
|
2751
|
+
CellEditorParams,
|
|
2752
|
+
CellEditorFn,
|
|
2753
|
+
CellEditorDef,
|
|
2754
|
+
CellEditBehavior,
|
|
2755
|
+
CellEditType,
|
|
2756
|
+
CellEditorMode,
|
|
2757
|
+
EditSessionPhase,
|
|
2758
|
+
// 框选
|
|
2759
|
+
CellRange,
|
|
2760
|
+
CellSelectionOptions,
|
|
2761
|
+
CellSelectionAggregation,
|
|
2762
|
+
// 事件(示例)
|
|
2763
|
+
CellValueChangedEvent,
|
|
2764
|
+
SelectionChangedEvent,
|
|
2765
|
+
ColumnMovedEvent,
|
|
2766
|
+
// 校验
|
|
2767
|
+
CellValidator,
|
|
2768
|
+
RowValidator,
|
|
2769
|
+
ValidationRules,
|
|
2770
|
+
GridValidationResult,
|
|
2771
|
+
// 列设置
|
|
2772
|
+
ColumnSettingsResetScope,
|
|
2773
|
+
ColumnSettingsMenuIconName,
|
|
2774
|
+
// 插槽
|
|
2775
|
+
StatusBarContext,
|
|
2776
|
+
DetailRowSlotParams,
|
|
2777
|
+
OverlaySlotParams,
|
|
2778
|
+
} from '@taocompany/magic-grid/types/core'
|
|
1748
2779
|
```
|
|
1749
2780
|
|
|
1750
|
-
|
|
2781
|
+
完整列表见源码 `src/types/core.ts`(re-export 聚合)。
|
|
2782
|
+
|
|
2783
|
+
### `@taocompany/magic-grid/types/validation`
|
|
2784
|
+
|
|
2785
|
+
async-validator 类型透传:
|
|
2786
|
+
|
|
2787
|
+
```ts
|
|
2788
|
+
import type { Rule, Rules, ValidateError, ValidateFieldsError } from '@taocompany/magic-grid/types/validation'
|
|
2789
|
+
```
|
|
2790
|
+
|
|
2791
|
+
### `@taocompany/magic-grid/validation`
|
|
2792
|
+
|
|
2793
|
+
校验运行时(需安装 `async-validator` peer dependency):
|
|
2794
|
+
|
|
2795
|
+
```ts
|
|
2796
|
+
import {
|
|
2797
|
+
Schema,
|
|
2798
|
+
enrichColumnsWithValidation,
|
|
2799
|
+
createCellValidator,
|
|
2800
|
+
createRowValidator,
|
|
2801
|
+
validateWithSchema,
|
|
2802
|
+
isValidationRequired,
|
|
2803
|
+
} from '@taocompany/magic-grid/validation'
|
|
2804
|
+
```
|
|
2805
|
+
|
|
2806
|
+
---
|
|
2807
|
+
|
|
2808
|
+
|
|
2809
|
+
## 本地开发与 Playground
|
|
2810
|
+
|
|
2811
|
+
### 环境
|
|
2812
|
+
|
|
2813
|
+
```bash
|
|
2814
|
+
pnpm install
|
|
2815
|
+
pnpm dev # 启动 Playground(默认 Vite dev server)
|
|
2816
|
+
pnpm build # 构建 npm 包至 dist/
|
|
2817
|
+
pnpm test:run # 单元测试
|
|
2818
|
+
pnpm typecheck # Vue + TS 类型检查
|
|
2819
|
+
```
|
|
2820
|
+
|
|
2821
|
+
要求 Node.js >= 20.19,包管理器推荐 pnpm 11.x。
|
|
2822
|
+
|
|
2823
|
+
### Playground 路由
|
|
2824
|
+
|
|
2825
|
+
开发服务器按 Phase 组织演示页,便于逐项验收能力:
|
|
2826
|
+
|
|
2827
|
+
| 路由 | 主题 |
|
|
2828
|
+
|------|------|
|
|
2829
|
+
| `/phase2` – `/phase27` | 各 Phase 功能演示与验收用例 |
|
|
2830
|
+
| `/glossary` | 术语表 |
|
|
2831
|
+
|
|
2832
|
+
典型入口:`pnpm dev` 后访问控制台输出的本地 URL,从侧边栏切换 Phase。例如列显隐验收 **`/phase22`**(T14–T15 · `available` 列切换)。
|
|
2833
|
+
|
|
2834
|
+
Playground 源码位于仓库 `playground/` 目录;自定义 Vue 编辑器示例见 `playground/components/editors/`(Element Plus 集成参考)。
|
|
2835
|
+
|
|
2836
|
+
### 构建产物
|
|
2837
|
+
|
|
2838
|
+
`pnpm build` 输出:
|
|
2839
|
+
|
|
2840
|
+
- `dist/index.es.js` / `dist/index.cjs.js` — 主包
|
|
2841
|
+
- `dist/types/*.js` — 类型子路径运行时垫片
|
|
2842
|
+
- `dist/style.css` — 样式
|
|
2843
|
+
- `dist/*.d.ts` — 类型声明(api-extractor rollup)
|
|
2844
|
+
|
|
2845
|
+
发布前会自动执行 `prepublishOnly` → `pnpm run build`。
|
|
1751
2846
|
|
|
1752
2847
|
---
|
|
1753
2848
|
|