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 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: import("./types/index").UniqKey[], option?: {
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; /** v-model:columns col resize 时更新宽度*/
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) => void;
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) => any) | undefined;
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) => string;
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>) => string;
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: import("vue").ComputedRef<Map<any, any>>;
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;