stk-table-vue 0.6.4 → 0.6.6
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 +11 -3
- package/lib/src/StkTable/StkTable.vue.d.ts +12 -7
- package/lib/src/StkTable/index.d.ts +1 -1
- package/lib/src/StkTable/types/index.d.ts +4 -0
- package/lib/src/StkTable/useColResize.d.ts +1 -0
- package/lib/src/StkTable/useFixedCol.d.ts +2 -2
- package/lib/src/StkTable/utils/index.d.ts +10 -2
- package/lib/stk-table-vue.js +97 -72
- package/lib/style.css +14 -12
- package/package.json +9 -5
- package/src/StkTable/StkTable.vue +15 -8
- package/src/StkTable/index.ts +1 -1
- package/src/StkTable/style.less +18 -13
- package/src/StkTable/types/index.ts +5 -0
- package/src/StkTable/useColResize.ts +11 -2
- package/src/StkTable/useFixedCol.ts +46 -40
- package/src/StkTable/useHighlight.ts +3 -3
- package/src/StkTable/useThDrag.ts +2 -2
- package/src/StkTable/useVirtualScroll.ts +44 -18
- package/src/StkTable/utils/index.ts +28 -16
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Order, SortConfig, SortOption, SortState, StkTableColumn } from '../types';
|
|
2
2
|
|
|
3
3
|
/** 是否空值 */
|
|
4
|
-
function isEmptyValue(val: any, isNumber?: boolean) {
|
|
5
|
-
let isEmpty = val === null || val ===
|
|
4
|
+
export function isEmptyValue(val: any, isNumber?: boolean) {
|
|
5
|
+
let isEmpty = val === null || val === void 0;
|
|
6
6
|
if (isNumber) {
|
|
7
7
|
isEmpty = isEmpty || typeof val === 'boolean' || Number.isNaN(+val);
|
|
8
8
|
}
|
|
@@ -26,7 +26,6 @@ export function insertToOrderedArray<T extends object>(sortState: SortState<T>,
|
|
|
26
26
|
sortConfig = { emptyToBottom: false, ...sortConfig };
|
|
27
27
|
let { sortType } = sortState;
|
|
28
28
|
if (!sortType) sortType = typeof newItem[dataIndex] as 'number' | 'string';
|
|
29
|
-
const isNumber = sortType === 'number';
|
|
30
29
|
const data = [...targetArray];
|
|
31
30
|
|
|
32
31
|
if (!order || !data.length) {
|
|
@@ -40,31 +39,43 @@ export function insertToOrderedArray<T extends object>(sortState: SortState<T>,
|
|
|
40
39
|
data.push(newItem);
|
|
41
40
|
}
|
|
42
41
|
|
|
42
|
+
const isNumber = sortType === 'number';
|
|
43
|
+
|
|
43
44
|
// 二分插入
|
|
44
|
-
let sIndex = 0;
|
|
45
|
-
let eIndex = data.length - 1;
|
|
46
45
|
const targetVal: any = newItem[dataIndex];
|
|
47
|
-
|
|
48
|
-
// console.log(sIndex, eIndex);
|
|
49
|
-
const midIndex = Math.floor((sIndex + eIndex) / 2);
|
|
46
|
+
const sIndex = binarySearch(data, midIndex => {
|
|
50
47
|
const midVal: any = data[midIndex][dataIndex];
|
|
51
48
|
const compareRes = strCompare(midVal, targetVal, isNumber, sortConfig.stringLocaleCompare);
|
|
49
|
+
return order === 'asc' ? compareRes : -compareRes;
|
|
50
|
+
});
|
|
51
|
+
data.splice(sIndex, 0, newItem);
|
|
52
|
+
return data;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 二分查找
|
|
57
|
+
* @param searchArray 查找数组
|
|
58
|
+
* @param compareCallback 比较函数,返回 -1|0|1
|
|
59
|
+
*/
|
|
60
|
+
export function binarySearch(searchArray: any[], compareCallback: (midIndex: number) => number) {
|
|
61
|
+
let sIndex = 0;
|
|
62
|
+
let eIndex = searchArray.length - 1;
|
|
63
|
+
while (sIndex <= eIndex) {
|
|
64
|
+
const midIndex = Math.floor((sIndex + eIndex) / 2);
|
|
65
|
+
const compareRes = compareCallback(midIndex);
|
|
52
66
|
if (compareRes === 0) {
|
|
53
67
|
//midVal == targetVal
|
|
54
68
|
sIndex = midIndex;
|
|
55
69
|
break;
|
|
56
|
-
} else if (compareRes
|
|
70
|
+
} else if (compareRes < 0) {
|
|
57
71
|
// midVal < targetVal
|
|
58
|
-
|
|
59
|
-
else eIndex = midIndex - 1;
|
|
72
|
+
sIndex = midIndex + 1;
|
|
60
73
|
} else {
|
|
61
74
|
//midVal > targetVal
|
|
62
|
-
|
|
63
|
-
else sIndex = midIndex + 1;
|
|
75
|
+
eIndex = midIndex - 1;
|
|
64
76
|
}
|
|
65
77
|
}
|
|
66
|
-
|
|
67
|
-
return data;
|
|
78
|
+
return sIndex;
|
|
68
79
|
}
|
|
69
80
|
/**
|
|
70
81
|
* 字符串比较
|
|
@@ -73,7 +84,7 @@ export function insertToOrderedArray<T extends object>(sortState: SortState<T>,
|
|
|
73
84
|
* @param type 类型
|
|
74
85
|
* @param isNumber 是否是数字类型
|
|
75
86
|
* @param localeCompare 是否 使用Array.prototyshpe.localeCompare
|
|
76
|
-
* @return {
|
|
87
|
+
* @return {number} <0: a < b, 0: a = b, >0: a > b
|
|
77
88
|
*/
|
|
78
89
|
export function strCompare(a: string, b: string, isNumber: boolean, localeCompare = false): number {
|
|
79
90
|
let _a: number | string = a;
|
|
@@ -182,6 +193,7 @@ export function howDeepTheHeader(arr: StkTableColumn<any>[], level = 0) {
|
|
|
182
193
|
|
|
183
194
|
/** number width +px */
|
|
184
195
|
export function transformWidthToStr(width?: string | number) {
|
|
196
|
+
if (width === void 0) return;
|
|
185
197
|
const numberWidth = Number(width);
|
|
186
198
|
return width + (!Number.isNaN(numberWidth) ? 'px' : '');
|
|
187
199
|
}
|