stk-table-vue 0.2.2 → 0.2.5

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
@@ -4,8 +4,13 @@ Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐
4
4
 
5
5
  Vue2.7支持引入源码(**ts**)使用。
6
6
 
7
+ repo:
8
+ - [Github](https://github.com/ja-plus/stk-table-vue)
9
+ - [Gitee](https://gitee.com/japlus/stk-table-vue) 🇨🇳
10
+
7
11
  ## Bug TODO:
8
- * [] props.dataSource 为 shallowRef 时,高亮行不生效。(2024.02.21)
12
+ * [x] props.dataSource 为 shallowRef 时,高亮行不生效。(bug:2024.02.21)(resolved:0.2.3)
13
+
9
14
  ## Feature TODO:
10
15
  * [x] 高亮行,单元格。
11
16
  * [x] 虚拟滚动。
@@ -17,12 +22,12 @@ Vue2.7支持引入源码(**ts**)使用。
17
22
  - [] sticky column 动态计算阴影位置。
18
23
  * [] 列筛选。
19
24
  * [x] 斑马纹。
20
- - [] 虚拟滚动斑马纹。
25
+ - [x] 虚拟滚动斑马纹。
21
26
  * [x] 表头拖动更改顺序。
22
27
  * [x] 表头拖动调整列宽。
23
28
  * [x] 排序
24
29
  - [x] 基本表头点击排序。
25
- - [] 支持配置 `null` | `undefined` 永远排最后。
30
+ - [x] 支持配置 `null` | `undefined` 永远排最后。
26
31
  - [] 支持配置 string 使用 `String.prototype.localCompare` 排序。
27
32
  * 多级表头。
28
33
  - [x] 支持最多`2级`表头。
@@ -32,10 +37,10 @@ Vue2.7支持引入源码(**ts**)使用。
32
37
  * 鼠标悬浮在表格上,键盘滚动虚拟表格。
33
38
  - [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` 按键支持。
34
39
  - [x] 键盘 `PageUp`/ `PageDown` 按键支持。
35
- * [] 不传row-key 时,自动按序号生成id。
36
40
  * [] 非虚拟滚动时,大数据分批加载。
37
41
  * [x] vue2.7支持(引入源码使用)。
38
42
  - [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。
43
+ * [] `props.emptyCellText` 支持传入函数。
39
44
 
40
45
 
41
46
  ## Usage
@@ -126,9 +131,9 @@ export type StkProps = {
126
131
  /** 表格数据源 */
127
132
  dataSource?: any[];
128
133
  /** 行唯一键 */
129
- rowKey?: UniqKey;
134
+ rowKey?: UniqKeyProp;
130
135
  /** 列唯一键 */
131
- colKey?: UniqKey;
136
+ colKey?: UniqKeyProp;
132
137
  /** 空值展示文字 */
133
138
  emptyCellText?: string;
134
139
  /** 暂无数据兜底高度是否撑满 */
@@ -181,8 +186,20 @@ export type StkProps = {
181
186
  /** 排序配置 */
182
187
  sortConfig?: {
183
188
  /** 空值是否排最下面 */
184
- emptyToBottom: false,
189
+ emptyToBottom: boolean,
190
+ /** 默认排序(1.初始化时触发 2.排序方向为null时触发) */
191
+ defaultSort?: {
192
+ dataIndex: keyof T;
193
+ order: Order;
194
+ };
195
+ /**
196
+ * string排序是否使用 String.prototype.localCompare
197
+ * 默认true (历史设计问题,为了兼容,默认true)
198
+ */
199
+ stringLocaleCompare?: boolean;
185
200
  },
201
+ /** 隐藏头部title。可传入dataIndex数组 */
202
+ hideHeaderTitle?: boolean | string[];
186
203
  };
187
204
  ```
188
205
  #### Emits
@@ -192,7 +209,7 @@ export type StkProps = {
192
209
  * 排序变更触发
193
210
  * ```(col: StkTableColumn<DT>, order: Order, data: DT[])```
194
211
  */
195
- (e: 'sort-change', col: StkTableColumn<DT>, order: Order, data: DT[], sortConfig:SortConfig): void;
212
+ (e: 'sort-change', col: StkTableColumn<DT>, order: Order, data: DT[], sortConfig: SortConfig): void;
196
213
  /**
197
214
  * 一行点击事件
198
215
  * ```(ev: MouseEvent, row: DT)```
@@ -398,3 +415,8 @@ export type StkTableColumn<T extends Record<string, any>> = {
398
415
  ]
399
416
  </script>
400
417
  ```
418
+
419
+ ## Special Example
420
+ ### 鼠标悬浮表头时,不展示title
421
+ * 将 `StkTableColumn` 中的 `title` 字段置为 "" 空字符串。这样th中就没有title了。
422
+ * 使用 `StkTableColumn` 中的 `customHeaderCell` 属性中,自定义表头渲染。
@@ -1,4 +1,4 @@
1
- import { Order, SortConfig, SortOption, SortState, StkTableColumn, UniqKey } from './types/index';
1
+ import { Order, SortConfig, SortOption, SortState, StkTableColumn, UniqKeyProp } from './types/index';
2
2
  /** Generic stands for DataType */
3
3
  type DT = any;
4
4
  /**
@@ -11,14 +11,14 @@ declare function setCurrentRow(rowKey: string, option?: {
11
11
  }): void;
12
12
  /**
13
13
  * 设置表头排序状态
14
- * @param {string} dataIndex 列字段
15
- * @param {'asc'|'desc'|null} order
16
- * @param {object} option.sortOption 指定排序参数
17
- * @param {boolean} option.sort 是否触发排序
18
- * @param {boolean} option.silent 是否触发回调
14
+ * @param dataIndex 列字段
15
+ * @param order 正序倒序
16
+ * @param option.sortOption 指定排序参数。同 StkTableColumn 中排序相关字段。建议从columns中find得到。
17
+ * @param option.sort 是否触发排序-默认true
18
+ * @param option.silent 是否禁止触发回调-默认true
19
19
  */
20
- declare function setSorter(dataIndex: string, order: null | 'asc' | 'desc', option?: {
21
- sortOption?: SortOption;
20
+ declare function setSorter(dataIndex: string, order: Order, option?: {
21
+ sortOption?: SortOption<DT>;
22
22
  silent?: boolean;
23
23
  sort?: boolean;
24
24
  }): any[];
@@ -61,9 +61,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
61
61
  /** 表格数据源 */
62
62
  dataSource?: any[] | undefined;
63
63
  /** 行唯一键 */
64
- rowKey?: UniqKey | undefined;
64
+ rowKey?: UniqKeyProp | undefined;
65
65
  /** 列唯一键 */
66
- colKey?: UniqKey | undefined;
66
+ colKey?: UniqKeyProp | undefined;
67
67
  /** 空值展示文字 */
68
68
  emptyCellText?: string | undefined;
69
69
  /** 暂无数据兜底高度是否撑满 */
@@ -112,7 +112,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
112
112
  /** 优化vue2 滚动 */
113
113
  optimizeVue2Scroll?: boolean | undefined;
114
114
  /** 排序配置 */
115
- sortConfig?: SortConfig | undefined;
115
+ sortConfig?: SortConfig<any> | undefined;
116
+ /** 隐藏头部title。可传入dataIndex数组 */
117
+ hideHeaderTitle?: boolean | string[] | undefined;
116
118
  }>, {
117
119
  width: string;
118
120
  fixedMode: boolean;
@@ -146,7 +148,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
146
148
  optimizeVue2Scroll: boolean;
147
149
  sortConfig: () => {
148
150
  emptyToBottom: boolean;
151
+ stringLocaleCompare: boolean;
149
152
  };
153
+ hideHeaderTitle: boolean;
150
154
  }>, {
151
155
  /** 初始化横向纵向虚拟滚动 */
152
156
  initVirtualScroll: (height?: number | undefined) => void;
@@ -159,7 +163,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
159
163
  /** 设置高亮渐暗单元格 */
160
164
  setHighlightDimCell: (rowKeyValue: string, dataIndex: string) => void;
161
165
  /** 设置高亮渐暗行 */
162
- setHighlightDimRow: (rowKeyValues: (string | number)[]) => void;
166
+ setHighlightDimRow: (rowKeyValues: import("./types/index").UniqKey[]) => void;
163
167
  /** 表格排序列dataIndex */
164
168
  sortCol: import("vue").Ref<string | null | undefined>;
165
169
  /** 获取当前排序状态 */
@@ -173,7 +177,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
173
177
  /** 获取表格数据 */
174
178
  getTableData: typeof getTableData;
175
179
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
176
- "sort-change": (col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig) => void;
180
+ "sort-change": (col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig<any>) => void;
177
181
  "row-click": (ev: MouseEvent, row: any) => void;
178
182
  "current-change": (ev: MouseEvent | null, row: any) => void;
179
183
  "row-dblclick": (ev: MouseEvent, row: any) => void;
@@ -217,9 +221,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
217
221
  /** 表格数据源 */
218
222
  dataSource?: any[] | undefined;
219
223
  /** 行唯一键 */
220
- rowKey?: UniqKey | undefined;
224
+ rowKey?: UniqKeyProp | undefined;
221
225
  /** 列唯一键 */
222
- colKey?: UniqKey | undefined;
226
+ colKey?: UniqKeyProp | undefined;
223
227
  /** 空值展示文字 */
224
228
  emptyCellText?: string | undefined;
225
229
  /** 暂无数据兜底高度是否撑满 */
@@ -268,7 +272,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
268
272
  /** 优化vue2 滚动 */
269
273
  optimizeVue2Scroll?: boolean | undefined;
270
274
  /** 排序配置 */
271
- sortConfig?: SortConfig | undefined;
275
+ sortConfig?: SortConfig<any> | undefined;
276
+ /** 隐藏头部title。可传入dataIndex数组 */
277
+ hideHeaderTitle?: boolean | string[] | undefined;
272
278
  }>, {
273
279
  width: string;
274
280
  fixedMode: boolean;
@@ -302,7 +308,9 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
302
308
  optimizeVue2Scroll: boolean;
303
309
  sortConfig: () => {
304
310
  emptyToBottom: boolean;
311
+ stringLocaleCompare: boolean;
305
312
  };
313
+ hideHeaderTitle: boolean;
306
314
  }>>> & {
307
315
  onScroll?: ((ev: Event, data: {
308
316
  startIndex: number;
@@ -312,7 +320,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
312
320
  "onTh-drag-start"?: ((dragStartKey: string) => any) | undefined;
313
321
  "onCol-order-change"?: ((dragStartKey: string, targetColKey: string) => any) | undefined;
314
322
  "onTh-drop"?: ((targetColKey: string) => any) | undefined;
315
- "onSort-change"?: ((col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig) => any) | undefined;
323
+ "onSort-change"?: ((col: StkTableColumn<any>, order: Order, data: any[], sortConfig: SortConfig<any>) => any) | undefined;
316
324
  "onRow-click"?: ((ev: MouseEvent, row: any) => any) | undefined;
317
325
  "onCurrent-change"?: ((ev: MouseEvent | null, row: any) => any) | undefined;
318
326
  "onRow-dblclick"?: ((ev: MouseEvent, row: any) => any) | undefined;
@@ -335,8 +343,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
335
343
  virtualX: boolean;
336
344
  columns: StkTableColumn<any>[];
337
345
  dataSource: any[];
338
- rowKey: UniqKey;
339
- colKey: UniqKey;
346
+ rowKey: UniqKeyProp;
347
+ colKey: UniqKeyProp;
340
348
  emptyCellText: string;
341
349
  noDataFull: boolean;
342
350
  showNoData: boolean;
@@ -352,7 +360,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
352
360
  autoResize: boolean | (() => void);
353
361
  fixedColShadow: boolean;
354
362
  optimizeVue2Scroll: boolean;
355
- sortConfig: SortConfig;
363
+ sortConfig: SortConfig<any>;
364
+ hideHeaderTitle: boolean | string[];
356
365
  }, {}>, {
357
366
  tableHeader?(_: {
358
367
  col: StkTableColumn<any>;
@@ -1,3 +1,4 @@
1
1
  export { default as StkTable } from './StkTable.vue';
2
2
  export { tableSort, insertToOrderedArray } from './utils';
3
3
  export type { StkTableColumn } from './types/index';
4
+ import './style.less';
@@ -63,16 +63,30 @@ export type StkTableColumn<T extends Record<string, any>> = {
63
63
  /** 父节点引用 */
64
64
  __PARENT__?: StkTableColumn<T> | null;
65
65
  };
66
- export type SortOption = Pick<StkTableColumn<any>, 'sorter' | 'dataIndex' | 'sortField' | 'sortType'>;
66
+ export type SortOption<T extends Record<string, any>> = Pick<StkTableColumn<T>, 'sorter' | 'dataIndex' | 'sortField' | 'sortType'>;
67
+ /** 排序状态 */
67
68
  export type SortState<T> = {
68
69
  dataIndex: T;
69
70
  order: null | 'asc' | 'desc';
70
71
  sortType?: 'number' | 'string';
71
72
  };
72
- export type UniqKey = string | ((param: any) => string);
73
+ /** 唯一键 */
74
+ export type UniqKey = string | number;
75
+ export type UniqKeyFun = (param: any) => UniqKey;
76
+ export type UniqKeyProp = UniqKey | UniqKeyFun;
73
77
  /** 排序配置 */
74
- export type SortConfig = {
78
+ export type SortConfig<T extends Record<string, any>> = {
75
79
  /** 空值始终排在列表末尾 */
76
80
  emptyToBottom?: boolean;
81
+ /** 默认排序(1.初始化时触发 2.排序方向为null时触发) */
82
+ defaultSort?: {
83
+ dataIndex: keyof T;
84
+ order: Order;
85
+ };
86
+ /**
87
+ * string排序是否使用 String.prototype.localCompare
88
+ * 默认true (&$&应该false)
89
+ */
90
+ stringLocaleCompare?: boolean;
77
91
  };
78
92
  export {};
@@ -1,9 +1,9 @@
1
1
  import { CSSProperties, Ref } from 'vue';
2
2
  import { StkTableColumn } from './types';
3
3
  import { VirtualScrollStore, VirtualScrollXStore } from './useVirtualScroll';
4
- type Options = {
4
+ type Options<T extends Record<string, any>> = {
5
5
  props: any;
6
- tableHeaderLast: Ref<StkTableColumn<any>[]>;
6
+ tableHeaders: Ref<StkTableColumn<T>[][]>;
7
7
  virtualScroll: Ref<VirtualScrollStore>;
8
8
  virtualScrollX: Ref<VirtualScrollXStore>;
9
9
  virtualX_on: Ref<boolean>;
@@ -14,7 +14,7 @@ type Options = {
14
14
  * @param param0
15
15
  * @returns
16
16
  */
17
- export declare function useFixedStyle({ props, tableHeaderLast, virtualScroll, virtualScrollX, virtualX_on, virtualX_offsetRight }: Options): {
17
+ export declare function useFixedStyle<DT extends Record<string, any>>({ props, tableHeaders, virtualScroll, virtualScrollX, virtualX_on, virtualX_offsetRight, }: Options<DT>): {
18
18
  getFixedStyle: (tagType: 1 | 2, col: StkTableColumn<any>, depth?: number) => CSSProperties;
19
19
  };
20
20
  export {};
@@ -1,4 +1,5 @@
1
1
  import { Ref } from 'vue';
2
+ import { UniqKey } from './types';
2
3
  type Params = {
3
4
  props: {
4
5
  theme: 'light' | 'dark';
@@ -6,14 +7,20 @@ type Params = {
6
7
  dataSource: any[];
7
8
  };
8
9
  tableContainer: Ref<HTMLElement | undefined>;
9
- rowKeyGen: (p: any) => string;
10
+ };
11
+ /** 高亮行保存的东西 */
12
+ type HighlightRowStore = {
13
+ bgc: string;
14
+ bgc_progress_ms: number;
15
+ bgc_progress: number;
10
16
  };
11
17
  /**
12
18
  * 高亮单元格,行
13
19
  * row中新增_bgc_progress_ms 属性控制高亮状态,_bgc控制颜色
14
20
  */
15
- export declare function useHighlight({ props, tableContainer, rowKeyGen }: Params): {
16
- setHighlightDimRow: (rowKeyValues: Array<string | number>) => void;
21
+ export declare function useHighlight({ props, tableContainer }: Params): {
22
+ highlightRowStore: Ref<Record<UniqKey, HighlightRowStore>>;
23
+ setHighlightDimRow: (rowKeyValues: UniqKey[]) => void;
17
24
  setHighlightDimCell: (rowKeyValue: string, dataIndex: string) => void;
18
25
  };
19
26
  export {};
@@ -1,10 +1,11 @@
1
1
  import { Ref, ShallowRef } from 'vue';
2
2
  import { StkTableColumn } from './types';
3
3
  type Option<DT extends Record<string, any>> = {
4
- tableContainer: Ref<HTMLElement | undefined>;
5
4
  props: any;
5
+ tableContainer: Ref<HTMLElement | undefined>;
6
6
  dataSourceCopy: ShallowRef<DT[]>;
7
7
  tableHeaderLast: Ref<StkTableColumn<DT>[]>;
8
+ tableHeaders: Ref<StkTableColumn<DT>[][]>;
8
9
  };
9
10
  /** 暂存纵向虚拟滚动的数据 */
10
11
  export type VirtualScrollStore = {
@@ -41,7 +42,7 @@ export type VirtualScrollXStore = {
41
42
  * @param param0
42
43
  * @returns
43
44
  */
44
- export declare function useVirtualScroll<DT extends Record<string, any>>({ props, tableContainer, dataSourceCopy, tableHeaderLast }: Option<DT>): {
45
+ export declare function useVirtualScroll<DT extends Record<string, any>>({ props, tableContainer, dataSourceCopy, tableHeaderLast, tableHeaders, }: Option<DT>): {
45
46
  virtualScroll: Ref<{
46
47
  containerHeight: number;
47
48
  pageSize: number;
@@ -8,18 +8,22 @@ import { Order, SortConfig, SortOption, SortState, StkTableColumn } from './type
8
8
  * @param newItem 要插入的数据
9
9
  * @param targetArray 表格数据
10
10
  */
11
- export declare function insertToOrderedArray<T extends object>(sortState: SortState<keyof T>, newItem: any, targetArray: T[]): T[];
11
+ export declare function insertToOrderedArray<T extends object>(sortState: SortState<keyof T>, newItem: any, targetArray: T[], sortConfig?: SortConfig<T>): T[];
12
12
  /**
13
13
  * 表格排序抽离
14
14
  * 可以在组件外部自己实现表格排序,组件配置remote,使表格不排序。
15
15
  * 使用者在@sort-change事件中自行更改table props 'dataSource'完成排序。
16
16
  * TODO: key 唯一值,排序字段相同时,根据唯一值排序。
17
+ *
18
+ * sortConfig.defaultSort 会在order为null时生效
17
19
  * @param sortOption 列配置
18
20
  * @param order 排序方式
19
21
  * @param dataSource 排序的数组
20
22
  */
21
- export declare function tableSort(sortOption: SortOption, order: Order, dataSource: any[], sortConfig?: SortConfig): any[];
23
+ export declare function tableSort<T extends Record<string, any>>(sortOption: SortOption<T>, order: Order, dataSource: T[], sortConfig?: SortConfig<T>): T[];
22
24
  /** 表头column配置的层级 */
23
25
  export declare function howDeepTheHeader(arr: StkTableColumn<any>[], level?: number): number;
24
26
  /** 获取列宽 */
25
27
  export declare function getColWidth(col: StkTableColumn<any> | null): number;
28
+ /** 获取列宽配置。用于支持列宽配置数字 */
29
+ export declare function getColWidthStr(col: StkTableColumn<any> | null | undefined, key?: 'width' | 'minWidth' | 'maxWidth'): string | undefined;