stk-table-vue 0.1.0 → 0.2.1

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
@@ -1,30 +1,42 @@
1
1
  # StkTable (Sticky Table)
2
2
 
3
3
  Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐暗动效。
4
- js体积(未压缩44kb)
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] 表头拖动调整列宽。
23
+ * [x] 排序
24
+ - [x] 基本表头点击排序。
25
+ - [] 支持配置 `null` | `undefined` 永远排最后。
26
+ - [] 支持配置 string 使用 `String.prototype.localCompare` 排序。
12
27
  * 多级表头。
13
28
  - [x] 支持最多`2级`表头。
14
- - [x] 支持更多级表头
15
- - [] 多级表头固定列横向滚动
29
+ - [x] 支持更多级表头。
16
30
  - [] 横向虚拟滚动。
17
31
  * [x] 支持table-layout: fixed 配置。
18
32
  * 鼠标悬浮在表格上,键盘滚动虚拟表格。
19
33
  - [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` 按键支持。
20
34
  - [x] 键盘 `PageUp`/ `PageDown` 按键支持。
21
- * [x] 斑马纹。
22
- * [x] 列固定阴影。
23
- - [] 多级表头固定列阴影。
24
- - [] sticky column 动态计算阴影位置。
25
35
  * [] 不传row-key 时,自动按序号生成id。
26
- * [] 列筛选。
27
36
  * [] 非虚拟滚动时,大数据分批加载。
37
+ * [x] vue2.7支持(引入源码使用)。
38
+ - [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
39
+
28
40
 
29
41
  ## Usage
30
42
  > npm install stk-table-vue
@@ -45,6 +57,41 @@ stkTable.value.setHighlightDimCell(rowId, colId) // highlight cell
45
57
 
46
58
  ```
47
59
 
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的话
68
+ ```html
69
+ <script>
70
+ import { StkTable } from 'stk-table-vue/src/StkTable/StkTable.vue';
71
+ import 'stk-table-vue/lib/style.css';
72
+ </script>
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
+
93
+
94
+
48
95
  ## Notice
49
96
  注意,组件会改动 `props.columns` 中的对象。如果多个组件 `columns` 数组元素存在引用同一个 `StkTableColumn` 对象。则考虑赋值 `columns` 前进行深拷贝。
50
97
 
@@ -98,6 +145,8 @@ export type StkProps = {
98
145
  showTrHoverClass?: boolean;
99
146
  /** 表头是否可拖动 */
100
147
  headerDrag?: boolean;
148
+ /** 表头是否可拖动。支持回调函数。 */
149
+ headerDrag?: boolean | ((col: StkTableColumn<DT>) => boolean);
101
150
  /**
102
151
  * 给行附加className<br>
103
152
  * FIXME: 是否需要优化,因为不传此prop会使表格行一直执行空函数,是否有影响
@@ -127,6 +176,8 @@ export type StkProps = {
127
176
  autoResize?: boolean | (() => void);
128
177
  /** 是否展示固定列阴影。默认不展示。 */
129
178
  fixedColShadow?: boolean;
179
+ /** 优化vue2 滚动 */
180
+ optimizeVue2Scroll?: boolean;
130
181
  };
131
182
  ```
132
183
  #### Emits
@@ -219,6 +270,8 @@ defineExpose({
219
270
  setHighlightDimRow,
220
271
  /** 表格排序列dataIndex */
221
272
  sortCol,
273
+ /** 获取当前排序状态 */
274
+ getSortColumns,
222
275
  /** 设置排序 */
223
276
  setSorter,
224
277
  /** 重置排序 */
@@ -1,4 +1,6 @@
1
- import { Order, SortOption, StkTableColumn, UniqKey } from './types/index';
1
+ import { Order, 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会使表格行一直执行空函数,是否有影响
@@ -105,6 +109,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
105
109
  autoResize?: boolean | (() => void) | undefined;
106
110
  /** 是否展示固定列阴影。默认不展示。 */
107
111
  fixedColShadow?: boolean | undefined;
112
+ /** 优化vue2 滚动 */
113
+ optimizeVue2Scroll?: boolean | undefined;
108
114
  }>, {
109
115
  width: string;
110
116
  fixedMode: boolean;
@@ -135,6 +141,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
135
141
  bordered: boolean;
136
142
  autoResize: boolean;
137
143
  fixedColShadow: boolean;
144
+ optimizeVue2Scroll: boolean;
138
145
  }>, {
139
146
  /** 初始化横向纵向虚拟滚动 */
140
147
  initVirtualScroll: (height?: number | undefined) => void;
@@ -150,6 +157,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
150
157
  setHighlightDimRow: (rowKeyValues: (string | number)[]) => void;
151
158
  /** 表格排序列dataIndex */
152
159
  sortCol: import("vue").Ref<string | null | undefined>;
160
+ /** 获取当前排序状态 */
161
+ getSortColumns: typeof getSortColumns;
153
162
  /** 设置排序 */
154
163
  setSorter: typeof setSorter;
155
164
  /** 重置排序 */
@@ -176,7 +185,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
176
185
  "th-drag-start": (dragStartKey: string) => void;
177
186
  "th-drop": (targetColKey: string) => void;
178
187
  "update:columns": (cols: StkTableColumn<any>[]) => void;
179
- }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
188
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
180
189
  width?: string | undefined;
181
190
  /** 最小表格宽度 */
182
191
  minWidth?: string | undefined;
@@ -220,8 +229,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
220
229
  showOverflow?: boolean | undefined;
221
230
  /** 是否增加行hover class */
222
231
  showTrHoverClass?: boolean | undefined;
223
- /** 表头是否可拖动 */
224
- headerDrag?: boolean | undefined;
232
+ /** 表头是否可拖动。支持回调函数。 */
233
+ headerDrag?: boolean | ((col: StkTableColumn<any>) => boolean) | undefined;
225
234
  /**
226
235
  * 给行附加className<br>
227
236
  * FIXME: 是否需要优化,因为不传此prop会使表格行一直执行空函数,是否有影响
@@ -251,6 +260,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
251
260
  autoResize?: boolean | (() => void) | undefined;
252
261
  /** 是否展示固定列阴影。默认不展示。 */
253
262
  fixedColShadow?: boolean | undefined;
263
+ /** 优化vue2 滚动 */
264
+ optimizeVue2Scroll?: boolean | undefined;
254
265
  }>, {
255
266
  width: string;
256
267
  fixedMode: boolean;
@@ -281,6 +292,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
281
292
  bordered: boolean;
282
293
  autoResize: boolean;
283
294
  fixedColShadow: boolean;
295
+ optimizeVue2Scroll: boolean;
284
296
  }>>> & {
285
297
  onScroll?: ((ev: Event, data: {
286
298
  startIndex: number;
@@ -306,7 +318,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
306
318
  rowHeight: number;
307
319
  headless: boolean;
308
320
  headerRowHeight: number | null;
309
- colKey: UniqKey;
310
321
  stripe: boolean;
311
322
  fixedMode: boolean;
312
323
  theme: "light" | "dark";
@@ -315,6 +326,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
315
326
  columns: StkTableColumn<any>[];
316
327
  dataSource: any[];
317
328
  rowKey: UniqKey;
329
+ colKey: UniqKey;
318
330
  emptyCellText: string;
319
331
  noDataFull: boolean;
320
332
  showNoData: boolean;
@@ -322,13 +334,14 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
322
334
  showHeaderOverflow: boolean;
323
335
  showOverflow: boolean;
324
336
  showTrHoverClass: boolean;
325
- headerDrag: boolean;
337
+ headerDrag: boolean | ((col: StkTableColumn<any>) => boolean);
326
338
  rowClassName: (row: any, i: number) => string;
327
339
  colResizable: boolean;
328
340
  colMinWidth: number;
329
341
  bordered: boolean | "h" | "v" | "body-v";
330
342
  autoResize: boolean | (() => void);
331
343
  fixedColShadow: boolean;
344
+ optimizeVue2Scroll: boolean;
332
345
  }, {}>, {
333
346
  tableHeader?(_: {
334
347
  col: StkTableColumn<any>;
@@ -1,3 +1,3 @@
1
- export { default as StkTable } from './StkTable.vue';
2
- export { tableSort, insertToOrderedArray } from './utils';
3
- export type { StkTableColumn } from './types/index';
1
+ export { default as StkTable } from './StkTable.vue';
2
+ export { tableSort, insertToOrderedArray } from './utils';
3
+ export type { StkTableColumn } from './types/index';
@@ -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 */
@@ -1,15 +1,14 @@
1
- import { Ref } from 'vue';
2
- type Options = {
3
- tableContainer: Ref<HTMLElement | undefined>;
4
- initVirtualScroll: () => void;
5
- scrollTo: () => void;
6
- props: any;
7
- /** 防抖延时 */
8
- debounceMs: number;
9
- };
10
- /**
11
- * 窗口变化自动重置虚拟滚动
12
- * @param param0
13
- */
14
- export declare function useAutoResize({ tableContainer, initVirtualScroll, scrollTo, props, debounceMs }: Options): void;
15
- export {};
1
+ import { Ref } from 'vue';
2
+ type Options = {
3
+ props: any;
4
+ tableContainer: Ref<HTMLElement | undefined>;
5
+ initVirtualScroll: () => void;
6
+ /** 防抖延时 */
7
+ debounceMs: number;
8
+ };
9
+ /**
10
+ * 窗口变化自动重置虚拟滚动
11
+ * @param param0
12
+ */
13
+ export declare function useAutoResize({ tableContainer, initVirtualScroll, props, debounceMs }: Options): void;
14
+ export {};
@@ -0,0 +1,20 @@
1
+ import { Ref } from 'vue';
2
+ import { StkTableColumn } from './types';
3
+ type Params<T extends Record<string, any>> = {
4
+ props: any;
5
+ tableHeaderLast: Ref<StkTableColumn<T>[]>;
6
+ tableContainer: Ref<HTMLDivElement | undefined>;
7
+ };
8
+ /**
9
+ * 固定列处理
10
+ * @returns
11
+ */
12
+ export declare function useFixedCol<DT extends Record<string, any>>({ props, tableHeaderLast, tableContainer }: Params<DT>): {
13
+ /** 固定列class */
14
+ getFixedColClass: (col: StkTableColumn<DT>) => Record<string, boolean>;
15
+ /** 处理固定列阴影 */
16
+ dealFixedColShadow: () => void;
17
+ /** 滚动条变化时,更新需要展示阴影的列 */
18
+ updateFixedShadow: () => void;
19
+ };
20
+ export {};
@@ -1,19 +1,19 @@
1
- import { Ref } from 'vue';
2
- type Params = {
3
- props: {
4
- theme: 'light' | 'dark';
5
- virtual: boolean;
6
- dataSource: any[];
7
- };
8
- tableContainer: Ref<HTMLElement | undefined>;
9
- rowKeyGen: (p: any) => string;
10
- };
11
- /**
12
- * 高亮单元格,行
13
- * row中新增_bgc_progress_ms 属性控制高亮状态,_bgc控制颜色
14
- */
15
- export declare function useHighlight({ props, tableContainer, rowKeyGen }: Params): {
16
- setHighlightDimRow: (rowKeyValues: Array<string | number>) => void;
17
- setHighlightDimCell: (rowKeyValue: string, dataIndex: string) => void;
18
- };
19
- export {};
1
+ import { Ref } from 'vue';
2
+ type Params = {
3
+ props: {
4
+ theme: 'light' | 'dark';
5
+ virtual: boolean;
6
+ dataSource: any[];
7
+ };
8
+ tableContainer: Ref<HTMLElement | undefined>;
9
+ rowKeyGen: (p: any) => string;
10
+ };
11
+ /**
12
+ * 高亮单元格,行
13
+ * row中新增_bgc_progress_ms 属性控制高亮状态,_bgc控制颜色
14
+ */
15
+ export declare function useHighlight({ props, tableContainer, rowKeyGen }: Params): {
16
+ setHighlightDimRow: (rowKeyValues: Array<string | number>) => void;
17
+ setHighlightDimCell: (rowKeyValue: string, dataIndex: string) => void;
18
+ };
19
+ 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 {};
@@ -41,7 +41,7 @@ export type VirtualScrollXStore = {
41
41
  * @param param0
42
42
  * @returns
43
43
  */
44
- export declare function useVirtualScroll<DT extends Record<string, any>>({ tableContainer, props, dataSourceCopy, tableHeaderLast }: Option<DT>): {
44
+ export declare function useVirtualScroll<DT extends Record<string, any>>({ props, tableContainer, dataSourceCopy, tableHeaderLast }: Option<DT>): {
45
45
  virtualScroll: Ref<{
46
46
  containerHeight: number;
47
47
  pageSize: number;
@@ -21,3 +21,5 @@ export declare function insertToOrderedArray<T extends object>(sortState: SortSt
21
21
  export declare function tableSort(sortOption: SortOption, order: Order, dataSource: any[]): 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;