@whitesev/pops 1.4.0 → 1.5.0
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/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +50 -48
- package/src/Config.ts +3 -0
- package/src/Core.ts +45 -0
- package/src/Pops.ts +340 -0
- package/src/components/alert/index.css +45 -0
- package/src/components/alert/index.ts +216 -0
- package/src/components/alert/indexType.ts +30 -0
- package/src/components/confirm/index.css +45 -0
- package/src/components/confirm/index.ts +264 -0
- package/src/components/confirm/indexType.ts +17 -0
- package/src/components/drawer/index.css +47 -0
- package/src/components/drawer/index.ts +338 -0
- package/src/components/drawer/indexType.ts +53 -0
- package/src/components/folder/folderIcon.ts +28 -0
- package/src/components/folder/index.css +291 -0
- package/src/components/folder/index.ts +1111 -0
- package/src/components/folder/indexType.ts +87 -0
- package/src/components/iframe/index.css +90 -0
- package/src/components/iframe/index.ts +415 -0
- package/src/components/iframe/indexType.ts +144 -0
- package/src/components/loading/index.css +60 -0
- package/src/components/loading/index.ts +123 -0
- package/src/components/loading/indexType.ts +31 -0
- package/src/components/panel/buttonType.ts +60 -0
- package/src/components/panel/commonType.ts +50 -0
- package/src/components/panel/deepMenuType.ts +59 -0
- package/src/components/panel/formsType.ts +32 -0
- package/src/components/panel/index.css +754 -0
- package/src/components/panel/index.ts +2435 -0
- package/src/components/panel/indexType.ts +107 -0
- package/src/components/panel/inputType.ts +65 -0
- package/src/components/panel/ownType.ts +28 -0
- package/src/components/panel/selectType.ts +80 -0
- package/src/components/panel/sliderType.ts +59 -0
- package/src/components/panel/switchType.ts +43 -0
- package/src/components/panel/textareaType.ts +54 -0
- package/src/components/prompt/index.css +60 -0
- package/src/components/prompt/index.ts +293 -0
- package/src/components/prompt/indexType.ts +47 -0
- package/src/components/rightClickMenu/index.ts +729 -0
- package/src/components/rightClickMenu/indexType.ts +89 -0
- package/src/components/searchSuggestion/index.css +0 -0
- package/src/components/searchSuggestion/index.ts +656 -0
- package/src/components/searchSuggestion/indexType.ts +238 -0
- package/src/components/tooltip/index.css +171 -0
- package/src/components/tooltip/index.ts +358 -0
- package/src/components/tooltip/indexType.ts +95 -0
- package/src/css/animation.css +2240 -0
- package/src/css/button.css +290 -0
- package/src/css/common.css +24 -0
- package/src/css/index.css +135 -0
- package/src/css/ninePalaceGridPosition.css +50 -0
- package/src/css/scrollbar.css +18 -0
- package/src/handler/PopsElementHandler.ts +353 -0
- package/src/handler/PopsHandler.ts +659 -0
- package/src/svg/arrowLeft.svg +4 -0
- package/src/svg/arrowRight.svg +4 -0
- package/src/svg/chromeFilled.svg +14 -0
- package/src/svg/circleClose.svg +8 -0
- package/src/svg/close.svg +5 -0
- package/src/svg/cpu.svg +8 -0
- package/src/svg/delete.svg +5 -0
- package/src/svg/documentCopy.svg +5 -0
- package/src/svg/edit.svg +8 -0
- package/src/svg/eleme.svg +5 -0
- package/src/svg/elemePlus.svg +5 -0
- package/src/svg/headset.svg +5 -0
- package/src/svg/hide.svg +8 -0
- package/src/svg/keyboard.svg +8 -0
- package/src/svg/loading.svg +5 -0
- package/src/svg/max.svg +5 -0
- package/src/svg/min.svg +5 -0
- package/src/svg/mise.svg +5 -0
- package/src/svg/monitor.svg +5 -0
- package/src/svg/next.svg +5 -0
- package/src/svg/picture.svg +8 -0
- package/src/svg/prev.svg +5 -0
- package/src/svg/search.svg +5 -0
- package/src/svg/share.svg +5 -0
- package/src/svg/upload.svg +5 -0
- package/src/svg/videoPause.svg +5 -0
- package/src/svg/videoPlay.svg +5 -0
- package/src/svg/view.svg +5 -0
- package/src/types/PopsDOMUtilsEventType.d.ts +246 -0
- package/src/types/animation.d.ts +19 -0
- package/src/types/button.d.ts +226 -0
- package/src/types/components.d.ts +197 -0
- package/src/types/event.d.ts +62 -0
- package/src/types/global.d.ts +11 -0
- package/src/types/icon.d.ts +32 -0
- package/src/types/layer.d.ts +20 -0
- package/src/types/main.d.ts +136 -0
- package/src/types/mask.d.ts +35 -0
- package/src/types/position.d.ts +60 -0
- package/src/utils/AnyTouch.js +1394 -0
- package/src/utils/PopsDOMUtils.ts +2013 -0
- package/src/utils/PopsInstanceUtils.ts +685 -0
- package/src/utils/PopsMathUtils.ts +77 -0
- package/src/utils/PopsUtils.ts +380 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export const PopsMathFloatUtils = {
|
|
2
|
+
/**
|
|
3
|
+
* 判断数字是否是浮点数
|
|
4
|
+
* @param num
|
|
5
|
+
*/
|
|
6
|
+
isFloat(num: number): boolean {
|
|
7
|
+
return Number(num) === num && num % 1 !== 0;
|
|
8
|
+
},
|
|
9
|
+
/**
|
|
10
|
+
* 浮点数加法
|
|
11
|
+
* @param number1
|
|
12
|
+
* @param number2
|
|
13
|
+
*/
|
|
14
|
+
add(number1: number, number2: number) {
|
|
15
|
+
let number1length, number2length, powValue;
|
|
16
|
+
try {
|
|
17
|
+
number1length = number1.toString().split(".")[1].length;
|
|
18
|
+
} catch (error) {
|
|
19
|
+
number1length = 0;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
number2length = number2.toString().split(".")[1].length;
|
|
23
|
+
} catch (error) {
|
|
24
|
+
number2length = 0;
|
|
25
|
+
}
|
|
26
|
+
powValue = Math.pow(10, Math.max(number1length, number2length));
|
|
27
|
+
return Math.round(number1 * powValue + number2 * powValue) / powValue;
|
|
28
|
+
},
|
|
29
|
+
/**
|
|
30
|
+
* 减法
|
|
31
|
+
* @param number1
|
|
32
|
+
* @param number2
|
|
33
|
+
*/
|
|
34
|
+
sub(number1: number, number2: number) {
|
|
35
|
+
let number1length, number2length, powValue;
|
|
36
|
+
try {
|
|
37
|
+
number1length = number1.toString().split(".")[1].length;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
number1length = 0;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
number2length = number2.toString().split(".")[1].length;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
number2length = 0;
|
|
45
|
+
}
|
|
46
|
+
powValue = Math.pow(10, Math.max(number1length, number2length));
|
|
47
|
+
let fixedValue =
|
|
48
|
+
number1length >= number2length ? number1length : number2length;
|
|
49
|
+
return (
|
|
50
|
+
Math.round(number1 * powValue - number2 * powValue) / powValue
|
|
51
|
+
).toFixed(fixedValue);
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* 除法
|
|
55
|
+
* @param number1
|
|
56
|
+
* @param number2
|
|
57
|
+
*/
|
|
58
|
+
division(number1: number, number2: number) {
|
|
59
|
+
let number1length, number2length, number1ReplaceValue, number2ReplaceValue;
|
|
60
|
+
try {
|
|
61
|
+
number1length = number1.toString().split(".")[1].length;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
number1length = 0;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
number2length = number2.toString().split(".")[1].length;
|
|
67
|
+
} catch (error) {
|
|
68
|
+
number2length = 0;
|
|
69
|
+
}
|
|
70
|
+
number1ReplaceValue = Number(number1.toString().replace(".", ""));
|
|
71
|
+
number2ReplaceValue = Number(number2.toString().replace(".", ""));
|
|
72
|
+
return (
|
|
73
|
+
(number1ReplaceValue / number2ReplaceValue) *
|
|
74
|
+
Math.pow(10, number2length - number1length)
|
|
75
|
+
);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { PopsCore } from "../Core";
|
|
2
|
+
import type { PopsUtilsOwnObject } from "../types/main";
|
|
3
|
+
import { popsDOMUtils } from "./PopsDOMUtils";
|
|
4
|
+
import { AnyTouch } from "./AnyTouch";
|
|
5
|
+
|
|
6
|
+
class PopsUtils {
|
|
7
|
+
/**
|
|
8
|
+
* 判断是否是window,例如window、self、globalThis
|
|
9
|
+
* @param target
|
|
10
|
+
*/
|
|
11
|
+
isWin(target: any) {
|
|
12
|
+
if (typeof target !== "object") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (target instanceof Node) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
if (target === globalThis) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (target === window) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (target === self) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (target === PopsCore.globalThis) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (target === PopsCore.window) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
if (target === PopsCore.self) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (
|
|
37
|
+
typeof (unsafeWindow as any) !== "undefined" &&
|
|
38
|
+
target === (unsafeWindow as any)
|
|
39
|
+
) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (target?.Math?.toString() !== "[object Math]") {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 判断对象是否是元素
|
|
49
|
+
* @param target
|
|
50
|
+
* @returns
|
|
51
|
+
* + true 是元素
|
|
52
|
+
* + false 不是元素
|
|
53
|
+
* @example
|
|
54
|
+
* Utils.isDOM(document.querySelector("a"))
|
|
55
|
+
* > true
|
|
56
|
+
*/
|
|
57
|
+
isDOM(target: any): boolean;
|
|
58
|
+
isDOM(target: any): boolean {
|
|
59
|
+
return target instanceof Node;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 删除对象上的属性
|
|
63
|
+
* @param target
|
|
64
|
+
* @param propName
|
|
65
|
+
*/
|
|
66
|
+
delete(target: any, propName: any) {
|
|
67
|
+
if (typeof Reflect === "object" && Reflect.deleteProperty) {
|
|
68
|
+
Reflect.deleteProperty(target, propName);
|
|
69
|
+
} else {
|
|
70
|
+
delete target[propName];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
|
|
75
|
+
* @param target 目标数据
|
|
76
|
+
* @param source 源数据
|
|
77
|
+
* @param isAdd 是否可以追加键,默认false
|
|
78
|
+
* @example
|
|
79
|
+
* Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
|
|
80
|
+
* >
|
|
81
|
+
* {
|
|
82
|
+
"1": 1,
|
|
83
|
+
"2": {
|
|
84
|
+
"3": 4
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
*/
|
|
88
|
+
assign<T1, T2 extends object, T3 extends boolean>(
|
|
89
|
+
target: T1,
|
|
90
|
+
source: T2,
|
|
91
|
+
isAdd?: T3
|
|
92
|
+
): T3 extends true ? T1 & T2 : T1;
|
|
93
|
+
assign(target = {}, source = {}, isAdd = false) {
|
|
94
|
+
let UtilsContext = this;
|
|
95
|
+
if (source == null) {
|
|
96
|
+
return target;
|
|
97
|
+
}
|
|
98
|
+
if (target == null) {
|
|
99
|
+
target = {};
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(source)) {
|
|
102
|
+
let canTraverse = source.filter((item) => {
|
|
103
|
+
return typeof item === "object";
|
|
104
|
+
});
|
|
105
|
+
if (!canTraverse.length) {
|
|
106
|
+
return source;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (isAdd) {
|
|
110
|
+
for (const sourceKeyName in source) {
|
|
111
|
+
const targetKeyName = sourceKeyName;
|
|
112
|
+
let targetValue = (target as any)[targetKeyName];
|
|
113
|
+
let sourceValue = (source as any)[sourceKeyName];
|
|
114
|
+
if (
|
|
115
|
+
typeof sourceValue === "object" &&
|
|
116
|
+
sourceValue != null &&
|
|
117
|
+
sourceKeyName in target &&
|
|
118
|
+
!UtilsContext.isDOM(sourceValue)
|
|
119
|
+
) {
|
|
120
|
+
/* 源端的值是object类型,且不是元素节点 */
|
|
121
|
+
(target as any)[sourceKeyName] = UtilsContext.assign(
|
|
122
|
+
targetValue,
|
|
123
|
+
sourceValue,
|
|
124
|
+
isAdd
|
|
125
|
+
);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
(target as any)[sourceKeyName] = sourceValue;
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
for (const targetKeyName in target) {
|
|
132
|
+
if (targetKeyName in source) {
|
|
133
|
+
let targetValue = (target as any)[targetKeyName];
|
|
134
|
+
let sourceValue = (source as any)[targetKeyName];
|
|
135
|
+
if (
|
|
136
|
+
typeof sourceValue === "object" &&
|
|
137
|
+
sourceValue != null &&
|
|
138
|
+
!UtilsContext.isDOM(sourceValue) &&
|
|
139
|
+
Object.keys(sourceValue).length
|
|
140
|
+
) {
|
|
141
|
+
/* 源端的值是object类型,且不是元素节点 */
|
|
142
|
+
(target as any)[targetKeyName] = UtilsContext.assign(
|
|
143
|
+
targetValue,
|
|
144
|
+
sourceValue,
|
|
145
|
+
isAdd
|
|
146
|
+
);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
/* 直接赋值 */
|
|
150
|
+
(target as any)[targetKeyName] = sourceValue;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return target;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 生成uuid
|
|
159
|
+
*/
|
|
160
|
+
getRandomGUID() {
|
|
161
|
+
if (typeof PopsCore.globalThis?.crypto?.randomUUID === "function") {
|
|
162
|
+
return PopsCore.globalThis.crypto.randomUUID();
|
|
163
|
+
} else {
|
|
164
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
|
|
165
|
+
/[xy]/g,
|
|
166
|
+
function (charStr) {
|
|
167
|
+
var randomValue = (Math.random() * 16) | 0,
|
|
168
|
+
randomCharValue =
|
|
169
|
+
charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
|
|
170
|
+
return randomCharValue.toString(16);
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 字符串转HTMLElement
|
|
177
|
+
* @param elementString
|
|
178
|
+
* @returns
|
|
179
|
+
*/
|
|
180
|
+
parseTextToDOM<R extends HTMLElement>(elementString: string): R {
|
|
181
|
+
/* 去除前后的换行和空格 */
|
|
182
|
+
elementString = elementString
|
|
183
|
+
.replace(/^[\n|\s]*/g, "")
|
|
184
|
+
.replace(/[\n|\s]*$/g, "");
|
|
185
|
+
let targetElement = popsDOMUtils.createElement("div", {
|
|
186
|
+
innerHTML: elementString,
|
|
187
|
+
});
|
|
188
|
+
return targetElement.firstChild as any as R;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* 判断元素/页面中是否包含该元素
|
|
192
|
+
* @param target 需要判断的元素
|
|
193
|
+
* @param context 默认为body
|
|
194
|
+
*/
|
|
195
|
+
contains(target: any): boolean;
|
|
196
|
+
contains(context: any, target?: any): boolean;
|
|
197
|
+
contains(context: any, target?: any): boolean {
|
|
198
|
+
if (arguments.length === 1) {
|
|
199
|
+
// 只判断该页面是否存在该元素
|
|
200
|
+
return this.contains(
|
|
201
|
+
PopsCore.document.body || PopsCore.document.documentElement,
|
|
202
|
+
arguments[0]
|
|
203
|
+
);
|
|
204
|
+
} else {
|
|
205
|
+
if (typeof (target as any)[Symbol.iterator] === "function") {
|
|
206
|
+
// 可遍历的数组
|
|
207
|
+
let flag = true;
|
|
208
|
+
for (const targetNode of target as any) {
|
|
209
|
+
if (!context.contains(targetNode)) {
|
|
210
|
+
flag = false;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return flag;
|
|
215
|
+
} else {
|
|
216
|
+
return context.contains(target as HTMLElement);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* 获取格式化后的时间
|
|
223
|
+
* @param text (可选)需要格式化的字符串或者时间戳,默认:new Date()
|
|
224
|
+
* @param formatType (可选)格式化成的显示类型,默认:yyyy-MM-dd HH:mm:ss
|
|
225
|
+
* + yyyy 年
|
|
226
|
+
* + MM 月
|
|
227
|
+
* + dd 天
|
|
228
|
+
* + HH 时 (24小时制)
|
|
229
|
+
* + hh 时 (12小时制)
|
|
230
|
+
* + mm 分
|
|
231
|
+
* + ss 秒
|
|
232
|
+
* @returns {string} 返回格式化后的时间
|
|
233
|
+
* @example
|
|
234
|
+
* Utils.formatTime("2022-08-21 23:59:00","HH:mm:ss");
|
|
235
|
+
* > '23:59:00'
|
|
236
|
+
* @example
|
|
237
|
+
* Utils.formatTime(1899187424988,"HH:mm:ss");
|
|
238
|
+
* > '15:10:13'
|
|
239
|
+
* @example
|
|
240
|
+
* Utils.formatTime()
|
|
241
|
+
* > '2023-1-1 00:00:00'
|
|
242
|
+
**/
|
|
243
|
+
formatTime(text?: string | number | Date, formatType?: string): string;
|
|
244
|
+
/**
|
|
245
|
+
* 获取格式化后的时间
|
|
246
|
+
* @param text (可选)需要格式化的字符串或者时间戳,默认:new Date()
|
|
247
|
+
* @param formatType (可选)格式化成的显示类型,默认:yyyy-MM-dd HH:mm:ss
|
|
248
|
+
* + yyyy 年
|
|
249
|
+
* + MM 月
|
|
250
|
+
* + dd 天
|
|
251
|
+
* + HH 时 (24小时制)
|
|
252
|
+
* + hh 时 (12小时制)
|
|
253
|
+
* + mm 分
|
|
254
|
+
* + ss 秒
|
|
255
|
+
* @returns {string} 返回格式化后的时间
|
|
256
|
+
* @example
|
|
257
|
+
* Utils.formatTime("2022-08-21 23:59:00","HH:mm:ss");
|
|
258
|
+
* > '23:59:00'
|
|
259
|
+
* @example
|
|
260
|
+
* Utils.formatTime(1899187424988,"HH:mm:ss");
|
|
261
|
+
* > '15:10:13'
|
|
262
|
+
* @example
|
|
263
|
+
* Utils.formatTime()
|
|
264
|
+
* > '2023-1-1 00:00:00'
|
|
265
|
+
**/
|
|
266
|
+
formatTime(
|
|
267
|
+
text?: string | number | Date,
|
|
268
|
+
formatType?:
|
|
269
|
+
| "yyyy-MM-dd HH:mm:ss"
|
|
270
|
+
| "yyyy/MM/dd HH:mm:ss"
|
|
271
|
+
| "yyyy_MM_dd_HH_mm_ss"
|
|
272
|
+
| "yyyy年MM月dd日 HH时mm分ss秒"
|
|
273
|
+
| "yyyy年MM月dd日 hh:mm:ss"
|
|
274
|
+
| "yyyy年MM月dd日 HH:mm:ss"
|
|
275
|
+
| "yyyy-MM-dd"
|
|
276
|
+
| "yyyyMMdd"
|
|
277
|
+
| "HH:mm:ss"
|
|
278
|
+
): string;
|
|
279
|
+
formatTime(text = new Date(), formatType = "yyyy-MM-dd HH:mm:ss") {
|
|
280
|
+
let time = text == null ? new Date() : new Date(text);
|
|
281
|
+
/**
|
|
282
|
+
* 校验时间补0
|
|
283
|
+
* @param timeNum
|
|
284
|
+
* @returns
|
|
285
|
+
*/
|
|
286
|
+
function checkTime(timeNum: number) {
|
|
287
|
+
if (timeNum < 10) return "0" + timeNum;
|
|
288
|
+
return timeNum;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* 时间制修改 24小时制转12小时制
|
|
293
|
+
* @param hourNum 小时
|
|
294
|
+
* @returns
|
|
295
|
+
*/
|
|
296
|
+
function timeSystemChange(hourNum: number) {
|
|
297
|
+
return hourNum > 12 ? hourNum - 12 : hourNum;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
let timeRegexp = {
|
|
301
|
+
yyyy: time.getFullYear(),
|
|
302
|
+
/* 年 */
|
|
303
|
+
MM: checkTime(time.getMonth() + 1),
|
|
304
|
+
/* 月 */
|
|
305
|
+
dd: checkTime(time.getDate()),
|
|
306
|
+
/* 日 */
|
|
307
|
+
HH: checkTime(time.getHours()),
|
|
308
|
+
/* 时 (24小时制) */
|
|
309
|
+
hh: checkTime(timeSystemChange(time.getHours())),
|
|
310
|
+
/* 时 (12小时制) */
|
|
311
|
+
mm: checkTime(time.getMinutes()),
|
|
312
|
+
/* 分 */
|
|
313
|
+
ss: checkTime(time.getSeconds()),
|
|
314
|
+
/* 秒 */
|
|
315
|
+
};
|
|
316
|
+
Object.keys(timeRegexp).forEach(function (key) {
|
|
317
|
+
let replaecRegexp = new RegExp(key, "g");
|
|
318
|
+
formatType = formatType.replace(replaecRegexp, (timeRegexp as any)[key]);
|
|
319
|
+
});
|
|
320
|
+
return formatType;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* 格式化byte为KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB
|
|
324
|
+
* @param byteSize 字节
|
|
325
|
+
* @param addType (可选)是否添加单位
|
|
326
|
+
* + true (默认) 添加单位
|
|
327
|
+
* + false 不添加单位
|
|
328
|
+
* @returns
|
|
329
|
+
* + {string} 当addType为true时,且保留小数点末尾2位
|
|
330
|
+
* + {number} 当addType为false时,且保留小数点末尾2位
|
|
331
|
+
* @example
|
|
332
|
+
* Utils.formatByteToSize("812304");
|
|
333
|
+
* > '793.27KB'
|
|
334
|
+
* @example
|
|
335
|
+
* Utils.formatByteToSize("812304",false);
|
|
336
|
+
* > 793.27
|
|
337
|
+
**/
|
|
338
|
+
formatByteToSize<T extends boolean>(
|
|
339
|
+
byteSize: number | string,
|
|
340
|
+
addType?: T
|
|
341
|
+
): T extends true ? string : number;
|
|
342
|
+
formatByteToSize(byteSize: number | string, addType = true) {
|
|
343
|
+
byteSize = parseInt(byteSize.toString());
|
|
344
|
+
if (isNaN(byteSize)) {
|
|
345
|
+
throw new Error("Utils.formatByteToSize 参数 byteSize 格式不正确");
|
|
346
|
+
}
|
|
347
|
+
let result = 0;
|
|
348
|
+
let resultType = "KB";
|
|
349
|
+
let sizeData: PopsUtilsOwnObject<number> = {};
|
|
350
|
+
sizeData.B = 1;
|
|
351
|
+
sizeData.KB = 1024;
|
|
352
|
+
sizeData.MB = sizeData.KB * sizeData.KB;
|
|
353
|
+
sizeData.GB = sizeData.MB * sizeData.KB;
|
|
354
|
+
sizeData.TB = sizeData.GB * sizeData.KB;
|
|
355
|
+
sizeData.PB = sizeData.TB * sizeData.KB;
|
|
356
|
+
sizeData.EB = sizeData.PB * sizeData.KB;
|
|
357
|
+
sizeData.ZB = sizeData.EB * sizeData.KB;
|
|
358
|
+
sizeData.YB = sizeData.ZB * sizeData.KB;
|
|
359
|
+
sizeData.BB = sizeData.YB * sizeData.KB;
|
|
360
|
+
sizeData.NB = sizeData.BB * sizeData.KB;
|
|
361
|
+
sizeData.DB = sizeData.NB * sizeData.KB;
|
|
362
|
+
for (let key in sizeData) {
|
|
363
|
+
result = byteSize / (sizeData as any)[key];
|
|
364
|
+
resultType = key;
|
|
365
|
+
if (sizeData.KB >= result) {
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
result = result.toFixed(2) as any;
|
|
370
|
+
result = addType
|
|
371
|
+
? result + resultType.toString()
|
|
372
|
+
: (parseFloat(result.toString()) as any);
|
|
373
|
+
return result;
|
|
374
|
+
}
|
|
375
|
+
AnyTouch: () => any = AnyTouch;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const popsUtils = new PopsUtils();
|
|
379
|
+
|
|
380
|
+
export { popsUtils };
|