stk-table-vue 0.2.0 → 0.2.2
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 +57 -18
- package/lib/src/StkTable/StkTable.vue.d.ts +27 -10
- package/lib/src/StkTable/types/index.d.ts +8 -3
- package/lib/src/StkTable/useAutoResize.d.ts +2 -3
- package/lib/src/StkTable/useThDrag.d.ts +4 -1
- package/lib/src/StkTable/utils.d.ts +4 -2
- package/lib/stk-table-vue.js +439 -488
- package/lib/style.css +7 -3
- package/package.json +2 -2
- package/src/StkTable/StkTable.vue +29 -12
- package/src/StkTable/style.less +7 -5
- package/src/StkTable/types/index.ts +9 -3
- package/src/StkTable/useAutoResize.ts +2 -3
- package/src/StkTable/useColResize.ts +3 -3
- package/src/StkTable/useFixedCol.ts +1 -1
- package/src/StkTable/useFixedStyle.ts +4 -3
- package/src/StkTable/useHighlight.ts +2 -0
- package/src/StkTable/useThDrag.ts +37 -8
- package/src/StkTable/useVirtualScroll.ts +6 -12
- package/src/StkTable/utils.ts +55 -20
package/README.md
CHANGED
|
@@ -1,37 +1,41 @@
|
|
|
1
1
|
# StkTable (Sticky Table)
|
|
2
2
|
|
|
3
3
|
Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐暗动效。
|
|
4
|
-
js体积(未压缩46kb)
|
|
5
4
|
|
|
5
|
+
Vue2.7支持引入源码(**ts**)使用。
|
|
6
|
+
|
|
7
|
+
## Bug TODO:
|
|
8
|
+
* [] props.dataSource 为 shallowRef 时,高亮行不生效。(2024.02.21)
|
|
6
9
|
## Feature TODO:
|
|
7
10
|
* [x] 高亮行,单元格。
|
|
8
|
-
* [x]
|
|
11
|
+
* [x] 虚拟滚动。
|
|
12
|
+
- [x] 纵向。
|
|
13
|
+
- [x] 横向(必须设置列宽)。
|
|
9
14
|
* [x] 列固定。
|
|
15
|
+
- [x] 固定列阴影。
|
|
16
|
+
- [x] 多级表头固定列阴影。
|
|
17
|
+
- [] sticky column 动态计算阴影位置。
|
|
18
|
+
* [] 列筛选。
|
|
19
|
+
* [x] 斑马纹。
|
|
20
|
+
- [] 虚拟滚动斑马纹。
|
|
10
21
|
* [x] 表头拖动更改顺序。
|
|
11
|
-
* [x]
|
|
22
|
+
* [x] 表头拖动调整列宽。
|
|
12
23
|
* [x] 排序
|
|
13
|
-
- [x]
|
|
24
|
+
- [x] 基本表头点击排序。
|
|
14
25
|
- [] 支持配置 `null` | `undefined` 永远排最后。
|
|
15
26
|
- [] 支持配置 string 使用 `String.prototype.localCompare` 排序。
|
|
16
27
|
* 多级表头。
|
|
17
28
|
- [x] 支持最多`2级`表头。
|
|
18
|
-
- [x]
|
|
19
|
-
- [] 多级表头border-left 问题。
|
|
20
|
-
- [] 多级表头固定列横向滚动
|
|
29
|
+
- [x] 支持更多级表头。
|
|
21
30
|
- [] 横向虚拟滚动。
|
|
22
31
|
* [x] 支持table-layout: fixed 配置。
|
|
23
32
|
* 鼠标悬浮在表格上,键盘滚动虚拟表格。
|
|
24
33
|
- [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` 按键支持。
|
|
25
34
|
- [x] 键盘 `PageUp`/ `PageDown` 按键支持。
|
|
26
|
-
* [x] 斑马纹。
|
|
27
|
-
* [x] 列固定阴影。
|
|
28
|
-
- [] 多级表头固定列阴影。
|
|
29
|
-
- [] sticky column 动态计算阴影位置。
|
|
30
35
|
* [] 不传row-key 时,自动按序号生成id。
|
|
31
|
-
* [] 列筛选。
|
|
32
36
|
* [] 非虚拟滚动时,大数据分批加载。
|
|
33
|
-
* [x] vue2
|
|
34
|
-
- `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
|
|
37
|
+
* [x] vue2.7支持(引入源码使用)。
|
|
38
|
+
- [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
|
|
35
39
|
|
|
36
40
|
|
|
37
41
|
## Usage
|
|
@@ -53,13 +57,39 @@ stkTable.value.setHighlightDimCell(rowId, colId) // highlight cell
|
|
|
53
57
|
|
|
54
58
|
```
|
|
55
59
|
|
|
56
|
-
### Vue2 Usage
|
|
57
|
-
vue2
|
|
60
|
+
### Vue2.7 Usage
|
|
61
|
+
vue2.7 支持引入源码使用。依赖`less`。
|
|
62
|
+
```html
|
|
63
|
+
<script>
|
|
64
|
+
import { StkTable } from 'stk-table-vue/src/StkTable/index';
|
|
65
|
+
</script>
|
|
66
|
+
```
|
|
67
|
+
不要less的话
|
|
58
68
|
```html
|
|
59
69
|
<script>
|
|
60
|
-
import { StkTable } from 'stk-table-vue/src/StkTable/
|
|
70
|
+
import { StkTable } from 'stk-table-vue/src/StkTable/StkTable.vue';
|
|
71
|
+
import 'stk-table-vue/lib/style.css';
|
|
61
72
|
</script>
|
|
62
73
|
```
|
|
74
|
+
#### webpack TS 配置参考
|
|
75
|
+
##### webpack.config.js
|
|
76
|
+
```js
|
|
77
|
+
rules:[{
|
|
78
|
+
test: /\.ts$/,
|
|
79
|
+
loader:'swc-loader'
|
|
80
|
+
}]
|
|
81
|
+
```
|
|
82
|
+
##### .swcrc
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"jsc":{
|
|
86
|
+
"parser":{
|
|
87
|
+
"syntax":"typescript",
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
63
93
|
|
|
64
94
|
|
|
65
95
|
## Notice
|
|
@@ -115,6 +145,8 @@ export type StkProps = {
|
|
|
115
145
|
showTrHoverClass?: boolean;
|
|
116
146
|
/** 表头是否可拖动 */
|
|
117
147
|
headerDrag?: boolean;
|
|
148
|
+
/** 表头是否可拖动。支持回调函数。 */
|
|
149
|
+
headerDrag?: boolean | ((col: StkTableColumn<DT>) => boolean);
|
|
118
150
|
/**
|
|
119
151
|
* 给行附加className<br>
|
|
120
152
|
* FIXME: 是否需要优化,因为不传此prop会使表格行一直执行空函数,是否有影响
|
|
@@ -146,6 +178,11 @@ export type StkProps = {
|
|
|
146
178
|
fixedColShadow?: boolean;
|
|
147
179
|
/** 优化vue2 滚动 */
|
|
148
180
|
optimizeVue2Scroll?: boolean;
|
|
181
|
+
/** 排序配置 */
|
|
182
|
+
sortConfig?: {
|
|
183
|
+
/** 空值是否排最下面 */
|
|
184
|
+
emptyToBottom: false,
|
|
185
|
+
},
|
|
149
186
|
};
|
|
150
187
|
```
|
|
151
188
|
#### Emits
|
|
@@ -155,7 +192,7 @@ export type StkProps = {
|
|
|
155
192
|
* 排序变更触发
|
|
156
193
|
* ```(col: StkTableColumn<DT>, order: Order, data: DT[])```
|
|
157
194
|
*/
|
|
158
|
-
(e: 'sort-change', col: StkTableColumn<DT>, order: Order, data: DT[]): void;
|
|
195
|
+
(e: 'sort-change', col: StkTableColumn<DT>, order: Order, data: DT[], sortConfig:SortConfig): void;
|
|
159
196
|
/**
|
|
160
197
|
* 一行点击事件
|
|
161
198
|
* ```(ev: MouseEvent, row: DT)```
|
|
@@ -238,6 +275,8 @@ defineExpose({
|
|
|
238
275
|
setHighlightDimRow,
|
|
239
276
|
/** 表格排序列dataIndex */
|
|
240
277
|
sortCol,
|
|
278
|
+
/** 获取当前排序状态 */
|
|
279
|
+
getSortColumns,
|
|
241
280
|
/** 设置排序 */
|
|
242
281
|
setSorter,
|
|
243
282
|
/** 重置排序 */
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { Order, SortOption, StkTableColumn, UniqKey } from './types/index';
|
|
1
|
+
import { Order, SortConfig, SortOption, SortState, StkTableColumn, UniqKey } from './types/index';
|
|
2
|
+
/** Generic stands for DataType */
|
|
3
|
+
type DT = any;
|
|
2
4
|
/**
|
|
3
5
|
* 选中一行,
|
|
4
6
|
* @param {string} rowKey
|
|
@@ -30,6 +32,8 @@ declare function resetSorter(): void;
|
|
|
30
32
|
declare function scrollTo(top?: number | null, left?: number | null): void;
|
|
31
33
|
/** 获取当前状态的表格数据 */
|
|
32
34
|
declare function getTableData(): any[];
|
|
35
|
+
/** 获取当前排序列的信息 */
|
|
36
|
+
declare function getSortColumns(): SortState<DT>[];
|
|
33
37
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
|
|
34
38
|
width?: string | undefined;
|
|
35
39
|
/** 最小表格宽度 */
|
|
@@ -74,8 +78,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
74
78
|
showOverflow?: boolean | undefined;
|
|
75
79
|
/** 是否增加行hover class */
|
|
76
80
|
showTrHoverClass?: boolean | undefined;
|
|
77
|
-
/**
|
|
78
|
-
headerDrag?: boolean | undefined;
|
|
81
|
+
/** 表头是否可拖动。支持回调函数。 */
|
|
82
|
+
headerDrag?: boolean | ((col: StkTableColumn<any>) => boolean) | undefined;
|
|
79
83
|
/**
|
|
80
84
|
* 给行附加className<br>
|
|
81
85
|
* FIXME: 是否需要优化,因为不传此prop会使表格行一直执行空函数,是否有影响
|
|
@@ -107,6 +111,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
107
111
|
fixedColShadow?: boolean | undefined;
|
|
108
112
|
/** 优化vue2 滚动 */
|
|
109
113
|
optimizeVue2Scroll?: boolean | undefined;
|
|
114
|
+
/** 排序配置 */
|
|
115
|
+
sortConfig?: SortConfig | undefined;
|
|
110
116
|
}>, {
|
|
111
117
|
width: string;
|
|
112
118
|
fixedMode: boolean;
|
|
@@ -138,6 +144,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
138
144
|
autoResize: boolean;
|
|
139
145
|
fixedColShadow: boolean;
|
|
140
146
|
optimizeVue2Scroll: boolean;
|
|
147
|
+
sortConfig: () => {
|
|
148
|
+
emptyToBottom: boolean;
|
|
149
|
+
};
|
|
141
150
|
}>, {
|
|
142
151
|
/** 初始化横向纵向虚拟滚动 */
|
|
143
152
|
initVirtualScroll: (height?: number | undefined) => void;
|
|
@@ -153,6 +162,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
153
162
|
setHighlightDimRow: (rowKeyValues: (string | number)[]) => void;
|
|
154
163
|
/** 表格排序列dataIndex */
|
|
155
164
|
sortCol: import("vue").Ref<string | null | undefined>;
|
|
165
|
+
/** 获取当前排序状态 */
|
|
166
|
+
getSortColumns: typeof getSortColumns;
|
|
156
167
|
/** 设置排序 */
|
|
157
168
|
setSorter: typeof setSorter;
|
|
158
169
|
/** 重置排序 */
|
|
@@ -162,7 +173,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
162
173
|
/** 获取表格数据 */
|
|
163
174
|
getTableData: typeof getTableData;
|
|
164
175
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
165
|
-
"sort-change": (col: StkTableColumn<any>, order: Order, data: any[]) => void;
|
|
176
|
+
"sort-change": (col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig) => void;
|
|
166
177
|
"row-click": (ev: MouseEvent, row: any) => void;
|
|
167
178
|
"current-change": (ev: MouseEvent | null, row: any) => void;
|
|
168
179
|
"row-dblclick": (ev: MouseEvent, row: any) => void;
|
|
@@ -179,7 +190,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
179
190
|
"th-drag-start": (dragStartKey: string) => void;
|
|
180
191
|
"th-drop": (targetColKey: string) => void;
|
|
181
192
|
"update:columns": (cols: StkTableColumn<any>[]) => void;
|
|
182
|
-
}, string, import("vue").
|
|
193
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
|
|
183
194
|
width?: string | undefined;
|
|
184
195
|
/** 最小表格宽度 */
|
|
185
196
|
minWidth?: string | undefined;
|
|
@@ -223,8 +234,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
223
234
|
showOverflow?: boolean | undefined;
|
|
224
235
|
/** 是否增加行hover class */
|
|
225
236
|
showTrHoverClass?: boolean | undefined;
|
|
226
|
-
/**
|
|
227
|
-
headerDrag?: boolean | undefined;
|
|
237
|
+
/** 表头是否可拖动。支持回调函数。 */
|
|
238
|
+
headerDrag?: boolean | ((col: StkTableColumn<any>) => boolean) | undefined;
|
|
228
239
|
/**
|
|
229
240
|
* 给行附加className<br>
|
|
230
241
|
* FIXME: 是否需要优化,因为不传此prop会使表格行一直执行空函数,是否有影响
|
|
@@ -256,6 +267,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
256
267
|
fixedColShadow?: boolean | undefined;
|
|
257
268
|
/** 优化vue2 滚动 */
|
|
258
269
|
optimizeVue2Scroll?: boolean | undefined;
|
|
270
|
+
/** 排序配置 */
|
|
271
|
+
sortConfig?: SortConfig | undefined;
|
|
259
272
|
}>, {
|
|
260
273
|
width: string;
|
|
261
274
|
fixedMode: boolean;
|
|
@@ -287,6 +300,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
287
300
|
autoResize: boolean;
|
|
288
301
|
fixedColShadow: boolean;
|
|
289
302
|
optimizeVue2Scroll: boolean;
|
|
303
|
+
sortConfig: () => {
|
|
304
|
+
emptyToBottom: boolean;
|
|
305
|
+
};
|
|
290
306
|
}>>> & {
|
|
291
307
|
onScroll?: ((ev: Event, data: {
|
|
292
308
|
startIndex: number;
|
|
@@ -296,7 +312,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
296
312
|
"onTh-drag-start"?: ((dragStartKey: string) => any) | undefined;
|
|
297
313
|
"onCol-order-change"?: ((dragStartKey: string, targetColKey: string) => any) | undefined;
|
|
298
314
|
"onTh-drop"?: ((targetColKey: string) => any) | undefined;
|
|
299
|
-
"onSort-change"?: ((col: StkTableColumn<any>, order: Order, data: any[]) => any) | undefined;
|
|
315
|
+
"onSort-change"?: ((col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig) => any) | undefined;
|
|
300
316
|
"onRow-click"?: ((ev: MouseEvent, row: any) => any) | undefined;
|
|
301
317
|
"onCurrent-change"?: ((ev: MouseEvent | null, row: any) => any) | undefined;
|
|
302
318
|
"onRow-dblclick"?: ((ev: MouseEvent, row: any) => any) | undefined;
|
|
@@ -312,7 +328,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
312
328
|
rowHeight: number;
|
|
313
329
|
headless: boolean;
|
|
314
330
|
headerRowHeight: number | null;
|
|
315
|
-
colKey: UniqKey;
|
|
316
331
|
stripe: boolean;
|
|
317
332
|
fixedMode: boolean;
|
|
318
333
|
theme: "light" | "dark";
|
|
@@ -321,6 +336,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
321
336
|
columns: StkTableColumn<any>[];
|
|
322
337
|
dataSource: any[];
|
|
323
338
|
rowKey: UniqKey;
|
|
339
|
+
colKey: UniqKey;
|
|
324
340
|
emptyCellText: string;
|
|
325
341
|
noDataFull: boolean;
|
|
326
342
|
showNoData: boolean;
|
|
@@ -328,7 +344,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
328
344
|
showHeaderOverflow: boolean;
|
|
329
345
|
showOverflow: boolean;
|
|
330
346
|
showTrHoverClass: boolean;
|
|
331
|
-
headerDrag: boolean;
|
|
347
|
+
headerDrag: boolean | ((col: StkTableColumn<any>) => boolean);
|
|
332
348
|
rowClassName: (row: any, i: number) => string;
|
|
333
349
|
colResizable: boolean;
|
|
334
350
|
colMinWidth: number;
|
|
@@ -336,6 +352,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
336
352
|
autoResize: boolean | (() => void);
|
|
337
353
|
fixedColShadow: boolean;
|
|
338
354
|
optimizeVue2Scroll: boolean;
|
|
355
|
+
sortConfig: SortConfig;
|
|
339
356
|
}, {}>, {
|
|
340
357
|
tableHeader?(_: {
|
|
341
358
|
col: StkTableColumn<any>;
|
|
@@ -26,11 +26,11 @@ export type StkTableColumn<T extends Record<string, any>> = {
|
|
|
26
26
|
/** 筛选 */
|
|
27
27
|
sorter?: Sorter<T>;
|
|
28
28
|
/** 列宽。横向虚拟滚动时必须设置。 */
|
|
29
|
-
width?: string;
|
|
29
|
+
width?: string | number;
|
|
30
30
|
/** 最小列宽。非x虚拟滚动生效。 */
|
|
31
|
-
minWidth?: string;
|
|
31
|
+
minWidth?: string | number;
|
|
32
32
|
/** 最大列宽。非x虚拟滚动生效。 */
|
|
33
|
-
maxWidth?: string;
|
|
33
|
+
maxWidth?: string | number;
|
|
34
34
|
/**th class */
|
|
35
35
|
headerClassName?: string;
|
|
36
36
|
/** td class */
|
|
@@ -70,4 +70,9 @@ export type SortState<T> = {
|
|
|
70
70
|
sortType?: 'number' | 'string';
|
|
71
71
|
};
|
|
72
72
|
export type UniqKey = string | ((param: any) => string);
|
|
73
|
+
/** 排序配置 */
|
|
74
|
+
export type SortConfig = {
|
|
75
|
+
/** 空值始终排在列表末尾 */
|
|
76
|
+
emptyToBottom?: boolean;
|
|
77
|
+
};
|
|
73
78
|
export {};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
type Options = {
|
|
3
|
+
props: any;
|
|
3
4
|
tableContainer: Ref<HTMLElement | undefined>;
|
|
4
5
|
initVirtualScroll: () => void;
|
|
5
|
-
scrollTo: () => void;
|
|
6
|
-
props: any;
|
|
7
6
|
/** 防抖延时 */
|
|
8
7
|
debounceMs: number;
|
|
9
8
|
};
|
|
@@ -11,5 +10,5 @@ type Options = {
|
|
|
11
10
|
* 窗口变化自动重置虚拟滚动
|
|
12
11
|
* @param param0
|
|
13
12
|
*/
|
|
14
|
-
export declare function useAutoResize({ tableContainer, initVirtualScroll,
|
|
13
|
+
export declare function useAutoResize({ tableContainer, initVirtualScroll, props, debounceMs }: Options): void;
|
|
15
14
|
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { StkTableColumn } from './types';
|
|
1
2
|
type Params = {
|
|
3
|
+
props: any;
|
|
2
4
|
emits: any;
|
|
3
5
|
};
|
|
4
6
|
/**
|
|
@@ -6,9 +8,10 @@ type Params = {
|
|
|
6
8
|
* @param param0
|
|
7
9
|
* @returns
|
|
8
10
|
*/
|
|
9
|
-
export declare function useThDrag({ emits }: Params): {
|
|
11
|
+
export declare function useThDrag<DT extends Record<string, any>>({ props, emits }: Params): {
|
|
10
12
|
onThDragStart: (e: MouseEvent) => void;
|
|
11
13
|
onThDragOver: (e: MouseEvent) => void;
|
|
12
14
|
onThDrop: (e: MouseEvent) => void;
|
|
15
|
+
isHeaderDraggable: (col: StkTableColumn<DT>) => any;
|
|
13
16
|
};
|
|
14
17
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Order, SortOption, SortState, StkTableColumn } from './types';
|
|
1
|
+
import { Order, SortConfig, SortOption, SortState, StkTableColumn } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* 对有序数组插入新数据
|
|
4
4
|
* @param sortState
|
|
@@ -18,6 +18,8 @@ export declare function insertToOrderedArray<T extends object>(sortState: SortSt
|
|
|
18
18
|
* @param order 排序方式
|
|
19
19
|
* @param dataSource 排序的数组
|
|
20
20
|
*/
|
|
21
|
-
export declare function tableSort(sortOption: SortOption, order: Order, dataSource: any[]): any[];
|
|
21
|
+
export declare function tableSort(sortOption: SortOption, order: Order, dataSource: any[], sortConfig?: SortConfig): any[];
|
|
22
22
|
/** 表头column配置的层级 */
|
|
23
23
|
export declare function howDeepTheHeader(arr: StkTableColumn<any>[], level?: number): number;
|
|
24
|
+
/** 获取列宽 */
|
|
25
|
+
export declare function getColWidth(col: StkTableColumn<any> | null): number;
|