@dazhicheng/ui 1.6.7 → 1.6.9
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/dist/components/tt-form/src/form-render/expandable.js +31 -32
- package/dist/components/tt-form/src/useFormContext.js +1 -1
- package/dist/components/tt-panel-select/src/index.vue.js +28 -28
- package/dist/components/tt-table/index.d.ts +3 -15
- package/dist/components/tt-table/index.js +5 -4
- package/dist/components/tt-table/src/Table.vue.d.ts +1 -1
- package/dist/components/tt-table/src/Table.vue.js +3 -3
- package/dist/components/tt-table/src/TableForm.vue.js +168 -159
- package/dist/components/tt-table/src/components/TableAction.vue.d.ts +2 -12
- package/dist/components/tt-table/src/components/TableAction.vue.js +78 -175
- package/dist/components/tt-table/src/hooks/useGridProps.js +64 -60
- package/dist/components/tt-table/src/hooks/useTableData.js +77 -74
- package/dist/components/tt-table/src/types/table.d.ts +2 -1
- package/dist/components/tt-table/src/utils/table-api.d.ts +2 -1
- package/dist/components/tt-table/src/utils/table-api.js +3 -2
- package/dist/components/tt-vtable/index.js +54 -0
- package/dist/components/tt-vtable/src/components/TtVTable.vue.d.ts +188 -0
- package/dist/components/tt-vtable/src/components/TtVTable.vue.js +227 -0
- package/dist/components/tt-vtable/src/components/TtVTable.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/TtVTableForm.vue.d.ts +32 -0
- package/dist/components/tt-vtable/src/components/TtVTableForm.vue.js +121 -0
- package/dist/components/tt-vtable/src/components/TtVTableForm.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/VTableEmpty.vue.d.ts +64 -0
- package/dist/components/tt-vtable/src/components/VTableEmpty.vue.js +97 -0
- package/dist/components/tt-vtable/src/components/VTableEmpty.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/VTablePagination.vue.d.ts +53 -0
- package/dist/components/tt-vtable/src/components/VTablePagination.vue.js +52 -0
- package/dist/components/tt-vtable/src/components/VTablePagination.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue.d.ts +35 -0
- package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue.js +50 -0
- package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/VTableToolbar.vue.d.ts +63 -0
- package/dist/components/tt-vtable/src/components/VTableToolbar.vue.js +126 -0
- package/dist/components/tt-vtable/src/components/VTableToolbar.vue2.js +4 -0
- package/dist/components/tt-vtable/src/components/VTableViewport.vue.js +133 -0
- package/dist/components/tt-vtable/src/components/VTableViewport.vue2.js +4 -0
- package/dist/components/tt-vtable/src/composables/useVTable.d.ts +41 -0
- package/dist/components/tt-vtable/src/composables/useVTable.js +25 -0
- package/dist/components/tt-vtable/src/composables/useVTableFormRender.d.ts +13 -0
- package/dist/components/tt-vtable/src/composables/useVTableFormRender.js +92 -0
- package/dist/components/tt-vtable/src/composables/useVTableRender.d.ts +13 -0
- package/dist/components/tt-vtable/src/composables/useVTableRender.js +13 -0
- package/dist/components/tt-vtable/src/engine/visactor/createListTable.d.ts +10 -0
- package/dist/components/tt-vtable/src/engine/visactor/createListTable.js +63 -0
- package/dist/components/tt-vtable/src/engine/visactor/createVueCellLayout.d.ts +37 -0
- package/dist/components/tt-vtable/src/engine/visactor/createVueCellLayout.js +133 -0
- package/dist/components/tt-vtable/src/engine/visactor/index.d.ts +8 -0
- package/dist/components/tt-vtable/src/engine/visactor/native-boundaries.d.ts +23 -0
- package/dist/components/tt-vtable/src/engine/visactor/native-boundaries.js +70 -0
- package/dist/components/tt-vtable/src/engine/visactor/record-adapter.d.ts +38 -0
- package/dist/components/tt-vtable/src/engine/visactor/record-adapter.js +41 -0
- package/dist/components/tt-vtable/src/engine/visactor/toColumnDefinitions.d.ts +45 -0
- package/dist/components/tt-vtable/src/engine/visactor/toColumnDefinitions.js +73 -0
- package/dist/components/tt-vtable/src/engine/visactor/toListTableOptions.d.ts +25 -0
- package/dist/components/tt-vtable/src/engine/visactor/toListTableOptions.js +25 -0
- package/dist/components/tt-vtable/src/engine/visactor/types.d.ts +29 -0
- package/dist/components/tt-vtable/src/features/column-preferences/column-preference-storage.d.ts +5 -0
- package/dist/components/tt-vtable/src/features/column-preferences/column-preference-storage.js +52 -0
- package/dist/components/tt-vtable/src/features/column-preferences/useColumnPreferences.d.ts +74 -0
- package/dist/components/tt-vtable/src/features/column-preferences/useColumnPreferences.js +232 -0
- package/dist/components/tt-vtable/src/features/editing/useCellEditing.d.ts +48 -0
- package/dist/components/tt-vtable/src/features/editing/useCellEditing.js +102 -0
- package/dist/components/tt-vtable/src/features/form-integration/useVTableForm.d.ts +51 -0
- package/dist/components/tt-vtable/src/features/pagination/useTablePagination.d.ts +40 -0
- package/dist/components/tt-vtable/src/features/pagination/useTablePagination.js +51 -0
- package/dist/components/tt-vtable/src/features/querying/useRecordQuery.d.ts +38 -0
- package/dist/components/tt-vtable/src/features/querying/useRecordQuery.js +57 -0
- package/dist/components/tt-vtable/src/features/records/index.d.ts +3 -0
- package/dist/components/tt-vtable/src/features/records/record-index.d.ts +122 -0
- package/dist/components/tt-vtable/src/features/records/record-index.js +209 -0
- package/dist/components/tt-vtable/src/features/records/useRecordSource.d.ts +41 -0
- package/dist/components/tt-vtable/src/features/records/useRecordSource.js +249 -0
- package/dist/components/tt-vtable/src/features/selection/useRowSelection.d.ts +65 -0
- package/dist/components/tt-vtable/src/features/selection/useRowSelection.js +129 -0
- package/dist/components/tt-vtable/src/features/tree/useTreeRecords.d.ts +60 -0
- package/dist/components/tt-vtable/src/features/tree/useTreeRecords.js +125 -0
- package/dist/components/tt-vtable/src/public/column-preferences.d.ts +32 -0
- package/dist/components/tt-vtable/src/public/index.d.ts +8 -0
- package/dist/components/tt-vtable/src/public/table-api.d.ts +215 -0
- package/dist/components/tt-vtable/src/public/table-column.d.ts +123 -0
- package/dist/components/tt-vtable/src/public/table-errors.d.ts +26 -0
- package/dist/components/tt-vtable/src/public/table-errors.js +26 -0
- package/dist/components/tt-vtable/src/public/table-events.d.ts +69 -0
- package/dist/components/tt-vtable/src/public/table-props.d.ts +216 -0
- package/dist/components/tt-vtable/src/public/table-slots.d.ts +37 -0
- package/dist/components/tt-vtable/src/runtime/createVTableController.d.ts +12 -0
- package/dist/components/tt-vtable/src/runtime/createVTableController.js +238 -0
- package/dist/components/tt-vtable/src/runtime/createVTableRuntime.d.ts +79 -0
- package/dist/components/tt-vtable/src/runtime/createVTableRuntime.js +380 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +129 -115
- package/dist/packages/utils/src/is.js +46 -37
- package/dist/style.css +1 -1
- package/package.json +3 -1
- package/dist/assets/svg/action_more.svg.js +0 -4
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { ListTableConstructorOptions, TYPES } from '@visactor/vtable';
|
|
2
|
+
import { TtVTableFieldPath, TtVTableMutationMode, TtVTableRowKey, TtVTableSortDescriptor } from './table-api';
|
|
3
|
+
import { TtVTableColumn } from './table-column';
|
|
4
|
+
import { VTableColumnPreferenceStorage } from './column-preferences';
|
|
5
|
+
/** 由封装层固定控制的原生 options 字段。 */
|
|
6
|
+
export type TtVTableReservedNativeOptionKey = "columns" | "pagination" | "records";
|
|
7
|
+
/** 由封装层固定控制的 customConfig 字段。 */
|
|
8
|
+
export type TtVTableReservedCustomConfigKey = "createReactContainer";
|
|
9
|
+
/** 由封装层独占的原生事件。 */
|
|
10
|
+
export type TtVTableReservedNativeEventName = "change_cell_value" | "change_cell_values" | "checkbox_state_change" | "radio_state_change" | "tree_hierarchy_state_change";
|
|
11
|
+
/** 官方声明之外由 Vue DOM 插件读取的 customConfig 扩展。 */
|
|
12
|
+
export interface TtVTableVueBridgeCustomConfig {
|
|
13
|
+
/** Vue DOM 插件允许保留的最大缓存数量。 */
|
|
14
|
+
maxDomCacheCount?: number;
|
|
15
|
+
/** 延迟读取当前 Vue appContext。 */
|
|
16
|
+
getVueUserAppContext?: () => unknown;
|
|
17
|
+
}
|
|
18
|
+
/** 允许业务配置且不会覆盖受控状态的 customConfig。 */
|
|
19
|
+
export type TtVTableNativeCustomConfig = Omit<NonNullable<ListTableConstructorOptions["customConfig"]>, TtVTableReservedCustomConfigKey> & TtVTableVueBridgeCustomConfig;
|
|
20
|
+
/** 允许业务透传的原生 ListTable options。 */
|
|
21
|
+
export type TtVTableNativeOptions = Omit<ListTableConstructorOptions, TtVTableReservedNativeOptionKey | "customConfig"> & {
|
|
22
|
+
/** 不允许覆盖 createReactContainer 的原生扩展配置。 */
|
|
23
|
+
customConfig?: TtVTableNativeCustomConfig;
|
|
24
|
+
};
|
|
25
|
+
/** 单个原生事件监听函数。 */
|
|
26
|
+
export type TtVTableNativeEventListener<EventName extends keyof TYPES.TableEventHandlersEventArgumentMap> = (event: TYPES.TableEventHandlersEventArgumentMap[EventName]) => void;
|
|
27
|
+
/** 允许业务监听且不会绕过受控 feature 的原生事件。 */
|
|
28
|
+
export type TtVTableNativeEvents = Partial<{
|
|
29
|
+
[EventName in Exclude<keyof TYPES.TableEventHandlersEventArgumentMap, TtVTableReservedNativeEventName>]: TtVTableNativeEventListener<EventName>;
|
|
30
|
+
}>;
|
|
31
|
+
/** 业务主键字段路径或读取函数。 */
|
|
32
|
+
export type TtVTableRowKeySource<Row, Key extends TtVTableRowKey = TtVTableRowKey> = TtVTableFieldPath | ((record: Readonly<Row>) => Key);
|
|
33
|
+
/** 一次远程 records 请求的完整上下文。 */
|
|
34
|
+
export interface TtVTableFetchRequest<QueryParams extends Record<string, unknown>> {
|
|
35
|
+
/** 当前页码,起始值为 1。 */
|
|
36
|
+
page: number;
|
|
37
|
+
/** 当前每页记录数。 */
|
|
38
|
+
pageSize: number;
|
|
39
|
+
/** 不可变查询参数根快照。 */
|
|
40
|
+
queryParams: Readonly<QueryParams>;
|
|
41
|
+
/** 当前排序条件。 */
|
|
42
|
+
sort: readonly TtVTableSortDescriptor[];
|
|
43
|
+
/** 当前筛选条件。 */
|
|
44
|
+
filters: Readonly<Record<string, unknown>>;
|
|
45
|
+
/** 新请求或释放时会终止的信号。 */
|
|
46
|
+
signal: AbortSignal;
|
|
47
|
+
}
|
|
48
|
+
/** 一次远程 records 请求的返回值。 */
|
|
49
|
+
export interface TtVTableFetchResponse<Row> {
|
|
50
|
+
/** 当前页记录。 */
|
|
51
|
+
records: readonly Row[];
|
|
52
|
+
/** 服务端结果总数。 */
|
|
53
|
+
total: number;
|
|
54
|
+
}
|
|
55
|
+
/** 远程 records 请求函数。 */
|
|
56
|
+
export type TtVTableFetchRecords<Row, QueryParams extends Record<string, unknown>> = (request: TtVTableFetchRequest<QueryParams>) => Promise<TtVTableFetchResponse<Row>>;
|
|
57
|
+
/** 编辑校验上下文。 */
|
|
58
|
+
export interface TtVTableEditValidationContext<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
59
|
+
/** 当前运行时记录。 */
|
|
60
|
+
record: Readonly<Row>;
|
|
61
|
+
/** 当前业务主键。 */
|
|
62
|
+
rowKey: Key;
|
|
63
|
+
/** 当前字段路径。 */
|
|
64
|
+
field: TtVTableFieldPath;
|
|
65
|
+
/** 开始编辑时的值。 */
|
|
66
|
+
previousValue: unknown;
|
|
67
|
+
/** 待提交值。 */
|
|
68
|
+
value: unknown;
|
|
69
|
+
}
|
|
70
|
+
/** 编辑校验函数。 */
|
|
71
|
+
export type TtVTableEditValidator<Row, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableEditValidationContext<Row, Key>) => boolean | Promise<boolean | string | undefined | void> | string | undefined | void;
|
|
72
|
+
/** 懒加载树节点的请求上下文。 */
|
|
73
|
+
export interface TtVTableTreeChildrenRequest<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
74
|
+
/** 当前父记录。 */
|
|
75
|
+
parent: Readonly<Row>;
|
|
76
|
+
/** 当前父记录主键。 */
|
|
77
|
+
parentKey: Key;
|
|
78
|
+
/** records 换根或释放时会终止的信号。 */
|
|
79
|
+
signal: AbortSignal;
|
|
80
|
+
}
|
|
81
|
+
/** 单选和多选配置。 */
|
|
82
|
+
export interface TtVTableSelectionOptions<Row> {
|
|
83
|
+
/** 选择模式。 */
|
|
84
|
+
mode?: "multiple" | "none" | "single";
|
|
85
|
+
/** 是否保留当前页之外的已选主键。 */
|
|
86
|
+
reserveAcrossPages?: boolean;
|
|
87
|
+
/** 是否启用树节点父子级联。 */
|
|
88
|
+
cascade?: boolean;
|
|
89
|
+
/** 业务行是否允许选择。 */
|
|
90
|
+
isRowSelectable?: (record: Readonly<Row>) => boolean;
|
|
91
|
+
}
|
|
92
|
+
/** Element Plus 分页组件的语义配置。 */
|
|
93
|
+
export interface TtVTablePaginationOptions {
|
|
94
|
+
/** 初始页码。 */
|
|
95
|
+
page?: number;
|
|
96
|
+
/** 初始每页记录数。 */
|
|
97
|
+
pageSize?: number;
|
|
98
|
+
/** 可选每页记录数集合。 */
|
|
99
|
+
pageSizes?: readonly number[];
|
|
100
|
+
/** ElPagination layout。 */
|
|
101
|
+
layout?: string;
|
|
102
|
+
/** 是否使用带背景的分页按钮。 */
|
|
103
|
+
background?: boolean;
|
|
104
|
+
/** 仅一页时是否隐藏分页。 */
|
|
105
|
+
hideOnSinglePage?: boolean;
|
|
106
|
+
}
|
|
107
|
+
/** 远程查询策略。 */
|
|
108
|
+
export interface TtVTableQueryOptions {
|
|
109
|
+
/** 挂载后是否立即发起首次请求。 */
|
|
110
|
+
immediate?: boolean;
|
|
111
|
+
/** 排序变化时是否回到第一页。 */
|
|
112
|
+
resetPageOnSort?: boolean;
|
|
113
|
+
/** 筛选变化时是否回到第一页。 */
|
|
114
|
+
resetPageOnFilter?: boolean;
|
|
115
|
+
}
|
|
116
|
+
/** 单元格编辑配置。 */
|
|
117
|
+
export interface TtVTableEditingOptions<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
118
|
+
/** 允许开始编辑的交互方式。 */
|
|
119
|
+
trigger?: "click" | "doubleclick" | "api" | readonly ("api" | "click" | "doubleclick")[];
|
|
120
|
+
/** 按字段路径配置校验函数。 */
|
|
121
|
+
validators?: Readonly<Record<string, TtVTableEditValidator<Row, Key>>>;
|
|
122
|
+
}
|
|
123
|
+
/** 树结构配置。 */
|
|
124
|
+
export interface TtVTableTreeOptions<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
125
|
+
/** 子节点字段路径。 */
|
|
126
|
+
childrenField?: string;
|
|
127
|
+
/** 初始展开节点主键。 */
|
|
128
|
+
defaultExpandedKeys?: readonly Key[];
|
|
129
|
+
/** 是否复用已经加载的子节点。 */
|
|
130
|
+
cacheChildren?: boolean;
|
|
131
|
+
/** 异步加载子节点。 */
|
|
132
|
+
fetchTreeChildren?: (request: TtVTableTreeChildrenRequest<Row, Key>) => Promise<readonly Row[]>;
|
|
133
|
+
}
|
|
134
|
+
/** 列偏好配置。 */
|
|
135
|
+
export interface TtVTableColumnPreferenceOptions {
|
|
136
|
+
/** 是否保存列显隐、顺序、宽度和冻结状态。 */
|
|
137
|
+
persistent?: boolean;
|
|
138
|
+
/** 页面和用户维度唯一的列配置键。 */
|
|
139
|
+
columnsKey?: string;
|
|
140
|
+
/** 持久化结构版本。 */
|
|
141
|
+
schemaVersion?: number;
|
|
142
|
+
/** 高频列宽和拖拽写入的合并时长。 */
|
|
143
|
+
writeDelay?: number;
|
|
144
|
+
/** 可替换为服务端实现的列偏好存储。 */
|
|
145
|
+
storage?: VTableColumnPreferenceStorage;
|
|
146
|
+
}
|
|
147
|
+
/** 工具栏配置。 */
|
|
148
|
+
export interface TtVTableToolbarOptions {
|
|
149
|
+
/** 是否显示刷新命令。 */
|
|
150
|
+
refresh?: boolean;
|
|
151
|
+
/** 是否显示列设置命令。 */
|
|
152
|
+
columns?: boolean;
|
|
153
|
+
}
|
|
154
|
+
/** TtVTable 可组合 feature 配置。 */
|
|
155
|
+
export interface TtVTableFeatureOptions<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
156
|
+
/** 单选和多选。 */
|
|
157
|
+
selection?: TtVTableSelectionOptions<Row>;
|
|
158
|
+
/** Element Plus 分页。 */
|
|
159
|
+
pagination?: false | TtVTablePaginationOptions;
|
|
160
|
+
/** 远程查询。 */
|
|
161
|
+
query?: TtVTableQueryOptions;
|
|
162
|
+
/** 单元格编辑。 */
|
|
163
|
+
editing?: false | TtVTableEditingOptions<Row, Key>;
|
|
164
|
+
/** 树结构与懒加载。 */
|
|
165
|
+
tree?: false | TtVTableTreeOptions<Row, Key>;
|
|
166
|
+
/** 列偏好。 */
|
|
167
|
+
columnPreferences?: false | TtVTableColumnPreferenceOptions;
|
|
168
|
+
/** 工具栏。 */
|
|
169
|
+
toolbar?: false | TtVTableToolbarOptions;
|
|
170
|
+
}
|
|
171
|
+
/** Vue DOM 渲染通道配置。 */
|
|
172
|
+
export interface TtVTableRenderingOptions {
|
|
173
|
+
/** 全表 Vue DOM 缓存上限。 */
|
|
174
|
+
maxDomCacheCount?: number;
|
|
175
|
+
}
|
|
176
|
+
/** 本地和远程来源共享的 props。 */
|
|
177
|
+
export interface TtVTableSharedProps<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> {
|
|
178
|
+
/** 语义列配置。 */
|
|
179
|
+
columns: readonly TtVTableColumn<Row, Key>[];
|
|
180
|
+
/** 业务主键字段路径或读取函数。 */
|
|
181
|
+
rowKey: TtVTableRowKeySource<Row, Key>;
|
|
182
|
+
/** 远程查询参数,只监听根引用。 */
|
|
183
|
+
queryParams?: QueryParams;
|
|
184
|
+
/** 当前选择主键,由 v-model:selected-row-keys 管理。 */
|
|
185
|
+
selectedRowKeys?: readonly Key[];
|
|
186
|
+
/** 可组合 feature 配置。 */
|
|
187
|
+
features?: TtVTableFeatureOptions<Row, Key>;
|
|
188
|
+
/** 记录所有权策略。 */
|
|
189
|
+
mutationMode?: TtVTableMutationMode;
|
|
190
|
+
/** Vue DOM 渲染配置。 */
|
|
191
|
+
rendering?: TtVTableRenderingOptions;
|
|
192
|
+
/** 未封装的安全原生 options。 */
|
|
193
|
+
nativeOptions?: TtVTableNativeOptions;
|
|
194
|
+
/** 未被 feature 独占的原生事件。 */
|
|
195
|
+
nativeEvents?: TtVTableNativeEvents;
|
|
196
|
+
/** 表格容器宽度。 */
|
|
197
|
+
width?: number | string;
|
|
198
|
+
/** 表格容器高度。 */
|
|
199
|
+
height?: number | string;
|
|
200
|
+
}
|
|
201
|
+
/** 本地 records 来源。 */
|
|
202
|
+
export interface TtVTableLocalSourceProps<Row> {
|
|
203
|
+
/** 调用方持有的本地根快照。 */
|
|
204
|
+
records?: readonly Row[];
|
|
205
|
+
/** 本地模式不允许配置远程请求。 */
|
|
206
|
+
fetchRecords?: never;
|
|
207
|
+
}
|
|
208
|
+
/** 远程 records 来源。 */
|
|
209
|
+
export interface TtVTableRemoteSourceProps<Row, QueryParams extends Record<string, unknown>> {
|
|
210
|
+
/** 远程模式不接受本地根快照。 */
|
|
211
|
+
records?: never;
|
|
212
|
+
/** 远程记录请求函数。 */
|
|
213
|
+
fetchRecords: TtVTableFetchRecords<Row, QueryParams>;
|
|
214
|
+
}
|
|
215
|
+
/** TtVTable 完整 props。 */
|
|
216
|
+
export type TtVTableProps<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> = TtVTableSharedProps<Row, Key, QueryParams> & (TtVTableLocalSourceProps<Row> | TtVTableRemoteSourceProps<Row, QueryParams>);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { VNodeChild } from 'vue';
|
|
2
|
+
import { TtVTableCellRenderContext, TtVTableHeaderRenderContext } from './table-column';
|
|
3
|
+
import { TtVTableApi, TtVTableRowKey } from './table-api';
|
|
4
|
+
/** Vue DOM 正文命名插槽。 */
|
|
5
|
+
export type TtVTableCellSlot<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableCellRenderContext<Row, Key>) => VNodeChild;
|
|
6
|
+
/** Vue DOM 表头命名插槽。 */
|
|
7
|
+
export type TtVTableHeaderSlot<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableHeaderRenderContext<Row, Key>) => VNodeChild;
|
|
8
|
+
/** 空状态插槽上下文。 */
|
|
9
|
+
export interface TtVTableEmptySlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
10
|
+
/** 当前稳定表格 API。 */
|
|
11
|
+
tableApi: TtVTableApi<Row, Key>;
|
|
12
|
+
}
|
|
13
|
+
/** 错误状态插槽上下文。 */
|
|
14
|
+
export interface TtVTableErrorSlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
15
|
+
/** 当前错误。 */
|
|
16
|
+
error: Error;
|
|
17
|
+
/** 当前稳定表格 API。 */
|
|
18
|
+
tableApi: TtVTableApi<Row, Key>;
|
|
19
|
+
/** 重新执行当前查询。 */
|
|
20
|
+
retry: () => Promise<boolean>;
|
|
21
|
+
}
|
|
22
|
+
/** 工具栏插槽上下文。 */
|
|
23
|
+
export interface TtVTableToolbarSlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
24
|
+
/** 当前稳定表格 API。 */
|
|
25
|
+
tableApi: TtVTableApi<Row, Key>;
|
|
26
|
+
}
|
|
27
|
+
/** 传给 VTableViewport 的动态 Vue renderer 集合。 */
|
|
28
|
+
export type TtVTableRendererSlots<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = Readonly<Record<string, TtVTableCellSlot<Row, Key> | TtVTableHeaderSlot<Row, Key>>>;
|
|
29
|
+
/** TtVTable 固定界面插槽。 */
|
|
30
|
+
export interface TtVTableSlots<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
31
|
+
/** 工具栏业务命令。 */
|
|
32
|
+
toolbar?: (context: TtVTableToolbarSlotContext<Row, Key>) => VNodeChild;
|
|
33
|
+
/** 空记录状态。 */
|
|
34
|
+
empty?: (context: TtVTableEmptySlotContext<Row, Key>) => VNodeChild;
|
|
35
|
+
/** 首次加载失败状态。 */
|
|
36
|
+
error?: (context: TtVTableErrorSlotContext<Row, Key>) => VNodeChild;
|
|
37
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TtVTableApi, TtVTableRowKey } from '../public';
|
|
2
|
+
/** useVTable 与一个存活组件之间的稳定绑定控制器。 */
|
|
3
|
+
export interface TtVTableController<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
|
|
4
|
+
/** 从创建开始保持引用不变的公共 API。 */
|
|
5
|
+
tableApi: TtVTableApi<Row, Key>;
|
|
6
|
+
/** 绑定一个组件创建的真实 API。 */
|
|
7
|
+
bind: (tableApi: TtVTableApi<Row, Key>) => void;
|
|
8
|
+
/** 解绑即将卸载的组件 API。 */
|
|
9
|
+
unbind: (tableApi: TtVTableApi<Row, Key>) => void;
|
|
10
|
+
}
|
|
11
|
+
/** 创建一个可在组件挂载前返回稳定 API 的控制器。 */
|
|
12
|
+
export declare function createVTableController<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey>(): TtVTableController<Row, Key>;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { shallowRef as c, computed as l, watch as a } from "vue";
|
|
2
|
+
import { createTtVTableError as S } from "../public/table-errors.js";
|
|
3
|
+
function ke() {
|
|
4
|
+
let o, g = [];
|
|
5
|
+
const h = [], u = c([]), R = c(!1), K = c(), d = c(1), y = c(20), C = c(0), f = c([]), V = c([]), B = c([]), m = c([]), E = c(), w = c(!1), A = c(), q = c([]), L = c([]), p = c(!1), P = c(0), N = c(0), _ = l(() => u.value), O = l(() => u.value.length), z = l(() => C.value), I = l(() => f.value), M = l(() => V.value), k = l(() => B.value), D = l(() => m.value);
|
|
6
|
+
function r() {
|
|
7
|
+
if (o) return o;
|
|
8
|
+
throw S("TT_VTABLE_NOT_READY", "TtVTable controller 尚未绑定存活组件。", {});
|
|
9
|
+
}
|
|
10
|
+
function n(e) {
|
|
11
|
+
if (o) {
|
|
12
|
+
e(o);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
h.push(e);
|
|
16
|
+
}
|
|
17
|
+
function i(e, t) {
|
|
18
|
+
return a(e, (s) => t.value = s, { immediate: !0 });
|
|
19
|
+
}
|
|
20
|
+
function F() {
|
|
21
|
+
return (o == null ? void 0 : o.records.getAll()) ?? u.value;
|
|
22
|
+
}
|
|
23
|
+
function Q(e) {
|
|
24
|
+
return o == null ? void 0 : o.records.getByKey(e);
|
|
25
|
+
}
|
|
26
|
+
function H(e) {
|
|
27
|
+
u.value = [...e], n((t) => t.records.replaceAll(e));
|
|
28
|
+
}
|
|
29
|
+
function U(e) {
|
|
30
|
+
n((t) => t.records.append(e));
|
|
31
|
+
}
|
|
32
|
+
function W(e, t) {
|
|
33
|
+
n((s) => s.records.insertAt(e, t));
|
|
34
|
+
}
|
|
35
|
+
function Y(e, t, s) {
|
|
36
|
+
n((v) => v.records.patchByKey(e, t, s));
|
|
37
|
+
}
|
|
38
|
+
function j(e) {
|
|
39
|
+
n((t) => t.records.patchMany(e));
|
|
40
|
+
}
|
|
41
|
+
function G(e, t, s, v) {
|
|
42
|
+
n((we) => we.records.setCellValue(e, t, s, v));
|
|
43
|
+
}
|
|
44
|
+
function J(e) {
|
|
45
|
+
n((t) => t.records.removeByKeys(e));
|
|
46
|
+
}
|
|
47
|
+
function X() {
|
|
48
|
+
return r().query.fetch();
|
|
49
|
+
}
|
|
50
|
+
function Z() {
|
|
51
|
+
return r().query.refresh();
|
|
52
|
+
}
|
|
53
|
+
function $() {
|
|
54
|
+
r().query.cancel();
|
|
55
|
+
}
|
|
56
|
+
function T(e) {
|
|
57
|
+
d.value = e, n((t) => t.pagination.setPage(e));
|
|
58
|
+
}
|
|
59
|
+
function x(e) {
|
|
60
|
+
y.value = e, d.value = 1, n((t) => t.pagination.setPageSize(e));
|
|
61
|
+
}
|
|
62
|
+
function b() {
|
|
63
|
+
n((e) => e.pagination.reset());
|
|
64
|
+
}
|
|
65
|
+
function ee(e) {
|
|
66
|
+
f.value = [...e], n((t) => t.selection.setKeys(e));
|
|
67
|
+
}
|
|
68
|
+
function te(e, t) {
|
|
69
|
+
n((s) => s.selection.toggleKey(e, t));
|
|
70
|
+
}
|
|
71
|
+
function ne() {
|
|
72
|
+
n((e) => e.selection.selectCurrentPage());
|
|
73
|
+
}
|
|
74
|
+
function oe() {
|
|
75
|
+
n((e) => e.selection.selectLoadedRecords());
|
|
76
|
+
}
|
|
77
|
+
function ce() {
|
|
78
|
+
f.value = [], n((e) => e.selection.clear());
|
|
79
|
+
}
|
|
80
|
+
function re(e) {
|
|
81
|
+
m.value = [...e], n((t) => t.columns.replaceAll(e));
|
|
82
|
+
}
|
|
83
|
+
function ie(e) {
|
|
84
|
+
n((t) => t.columns.show(e));
|
|
85
|
+
}
|
|
86
|
+
function se(e) {
|
|
87
|
+
n((t) => t.columns.hide(e));
|
|
88
|
+
}
|
|
89
|
+
function le(e, t) {
|
|
90
|
+
n((s) => s.columns.move(e, t));
|
|
91
|
+
}
|
|
92
|
+
function ae() {
|
|
93
|
+
return r().columns.resetPreferences();
|
|
94
|
+
}
|
|
95
|
+
function ue(e, t) {
|
|
96
|
+
return r().editing.start(e, t);
|
|
97
|
+
}
|
|
98
|
+
function de(e) {
|
|
99
|
+
return r().editing.commit(e);
|
|
100
|
+
}
|
|
101
|
+
function fe() {
|
|
102
|
+
r().editing.cancel();
|
|
103
|
+
}
|
|
104
|
+
function ge(e) {
|
|
105
|
+
return r().editing.validate(e);
|
|
106
|
+
}
|
|
107
|
+
function ye(e) {
|
|
108
|
+
return r().tree.expand(e);
|
|
109
|
+
}
|
|
110
|
+
function me(e) {
|
|
111
|
+
r().tree.collapse(e);
|
|
112
|
+
}
|
|
113
|
+
function pe(e) {
|
|
114
|
+
return r().tree.toggle(e);
|
|
115
|
+
}
|
|
116
|
+
function ve(e) {
|
|
117
|
+
return r().tree.fetchChildren(e);
|
|
118
|
+
}
|
|
119
|
+
function he() {
|
|
120
|
+
r().layout.recalculate();
|
|
121
|
+
}
|
|
122
|
+
function Re(e) {
|
|
123
|
+
r().layout.scrollToRecord(e);
|
|
124
|
+
}
|
|
125
|
+
function Ke(e, t) {
|
|
126
|
+
r().layout.scrollToCell(e, t);
|
|
127
|
+
}
|
|
128
|
+
function Ce() {
|
|
129
|
+
return o == null ? void 0 : o.native.getInstance();
|
|
130
|
+
}
|
|
131
|
+
const Ve = {
|
|
132
|
+
records: {
|
|
133
|
+
records: _,
|
|
134
|
+
count: O,
|
|
135
|
+
getAll: F,
|
|
136
|
+
getByKey: Q,
|
|
137
|
+
replaceAll: H,
|
|
138
|
+
append: U,
|
|
139
|
+
insertAt: W,
|
|
140
|
+
patchByKey: Y,
|
|
141
|
+
patchMany: j,
|
|
142
|
+
setCellValue: G,
|
|
143
|
+
removeByKeys: J
|
|
144
|
+
},
|
|
145
|
+
query: {
|
|
146
|
+
isFetching: R,
|
|
147
|
+
error: K,
|
|
148
|
+
fetch: X,
|
|
149
|
+
refresh: Z,
|
|
150
|
+
cancel: $
|
|
151
|
+
},
|
|
152
|
+
pagination: {
|
|
153
|
+
page: d,
|
|
154
|
+
pageSize: y,
|
|
155
|
+
total: z,
|
|
156
|
+
setPage: T,
|
|
157
|
+
setPageSize: x,
|
|
158
|
+
reset: b
|
|
159
|
+
},
|
|
160
|
+
selection: {
|
|
161
|
+
keys: I,
|
|
162
|
+
loadedRows: M,
|
|
163
|
+
missingKeys: k,
|
|
164
|
+
setKeys: ee,
|
|
165
|
+
toggleKey: te,
|
|
166
|
+
selectCurrentPage: ne,
|
|
167
|
+
selectLoadedRecords: oe,
|
|
168
|
+
clear: ce
|
|
169
|
+
},
|
|
170
|
+
columns: {
|
|
171
|
+
columns: D,
|
|
172
|
+
replaceAll: re,
|
|
173
|
+
show: ie,
|
|
174
|
+
hide: se,
|
|
175
|
+
move: le,
|
|
176
|
+
resetPreferences: ae
|
|
177
|
+
},
|
|
178
|
+
editing: {
|
|
179
|
+
activeCell: E,
|
|
180
|
+
isValidating: w,
|
|
181
|
+
validationError: A,
|
|
182
|
+
start: ue,
|
|
183
|
+
commit: de,
|
|
184
|
+
cancel: fe,
|
|
185
|
+
validate: ge
|
|
186
|
+
},
|
|
187
|
+
tree: {
|
|
188
|
+
expandedKeys: q,
|
|
189
|
+
loadingKeys: L,
|
|
190
|
+
expand: ye,
|
|
191
|
+
collapse: me,
|
|
192
|
+
toggle: pe,
|
|
193
|
+
fetchChildren: ve
|
|
194
|
+
},
|
|
195
|
+
layout: {
|
|
196
|
+
isReady: p,
|
|
197
|
+
width: P,
|
|
198
|
+
height: N,
|
|
199
|
+
recalculate: he,
|
|
200
|
+
scrollToRecord: Re,
|
|
201
|
+
scrollToCell: Ke
|
|
202
|
+
},
|
|
203
|
+
native: { getInstance: Ce }
|
|
204
|
+
};
|
|
205
|
+
function Be(e) {
|
|
206
|
+
if (o !== e) {
|
|
207
|
+
if (o)
|
|
208
|
+
throw S("TT_VTABLE_CONTROLLER_BOUND", "同一个 controller 不能绑定两个存活表格。", {});
|
|
209
|
+
o = e, g = [
|
|
210
|
+
i(e.records.records, u),
|
|
211
|
+
i(e.query.isFetching, R),
|
|
212
|
+
i(e.query.error, K),
|
|
213
|
+
i(e.pagination.page, d),
|
|
214
|
+
i(e.pagination.pageSize, y),
|
|
215
|
+
a(e.pagination.total, (t) => C.value = t, { immediate: !0 }),
|
|
216
|
+
a(e.selection.keys, (t) => f.value = t, { immediate: !0 }),
|
|
217
|
+
a(e.selection.loadedRows, (t) => V.value = t, { immediate: !0 }),
|
|
218
|
+
a(e.selection.missingKeys, (t) => B.value = t, { immediate: !0 }),
|
|
219
|
+
a(e.columns.columns, (t) => m.value = t, { immediate: !0 }),
|
|
220
|
+
i(e.editing.activeCell, E),
|
|
221
|
+
i(e.editing.isValidating, w),
|
|
222
|
+
i(e.editing.validationError, A),
|
|
223
|
+
i(e.tree.expandedKeys, q),
|
|
224
|
+
i(e.tree.loadingKeys, L),
|
|
225
|
+
i(e.layout.isReady, p),
|
|
226
|
+
i(e.layout.width, P),
|
|
227
|
+
i(e.layout.height, N)
|
|
228
|
+
], h.splice(0).forEach((t) => t(e));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function Ee(e) {
|
|
232
|
+
o === e && (g.forEach((t) => t()), g = [], o = void 0, p.value = !1);
|
|
233
|
+
}
|
|
234
|
+
return { tableApi: Ve, bind: Be, unbind: Ee };
|
|
235
|
+
}
|
|
236
|
+
export {
|
|
237
|
+
ke as createVTableController
|
|
238
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ListTable } from '@visactor/vtable';
|
|
2
|
+
import { ComputedRef, Ref } from 'vue';
|
|
3
|
+
import { TtVTableApi, TtVTableColumn, TtVTableEditCommit, TtVTableFeatureOptions, TtVTableFetchRecords, TtVTableFetchRequest, TtVTableFetchResponse, TtVTableMutationMode, TtVTableNativeEvents, TtVTablePageChange, TtVTableRecordChange, TtVTableRowKey, TtVTableRowKeySource, TtVTableSortDescriptor, TtVTableTreeLoadError, TtVTableTreeLoadSuccess } from '../public';
|
|
4
|
+
/** 封装层内部选择列使用的稳定字段。 */
|
|
5
|
+
export declare const TT_VTABLE_SELECTION_FIELD = "__tt_vtable_selection__";
|
|
6
|
+
/** 创建运行时所需的响应式输入。 */
|
|
7
|
+
export interface CreateVTableRuntimeOptions<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> {
|
|
8
|
+
/** 初始本地记录根快照。 */
|
|
9
|
+
records?: readonly Row[];
|
|
10
|
+
/** 读取最新本地记录根快照。 */
|
|
11
|
+
getRecords: () => readonly Row[] | undefined;
|
|
12
|
+
/** 读取最新语义列根。 */
|
|
13
|
+
getColumns: () => readonly TtVTableColumn<Row, Key>[];
|
|
14
|
+
/** 业务主键字段路径或读取函数。 */
|
|
15
|
+
rowKey: TtVTableRowKeySource<Row, Key>;
|
|
16
|
+
/** 当前受控选择主键。 */
|
|
17
|
+
selectedRowKeys: Ref<Key[]>;
|
|
18
|
+
/** 读取最新查询参数根。 */
|
|
19
|
+
getQueryParams: () => QueryParams;
|
|
20
|
+
/** 读取最新 feature 配置。 */
|
|
21
|
+
getFeatures: () => TtVTableFeatureOptions<Row, Key> | undefined;
|
|
22
|
+
/** 读取最新原生事件。 */
|
|
23
|
+
getNativeEvents: () => TtVTableNativeEvents | undefined;
|
|
24
|
+
/** 远程记录请求。 */
|
|
25
|
+
fetchRecords?: TtVTableFetchRecords<Row, QueryParams>;
|
|
26
|
+
/** 记录所有权策略。 */
|
|
27
|
+
mutationMode?: TtVTableMutationMode;
|
|
28
|
+
/** 精确记录变化回调。 */
|
|
29
|
+
onRecordChange?: (change: TtVTableRecordChange<Row, Key>) => void;
|
|
30
|
+
/** 最新远程请求成功回调。 */
|
|
31
|
+
onFetchSuccess?: (response: TtVTableFetchResponse<Row>, request: TtVTableFetchRequest<QueryParams>) => void;
|
|
32
|
+
/** 最新远程请求失败回调。 */
|
|
33
|
+
onFetchError?: (error: Error, request: TtVTableFetchRequest<QueryParams>) => void;
|
|
34
|
+
/** 分页变化回调。 */
|
|
35
|
+
onPageChange?: (change: TtVTablePageChange) => void;
|
|
36
|
+
/** 排序变化回调。 */
|
|
37
|
+
onSortChange?: (sort: readonly TtVTableSortDescriptor[]) => void;
|
|
38
|
+
/** 筛选变化回调。 */
|
|
39
|
+
onFilterChange?: (filters: Readonly<Record<string, unknown>>) => void;
|
|
40
|
+
/** 编辑提交回调。 */
|
|
41
|
+
onEditCommit?: (change: TtVTableEditCommit<Key>) => void;
|
|
42
|
+
/** 编辑失败回调。 */
|
|
43
|
+
onEditError?: (error: Error) => void;
|
|
44
|
+
/** 树子节点加载成功回调。 */
|
|
45
|
+
onTreeLoadSuccess?: (change: TtVTableTreeLoadSuccess<Row, Key>) => void;
|
|
46
|
+
/** 树子节点加载失败回调。 */
|
|
47
|
+
onTreeLoadError?: (failure: TtVTableTreeLoadError<Key>) => void;
|
|
48
|
+
/** 列偏好变化回调。 */
|
|
49
|
+
onColumnPreferencesChange?: (preferences: unknown) => void;
|
|
50
|
+
}
|
|
51
|
+
/** 运行时暴露给组件层的状态与生命周期。 */
|
|
52
|
+
export interface TtVTableRuntime<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> {
|
|
53
|
+
/** 稳定公共 API。 */
|
|
54
|
+
tableApi: TtVTableApi<Row, Key>;
|
|
55
|
+
/** 传给原生视口的列,包含内部选择列。 */
|
|
56
|
+
renderColumns: ComputedRef<readonly TtVTableColumn<Row, Key>[]>;
|
|
57
|
+
/** 当前是否使用远程记录源。 */
|
|
58
|
+
isRemote: boolean;
|
|
59
|
+
/** 当前选择模式。 */
|
|
60
|
+
selectionMode: ComputedRef<"multiple" | "none" | "single">;
|
|
61
|
+
/** 当前查询排序。 */
|
|
62
|
+
sort: Readonly<Ref<readonly TtVTableSortDescriptor[]>>;
|
|
63
|
+
/** 当前查询筛选。 */
|
|
64
|
+
filters: Readonly<Ref<Readonly<Record<string, unknown>>>>;
|
|
65
|
+
/** 从运行时记录读取稳定业务主键。 */
|
|
66
|
+
getRowKey: (record: Row) => Key;
|
|
67
|
+
/** 视口获得原生实例后的入口。 */
|
|
68
|
+
acceptNativeInstance: (table: ListTable) => void;
|
|
69
|
+
/** 视口释放原生实例引用。 */
|
|
70
|
+
clearNativeInstance: (table: ListTable) => void;
|
|
71
|
+
/** 更新视口测量尺寸。 */
|
|
72
|
+
acceptViewportSize: (width: number, height: number) => void;
|
|
73
|
+
/** 外部 records 根替换入口。 */
|
|
74
|
+
acceptRecords: (records: readonly Row[]) => void;
|
|
75
|
+
/** 释放运行时及异步任务。 */
|
|
76
|
+
release: () => void;
|
|
77
|
+
}
|
|
78
|
+
/** 创建不依赖原生实例的稳定 TtVTable 运行时。 */
|
|
79
|
+
export declare function createVTableRuntime<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>>(options: CreateVTableRuntimeOptions<Row, Key, QueryParams>): TtVTableRuntime<Row, Key, QueryParams>;
|