stk-table-vue 0.3.1 → 0.3.3
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 +32 -3
- package/lib/src/StkTable/StkTable.vue.d.ts +42 -6
- package/lib/src/StkTable/useColResize.d.ts +3 -3
- package/lib/src/StkTable/useFixedCol.d.ts +4 -4
- package/lib/src/StkTable/useVirtualScroll.d.ts +4 -1
- package/lib/stk-table-vue.js +117 -76
- package/lib/style.css +116 -123
- package/package.json +1 -1
- package/src/StkTable/StkTable.vue +106 -46
- package/src/StkTable/style.less +205 -229
- package/src/StkTable/useColResize.ts +5 -5
- package/src/StkTable/useFixedCol.ts +4 -4
- package/src/StkTable/useFixedStyle.ts +30 -9
- package/src/StkTable/useHighlight.ts +5 -4
- package/src/StkTable/useVirtualScroll.ts +19 -15
- package/src/StkTable/utils.ts +1 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ repo:
|
|
|
32
32
|
* [x] 排序
|
|
33
33
|
- [x] 基本表头点击排序。
|
|
34
34
|
- [x] 支持配置 `null` | `undefined` 永远排最后。
|
|
35
|
-
- [] 支持配置 string 使用 `String.prototype.localCompare` 排序。
|
|
35
|
+
- [x] 支持配置 string 使用 `String.prototype.localCompare` 排序。
|
|
36
36
|
* [x] 多级表头。
|
|
37
37
|
- [x] 支持最多`2级`表头。
|
|
38
38
|
- [x] 支持更多级表头。
|
|
@@ -45,6 +45,7 @@ repo:
|
|
|
45
45
|
* [x] vue2.7支持(引入源码使用)。
|
|
46
46
|
- [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。(`v0.2.0`)
|
|
47
47
|
* [x] 支持配置序号列。`StkTableColumn['type']`。(`v0.3.0`)
|
|
48
|
+
* [x] `props.cellHover`单元格悬浮样式。(`v0.3.2`)
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
|
|
@@ -166,6 +167,8 @@ export type StkProps = {
|
|
|
166
167
|
showOverflow?: boolean;
|
|
167
168
|
/** 是否增加行hover class */
|
|
168
169
|
showTrHoverClass?: boolean;
|
|
170
|
+
/** 是否高亮鼠标悬浮的单元格 */
|
|
171
|
+
cellHover?: boolean;
|
|
169
172
|
/** 表头是否可拖动。支持回调函数。 */
|
|
170
173
|
headerDrag?: boolean | ((col: StkTableColumn<DT>) => boolean);
|
|
171
174
|
/**
|
|
@@ -228,6 +231,14 @@ export type StkProps = {
|
|
|
228
231
|
/** 序号列起始下标 用于适配分页 */
|
|
229
232
|
startIndex?: number;
|
|
230
233
|
};
|
|
234
|
+
/**
|
|
235
|
+
* 固定头,固定列实现方式。
|
|
236
|
+
*
|
|
237
|
+
* relative:固定列只能放在props.columns的两侧。如果列宽会变动则谨慎使用。
|
|
238
|
+
*
|
|
239
|
+
* 低版本浏览器只能为'relative',
|
|
240
|
+
*/
|
|
241
|
+
cellFixedMode?: 'sticky' | 'relative';
|
|
231
242
|
};
|
|
232
243
|
```
|
|
233
244
|
|
|
@@ -246,9 +257,9 @@ export type StkProps = {
|
|
|
246
257
|
(e: 'row-click', ev: MouseEvent, row: DT): void;
|
|
247
258
|
/**
|
|
248
259
|
* 选中一行触发。ev返回null表示不是点击事件触发的
|
|
249
|
-
* ```(ev: MouseEvent | null, row: DT)```
|
|
260
|
+
* ```(ev: MouseEvent | null, row: DT, data: { select: boolean })```
|
|
250
261
|
*/
|
|
251
|
-
(e: 'current-change', ev: MouseEvent | null, row: DT): void;
|
|
262
|
+
(e: 'current-change', ev: MouseEvent | null, row: DT, data: { select: boolean }): void;
|
|
252
263
|
/**
|
|
253
264
|
* 行双击事件
|
|
254
265
|
* ```(ev: MouseEvent, row: DT)```
|
|
@@ -269,6 +280,21 @@ export type StkProps = {
|
|
|
269
280
|
* ```(ev: MouseEvent, row: DT, col: StkTableColumn<DT>)```
|
|
270
281
|
*/
|
|
271
282
|
(e: 'cell-click', ev: MouseEvent, row: DT, col: StkTableColumn<DT>): void;
|
|
283
|
+
/**
|
|
284
|
+
* 单元格鼠标进入事件
|
|
285
|
+
* ```(ev: MouseEvent, row: DT, col: StkTableColumn<DT>)```
|
|
286
|
+
*/
|
|
287
|
+
(e: 'cell-mouseenter', ev: MouseEvent, row: DT, col: StkTableColumn<DT>): void;
|
|
288
|
+
/**
|
|
289
|
+
* 单元格鼠标移出事件
|
|
290
|
+
* ```(ev: MouseEvent, row: DT, col: StkTableColumn<DT>)```
|
|
291
|
+
*/
|
|
292
|
+
(e: 'cell-mouseleave', ev: MouseEvent, row: DT, col: StkTableColumn<DT>): void;
|
|
293
|
+
/**
|
|
294
|
+
* 单元格悬浮事件
|
|
295
|
+
* ```(ev: MouseEvent, row: DT, col: StkTableColumn<DT>)```
|
|
296
|
+
*/
|
|
297
|
+
(e: 'cell-mouseover', ev: MouseEvent, row: DT, col: StkTableColumn<DT>): void;
|
|
272
298
|
/**
|
|
273
299
|
* 表头单元格点击事件
|
|
274
300
|
* ```(ev: MouseEvent, col: StkTableColumn<DT>)```
|
|
@@ -527,6 +553,9 @@ export type SortConfig<T extends Record<string, any>> = {
|
|
|
527
553
|
* 在虚拟滚动下高亮强制使用css @keyframes 实现动画。`setHighlightDimRow`/`setHighlightCellRow` 最后一个参数传入 `{method: 'css'}` 即可。(滚动后动画会中断)
|
|
528
554
|
* 指定 `{method:'animation'}` 在虚拟滚动下使用animation api实现动画。好处是动画流畅,且滚动后动画不中断。
|
|
529
555
|
* 配置 `props.highlightConfig.fps` 指定高亮帧率。降低帧率有利于性能。
|
|
556
|
+
### 性能
|
|
557
|
+
* 配置 `props.cellFixedMode` 为 `relative` 时,将使用相对定位实现固定列与固定表头,相较于`sticky`的实现,渲染合成层更少,性能更好。
|
|
558
|
+
* 问题:若开启了纵向虚拟滚动,不开启横向虚拟滚动,且不设置某些列宽时。如果纵向滚动导致某些列宽变化,则会导致右侧固定列计算错误。
|
|
530
559
|
|
|
531
560
|
## Other
|
|
532
561
|
* `$*$` 兼容注释
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { HighlightConfig, Order, SeqConfig, SortConfig, SortOption, SortState, StkTableColumn, UniqKeyProp } from './types/index';
|
|
1
|
+
import { HighlightConfig, Order, SeqConfig, SortConfig, SortOption, SortState, StkTableColumn, UniqKey, UniqKeyProp } from './types/index';
|
|
2
2
|
/** Generic stands for DataType */
|
|
3
3
|
type DT = any;
|
|
4
4
|
/**
|
|
5
5
|
* 选中一行,
|
|
6
|
-
* @param {string} rowKey
|
|
6
|
+
* @param {string} rowKey selected rowKey, null to unselect
|
|
7
7
|
* @param {boolean} option.silent 是否触发回调
|
|
8
8
|
*/
|
|
9
9
|
declare function setCurrentRow(rowKey: string, option?: {
|
|
@@ -83,6 +83,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
83
83
|
showOverflow?: boolean | undefined;
|
|
84
84
|
/** 是否增加行hover class */
|
|
85
85
|
showTrHoverClass?: boolean | undefined;
|
|
86
|
+
/** 是否高亮鼠标悬浮的单元格 */
|
|
87
|
+
cellHover?: boolean | undefined;
|
|
86
88
|
/** 表头是否可拖动。支持回调函数。 */
|
|
87
89
|
headerDrag?: boolean | ((col: StkTableColumn<any>) => boolean) | undefined;
|
|
88
90
|
/**
|
|
@@ -124,6 +126,14 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
124
126
|
highlightConfig?: HighlightConfig | undefined;
|
|
125
127
|
/** 序号列配置 */
|
|
126
128
|
seqConfig?: SeqConfig | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* 固定头,固定列实现方式。
|
|
131
|
+
*
|
|
132
|
+
* relative:固定列只能放在props.columns的两侧。如果列宽会变动则谨慎使用。
|
|
133
|
+
*
|
|
134
|
+
* 低版本浏览器只能为'relative',
|
|
135
|
+
*/
|
|
136
|
+
cellFixedMode?: "sticky" | "relative" | undefined;
|
|
127
137
|
}>, {
|
|
128
138
|
width: string;
|
|
129
139
|
fixedMode: boolean;
|
|
@@ -147,6 +157,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
147
157
|
showHeaderOverflow: boolean;
|
|
148
158
|
showOverflow: boolean;
|
|
149
159
|
showTrHoverClass: boolean;
|
|
160
|
+
cellHover: boolean;
|
|
150
161
|
headerDrag: boolean;
|
|
151
162
|
rowClassName: () => "";
|
|
152
163
|
colResizable: boolean;
|
|
@@ -162,6 +173,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
162
173
|
hideHeaderTitle: boolean;
|
|
163
174
|
highlightConfig: () => {};
|
|
164
175
|
seqConfig: () => {};
|
|
176
|
+
cellFixedMode: string;
|
|
165
177
|
}>, {
|
|
166
178
|
/** 初始化横向纵向虚拟滚动 */
|
|
167
179
|
initVirtualScroll: (height?: number | undefined) => void;
|
|
@@ -179,11 +191,11 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
179
191
|
duration?: number | undefined;
|
|
180
192
|
}) => void;
|
|
181
193
|
/** 设置高亮渐暗行 */
|
|
182
|
-
setHighlightDimRow: (rowKeyValues:
|
|
194
|
+
setHighlightDimRow: (rowKeyValues: UniqKey[], option?: {
|
|
183
195
|
method?: "css" | "animation" | "js" | undefined;
|
|
184
196
|
useCss?: boolean | undefined;
|
|
185
197
|
className?: string | undefined;
|
|
186
|
-
keyframe?: Keyframe[] | PropertyIndexedKeyframes | null | undefined;
|
|
198
|
+
keyframe?: Keyframe[] | PropertyIndexedKeyframes | null | undefined;
|
|
187
199
|
duration?: number | undefined;
|
|
188
200
|
}) => void;
|
|
189
201
|
/** 表格排序列dataIndex */
|
|
@@ -201,11 +213,16 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
201
213
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
202
214
|
"sort-change": (col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig<any>) => void;
|
|
203
215
|
"row-click": (ev: MouseEvent, row: any) => void;
|
|
204
|
-
"current-change": (ev: MouseEvent | null, row: any
|
|
216
|
+
"current-change": (ev: MouseEvent | null, row: any, data: {
|
|
217
|
+
select: boolean;
|
|
218
|
+
}) => void;
|
|
205
219
|
"row-dblclick": (ev: MouseEvent, row: any) => void;
|
|
206
220
|
"header-row-menu": (ev: MouseEvent) => void;
|
|
207
221
|
"row-menu": (ev: MouseEvent, row: any) => void;
|
|
208
222
|
"cell-click": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
|
|
223
|
+
"cell-mouseenter": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
|
|
224
|
+
"cell-mouseleave": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
|
|
225
|
+
"cell-mouseover": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
|
|
209
226
|
"header-cell-click": (ev: MouseEvent, col: StkTableColumn<any>) => void;
|
|
210
227
|
scroll: (ev: Event, data: {
|
|
211
228
|
startIndex: number;
|
|
@@ -263,6 +280,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
263
280
|
showOverflow?: boolean | undefined;
|
|
264
281
|
/** 是否增加行hover class */
|
|
265
282
|
showTrHoverClass?: boolean | undefined;
|
|
283
|
+
/** 是否高亮鼠标悬浮的单元格 */
|
|
284
|
+
cellHover?: boolean | undefined;
|
|
266
285
|
/** 表头是否可拖动。支持回调函数。 */
|
|
267
286
|
headerDrag?: boolean | ((col: StkTableColumn<any>) => boolean) | undefined;
|
|
268
287
|
/**
|
|
@@ -304,6 +323,14 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
304
323
|
highlightConfig?: HighlightConfig | undefined;
|
|
305
324
|
/** 序号列配置 */
|
|
306
325
|
seqConfig?: SeqConfig | undefined;
|
|
326
|
+
/**
|
|
327
|
+
* 固定头,固定列实现方式。
|
|
328
|
+
*
|
|
329
|
+
* relative:固定列只能放在props.columns的两侧。如果列宽会变动则谨慎使用。
|
|
330
|
+
*
|
|
331
|
+
* 低版本浏览器只能为'relative',
|
|
332
|
+
*/
|
|
333
|
+
cellFixedMode?: "sticky" | "relative" | undefined;
|
|
307
334
|
}>, {
|
|
308
335
|
width: string;
|
|
309
336
|
fixedMode: boolean;
|
|
@@ -327,6 +354,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
327
354
|
showHeaderOverflow: boolean;
|
|
328
355
|
showOverflow: boolean;
|
|
329
356
|
showTrHoverClass: boolean;
|
|
357
|
+
cellHover: boolean;
|
|
330
358
|
headerDrag: boolean;
|
|
331
359
|
rowClassName: () => "";
|
|
332
360
|
colResizable: boolean;
|
|
@@ -342,6 +370,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
342
370
|
hideHeaderTitle: boolean;
|
|
343
371
|
highlightConfig: () => {};
|
|
344
372
|
seqConfig: () => {};
|
|
373
|
+
cellFixedMode: string;
|
|
345
374
|
}>>> & {
|
|
346
375
|
onScroll?: ((ev: Event, data: {
|
|
347
376
|
startIndex: number;
|
|
@@ -353,11 +382,16 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
353
382
|
"onTh-drop"?: ((targetColKey: string) => any) | undefined;
|
|
354
383
|
"onSort-change"?: ((col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig<any>) => any) | undefined;
|
|
355
384
|
"onRow-click"?: ((ev: MouseEvent, row: any) => any) | undefined;
|
|
356
|
-
"onCurrent-change"?: ((ev: MouseEvent | null, row: any
|
|
385
|
+
"onCurrent-change"?: ((ev: MouseEvent | null, row: any, data: {
|
|
386
|
+
select: boolean;
|
|
387
|
+
}) => any) | undefined;
|
|
357
388
|
"onRow-dblclick"?: ((ev: MouseEvent, row: any) => any) | undefined;
|
|
358
389
|
"onHeader-row-menu"?: ((ev: MouseEvent) => any) | undefined;
|
|
359
390
|
"onRow-menu"?: ((ev: MouseEvent, row: any) => any) | undefined;
|
|
360
391
|
"onCell-click"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
|
|
392
|
+
"onCell-mouseenter"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
|
|
393
|
+
"onCell-mouseleave"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
|
|
394
|
+
"onCell-mouseover"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
|
|
361
395
|
"onHeader-cell-click"?: ((ev: MouseEvent, col: StkTableColumn<any>) => any) | undefined;
|
|
362
396
|
"onScroll-x"?: ((ev: Event) => any) | undefined;
|
|
363
397
|
}, {
|
|
@@ -386,6 +420,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
386
420
|
showHeaderOverflow: boolean;
|
|
387
421
|
showOverflow: boolean;
|
|
388
422
|
showTrHoverClass: boolean;
|
|
423
|
+
cellHover: boolean;
|
|
389
424
|
headerDrag: boolean | ((col: StkTableColumn<any>) => boolean);
|
|
390
425
|
rowClassName: (row: any, i: number) => string;
|
|
391
426
|
colResizable: boolean;
|
|
@@ -398,6 +433,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
398
433
|
hideHeaderTitle: boolean | string[];
|
|
399
434
|
highlightConfig: HighlightConfig;
|
|
400
435
|
seqConfig: SeqConfig;
|
|
436
|
+
cellFixedMode: "sticky" | "relative";
|
|
401
437
|
}, {}>, {
|
|
402
438
|
tableHeader?(_: {
|
|
403
439
|
col: StkTableColumn<any>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Ref, ShallowRef } from 'vue';
|
|
2
|
-
import { StkTableColumn } from './types';
|
|
1
|
+
import { ComputedRef, Ref, ShallowRef } from 'vue';
|
|
2
|
+
import { StkTableColumn, UniqKey } from './types';
|
|
3
3
|
type Params<DT extends Record<string, any>> = {
|
|
4
4
|
props: any;
|
|
5
5
|
emits: any;
|
|
6
6
|
tableContainerRef: Ref<HTMLElement | undefined>;
|
|
7
7
|
tableHeaderLast: ShallowRef<StkTableColumn<DT>[]>;
|
|
8
8
|
colResizeIndicatorRef: Ref<HTMLElement | undefined>;
|
|
9
|
-
colKeyGen: (p: any) =>
|
|
9
|
+
colKeyGen: ComputedRef<(p: any) => UniqKey>;
|
|
10
10
|
};
|
|
11
11
|
/** 列宽拖动 */
|
|
12
12
|
export declare function useColResize<DT extends Record<string, any>>({ tableContainerRef, tableHeaderLast, colResizeIndicatorRef, props, emits, colKeyGen, }: Params<DT>): {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Ref, ShallowRef } from 'vue';
|
|
2
|
-
import { StkTableColumn } from './types';
|
|
1
|
+
import { ComputedRef, Ref, ShallowRef } from 'vue';
|
|
2
|
+
import { StkTableColumn, UniqKey } from './types';
|
|
3
3
|
type Params<T extends Record<string, any>> = {
|
|
4
4
|
props: any;
|
|
5
|
-
colKeyGen: (col: StkTableColumn<T>) =>
|
|
5
|
+
colKeyGen: ComputedRef<(col: StkTableColumn<T>) => UniqKey>;
|
|
6
6
|
tableHeaders: ShallowRef<StkTableColumn<T>[][]>;
|
|
7
7
|
tableHeaderLast: ShallowRef<StkTableColumn<T>[]>;
|
|
8
8
|
tableContainerRef: Ref<HTMLDivElement | undefined>;
|
|
@@ -13,7 +13,7 @@ type Params<T extends Record<string, any>> = {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare function useFixedCol<DT extends Record<string, any>>({ props, colKeyGen, tableHeaders, tableHeaderLast, tableContainerRef }: Params<DT>): {
|
|
15
15
|
/** 固定列class */
|
|
16
|
-
fixedColClassMap:
|
|
16
|
+
fixedColClassMap: ComputedRef<Map<any, any>>;
|
|
17
17
|
/** 处理固定列阴影 */
|
|
18
18
|
dealFixedColShadow: () => void;
|
|
19
19
|
/** 滚动条变化时,更新需要展示阴影的列 */
|
|
@@ -26,8 +26,10 @@ export type VirtualScrollStore = {
|
|
|
26
26
|
};
|
|
27
27
|
/** 暂存横向虚拟滚动的数据 */
|
|
28
28
|
export type VirtualScrollXStore = {
|
|
29
|
-
/**
|
|
29
|
+
/** 父容器宽度 */
|
|
30
30
|
containerWidth: number;
|
|
31
|
+
/** 滚动容器的宽度 */
|
|
32
|
+
scrollWidth: number;
|
|
31
33
|
/** 开始位置 */
|
|
32
34
|
startIndex: number;
|
|
33
35
|
/** 结束始位置 */
|
|
@@ -54,6 +56,7 @@ export declare function useVirtualScroll<DT extends Record<string, any>>({ props
|
|
|
54
56
|
}>;
|
|
55
57
|
virtualScrollX: Ref<{
|
|
56
58
|
containerWidth: number;
|
|
59
|
+
scrollWidth: number;
|
|
57
60
|
startIndex: number;
|
|
58
61
|
endIndex: number;
|
|
59
62
|
offsetLeft: number;
|