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 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 支持源码引入使用。依赖`less`。
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/index'
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").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
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, scrollTo, props, debounceMs }: Options): void;
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;