stk-table-vue 0.2.3 → 0.2.6
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 +48 -5
- package/lib/src/StkTable/StkTable.vue.d.ts +24 -4
- package/lib/src/StkTable/index.d.ts +1 -0
- package/lib/src/StkTable/types/index.d.ts +11 -1
- package/lib/src/StkTable/useFixedStyle.d.ts +3 -3
- package/lib/src/StkTable/useVirtualScroll.d.ts +3 -2
- package/lib/src/StkTable/utils.d.ts +3 -1
- package/lib/stk-table-vue.js +178 -96
- package/package.json +5 -5
- package/src/StkTable/StkTable.vue +58 -24
- package/src/StkTable/types/index.ts +11 -1
- package/src/StkTable/useFixedStyle.ts +49 -28
- package/src/StkTable/useHighlight.ts +6 -3
- package/src/StkTable/useKeyboardArrowScroll.ts +8 -4
- package/src/StkTable/useVirtualScroll.ts +42 -11
- package/src/StkTable/utils.ts +66 -41
package/README.md
CHANGED
|
@@ -4,6 +4,10 @@ Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐
|
|
|
4
4
|
|
|
5
5
|
Vue2.7支持引入源码(**ts**)使用。
|
|
6
6
|
|
|
7
|
+
repo:
|
|
8
|
+
- [Github](https://github.com/ja-plus/stk-table-vue)
|
|
9
|
+
- [Gitee](https://gitee.com/japlus/stk-table-vue) 🇨🇳
|
|
10
|
+
|
|
7
11
|
## Bug TODO:
|
|
8
12
|
* [x] props.dataSource 为 shallowRef 时,高亮行不生效。(bug:2024.02.21)(resolved:0.2.3)
|
|
9
13
|
|
|
@@ -18,7 +22,7 @@ Vue2.7支持引入源码(**ts**)使用。
|
|
|
18
22
|
- [] sticky column 动态计算阴影位置。
|
|
19
23
|
* [] 列筛选。
|
|
20
24
|
* [x] 斑马纹。
|
|
21
|
-
- [] 虚拟滚动斑马纹。
|
|
25
|
+
- [x] 虚拟滚动斑马纹。
|
|
22
26
|
* [x] 表头拖动更改顺序。
|
|
23
27
|
* [x] 表头拖动调整列宽。
|
|
24
28
|
* [x] 排序
|
|
@@ -33,10 +37,11 @@ Vue2.7支持引入源码(**ts**)使用。
|
|
|
33
37
|
* 鼠标悬浮在表格上,键盘滚动虚拟表格。
|
|
34
38
|
- [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` 按键支持。
|
|
35
39
|
- [x] 键盘 `PageUp`/ `PageDown` 按键支持。
|
|
36
|
-
* [] 不传row-key 时,自动按序号生成id。
|
|
37
40
|
* [] 非虚拟滚动时,大数据分批加载。
|
|
38
41
|
* [x] vue2.7支持(引入源码使用)。
|
|
39
42
|
- [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
|
|
43
|
+
* [x] `props.emptyCellText` 支持传入函数。
|
|
44
|
+
* [] 支持配置高亮参数。
|
|
40
45
|
|
|
41
46
|
|
|
42
47
|
## Usage
|
|
@@ -131,7 +136,7 @@ export type StkProps = {
|
|
|
131
136
|
/** 列唯一键 */
|
|
132
137
|
colKey?: UniqKeyProp;
|
|
133
138
|
/** 空值展示文字 */
|
|
134
|
-
emptyCellText?: string;
|
|
139
|
+
emptyCellText?: string | ((option: { row: DT; col: StkTableColumn<DT> }) => string);
|
|
135
140
|
/** 暂无数据兜底高度是否撑满 */
|
|
136
141
|
noDataFull?: boolean;
|
|
137
142
|
/** 是否展示暂无数据 */
|
|
@@ -144,8 +149,6 @@ export type StkProps = {
|
|
|
144
149
|
showOverflow?: boolean;
|
|
145
150
|
/** 是否增加行hover class */
|
|
146
151
|
showTrHoverClass?: boolean;
|
|
147
|
-
/** 表头是否可拖动 */
|
|
148
|
-
headerDrag?: boolean;
|
|
149
152
|
/** 表头是否可拖动。支持回调函数。 */
|
|
150
153
|
headerDrag?: boolean | ((col: StkTableColumn<DT>) => boolean);
|
|
151
154
|
/**
|
|
@@ -188,7 +191,14 @@ export type StkProps = {
|
|
|
188
191
|
dataIndex: keyof T;
|
|
189
192
|
order: Order;
|
|
190
193
|
};
|
|
194
|
+
/**
|
|
195
|
+
* string排序是否使用 String.prototype.localCompare
|
|
196
|
+
* 默认true (历史设计问题,为了兼容,默认true)
|
|
197
|
+
*/
|
|
198
|
+
stringLocaleCompare?: boolean;
|
|
191
199
|
},
|
|
200
|
+
/** 隐藏头部title。可传入dataIndex数组 */
|
|
201
|
+
hideHeaderTitle?: boolean | string[];
|
|
192
202
|
};
|
|
193
203
|
```
|
|
194
204
|
#### Emits
|
|
@@ -337,6 +347,30 @@ export type StkTableColumn<T extends Record<string, any>> = {
|
|
|
337
347
|
```
|
|
338
348
|
|
|
339
349
|
|
|
350
|
+
### StkTableColumn.SortConfig
|
|
351
|
+
```ts
|
|
352
|
+
/** 排序配置 */
|
|
353
|
+
export type SortConfig<T extends Record<string, any>> = {
|
|
354
|
+
/** 空值始终排在列表末尾 */
|
|
355
|
+
emptyToBottom?: boolean;
|
|
356
|
+
/**
|
|
357
|
+
* 默认排序(1.初始化时触发 2.排序方向为null时触发)
|
|
358
|
+
* 类似onMounted时,调用setSorter点了下表头。
|
|
359
|
+
*/
|
|
360
|
+
defaultSort?: {
|
|
361
|
+
dataIndex: keyof T;
|
|
362
|
+
order: Order;
|
|
363
|
+
/** 是否禁止触发sort-change事件。默认false,表示触发事件。 */
|
|
364
|
+
silent?: boolean;
|
|
365
|
+
};
|
|
366
|
+
/**
|
|
367
|
+
* string排序是否使用 String.prototype.localCompare
|
|
368
|
+
* 默认true (&$&应该false)
|
|
369
|
+
*/
|
|
370
|
+
stringLocaleCompare?: boolean;
|
|
371
|
+
};
|
|
372
|
+
```
|
|
373
|
+
|
|
340
374
|
### Example
|
|
341
375
|
```vue
|
|
342
376
|
<template>
|
|
@@ -404,3 +438,12 @@ export type StkTableColumn<T extends Record<string, any>> = {
|
|
|
404
438
|
]
|
|
405
439
|
</script>
|
|
406
440
|
```
|
|
441
|
+
|
|
442
|
+
## Special Example
|
|
443
|
+
### 鼠标悬浮表头时,不展示title
|
|
444
|
+
* 将 `StkTableColumn` 中的 `title` 字段置为 "" 空字符串。这样th中就没有title了。
|
|
445
|
+
* 使用 `StkTableColumn` 中的 `customHeaderCell` 属性中,自定义表头渲染。
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
## Other
|
|
449
|
+
* `$*$` 兼容注释
|
|
@@ -13,12 +13,14 @@ declare function setCurrentRow(rowKey: string, option?: {
|
|
|
13
13
|
* 设置表头排序状态
|
|
14
14
|
* @param dataIndex 列字段
|
|
15
15
|
* @param order 正序倒序
|
|
16
|
-
* @param option.sortOption
|
|
16
|
+
* @param option.sortOption 指定排序参数。同 StkTableColumn 中排序相关字段。建议从columns中find得到。
|
|
17
17
|
* @param option.sort 是否触发排序-默认true
|
|
18
18
|
* @param option.silent 是否禁止触发回调-默认true
|
|
19
|
+
* @param option.force 是否触发排序-默认true
|
|
19
20
|
*/
|
|
20
21
|
declare function setSorter(dataIndex: string, order: Order, option?: {
|
|
21
22
|
sortOption?: SortOption<DT>;
|
|
23
|
+
force?: boolean;
|
|
22
24
|
silent?: boolean;
|
|
23
25
|
sort?: boolean;
|
|
24
26
|
}): any[];
|
|
@@ -65,7 +67,10 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
65
67
|
/** 列唯一键 */
|
|
66
68
|
colKey?: UniqKeyProp | undefined;
|
|
67
69
|
/** 空值展示文字 */
|
|
68
|
-
emptyCellText?: string |
|
|
70
|
+
emptyCellText?: string | ((option: {
|
|
71
|
+
row: any;
|
|
72
|
+
col: StkTableColumn<any>;
|
|
73
|
+
}) => string) | undefined;
|
|
69
74
|
/** 暂无数据兜底高度是否撑满 */
|
|
70
75
|
noDataFull?: boolean | undefined;
|
|
71
76
|
/** 是否展示暂无数据 */
|
|
@@ -113,6 +118,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
113
118
|
optimizeVue2Scroll?: boolean | undefined;
|
|
114
119
|
/** 排序配置 */
|
|
115
120
|
sortConfig?: SortConfig<any> | undefined;
|
|
121
|
+
/** 隐藏头部title。可传入dataIndex数组 */
|
|
122
|
+
hideHeaderTitle?: boolean | string[] | undefined;
|
|
116
123
|
}>, {
|
|
117
124
|
width: string;
|
|
118
125
|
fixedMode: boolean;
|
|
@@ -146,7 +153,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
146
153
|
optimizeVue2Scroll: boolean;
|
|
147
154
|
sortConfig: () => {
|
|
148
155
|
emptyToBottom: boolean;
|
|
156
|
+
stringLocaleCompare: boolean;
|
|
149
157
|
};
|
|
158
|
+
hideHeaderTitle: boolean;
|
|
150
159
|
}>, {
|
|
151
160
|
/** 初始化横向纵向虚拟滚动 */
|
|
152
161
|
initVirtualScroll: (height?: number | undefined) => void;
|
|
@@ -221,7 +230,10 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
221
230
|
/** 列唯一键 */
|
|
222
231
|
colKey?: UniqKeyProp | undefined;
|
|
223
232
|
/** 空值展示文字 */
|
|
224
|
-
emptyCellText?: string |
|
|
233
|
+
emptyCellText?: string | ((option: {
|
|
234
|
+
row: any;
|
|
235
|
+
col: StkTableColumn<any>;
|
|
236
|
+
}) => string) | undefined;
|
|
225
237
|
/** 暂无数据兜底高度是否撑满 */
|
|
226
238
|
noDataFull?: boolean | undefined;
|
|
227
239
|
/** 是否展示暂无数据 */
|
|
@@ -269,6 +281,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
269
281
|
optimizeVue2Scroll?: boolean | undefined;
|
|
270
282
|
/** 排序配置 */
|
|
271
283
|
sortConfig?: SortConfig<any> | undefined;
|
|
284
|
+
/** 隐藏头部title。可传入dataIndex数组 */
|
|
285
|
+
hideHeaderTitle?: boolean | string[] | undefined;
|
|
272
286
|
}>, {
|
|
273
287
|
width: string;
|
|
274
288
|
fixedMode: boolean;
|
|
@@ -302,7 +316,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
302
316
|
optimizeVue2Scroll: boolean;
|
|
303
317
|
sortConfig: () => {
|
|
304
318
|
emptyToBottom: boolean;
|
|
319
|
+
stringLocaleCompare: boolean;
|
|
305
320
|
};
|
|
321
|
+
hideHeaderTitle: boolean;
|
|
306
322
|
}>>> & {
|
|
307
323
|
onScroll?: ((ev: Event, data: {
|
|
308
324
|
startIndex: number;
|
|
@@ -337,7 +353,10 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
337
353
|
dataSource: any[];
|
|
338
354
|
rowKey: UniqKeyProp;
|
|
339
355
|
colKey: UniqKeyProp;
|
|
340
|
-
emptyCellText: string
|
|
356
|
+
emptyCellText: string | ((option: {
|
|
357
|
+
row: any;
|
|
358
|
+
col: StkTableColumn<any>;
|
|
359
|
+
}) => string);
|
|
341
360
|
noDataFull: boolean;
|
|
342
361
|
showNoData: boolean;
|
|
343
362
|
sortRemote: boolean;
|
|
@@ -353,6 +372,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
353
372
|
fixedColShadow: boolean;
|
|
354
373
|
optimizeVue2Scroll: boolean;
|
|
355
374
|
sortConfig: SortConfig<any>;
|
|
375
|
+
hideHeaderTitle: boolean | string[];
|
|
356
376
|
}, {}>, {
|
|
357
377
|
tableHeader?(_: {
|
|
358
378
|
col: StkTableColumn<any>;
|
|
@@ -78,10 +78,20 @@ export type UniqKeyProp = UniqKey | UniqKeyFun;
|
|
|
78
78
|
export type SortConfig<T extends Record<string, any>> = {
|
|
79
79
|
/** 空值始终排在列表末尾 */
|
|
80
80
|
emptyToBottom?: boolean;
|
|
81
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* 默认排序(1.初始化时触发 2.排序方向为null时触发)
|
|
83
|
+
* 类似onMounted时,调用setSorter点了下表头。
|
|
84
|
+
*/
|
|
82
85
|
defaultSort?: {
|
|
83
86
|
dataIndex: keyof T;
|
|
84
87
|
order: Order;
|
|
88
|
+
/** 是否禁止触发sort-change事件。默认false,表示触发事件。 */
|
|
89
|
+
silent?: boolean;
|
|
85
90
|
};
|
|
91
|
+
/**
|
|
92
|
+
* string排序是否使用 String.prototype.localCompare
|
|
93
|
+
* 默认true (&$&应该false)
|
|
94
|
+
*/
|
|
95
|
+
stringLocaleCompare?: boolean;
|
|
86
96
|
};
|
|
87
97
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { CSSProperties, Ref } from 'vue';
|
|
2
2
|
import { StkTableColumn } from './types';
|
|
3
3
|
import { VirtualScrollStore, VirtualScrollXStore } from './useVirtualScroll';
|
|
4
|
-
type Options = {
|
|
4
|
+
type Options<T extends Record<string, any>> = {
|
|
5
5
|
props: any;
|
|
6
|
-
|
|
6
|
+
tableHeaders: Ref<StkTableColumn<T>[][]>;
|
|
7
7
|
virtualScroll: Ref<VirtualScrollStore>;
|
|
8
8
|
virtualScrollX: Ref<VirtualScrollXStore>;
|
|
9
9
|
virtualX_on: Ref<boolean>;
|
|
@@ -14,7 +14,7 @@ type Options = {
|
|
|
14
14
|
* @param param0
|
|
15
15
|
* @returns
|
|
16
16
|
*/
|
|
17
|
-
export declare function useFixedStyle({ props,
|
|
17
|
+
export declare function useFixedStyle<DT extends Record<string, any>>({ props, tableHeaders, virtualScroll, virtualScrollX, virtualX_on, virtualX_offsetRight, }: Options<DT>): {
|
|
18
18
|
getFixedStyle: (tagType: 1 | 2, col: StkTableColumn<any>, depth?: number) => CSSProperties;
|
|
19
19
|
};
|
|
20
20
|
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Ref, ShallowRef } from 'vue';
|
|
2
2
|
import { StkTableColumn } from './types';
|
|
3
3
|
type Option<DT extends Record<string, any>> = {
|
|
4
|
-
tableContainer: Ref<HTMLElement | undefined>;
|
|
5
4
|
props: any;
|
|
5
|
+
tableContainer: Ref<HTMLElement | undefined>;
|
|
6
6
|
dataSourceCopy: ShallowRef<DT[]>;
|
|
7
7
|
tableHeaderLast: Ref<StkTableColumn<DT>[]>;
|
|
8
|
+
tableHeaders: Ref<StkTableColumn<DT>[][]>;
|
|
8
9
|
};
|
|
9
10
|
/** 暂存纵向虚拟滚动的数据 */
|
|
10
11
|
export type VirtualScrollStore = {
|
|
@@ -41,7 +42,7 @@ export type VirtualScrollXStore = {
|
|
|
41
42
|
* @param param0
|
|
42
43
|
* @returns
|
|
43
44
|
*/
|
|
44
|
-
export declare function useVirtualScroll<DT extends Record<string, any>>({ props, tableContainer, dataSourceCopy, tableHeaderLast }: Option<DT>): {
|
|
45
|
+
export declare function useVirtualScroll<DT extends Record<string, any>>({ props, tableContainer, dataSourceCopy, tableHeaderLast, tableHeaders, }: Option<DT>): {
|
|
45
46
|
virtualScroll: Ref<{
|
|
46
47
|
containerHeight: number;
|
|
47
48
|
pageSize: number;
|
|
@@ -8,7 +8,7 @@ import { Order, SortConfig, SortOption, SortState, StkTableColumn } from './type
|
|
|
8
8
|
* @param newItem 要插入的数据
|
|
9
9
|
* @param targetArray 表格数据
|
|
10
10
|
*/
|
|
11
|
-
export declare function insertToOrderedArray<T extends object>(sortState: SortState<keyof T>, newItem: any, targetArray: T[]): T[];
|
|
11
|
+
export declare function insertToOrderedArray<T extends object>(sortState: SortState<keyof T>, newItem: any, targetArray: T[], sortConfig?: SortConfig<T>): T[];
|
|
12
12
|
/**
|
|
13
13
|
* 表格排序抽离
|
|
14
14
|
* 可以在组件外部自己实现表格排序,组件配置remote,使表格不排序。
|
|
@@ -25,3 +25,5 @@ export declare function tableSort<T extends Record<string, any>>(sortOption: Sor
|
|
|
25
25
|
export declare function howDeepTheHeader(arr: StkTableColumn<any>[], level?: number): number;
|
|
26
26
|
/** 获取列宽 */
|
|
27
27
|
export declare function getColWidth(col: StkTableColumn<any> | null): number;
|
|
28
|
+
/** 获取列宽配置。用于支持列宽配置数字 */
|
|
29
|
+
export declare function getColWidthStr(col: StkTableColumn<any> | null | undefined, key?: 'width' | 'minWidth' | 'maxWidth'): string | undefined;
|