@yh-kit/utils 1.12.3 → 1.14.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/README.md +39 -0
- package/dist/utils.js +254 -194
- package/dist/utils.umd.cjs +1 -1
- package/package.json +1 -1
- package/types/utils/lib/index.d.ts +1 -0
- package/types/utils/lib/letter/index.d.ts +1 -1
- package/types/utils/lib/name/index.d.ts +11 -0
- package/types/utils/lib/name/typing.d.ts +9 -0
- package/types/utils/lib/string/index.d.ts +8 -0
package/README.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
* @Description: 实用程序合集
|
|
3
|
+
* @Author: YH
|
|
4
|
+
* @Date: 2025-10-17 17:13:02
|
|
5
|
+
* @LastEditors: YH
|
|
6
|
+
* @LastEditTime: 2025-10-21 14:54:58
|
|
7
|
+
* @FilePath: \vite-project\packages\utils\README.md
|
|
8
|
+
-->
|
|
9
|
+
|
|
1
10
|
# 实用程序合集
|
|
2
11
|
|
|
3
12
|
实用程序合集
|
|
@@ -8,8 +17,38 @@
|
|
|
8
17
|
npm i @yh-kit/utils
|
|
9
18
|
```
|
|
10
19
|
|
|
20
|
+
## 包含的工具函数
|
|
21
|
+
|
|
22
|
+
此库包含以下工具函数,及其函数名如下:
|
|
23
|
+
|
|
24
|
+
| 函数对象名 | 描述 | 函数实现方式 |
|
|
25
|
+
| :------ | :------ | :------ |
|
|
26
|
+
| arrayUtils | 数组相关操作工具函数 | js对象函数 |
|
|
27
|
+
| Base64Utils | Base64 相关操作工具函数 | class类 |
|
|
28
|
+
| booleanUtils | 布尔值相关操作工具函数 | js对象函数 |
|
|
29
|
+
| cookieUtils | Cookie 相关操作工具函数 | js对象函数 |
|
|
30
|
+
| dateUtils | 日期相关操作工具函数 | js对象函数 |
|
|
31
|
+
| documentUtils | 文档相关操作工具函数 | js对象函数 |
|
|
32
|
+
| downloadUtils | 下载相关操作工具函数 | js对象函数 |
|
|
33
|
+
| echartsUtils | Echarts 相关操作工具函数 |
|
|
34
|
+
| letterUtils | 字母相关操作工具函数 | js对象函数 |
|
|
35
|
+
| mapUtils | 地图相关操作工具函数 | js对象函数 |
|
|
36
|
+
| MoneyFormatter | 金额格式化工具函数 | class类 |
|
|
37
|
+
| nameUtils | 姓名相关操作工具函数 | namespace |
|
|
38
|
+
| numberUtils | 数字相关操作工具函数 | js对象函数 |
|
|
39
|
+
| objectUtils | 对象相关操作工具函数 | js对象函数 |
|
|
40
|
+
| phoneUtils | 手机号相关操作工具函数 | js对象函数 |
|
|
41
|
+
| randomUtils | 随机数相关操作工具函数 | js对象函数 |
|
|
42
|
+
| regexpUtils | 常用正则表达式 | js对象函数 |
|
|
43
|
+
| storageUtils | 本地存储相关操作工具函数 | js对象函数 |
|
|
44
|
+
| stringUtils | 字符串相关操作工具函数 | js对象函数 |
|
|
45
|
+
| urlUtils | URL 相关操作工具函数 | js对象函数 |
|
|
46
|
+
| waterfallUtils | 瀑布流相关操作工具函数 | js对象函数 |
|
|
47
|
+
|
|
11
48
|
## 使用
|
|
12
49
|
|
|
50
|
+
你可以通过以下方式引入库中的工具函数并使用它们:
|
|
51
|
+
|
|
13
52
|
```ts
|
|
14
53
|
import { arrayUtils, numberUtils, urlUtils } from "@yh-kit/utils";
|
|
15
54
|
|
package/dist/utils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const w = (e, n = "value") => {
|
|
2
2
|
if (!e || !e.length) return {};
|
|
3
3
|
const t = {};
|
|
4
|
-
return e.forEach((
|
|
5
|
-
const
|
|
6
|
-
t[
|
|
4
|
+
return e.forEach((r) => {
|
|
5
|
+
const o = Object.assign({ label: r.label, text: r.label }, r);
|
|
6
|
+
t[r[n]] = o;
|
|
7
7
|
}), t;
|
|
8
8
|
}, b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
9
9
|
__proto__: null,
|
|
@@ -35,8 +35,8 @@ const w = (e, n = "value") => {
|
|
|
35
35
|
*/
|
|
36
36
|
countOfAppear(e, n) {
|
|
37
37
|
let t = 0;
|
|
38
|
-
for (const
|
|
39
|
-
|
|
38
|
+
for (const r of e)
|
|
39
|
+
r === n && t++;
|
|
40
40
|
return t;
|
|
41
41
|
},
|
|
42
42
|
/**
|
|
@@ -47,11 +47,11 @@ const w = (e, n = "value") => {
|
|
|
47
47
|
*/
|
|
48
48
|
indexsOfAppear(e, n) {
|
|
49
49
|
let t = -1;
|
|
50
|
-
const
|
|
50
|
+
const r = [];
|
|
51
51
|
do
|
|
52
|
-
t = e.indexOf(n, t + 1), t !== -1 &&
|
|
52
|
+
t = e.indexOf(n, t + 1), t !== -1 && r.push(t);
|
|
53
53
|
while (t !== -1);
|
|
54
|
-
return
|
|
54
|
+
return r;
|
|
55
55
|
},
|
|
56
56
|
/**
|
|
57
57
|
* 数组排序-默认升序
|
|
@@ -60,7 +60,7 @@ const w = (e, n = "value") => {
|
|
|
60
60
|
* @returns 排序后的数组
|
|
61
61
|
*/
|
|
62
62
|
sort(e, n = "asc") {
|
|
63
|
-
return e ? e.sort((t,
|
|
63
|
+
return e ? e.sort((t, r) => n === "asc" ? t > r ? 1 : -1 : t < r ? 1 : -1) : [];
|
|
64
64
|
},
|
|
65
65
|
/**
|
|
66
66
|
* 数组乱序(洗牌算法)
|
|
@@ -111,9 +111,9 @@ const w = (e, n = "value") => {
|
|
|
111
111
|
/** 最小值索引 */
|
|
112
112
|
index: 0
|
|
113
113
|
};
|
|
114
|
-
for (let t = 1,
|
|
115
|
-
const
|
|
116
|
-
n.value >
|
|
114
|
+
for (let t = 1, r = e.length; t < r; t++) {
|
|
115
|
+
const o = e[t];
|
|
116
|
+
n.value > o && (n.value = o, n.index = t);
|
|
117
117
|
}
|
|
118
118
|
return n;
|
|
119
119
|
},
|
|
@@ -124,7 +124,7 @@ const w = (e, n = "value") => {
|
|
|
124
124
|
*/
|
|
125
125
|
getMaxValueAndIndex(e) {
|
|
126
126
|
return e.length === 0 ? { value: 0, index: 0 } : e.reduce(
|
|
127
|
-
(n, t,
|
|
127
|
+
(n, t, r) => t < n.value ? { value: t, index: r } : n,
|
|
128
128
|
{ value: e[0], index: 0 }
|
|
129
129
|
);
|
|
130
130
|
}
|
|
@@ -133,7 +133,7 @@ const w = (e, n = "value") => {
|
|
|
133
133
|
...b
|
|
134
134
|
}
|
|
135
135
|
);
|
|
136
|
-
class
|
|
136
|
+
class _ {
|
|
137
137
|
/** Base64 编码表 */
|
|
138
138
|
static BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
139
139
|
/**
|
|
@@ -145,18 +145,18 @@ class U {
|
|
|
145
145
|
* @param sliceSize 可选参数,表示分片大小,默认为512字节。用于控制每次处理的Base64字符串长度,以优化大文件的处理。
|
|
146
146
|
* @returns 返回转换后的Blob对象,如果转换失败,则返回null。
|
|
147
147
|
*/
|
|
148
|
-
static toBlob(n, t = "",
|
|
149
|
-
const s = (n.split(",")[1] || n).replace(/-/g, "+").replace(/_/g, "/"),
|
|
148
|
+
static toBlob(n, t = "", r = 512) {
|
|
149
|
+
const s = (n.split(",")[1] || n).replace(/-/g, "+").replace(/_/g, "/"), c = "=".repeat((4 - s.length % 4) % 4), l = s + c;
|
|
150
150
|
try {
|
|
151
|
-
const i = atob(
|
|
152
|
-
for (let
|
|
153
|
-
const
|
|
154
|
-
for (let f = 0; f <
|
|
155
|
-
|
|
156
|
-
const p = new Uint8Array(
|
|
157
|
-
|
|
151
|
+
const i = atob(l), h = [];
|
|
152
|
+
for (let a = 0; a < i.length; a += r) {
|
|
153
|
+
const u = i.slice(a, a + r), d = new Array(u.length);
|
|
154
|
+
for (let f = 0; f < u.length; f++)
|
|
155
|
+
d[f] = u.charCodeAt(f);
|
|
156
|
+
const p = new Uint8Array(d);
|
|
157
|
+
h.push(p);
|
|
158
158
|
}
|
|
159
|
-
return new Blob(
|
|
159
|
+
return new Blob(h, { type: t });
|
|
160
160
|
} catch (i) {
|
|
161
161
|
return console.error("Failed to convert base64 to blob:", i), null;
|
|
162
162
|
}
|
|
@@ -171,16 +171,16 @@ class U {
|
|
|
171
171
|
* @param mimeType MIME类型,默认为"text/plain"。
|
|
172
172
|
* @returns 返回一个File对象,包含解码后的数据。
|
|
173
173
|
*/
|
|
174
|
-
static toFile(n, t = "file.txt",
|
|
175
|
-
const s = n.replace(/^data:.+;base64,/, "").replace(/-/g, "+").replace(/_/g, "/"),
|
|
176
|
-
for (let
|
|
177
|
-
const
|
|
178
|
-
for (let f = 0; f <
|
|
179
|
-
p[f] =
|
|
180
|
-
|
|
174
|
+
static toFile(n, t = "file.txt", r = "text/plain") {
|
|
175
|
+
const s = n.replace(/^data:.+;base64,/, "").replace(/-/g, "+").replace(/_/g, "/"), c = "=".repeat((4 - s.length % 4) % 4), l = s + c, i = atob(l), h = [];
|
|
176
|
+
for (let u = 0; u < i.length; u += 512) {
|
|
177
|
+
const d = i.slice(u, u + 512), p = new Array(d.length);
|
|
178
|
+
for (let f = 0; f < d.length; f++)
|
|
179
|
+
p[f] = d.charCodeAt(f);
|
|
180
|
+
h.push(new Uint8Array(p));
|
|
181
181
|
}
|
|
182
|
-
const
|
|
183
|
-
return new File([
|
|
182
|
+
const a = new Blob(h, { type: r });
|
|
183
|
+
return new File([a], t, { type: r });
|
|
184
184
|
}
|
|
185
185
|
/**
|
|
186
186
|
* base64加密 -- 普通字符串转 Base64 编码
|
|
@@ -208,20 +208,20 @@ class U {
|
|
|
208
208
|
*/
|
|
209
209
|
static _stringToUtf8Bytes(n) {
|
|
210
210
|
const t = [];
|
|
211
|
-
for (let
|
|
212
|
-
let
|
|
213
|
-
if (
|
|
214
|
-
t.push(
|
|
215
|
-
else if (
|
|
216
|
-
t.push(192 |
|
|
217
|
-
else if (
|
|
218
|
-
t.push(224 |
|
|
211
|
+
for (let r = 0; r < n.length; r++) {
|
|
212
|
+
let o = n.charCodeAt(r);
|
|
213
|
+
if (o < 128)
|
|
214
|
+
t.push(o);
|
|
215
|
+
else if (o < 2048)
|
|
216
|
+
t.push(192 | o >> 6), t.push(128 | o & 63);
|
|
217
|
+
else if (o < 55296 || o >= 57344)
|
|
218
|
+
t.push(224 | o >> 12), t.push(128 | o >> 6 & 63), t.push(128 | o & 63);
|
|
219
219
|
else {
|
|
220
|
-
|
|
221
|
-
const s =
|
|
222
|
-
if (isNaN(
|
|
220
|
+
r++;
|
|
221
|
+
const s = o, c = n.charCodeAt(r);
|
|
222
|
+
if (isNaN(c))
|
|
223
223
|
throw new Error("代理对不完整");
|
|
224
|
-
|
|
224
|
+
o = 65536 + ((s & 1023) << 10) + (c & 1023), t.push(240 | o >> 18), t.push(128 | o >> 12 & 63), t.push(128 | o >> 6 & 63), t.push(128 | o & 63);
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
return t;
|
|
@@ -230,20 +230,20 @@ class U {
|
|
|
230
230
|
* UTF-8 字节数组转字符串
|
|
231
231
|
*/
|
|
232
232
|
static _utf8BytesToString(n) {
|
|
233
|
-
let t = "",
|
|
234
|
-
for (;
|
|
235
|
-
const
|
|
236
|
-
if (
|
|
237
|
-
t += String.fromCharCode(
|
|
238
|
-
else if (
|
|
239
|
-
const s = n[
|
|
240
|
-
t += String.fromCharCode((
|
|
241
|
-
} else if (
|
|
242
|
-
const s = n[
|
|
243
|
-
t += String.fromCharCode((
|
|
244
|
-
} else if (
|
|
245
|
-
const s = n[
|
|
246
|
-
t += String.fromCharCode(
|
|
233
|
+
let t = "", r = 0;
|
|
234
|
+
for (; r < n.length; ) {
|
|
235
|
+
const o = n[r++];
|
|
236
|
+
if (o < 128)
|
|
237
|
+
t += String.fromCharCode(o);
|
|
238
|
+
else if (o >= 192 && o < 224) {
|
|
239
|
+
const s = n[r++] & 63;
|
|
240
|
+
t += String.fromCharCode((o & 31) << 6 | s);
|
|
241
|
+
} else if (o >= 224 && o < 240) {
|
|
242
|
+
const s = n[r++] & 63, c = n[r++] & 63;
|
|
243
|
+
t += String.fromCharCode((o & 15) << 12 | s << 6 | c);
|
|
244
|
+
} else if (o >= 240 && o < 248) {
|
|
245
|
+
const s = n[r++] & 63, c = n[r++] & 63, l = n[r++] & 63, i = (o & 7) << 18 | s << 12 | c << 6 | l, h = Math.floor((i - 65536) / 1024) + 55296, a = (i - 65536) % 1024 + 56320;
|
|
246
|
+
t += String.fromCharCode(h, a);
|
|
247
247
|
} else
|
|
248
248
|
t += "�";
|
|
249
249
|
}
|
|
@@ -253,10 +253,10 @@ class U {
|
|
|
253
253
|
* 字节数组转 Base64 编码
|
|
254
254
|
*/
|
|
255
255
|
static _bytesToBase64(n) {
|
|
256
|
-
let t = "",
|
|
257
|
-
for (;
|
|
258
|
-
const
|
|
259
|
-
s ?
|
|
256
|
+
let t = "", r = 0;
|
|
257
|
+
for (; r < n.length; ) {
|
|
258
|
+
const o = n[r++], s = r < n.length, c = s ? n[r++] : 0, l = r < n.length, i = l ? n[r++] : 0, h = o >> 2, a = (o & 3) << 4 | c >> 4, u = (c & 15) << 2 | i >> 6, d = i & 63;
|
|
259
|
+
s ? l ? t += this.BASE64_CHARS.charAt(h) + this.BASE64_CHARS.charAt(a) + this.BASE64_CHARS.charAt(u) + this.BASE64_CHARS.charAt(d) : t += this.BASE64_CHARS.charAt(h) + this.BASE64_CHARS.charAt(a) + this.BASE64_CHARS.charAt(u) + "=" : t += this.BASE64_CHARS.charAt(h) + this.BASE64_CHARS.charAt(a) + "==";
|
|
260
260
|
}
|
|
261
261
|
return t;
|
|
262
262
|
}
|
|
@@ -265,22 +265,22 @@ class U {
|
|
|
265
265
|
*/
|
|
266
266
|
static _base64ToBytes(n) {
|
|
267
267
|
const t = n.length;
|
|
268
|
-
let
|
|
269
|
-
t >= 2 && (n[t - 1] === "=" &&
|
|
270
|
-
const
|
|
271
|
-
for (let
|
|
272
|
-
|
|
273
|
-
let
|
|
268
|
+
let r = 0;
|
|
269
|
+
t >= 2 && (n[t - 1] === "=" && r++, n[t - 2] === "=" && r++);
|
|
270
|
+
const o = Math.floor(t * 3 / 4) - r, s = new Array(o), c = new Array(256).fill(-1);
|
|
271
|
+
for (let h = 0; h < this.BASE64_CHARS.length; h++)
|
|
272
|
+
c[this.BASE64_CHARS.charCodeAt(h)] = h;
|
|
273
|
+
let l = 0, i = 0;
|
|
274
274
|
for (; i < t; ) {
|
|
275
|
-
const
|
|
276
|
-
if (
|
|
275
|
+
const h = c[n.charCodeAt(i++)], a = c[n.charCodeAt(i++)], u = i < t ? c[n.charCodeAt(i++)] : -1, d = i < t ? c[n.charCodeAt(i++)] : -1;
|
|
276
|
+
if (h === -1 || a === -1)
|
|
277
277
|
throw new Error("无效的 Base64 字符");
|
|
278
|
-
const p =
|
|
279
|
-
if (s[
|
|
280
|
-
const f = (
|
|
281
|
-
if (s[
|
|
282
|
-
const g = (
|
|
283
|
-
s[
|
|
278
|
+
const p = h << 2 | a >> 4;
|
|
279
|
+
if (s[l++] = p, u !== -1) {
|
|
280
|
+
const f = (a & 15) << 4 | u >> 2;
|
|
281
|
+
if (s[l++] = f, d !== -1) {
|
|
282
|
+
const g = (u & 3) << 6 | d;
|
|
283
|
+
s[l++] = g;
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
}
|
|
@@ -431,7 +431,7 @@ const S = {
|
|
|
431
431
|
isMobile() {
|
|
432
432
|
return /Mobi|Android|iPhone/i.test(navigator.userAgent);
|
|
433
433
|
}
|
|
434
|
-
},
|
|
434
|
+
}, L = {
|
|
435
435
|
/**
|
|
436
436
|
* 通过传入的name获取cookie的值
|
|
437
437
|
* @param name cookie的name
|
|
@@ -450,8 +450,8 @@ const S = {
|
|
|
450
450
|
* @returns void
|
|
451
451
|
*/
|
|
452
452
|
setCookie(e, n, t = 7) {
|
|
453
|
-
const
|
|
454
|
-
|
|
453
|
+
const r = /* @__PURE__ */ new Date();
|
|
454
|
+
r.setTime(r.getTime() + t * 24 * 60 * 60 * 1e3), document.cookie = `${e}=${encodeURIComponent(n)};expires=${r.toUTCString()};path=/`;
|
|
455
455
|
},
|
|
456
456
|
/**
|
|
457
457
|
* 删除cookie
|
|
@@ -461,7 +461,7 @@ const S = {
|
|
|
461
461
|
deleteCookie(e) {
|
|
462
462
|
this.setCookie(e, "", -1);
|
|
463
463
|
}
|
|
464
|
-
},
|
|
464
|
+
}, O = {
|
|
465
465
|
/**
|
|
466
466
|
* 获取当前时间字符串
|
|
467
467
|
* @param locales 区域设置。如:'zh-CN','en-US',"chinese"。默认'zh-CN'。
|
|
@@ -478,8 +478,8 @@ const S = {
|
|
|
478
478
|
* @returns 相差天数
|
|
479
479
|
*/
|
|
480
480
|
diffDays(e, n) {
|
|
481
|
-
const t = new Date(e).getTime(),
|
|
482
|
-
return t >
|
|
481
|
+
const t = new Date(e).getTime(), r = new Date(n).getTime();
|
|
482
|
+
return t > r ? Math.abs(Math.floor((t - r) / (24 * 3600 * 1e3))) : Math.abs(Math.floor((r - t) / (24 * 3600 * 1e3)));
|
|
483
483
|
},
|
|
484
484
|
/**
|
|
485
485
|
* 生成唯一ID(时间戳+随机数)
|
|
@@ -496,9 +496,9 @@ const S = {
|
|
|
496
496
|
* @returns 当年的第几天
|
|
497
497
|
*/
|
|
498
498
|
getWhichDays(e, n, t) {
|
|
499
|
-
let
|
|
500
|
-
for (let
|
|
501
|
-
switch (
|
|
499
|
+
let r = t;
|
|
500
|
+
for (let o = 1; o < n; o++)
|
|
501
|
+
switch (o) {
|
|
502
502
|
case 1:
|
|
503
503
|
case 3:
|
|
504
504
|
case 5:
|
|
@@ -506,16 +506,16 @@ const S = {
|
|
|
506
506
|
case 8:
|
|
507
507
|
case 10:
|
|
508
508
|
case 12:
|
|
509
|
-
|
|
509
|
+
r += 31;
|
|
510
510
|
break;
|
|
511
511
|
case 2:
|
|
512
|
-
S.isLeapYear(e) ?
|
|
512
|
+
S.isLeapYear(e) ? r += 29 : r += 28;
|
|
513
513
|
break;
|
|
514
514
|
default:
|
|
515
|
-
|
|
515
|
+
r += 30;
|
|
516
516
|
break;
|
|
517
517
|
}
|
|
518
|
-
return
|
|
518
|
+
return r;
|
|
519
519
|
},
|
|
520
520
|
/**
|
|
521
521
|
* 获取时间字符串(自动短化)
|
|
@@ -524,29 +524,29 @@ const S = {
|
|
|
524
524
|
* @returns 时间字符串
|
|
525
525
|
*/
|
|
526
526
|
getTimeStringAutoShort2(e, n) {
|
|
527
|
-
const t = /* @__PURE__ */ new Date(),
|
|
528
|
-
let
|
|
529
|
-
const
|
|
530
|
-
if (
|
|
527
|
+
const t = /* @__PURE__ */ new Date(), r = new Date(e), o = t.getFullYear(), s = t.getMonth() + 1, c = t.getDate(), l = r.getFullYear(), i = r.getMonth() + 1, h = r.getDate();
|
|
528
|
+
let a = "";
|
|
529
|
+
const u = n ? " " + this.formatDate(r, "hh:mm") : "";
|
|
530
|
+
if (o === l) {
|
|
531
531
|
const f = t.getTime() - e;
|
|
532
|
-
if (s === i &&
|
|
533
|
-
f < 60 * 1e3 ?
|
|
532
|
+
if (s === i && c === h)
|
|
533
|
+
f < 60 * 1e3 ? a = "刚刚" : a = this.formatDate(r, "hh:mm");
|
|
534
534
|
else {
|
|
535
535
|
const g = /* @__PURE__ */ new Date();
|
|
536
536
|
g.setDate(g.getDate() - 1);
|
|
537
537
|
const m = /* @__PURE__ */ new Date();
|
|
538
|
-
if (m.setDate(m.getDate() - 2), i === g.getMonth() + 1 &&
|
|
539
|
-
|
|
540
|
-
else if (i === m.getMonth() + 1 &&
|
|
541
|
-
|
|
538
|
+
if (m.setDate(m.getDate() - 2), i === g.getMonth() + 1 && h === g.getDate())
|
|
539
|
+
a = "昨天" + u;
|
|
540
|
+
else if (i === m.getMonth() + 1 && h === m.getDate())
|
|
541
|
+
a = "前天" + u;
|
|
542
542
|
else if (f / 36e5 <= 7 * 24) {
|
|
543
543
|
const y = new Array(7);
|
|
544
|
-
y[0] = "星期日", y[1] = "星期一", y[2] = "星期二", y[3] = "星期三", y[4] = "星期四", y[5] = "星期五", y[6] = "星期六",
|
|
545
|
-
} else
|
|
544
|
+
y[0] = "星期日", y[1] = "星期一", y[2] = "星期二", y[3] = "星期三", y[4] = "星期四", y[5] = "星期五", y[6] = "星期六", a = y[r.getDay()] + u;
|
|
545
|
+
} else a = this.formatDate(r, "yyyy/M/d") + u;
|
|
546
546
|
}
|
|
547
547
|
} else
|
|
548
|
-
|
|
549
|
-
return
|
|
548
|
+
a = this.formatDate(r, "yyyy/M/d") + u;
|
|
549
|
+
return a;
|
|
550
550
|
},
|
|
551
551
|
/**
|
|
552
552
|
* 格式化日期
|
|
@@ -572,11 +572,11 @@ const S = {
|
|
|
572
572
|
//毫秒
|
|
573
573
|
};
|
|
574
574
|
/(y+)/.test(n) && (n = n.replace(RegExp.$1, (e.getFullYear() + "").substr(4 - RegExp.$1.length)));
|
|
575
|
-
for (const
|
|
576
|
-
new RegExp("(" +
|
|
575
|
+
for (const r in t)
|
|
576
|
+
new RegExp("(" + r + ")").test(n) && (n = n.replace(RegExp.$1, RegExp.$1.length === 1 ? t[r] : ("00" + t[r]).substr(("" + t[r]).length)));
|
|
577
577
|
return n;
|
|
578
578
|
}
|
|
579
|
-
},
|
|
579
|
+
}, T = {
|
|
580
580
|
/**
|
|
581
581
|
* 获取元素相对于文档顶部的偏移量(距离)
|
|
582
582
|
* 处理了SVG元素的特殊情况。
|
|
@@ -587,8 +587,8 @@ const S = {
|
|
|
587
587
|
if (!e)
|
|
588
588
|
throw new Error("Element is not provided");
|
|
589
589
|
if (e instanceof SVGElement) {
|
|
590
|
-
const t = e.getBoundingClientRect(),
|
|
591
|
-
return t.top +
|
|
590
|
+
const t = e.getBoundingClientRect(), r = window.pageYOffset || document.documentElement.scrollTop;
|
|
591
|
+
return t.top + r;
|
|
592
592
|
}
|
|
593
593
|
let n = 0;
|
|
594
594
|
for (; e; )
|
|
@@ -654,8 +654,8 @@ const S = {
|
|
|
654
654
|
* @param filename 文件名
|
|
655
655
|
*/
|
|
656
656
|
saveAsBlob(e, n) {
|
|
657
|
-
const t = document.createElement("a"),
|
|
658
|
-
t.href =
|
|
657
|
+
const t = document.createElement("a"), r = window.URL.createObjectURL(e);
|
|
658
|
+
t.href = r, t.download = n, document.body.appendChild(t), t.click(), URL.revokeObjectURL(r), document.body.removeChild(t);
|
|
659
659
|
},
|
|
660
660
|
/**
|
|
661
661
|
* 直接下载url
|
|
@@ -674,14 +674,14 @@ const S = {
|
|
|
674
674
|
*/
|
|
675
675
|
animate(e, n) {
|
|
676
676
|
let t = -1;
|
|
677
|
-
const
|
|
678
|
-
let
|
|
679
|
-
|
|
677
|
+
const r = e.series[0].data.length;
|
|
678
|
+
let o;
|
|
679
|
+
o = setInterval(() => {
|
|
680
680
|
n.dispatchAction({
|
|
681
681
|
type: "downplay",
|
|
682
682
|
seriesIndex: 0,
|
|
683
683
|
dataIndex: t
|
|
684
|
-
}), t = (t + 1) %
|
|
684
|
+
}), t = (t + 1) % r, n.dispatchAction({
|
|
685
685
|
type: "highlight",
|
|
686
686
|
seriesIndex: 0,
|
|
687
687
|
dataIndex: t
|
|
@@ -689,9 +689,9 @@ const S = {
|
|
|
689
689
|
type: "showTip",
|
|
690
690
|
seriesIndex: 0,
|
|
691
691
|
dataIndex: t
|
|
692
|
-
}), t >
|
|
692
|
+
}), t > r && (t = 0);
|
|
693
693
|
}, 2e3), n.on("mouseover", () => {
|
|
694
|
-
clearInterval(
|
|
694
|
+
clearInterval(o), n.dispatchAction({
|
|
695
695
|
type: "downplay",
|
|
696
696
|
seriesIndex: 0,
|
|
697
697
|
dataIndex: t
|
|
@@ -705,9 +705,9 @@ const S = {
|
|
|
705
705
|
* @returns
|
|
706
706
|
*/
|
|
707
707
|
sortFromA2Z(e) {
|
|
708
|
-
return e?.length ? e.sort((t,
|
|
709
|
-
const
|
|
710
|
-
return
|
|
708
|
+
return e?.length ? e.sort((t, r) => {
|
|
709
|
+
const o = t.toUpperCase(), s = r.toUpperCase();
|
|
710
|
+
return o < s ? -1 : o > s ? 1 : 0;
|
|
711
711
|
}) : void 0;
|
|
712
712
|
}
|
|
713
713
|
}, j = {
|
|
@@ -730,11 +730,11 @@ const S = {
|
|
|
730
730
|
* @param targetLng 目标经度
|
|
731
731
|
* @returns 距离值 单位:km
|
|
732
732
|
*/
|
|
733
|
-
getDistance(e, n, t,
|
|
734
|
-
const
|
|
733
|
+
getDistance(e, n, t, r) {
|
|
734
|
+
const o = this.degrees2Radians(e), s = this.degrees2Radians(t), c = o - s, l = this.degrees2Radians(n) - this.degrees2Radians(r);
|
|
735
735
|
let i = 2 * Math.asin(
|
|
736
736
|
Math.sqrt(
|
|
737
|
-
Math.pow(Math.sin(
|
|
737
|
+
Math.pow(Math.sin(c / 2), 2) + Math.cos(o) * Math.cos(s) * Math.pow(Math.sin(l / 2), 2)
|
|
738
738
|
)
|
|
739
739
|
);
|
|
740
740
|
return i = i * 6378.137, i = Math.round(i * 1e4) / 1e4, i = +i.toFixed(2), console.log("经纬度计算的距离为:" + i), i;
|
|
@@ -755,10 +755,10 @@ const S = {
|
|
|
755
755
|
* @returns 距离值
|
|
756
756
|
*/
|
|
757
757
|
calculateDistanceByHaversine(e, n, t = "km") {
|
|
758
|
-
const
|
|
759
|
-
if (
|
|
758
|
+
const r = this, o = e.longitude ?? e.lng, s = e.latitude ?? e.lat, c = n.longitude ?? n.lng, l = n.latitude ?? n.lat;
|
|
759
|
+
if (o === void 0 || s === void 0 || c === void 0 || l === void 0)
|
|
760
760
|
throw new Error("无效的坐标格式,缺少经纬度信息");
|
|
761
|
-
const i = 6371,
|
|
761
|
+
const i = 6371, h = r.degrees2Radians(s), a = r.degrees2Radians(l), u = r.degrees2Radians(l - s), d = r.degrees2Radians(c - o), p = Math.sin(u / 2) * Math.sin(u / 2) + Math.cos(h) * Math.cos(a) * Math.sin(d / 2) * Math.sin(d / 2), f = 2 * Math.atan2(Math.sqrt(p), Math.sqrt(1 - p)), g = i * f;
|
|
762
762
|
switch (t) {
|
|
763
763
|
case "m":
|
|
764
764
|
return g * 1e3;
|
|
@@ -783,17 +783,17 @@ const S = {
|
|
|
783
783
|
calculateDistancesByHaversine(e, n = "km", t = !1) {
|
|
784
784
|
if (e.length < 2)
|
|
785
785
|
return { segments: [], total: 0 };
|
|
786
|
-
const
|
|
787
|
-
let
|
|
786
|
+
const r = [];
|
|
787
|
+
let o = 0;
|
|
788
788
|
for (let s = 0; s < e.length - 1; s++) {
|
|
789
|
-
const
|
|
790
|
-
|
|
789
|
+
const c = this.calculateDistanceByHaversine(e[s], e[s + 1], n);
|
|
790
|
+
r.push(c), o += c;
|
|
791
791
|
}
|
|
792
792
|
if (t && e.length > 2) {
|
|
793
793
|
const s = this.calculateDistanceByHaversine(e[e.length - 1], e[0], n);
|
|
794
|
-
|
|
794
|
+
r.push(s), o += s;
|
|
795
795
|
}
|
|
796
|
-
return { segments:
|
|
796
|
+
return { segments: r, total: o };
|
|
797
797
|
}
|
|
798
798
|
};
|
|
799
799
|
class $ {
|
|
@@ -826,38 +826,81 @@ class $ {
|
|
|
826
826
|
throw new Error("输入不是有效的数字");
|
|
827
827
|
if (t > 9999999999999e-2 || t < -9999999999999e-2)
|
|
828
828
|
throw new Error("输入数字超出范围");
|
|
829
|
-
const
|
|
830
|
-
let
|
|
831
|
-
if (
|
|
832
|
-
|
|
829
|
+
const r = t < 0, o = Math.abs(t), s = Math.floor(o), c = Math.round((o - s) * 100), l = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"], i = ["", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"], h = ["角", "分"];
|
|
830
|
+
let a = "", u = s;
|
|
831
|
+
if (u === 0)
|
|
832
|
+
a = l[0];
|
|
833
833
|
else {
|
|
834
834
|
let f = 0;
|
|
835
|
-
for (;
|
|
836
|
-
const g =
|
|
837
|
-
g !== 0 ?
|
|
835
|
+
for (; u > 0; ) {
|
|
836
|
+
const g = u % 10;
|
|
837
|
+
g !== 0 ? a = l[g] + i[f] + a : a.charAt(0) !== l[0] && (a = l[g] + a), u = Math.floor(u / 10), f++;
|
|
838
838
|
}
|
|
839
|
-
|
|
839
|
+
a = a.replace(/零+/g, "零"), a = a.replace(/零+$/, "");
|
|
840
840
|
}
|
|
841
|
-
let
|
|
842
|
-
if (
|
|
843
|
-
const f = Math.floor(
|
|
844
|
-
f > 0 && (
|
|
841
|
+
let d = "";
|
|
842
|
+
if (c > 0) {
|
|
843
|
+
const f = Math.floor(c / 10), g = c % 10;
|
|
844
|
+
f > 0 && (d += l[f] + h[0]), g > 0 && (d += l[g] + h[1]);
|
|
845
845
|
} else
|
|
846
|
-
|
|
847
|
-
let p = (
|
|
846
|
+
d = "整";
|
|
847
|
+
let p = (r ? "负" : "") + a + "圆" + d;
|
|
848
848
|
return p === "零圆整" && (p = "零圆"), p;
|
|
849
849
|
} catch (t) {
|
|
850
850
|
return console.error("转换失败:", t), "格式错误";
|
|
851
851
|
}
|
|
852
852
|
}
|
|
853
853
|
}
|
|
854
|
-
const
|
|
854
|
+
const N = {
|
|
855
|
+
/**
|
|
856
|
+
* 中文姓名脱敏
|
|
857
|
+
* @param name 姓名
|
|
858
|
+
* @param options 脱敏选项
|
|
859
|
+
* @returns 脱敏后的姓名
|
|
860
|
+
*/
|
|
861
|
+
desensitizeChineseName(e, n = {}) {
|
|
862
|
+
const { keepLength: t = 1, keepLast: r = !1 } = n;
|
|
863
|
+
if (!e || e.length === 0 || e.trim().length === 0)
|
|
864
|
+
throw new Error("姓名不能为空");
|
|
865
|
+
if (typeof e != "string")
|
|
866
|
+
throw new Error("姓名必须是字符串");
|
|
867
|
+
if (e.length <= 1)
|
|
868
|
+
return e;
|
|
869
|
+
const o = [
|
|
870
|
+
"欧阳",
|
|
871
|
+
"司马",
|
|
872
|
+
"上官",
|
|
873
|
+
"东方",
|
|
874
|
+
"独孤",
|
|
875
|
+
"南宫",
|
|
876
|
+
"闻人",
|
|
877
|
+
"夏侯",
|
|
878
|
+
"诸葛",
|
|
879
|
+
"尉迟",
|
|
880
|
+
"公孙",
|
|
881
|
+
"长孙",
|
|
882
|
+
"宇文",
|
|
883
|
+
"司徒",
|
|
884
|
+
"慕容"
|
|
885
|
+
];
|
|
886
|
+
n.compoundSurname && n.compoundSurname.trim().length > 0 && !o.includes(n.compoundSurname) && o.push(n.compoundSurname);
|
|
887
|
+
let s = "";
|
|
888
|
+
o.some((l) => e.startsWith(l)) ? s = o.find((l) => e.startsWith(l)) || "" : s = e[0] || "";
|
|
889
|
+
const c = Math.max(t, s.length);
|
|
890
|
+
if (c >= e.length) return e;
|
|
891
|
+
if (r && e.length > 2) {
|
|
892
|
+
const l = e.slice(0, c), i = e.slice(-1), h = e.length - c - 1;
|
|
893
|
+
return `${l}${"*".repeat(h)}${i}`;
|
|
894
|
+
}
|
|
895
|
+
return `${e.slice(0, c)}${"*".repeat(e.length - c)}`;
|
|
896
|
+
}
|
|
897
|
+
}, M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
855
898
|
__proto__: null,
|
|
856
899
|
toLetter: M
|
|
857
900
|
}, Symbol.toStringTag, { value: "Module" })), E = (e) => e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), C = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
858
901
|
__proto__: null,
|
|
859
902
|
toMoney: E
|
|
860
|
-
}, Symbol.toStringTag, { value: "Module" })),
|
|
903
|
+
}, Symbol.toStringTag, { value: "Module" })), P = {
|
|
861
904
|
...x,
|
|
862
905
|
...C,
|
|
863
906
|
/**
|
|
@@ -868,7 +911,7 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
868
911
|
isNumber(e) {
|
|
869
912
|
return typeof e == "number" && !isNaN(e);
|
|
870
913
|
}
|
|
871
|
-
},
|
|
914
|
+
}, F = {
|
|
872
915
|
/**
|
|
873
916
|
* 判断对象是否为空
|
|
874
917
|
* @param obj 对象
|
|
@@ -895,11 +938,11 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
895
938
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
896
939
|
deepCopy(e, n) {
|
|
897
940
|
for (const t in e) {
|
|
898
|
-
const
|
|
899
|
-
|
|
941
|
+
const r = e[t];
|
|
942
|
+
r instanceof Object ? (n[t] = {}, this.deepCopy(r, n[t])) : r instanceof Array ? (n[t] = [], this.deepCopy(r, n[t])) : n[t] = e[t];
|
|
900
943
|
}
|
|
901
944
|
}
|
|
902
|
-
},
|
|
945
|
+
}, V = {
|
|
903
946
|
/**
|
|
904
947
|
* 脱敏
|
|
905
948
|
* @param phone 电话号码/手机号码
|
|
@@ -908,7 +951,7 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
908
951
|
desensitize(e) {
|
|
909
952
|
return e ? e.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2") || e.slice(0, 3) + "****" + e.slice(7) : "";
|
|
910
953
|
}
|
|
911
|
-
},
|
|
954
|
+
}, W = {
|
|
912
955
|
/**
|
|
913
956
|
* 生成随机颜色
|
|
914
957
|
* @returns 随机颜色值
|
|
@@ -932,7 +975,7 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
932
975
|
uniqueId() {
|
|
933
976
|
return Date.now().toString(36) + Math.random().toString(36).substr(2, 5);
|
|
934
977
|
}
|
|
935
|
-
},
|
|
978
|
+
}, Y = {
|
|
936
979
|
/**
|
|
937
980
|
* 验证手机号
|
|
938
981
|
*/
|
|
@@ -969,7 +1012,7 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
969
1012
|
* 验证0.01~0.99正则:最多两位小数。0.1、0.10、0.9、0.90
|
|
970
1013
|
*/
|
|
971
1014
|
decimal: /^0\.(0[1-9]|[1-9][0-9]*)$/
|
|
972
|
-
},
|
|
1015
|
+
}, z = {
|
|
973
1016
|
/**
|
|
974
1017
|
* 通过key值获取 localStorage 中存储的某个值
|
|
975
1018
|
* @param key 获取的key
|
|
@@ -1016,7 +1059,7 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
1016
1059
|
removeSession(e) {
|
|
1017
1060
|
sessionStorage.removeItem(e);
|
|
1018
1061
|
}
|
|
1019
|
-
},
|
|
1062
|
+
}, q = {
|
|
1020
1063
|
/**
|
|
1021
1064
|
* 判断某元素是否在字符串中-比includes()方法更兼容,includes为ES6新增方法,IE不支持。小程序也不支持
|
|
1022
1065
|
* @param str 字符串
|
|
@@ -1058,11 +1101,11 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
1058
1101
|
*/
|
|
1059
1102
|
indexsOfAppear(e, n) {
|
|
1060
1103
|
let t = -1;
|
|
1061
|
-
const
|
|
1104
|
+
const r = [];
|
|
1062
1105
|
do
|
|
1063
|
-
t = e.indexOf(n, t + 1), t !== -1 &&
|
|
1106
|
+
t = e.indexOf(n, t + 1), t !== -1 && r.push(t);
|
|
1064
1107
|
while (t !== -1);
|
|
1065
|
-
return
|
|
1108
|
+
return r;
|
|
1066
1109
|
},
|
|
1067
1110
|
/**
|
|
1068
1111
|
* 获取字符串中出现次数最多的字符和次数
|
|
@@ -1072,16 +1115,32 @@ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /*
|
|
|
1072
1115
|
getMaxTimesAndVal(e) {
|
|
1073
1116
|
const n = [0, ""], t = {};
|
|
1074
1117
|
for (let s = 0; s < e.length; s++) {
|
|
1075
|
-
const
|
|
1076
|
-
t[
|
|
1118
|
+
const c = e.charAt(s);
|
|
1119
|
+
t[c] ? t[c]++ : t[c] = 1;
|
|
1077
1120
|
}
|
|
1078
|
-
let
|
|
1121
|
+
let r = 1;
|
|
1079
1122
|
for (const s in t)
|
|
1080
|
-
|
|
1081
|
-
const
|
|
1123
|
+
r < t[s] && (r = t[s]);
|
|
1124
|
+
const o = [];
|
|
1082
1125
|
for (const s in t)
|
|
1083
|
-
|
|
1084
|
-
return n[0] =
|
|
1126
|
+
r == t[s] && o.push(s);
|
|
1127
|
+
return n[0] = r, n[1] = o.join(), n;
|
|
1128
|
+
},
|
|
1129
|
+
/**
|
|
1130
|
+
* 脱敏处理
|
|
1131
|
+
* @param str 字符串
|
|
1132
|
+
* @param start 开始位置
|
|
1133
|
+
* @param end 结束位置
|
|
1134
|
+
* @returns 脱敏后的字符串
|
|
1135
|
+
*/
|
|
1136
|
+
mask(e, n, t) {
|
|
1137
|
+
if (!e)
|
|
1138
|
+
throw new Error("字符串为空");
|
|
1139
|
+
if (typeof n != "number" || typeof t != "number")
|
|
1140
|
+
throw new Error("开始位置或结束位置为空");
|
|
1141
|
+
if (n < 0 || t > e.length || n > t)
|
|
1142
|
+
throw new Error("开始位置小于0或结束位置超出字符串长度或开始位置大于结束位置");
|
|
1143
|
+
return e.slice(0, n) + "*".repeat(t - n + 1) + e.slice(t);
|
|
1085
1144
|
}
|
|
1086
1145
|
}, B = (e) => {
|
|
1087
1146
|
const t = new RegExp("[?&]" + e + "=([^&#]*)", "i").exec(window.location.href);
|
|
@@ -1094,7 +1153,7 @@ const R = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
1094
1153
|
__proto__: null,
|
|
1095
1154
|
getQueryInfoByName: B,
|
|
1096
1155
|
getQueryParam: D
|
|
1097
|
-
}, Symbol.toStringTag, { value: "Module" })),
|
|
1156
|
+
}, Symbol.toStringTag, { value: "Module" })), Z = {
|
|
1098
1157
|
...R,
|
|
1099
1158
|
/**
|
|
1100
1159
|
* 获取当前域名
|
|
@@ -1110,7 +1169,7 @@ const R = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
1110
1169
|
getPath() {
|
|
1111
1170
|
return window.location.pathname;
|
|
1112
1171
|
}
|
|
1113
|
-
},
|
|
1172
|
+
}, J = {
|
|
1114
1173
|
/**
|
|
1115
1174
|
* 处理瀑布流数据,使其竖向瀑布流布局呈现横向瀑布流的展现形式。适用于 column-gap: 20rpx; column-count: 2; 布局的瀑布流
|
|
1116
1175
|
* @param list 瀑布流数据-数组
|
|
@@ -1120,13 +1179,13 @@ const R = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
1120
1179
|
toList(e, n = 2) {
|
|
1121
1180
|
console.log(e, n);
|
|
1122
1181
|
const t = {};
|
|
1123
|
-
for (let
|
|
1124
|
-
t[
|
|
1125
|
-
e.forEach((
|
|
1126
|
-
const
|
|
1127
|
-
for (const
|
|
1128
|
-
|
|
1129
|
-
return
|
|
1182
|
+
for (let o = 0; o < n; o++)
|
|
1183
|
+
t[o] = [];
|
|
1184
|
+
e.forEach((o, s) => t[s % n].push(o));
|
|
1185
|
+
const r = [];
|
|
1186
|
+
for (const o in t)
|
|
1187
|
+
r.push(...t[o]);
|
|
1188
|
+
return r;
|
|
1130
1189
|
},
|
|
1131
1190
|
/**
|
|
1132
1191
|
* js瀑布流布局
|
|
@@ -1135,37 +1194,38 @@ const R = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
1135
1194
|
* @param step 间距
|
|
1136
1195
|
*/
|
|
1137
1196
|
jsLayout(e, n, t) {
|
|
1138
|
-
const
|
|
1139
|
-
for (let i = 0,
|
|
1140
|
-
const
|
|
1197
|
+
const r = e.offsetWidth, o = n[0].offsetWidth, s = parseInt((r / o).toString()), c = (r - o * s) / (s - 1), l = [];
|
|
1198
|
+
for (let i = 0, h = n.length; i < h; i++) {
|
|
1199
|
+
const a = n[i];
|
|
1141
1200
|
if (i < s)
|
|
1142
|
-
|
|
1201
|
+
a.style.left = (o + c) * i + "px", l[i] = a.offsetHeight;
|
|
1143
1202
|
else {
|
|
1144
|
-
const { index:
|
|
1145
|
-
|
|
1203
|
+
const { index: u, value: d } = A.getMinValueAndIndex(l);
|
|
1204
|
+
a.style.left = (o + c) * u + "px", a.style.top = d + t + "px", l[u] = a.offsetHeight + t + d;
|
|
1146
1205
|
}
|
|
1147
1206
|
}
|
|
1148
1207
|
}
|
|
1149
1208
|
};
|
|
1150
1209
|
export {
|
|
1151
|
-
|
|
1210
|
+
_ as Base64Utils,
|
|
1152
1211
|
$ as MoneyFormatter,
|
|
1153
1212
|
A as arrayUtils,
|
|
1154
1213
|
S as booleanUtils,
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1214
|
+
L as cookieUtils,
|
|
1215
|
+
O as dateUtils,
|
|
1216
|
+
T as documentUtils,
|
|
1158
1217
|
I as downloadUtils,
|
|
1159
1218
|
k as echartsUtils,
|
|
1160
1219
|
H as letterUtils,
|
|
1161
1220
|
j as mapUtils,
|
|
1162
|
-
N as
|
|
1163
|
-
P as
|
|
1164
|
-
F as
|
|
1165
|
-
V as
|
|
1166
|
-
W as
|
|
1167
|
-
Y as
|
|
1168
|
-
z as
|
|
1169
|
-
q as
|
|
1170
|
-
Z as
|
|
1221
|
+
N as nameUtils,
|
|
1222
|
+
P as numberUtils,
|
|
1223
|
+
F as objectUtils,
|
|
1224
|
+
V as phoneUtils,
|
|
1225
|
+
W as randomUtils,
|
|
1226
|
+
Y as regexpUtils,
|
|
1227
|
+
z as storageUtils,
|
|
1228
|
+
q as stringUtils,
|
|
1229
|
+
Z as urlUtils,
|
|
1230
|
+
J as waterfallUtils
|
|
1171
1231
|
};
|
package/dist/utils.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(h,w){typeof exports=="object"&&typeof module<"u"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):(h=typeof globalThis<"u"?globalThis:h||self,w(h.yhkitUtils={}))})(this,function(h){"use strict";const A=Object.assign({unique(e){return e?Array.from(new Set(e)):[]},isExist(e,n){return!e||!n?!1:e.indexOf(n)!==-1},countOfAppear(e,n){let t=0;for(const o of e)o===n&&t++;return t},indexsOfAppear(e,n){let t=-1;const o=[];do t=e.indexOf(n,t+1),t!==-1&&o.push(t);while(t!==-1);return o},sort(e,n="asc"){return e?e.sort((t,o)=>n==="asc"?t>o?1:-1:t<o?1:-1):[]},shuffle(e){if(!e)return[];for(let n=e.length-1;n>0;n--){const t=Math.floor(Math.random()*(n+1));[e[n],e[t]]=[e[t],e[n]]}return e},getMaxValue(e){return e?Math.max(...e):0},getMinValue(e){return e?Math.min(...e):0},getMinValueAndIndex(e){if(e.length===0)return{value:0,index:0};const n={value:e[0],index:0};for(let t=1,o=e.length;t<o;t++){const r=e[t];n.value>r&&(n.value=r,n.index=t)}return n},getMaxValueAndIndex(e){return e.length===0?{value:0,index:0}:e.reduce((n,t,o)=>t<n.value?{value:t,index:o}:n,{value:e[0],index:0})}},{...Object.freeze(Object.defineProperty({__proto__:null,toEnumObj:(e,n="value")=>{if(!e||!e.length)return{};const t={};return e.forEach(o=>{const r=Object.assign({label:o.label,text:o.label},o);t[o[n]]=r}),t}},Symbol.toStringTag,{value:"Module"}))});class M{static BASE64_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static toBlob(n,t="",o=512){const s=(n.split(",")[1]||n).replace(/-/g,"+").replace(/_/g,"/"),c="=".repeat((4-s.length%4)%4),u=s+c;try{const i=atob(u),d=[];for(let a=0;a<i.length;a+=o){const l=i.slice(a,a+o),f=new Array(l.length);for(let g=0;g<l.length;g++)f[g]=l.charCodeAt(g);const p=new Uint8Array(f);d.push(p)}return new Blob(d,{type:t})}catch(i){return console.error("Failed to convert base64 to blob:",i),null}}static toFile(n,t="file.txt",o="text/plain"){const s=n.replace(/^data:.+;base64,/,"").replace(/-/g,"+").replace(/_/g,"/"),c="=".repeat((4-s.length%4)%4),u=s+c,i=atob(u),d=[];for(let l=0;l<i.length;l+=512){const f=i.slice(l,l+512),p=new Array(f.length);for(let g=0;g<f.length;g++)p[g]=f.charCodeAt(g);d.push(new Uint8Array(p))}const a=new Blob(d,{type:o});return new File([a],t,{type:o})}static encode(n){if(!n)return"";const t=this._stringToUtf8Bytes(n);return this._bytesToBase64(t)}static decode(n){if(!n)return"";n=n.replace(/\s/g,"");const t=this._base64ToBytes(n);return this._utf8BytesToString(t)}static _stringToUtf8Bytes(n){const t=[];for(let o=0;o<n.length;o++){let r=n.charCodeAt(o);if(r<128)t.push(r);else if(r<2048)t.push(192|r>>6),t.push(128|r&63);else if(r<55296||r>=57344)t.push(224|r>>12),t.push(128|r>>6&63),t.push(128|r&63);else{o++;const s=r,c=n.charCodeAt(o);if(isNaN(c))throw new Error("代理对不完整");r=65536+((s&1023)<<10)+(c&1023),t.push(240|r>>18),t.push(128|r>>12&63),t.push(128|r>>6&63),t.push(128|r&63)}}return t}static _utf8BytesToString(n){let t="",o=0;for(;o<n.length;){const r=n[o++];if(r<128)t+=String.fromCharCode(r);else if(r>=192&&r<224){const s=n[o++]&63;t+=String.fromCharCode((r&31)<<6|s)}else if(r>=224&&r<240){const s=n[o++]&63,c=n[o++]&63;t+=String.fromCharCode((r&15)<<12|s<<6|c)}else if(r>=240&&r<248){const s=n[o++]&63,c=n[o++]&63,u=n[o++]&63,i=(r&7)<<18|s<<12|c<<6|u,d=Math.floor((i-65536)/1024)+55296,a=(i-65536)%1024+56320;t+=String.fromCharCode(d,a)}else t+="�"}return t}static _bytesToBase64(n){let t="",o=0;for(;o<n.length;){const r=n[o++],s=o<n.length,c=s?n[o++]:0,u=o<n.length,i=u?n[o++]:0,d=r>>2,a=(r&3)<<4|c>>4,l=(c&15)<<2|i>>6,f=i&63;s?u?t+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(l)+this.BASE64_CHARS.charAt(f):t+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(l)+"=":t+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+"=="}return t}static _base64ToBytes(n){const t=n.length;let o=0;t>=2&&(n[t-1]==="="&&o++,n[t-2]==="="&&o++);const r=Math.floor(t*3/4)-o,s=new Array(r),c=new Array(256).fill(-1);for(let d=0;d<this.BASE64_CHARS.length;d++)c[this.BASE64_CHARS.charCodeAt(d)]=d;let u=0,i=0;for(;i<t;){const d=c[n.charCodeAt(i++)],a=c[n.charCodeAt(i++)],l=i<t?c[n.charCodeAt(i++)]:-1,f=i<t?c[n.charCodeAt(i++)]:-1;if(d===-1||a===-1)throw new Error("无效的 Base64 字符");const p=d<<2|a>>4;if(s[u++]=p,l!==-1){const g=(a&15)<<4|l>>2;if(s[u++]=g,f!==-1){const y=(l&3)<<6|f;s[u++]=y}}}return s}}const S={isEmptyString(e){return typeof e=="string"&&e.trim()===""},isNumber(e){return typeof e=="number"&&!isNaN(e)},isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)},isEmptyObject(e){return e?Object.keys(e).length===0&&e.constructor===Object:!0},isBoolean(e){return typeof e=="boolean"},isArray(e){return Array.isArray(e)},isFunction(e){return typeof e=="function"},isPromise(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"},isElement(e){return e instanceof Element},isPhone(e){return/^1[3-9]\d{9}$/.test(e)},isEmail(e){return/^[\w.-]+@[\w.-]+\.\w+$/.test(e)},isJSON(e){try{return JSON.parse(e),!0}catch{return!1}},isImageLoaded(e){return e.complete&&e.naturalWidth!==0},isInViewport(e){const n=e.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.bottom<=window.innerHeight&&n.right<=window.innerWidth},isLeapYear(e){return e%4===0&&e%100!==0||e%400===0},isMobile(){return/Mobi|Android|iPhone/i.test(navigator.userAgent)}},U={getCookie(e){if(!e)return;const n=document.cookie.match(new RegExp("(^| )"+e+"=([^;]+)"));return n?decodeURIComponent(n[2]):null},setCookie(e,n,t=7){const o=new Date;o.setTime(o.getTime()+t*24*60*60*1e3),document.cookie=`${e}=${encodeURIComponent(n)};expires=${o.toUTCString()};path=/`},deleteCookie(e){this.setCookie(e,"",-1)}},E={getTimeString(e,n=!1){return n?new Date().toLocaleString(e,{hour12:!0}):new Date().toLocaleString("chinese",{hour12:!1})},diffDays(e,n){const t=new Date(e).getTime(),o=new Date(n).getTime();return t>o?Math.abs(Math.floor((t-o)/(24*3600*1e3))):Math.abs(Math.floor((o-t)/(24*3600*1e3)))},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)},getWhichDays(e,n,t){let o=t;for(let r=1;r<n;r++)switch(r){case 1:case 3:case 5:case 7:case 8:case 10:case 12:o+=31;break;case 2:S.isLeapYear(e)?o+=29:o+=28;break;default:o+=30;break}return o},getTimeStringAutoShort2(e,n){const t=new Date,o=new Date(e),r=t.getFullYear(),s=t.getMonth()+1,c=t.getDate(),u=o.getFullYear(),i=o.getMonth()+1,d=o.getDate();let a="";const l=n?" "+this.formatDate(o,"hh:mm"):"";if(r===u){const g=t.getTime()-e;if(s===i&&c===d)g<60*1e3?a="刚刚":a=this.formatDate(o,"hh:mm");else{const y=new Date;y.setDate(y.getDate()-1);const b=new Date;if(b.setDate(b.getDate()-2),i===y.getMonth()+1&&d===y.getDate())a="昨天"+l;else if(i===b.getMonth()+1&&d===b.getDate())a="前天"+l;else if(g/36e5<=7*24){const m=new Array(7);m[0]="星期日",m[1]="星期一",m[2]="星期二",m[3]="星期三",m[4]="星期四",m[5]="星期五",m[6]="星期六",a=m[o.getDay()]+l}else a=this.formatDate(o,"yyyy/M/d")+l}}else a=this.formatDate(o,"yyyy/M/d")+l;return a},formatDate(e,n){const t={"M+":e.getMonth()+1,"d+":e.getDate(),"h+":e.getHours(),"m+":e.getMinutes(),"s+":e.getSeconds(),"q+":Math.floor((e.getMonth()+3)/3),S:e.getMilliseconds()};/(y+)/.test(n)&&(n=n.replace(RegExp.$1,(e.getFullYear()+"").substr(4-RegExp.$1.length)));for(const o in t)new RegExp("("+o+")").test(n)&&(n=n.replace(RegExp.$1,RegExp.$1.length===1?t[o]:("00"+t[o]).substr((""+t[o]).length)));return n}},C={getOffsetTop(e){if(!e)throw new Error("Element is not provided");if(e instanceof SVGElement){const t=e.getBoundingClientRect(),o=window.pageYOffset||document.documentElement.scrollTop;return t.top+o}let n=0;for(;e;)n+=e.offsetTop,e=e.offsetParent;return n},getScrollValue(){const e={scrollLeft:0,scrollTop:0};return e.scrollLeft=document.body.scrollLeft||document.documentElement.scrollLeft,e.scrollTop=document.body.scrollTop||document.documentElement.scrollTop,e},getPageValue(e){e=e||window.event;const n=e.pageX||e.clientX+this.getScrollValue().scrollLeft,t=e.pageY||e.clientY+this.getScrollValue().scrollTop;return{pageX:n,pageY:t}},addEventListener(e,n,t){e.addEventListener?e.addEventListener(n,t):e.attachEvent?e.attachEvent("on"+n,t):e["on"+n]=t},getViewportWidth(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},getViewportHeight(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}},B={saveAsBlob(e,n){const t=document.createElement("a"),o=window.URL.createObjectURL(e);t.href=o,t.download=n,document.body.appendChild(t),t.click(),URL.revokeObjectURL(o),document.body.removeChild(t)},saveAsUrl(e,n){const t=document.createElement("a");t.href=e,t.download=n,document.body.appendChild(t),t.click(),URL.revokeObjectURL(e),document.body.removeChild(t)}},D={animate(e,n){let t=-1;const o=e.series[0].data.length;let r;r=setInterval(()=>{n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:t}),t=(t+1)%o,n.dispatchAction({type:"highlight",seriesIndex:0,dataIndex:t}),n.dispatchAction({type:"showTip",seriesIndex:0,dataIndex:t}),t>o&&(t=0)},2e3),n.on("mouseover",()=>{clearInterval(r),n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:t})})}},R={sortFromA2Z(e){return e?.length?e.sort((t,o)=>{const r=t.toUpperCase(),s=o.toUpperCase();return r<s?-1:r>s?1:0}):void 0}},v={degrees2Radians(e){return e*Math.PI/180},getDistance(e,n,t,o){const r=this.degrees2Radians(e),s=this.degrees2Radians(t),c=r-s,u=this.degrees2Radians(n)-this.degrees2Radians(o);let i=2*Math.asin(Math.sqrt(Math.pow(Math.sin(c/2),2)+Math.cos(r)*Math.cos(s)*Math.pow(Math.sin(u/2),2)));return i=i*6378.137,i=Math.round(i*1e4)/1e4,i=+i.toFixed(2),console.log("经纬度计算的距离为:"+i),i},calculateDistanceByHaversine(e,n,t="km"){const o=this,r=e.longitude??e.lng,s=e.latitude??e.lat,c=n.longitude??n.lng,u=n.latitude??n.lat;if(r===void 0||s===void 0||c===void 0||u===void 0)throw new Error("无效的坐标格式,缺少经纬度信息");const i=6371,d=o.degrees2Radians(s),a=o.degrees2Radians(u),l=o.degrees2Radians(u-s),f=o.degrees2Radians(c-r),p=Math.sin(l/2)*Math.sin(l/2)+Math.cos(d)*Math.cos(a)*Math.sin(f/2)*Math.sin(f/2),g=2*Math.atan2(Math.sqrt(p),Math.sqrt(1-p)),y=i*g;switch(t){case"m":return y*1e3;case"mi":return y*.621371;case"nmi":return y*.539957;default:return y}},calculateDistancesByHaversine(e,n="km",t=!1){if(e.length<2)return{segments:[],total:0};const o=[];let r=0;for(let s=0;s<e.length-1;s++){const c=this.calculateDistanceByHaversine(e[s],e[s+1],n);o.push(c),r+=c}if(t&&e.length>2){const s=this.calculateDistanceByHaversine(e[e.length-1],e[0],n);o.push(s),r+=s}return{segments:o,total:r}}};class x{static toStandardFormat(n){try{const t=typeof n=="string"?parseFloat(n):n;if(isNaN(t))throw new Error("输入不是有效的数字");if(!isFinite(t))throw new Error("输入是无穷大");return t.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}catch(t){return console.error("格式化失败:",t),"格式错误"}}static toChineseFormat(n){try{const t=typeof n=="string"?parseFloat(n):n;if(isNaN(t))throw new Error("输入不是有效的数字");if(t>9999999999999e-2||t<-9999999999999e-2)throw new Error("输入数字超出范围");const o=t<0,r=Math.abs(t),s=Math.floor(r),c=Math.round((r-s)*100),u=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],i=["","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"],d=["角","分"];let a="",l=s;if(l===0)a=u[0];else{let g=0;for(;l>0;){const y=l%10;y!==0?a=u[y]+i[g]+a:a.charAt(0)!==u[0]&&(a=u[y]+a),l=Math.floor(l/10),g++}a=a.replace(/零+/g,"零"),a=a.replace(/零+$/,"")}let f="";if(c>0){const g=Math.floor(c/10),y=c%10;g>0&&(f+=u[g]+d[0]),y>0&&(f+=u[y]+d[1])}else f="整";let p=(o?"负":"")+a+"圆"+f;return p==="零圆整"&&(p="零圆"),p}catch(t){return console.error("转换失败:",t),"格式错误"}}}const T={...Object.freeze(Object.defineProperty({__proto__:null,toLetter:e=>e>25||e<0?"":"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e]},Symbol.toStringTag,{value:"Module"})),...Object.freeze(Object.defineProperty({__proto__:null,toMoney:e=>e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},Symbol.toStringTag,{value:"Module"})),isNumber(e){return typeof e=="number"&&!isNaN(e)}},_={isEmptyObject(e){return e?Object.keys(e).length===0&&e.constructor===Object:!0},copy(e,n){for(const t in e)n[t]=e[t]},deepCopy(e,n){for(const t in e){const o=e[t];o instanceof Object?(n[t]={},this.deepCopy(o,n[t])):o instanceof Array?(n[t]=[],this.deepCopy(o,n[t])):n[t]=e[t]}}},O={desensitize(e){return e?e.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2")||e.slice(0,3)+"****"+e.slice(7):""}},L={color:function(){return`#${Math.random().toString(16).slice(2,8)}`},int(e,n){return Math.floor(Math.random()*(n-e+1))+e},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)}},j={mobile:/^1[3-9]\d{9}$/,email:/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,chinese:/^[\u4e00-\u9fa5]+$/,english:/^[a-zA-Z]+$/,chineseStart:/^[\u4e00-\u9fa5]+\w*$/,integer:/^\d+$/,integerAndzero:/^(0|[1-9]+[0-9]*)$/,strongPassword:/^(?!.*[\s\p{C}])(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[\d\W])|(?=.*\d)(?=.*[^\w\s])).{8,}$/u,decimal:/^0\.(0[1-9]|[1-9][0-9]*)$/},I={getLocal(e){return localStorage.getItem(e)},setLocal(e,n){localStorage.setItem(e,n)},removeLocal(e){localStorage.removeItem(e)},getSession(e){return sessionStorage.getItem(e)},setSession(e,n){sessionStorage.setItem(e,n)},removeSession(e){sessionStorage.removeItem(e)}},k={isExist(e,n){if(!e||!n)return!1;const t=e.split(",");return console.log("判断某元素是否在字符串中",t.indexOf(n)===-1),t.indexOf(n)!==-1},includes(e,n){return!e||!n?!1:e.includes(n)},isJSON(e){try{return JSON.parse(e),!0}catch{return!1}},indexsOfAppear(e,n){let t=-1;const o=[];do t=e.indexOf(n,t+1),t!==-1&&o.push(t);while(t!==-1);return o},getMaxTimesAndVal(e){const n=[0,""],t={};for(let s=0;s<e.length;s++){const c=e.charAt(s);t[c]?t[c]++:t[c]=1}let o=1;for(const s in t)o<t[s]&&(o=t[s]);const r=[];for(const s in t)o==t[s]&&r.push(s);return n[0]=o,n[1]=r.join(),n}},H=e=>{const t=new RegExp("[?&]"+e+"=([^&#]*)","i").exec(window.location.href);return t?decodeURIComponent(t[1]):null};function $(e){return new URLSearchParams(window.location.search).get(e)}const P={...Object.freeze(Object.defineProperty({__proto__:null,getQueryInfoByName:H,getQueryParam:$},Symbol.toStringTag,{value:"Module"})),getHost(){return window.location.host},getPath(){return window.location.pathname}},F={toList(e,n=2){console.log(e,n);const t={};for(let r=0;r<n;r++)t[r]=[];e.forEach((r,s)=>t[s%n].push(r));const o=[];for(const r in t)o.push(...t[r]);return o},jsLayout(e,n,t){const o=e.offsetWidth,r=n[0].offsetWidth,s=parseInt((o/r).toString()),c=(o-r*s)/(s-1),u=[];for(let i=0,d=n.length;i<d;i++){const a=n[i];if(i<s)a.style.left=(r+c)*i+"px",u[i]=a.offsetHeight;else{const{index:l,value:f}=A.getMinValueAndIndex(u);a.style.left=(r+c)*l+"px",a.style.top=f+t+"px",u[l]=a.offsetHeight+t+f}}}};h.Base64Utils=M,h.MoneyFormatter=x,h.arrayUtils=A,h.booleanUtils=S,h.cookieUtils=U,h.dateUtils=E,h.documentUtils=C,h.downloadUtils=B,h.echartsUtils=D,h.letterUtils=R,h.mapUtils=v,h.numberUtils=T,h.objectUtils=_,h.phoneUtils=O,h.randomUtils=L,h.regexpUtils=j,h.storageUtils=I,h.stringUtils=k,h.urlUtils=P,h.waterfallUtils=F,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(d,w){typeof exports=="object"&&typeof module<"u"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):(d=typeof globalThis<"u"?globalThis:d||self,w(d.yhkitUtils={}))})(this,function(d){"use strict";const A=Object.assign({unique(e){return e?Array.from(new Set(e)):[]},isExist(e,n){return!e||!n?!1:e.indexOf(n)!==-1},countOfAppear(e,n){let t=0;for(const r of e)r===n&&t++;return t},indexsOfAppear(e,n){let t=-1;const r=[];do t=e.indexOf(n,t+1),t!==-1&&r.push(t);while(t!==-1);return r},sort(e,n="asc"){return e?e.sort((t,r)=>n==="asc"?t>r?1:-1:t<r?1:-1):[]},shuffle(e){if(!e)return[];for(let n=e.length-1;n>0;n--){const t=Math.floor(Math.random()*(n+1));[e[n],e[t]]=[e[t],e[n]]}return e},getMaxValue(e){return e?Math.max(...e):0},getMinValue(e){return e?Math.min(...e):0},getMinValueAndIndex(e){if(e.length===0)return{value:0,index:0};const n={value:e[0],index:0};for(let t=1,r=e.length;t<r;t++){const o=e[t];n.value>o&&(n.value=o,n.index=t)}return n},getMaxValueAndIndex(e){return e.length===0?{value:0,index:0}:e.reduce((n,t,r)=>t<n.value?{value:t,index:r}:n,{value:e[0],index:0})}},{...Object.freeze(Object.defineProperty({__proto__:null,toEnumObj:(e,n="value")=>{if(!e||!e.length)return{};const t={};return e.forEach(r=>{const o=Object.assign({label:r.label,text:r.label},r);t[r[n]]=o}),t}},Symbol.toStringTag,{value:"Module"}))});class M{static BASE64_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static toBlob(n,t="",r=512){const s=(n.split(",")[1]||n).replace(/-/g,"+").replace(/_/g,"/"),c="=".repeat((4-s.length%4)%4),l=s+c;try{const i=atob(l),h=[];for(let a=0;a<i.length;a+=r){const u=i.slice(a,a+r),f=new Array(u.length);for(let g=0;g<u.length;g++)f[g]=u.charCodeAt(g);const y=new Uint8Array(f);h.push(y)}return new Blob(h,{type:t})}catch(i){return console.error("Failed to convert base64 to blob:",i),null}}static toFile(n,t="file.txt",r="text/plain"){const s=n.replace(/^data:.+;base64,/,"").replace(/-/g,"+").replace(/_/g,"/"),c="=".repeat((4-s.length%4)%4),l=s+c,i=atob(l),h=[];for(let u=0;u<i.length;u+=512){const f=i.slice(u,u+512),y=new Array(f.length);for(let g=0;g<f.length;g++)y[g]=f.charCodeAt(g);h.push(new Uint8Array(y))}const a=new Blob(h,{type:r});return new File([a],t,{type:r})}static encode(n){if(!n)return"";const t=this._stringToUtf8Bytes(n);return this._bytesToBase64(t)}static decode(n){if(!n)return"";n=n.replace(/\s/g,"");const t=this._base64ToBytes(n);return this._utf8BytesToString(t)}static _stringToUtf8Bytes(n){const t=[];for(let r=0;r<n.length;r++){let o=n.charCodeAt(r);if(o<128)t.push(o);else if(o<2048)t.push(192|o>>6),t.push(128|o&63);else if(o<55296||o>=57344)t.push(224|o>>12),t.push(128|o>>6&63),t.push(128|o&63);else{r++;const s=o,c=n.charCodeAt(r);if(isNaN(c))throw new Error("代理对不完整");o=65536+((s&1023)<<10)+(c&1023),t.push(240|o>>18),t.push(128|o>>12&63),t.push(128|o>>6&63),t.push(128|o&63)}}return t}static _utf8BytesToString(n){let t="",r=0;for(;r<n.length;){const o=n[r++];if(o<128)t+=String.fromCharCode(o);else if(o>=192&&o<224){const s=n[r++]&63;t+=String.fromCharCode((o&31)<<6|s)}else if(o>=224&&o<240){const s=n[r++]&63,c=n[r++]&63;t+=String.fromCharCode((o&15)<<12|s<<6|c)}else if(o>=240&&o<248){const s=n[r++]&63,c=n[r++]&63,l=n[r++]&63,i=(o&7)<<18|s<<12|c<<6|l,h=Math.floor((i-65536)/1024)+55296,a=(i-65536)%1024+56320;t+=String.fromCharCode(h,a)}else t+="�"}return t}static _bytesToBase64(n){let t="",r=0;for(;r<n.length;){const o=n[r++],s=r<n.length,c=s?n[r++]:0,l=r<n.length,i=l?n[r++]:0,h=o>>2,a=(o&3)<<4|c>>4,u=(c&15)<<2|i>>6,f=i&63;s?l?t+=this.BASE64_CHARS.charAt(h)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(u)+this.BASE64_CHARS.charAt(f):t+=this.BASE64_CHARS.charAt(h)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(u)+"=":t+=this.BASE64_CHARS.charAt(h)+this.BASE64_CHARS.charAt(a)+"=="}return t}static _base64ToBytes(n){const t=n.length;let r=0;t>=2&&(n[t-1]==="="&&r++,n[t-2]==="="&&r++);const o=Math.floor(t*3/4)-r,s=new Array(o),c=new Array(256).fill(-1);for(let h=0;h<this.BASE64_CHARS.length;h++)c[this.BASE64_CHARS.charCodeAt(h)]=h;let l=0,i=0;for(;i<t;){const h=c[n.charCodeAt(i++)],a=c[n.charCodeAt(i++)],u=i<t?c[n.charCodeAt(i++)]:-1,f=i<t?c[n.charCodeAt(i++)]:-1;if(h===-1||a===-1)throw new Error("无效的 Base64 字符");const y=h<<2|a>>4;if(s[l++]=y,u!==-1){const g=(a&15)<<4|u>>2;if(s[l++]=g,f!==-1){const p=(u&3)<<6|f;s[l++]=p}}}return s}}const S={isEmptyString(e){return typeof e=="string"&&e.trim()===""},isNumber(e){return typeof e=="number"&&!isNaN(e)},isObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)},isEmptyObject(e){return e?Object.keys(e).length===0&&e.constructor===Object:!0},isBoolean(e){return typeof e=="boolean"},isArray(e){return Array.isArray(e)},isFunction(e){return typeof e=="function"},isPromise(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"},isElement(e){return e instanceof Element},isPhone(e){return/^1[3-9]\d{9}$/.test(e)},isEmail(e){return/^[\w.-]+@[\w.-]+\.\w+$/.test(e)},isJSON(e){try{return JSON.parse(e),!0}catch{return!1}},isImageLoaded(e){return e.complete&&e.naturalWidth!==0},isInViewport(e){const n=e.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.bottom<=window.innerHeight&&n.right<=window.innerWidth},isLeapYear(e){return e%4===0&&e%100!==0||e%400===0},isMobile(){return/Mobi|Android|iPhone/i.test(navigator.userAgent)}},U={getCookie(e){if(!e)return;const n=document.cookie.match(new RegExp("(^| )"+e+"=([^;]+)"));return n?decodeURIComponent(n[2]):null},setCookie(e,n,t=7){const r=new Date;r.setTime(r.getTime()+t*24*60*60*1e3),document.cookie=`${e}=${encodeURIComponent(n)};expires=${r.toUTCString()};path=/`},deleteCookie(e){this.setCookie(e,"",-1)}},E={getTimeString(e,n=!1){return n?new Date().toLocaleString(e,{hour12:!0}):new Date().toLocaleString("chinese",{hour12:!1})},diffDays(e,n){const t=new Date(e).getTime(),r=new Date(n).getTime();return t>r?Math.abs(Math.floor((t-r)/(24*3600*1e3))):Math.abs(Math.floor((r-t)/(24*3600*1e3)))},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)},getWhichDays(e,n,t){let r=t;for(let o=1;o<n;o++)switch(o){case 1:case 3:case 5:case 7:case 8:case 10:case 12:r+=31;break;case 2:S.isLeapYear(e)?r+=29:r+=28;break;default:r+=30;break}return r},getTimeStringAutoShort2(e,n){const t=new Date,r=new Date(e),o=t.getFullYear(),s=t.getMonth()+1,c=t.getDate(),l=r.getFullYear(),i=r.getMonth()+1,h=r.getDate();let a="";const u=n?" "+this.formatDate(r,"hh:mm"):"";if(o===l){const g=t.getTime()-e;if(s===i&&c===h)g<60*1e3?a="刚刚":a=this.formatDate(r,"hh:mm");else{const p=new Date;p.setDate(p.getDate()-1);const b=new Date;if(b.setDate(b.getDate()-2),i===p.getMonth()+1&&h===p.getDate())a="昨天"+u;else if(i===b.getMonth()+1&&h===b.getDate())a="前天"+u;else if(g/36e5<=7*24){const m=new Array(7);m[0]="星期日",m[1]="星期一",m[2]="星期二",m[3]="星期三",m[4]="星期四",m[5]="星期五",m[6]="星期六",a=m[r.getDay()]+u}else a=this.formatDate(r,"yyyy/M/d")+u}}else a=this.formatDate(r,"yyyy/M/d")+u;return a},formatDate(e,n){const t={"M+":e.getMonth()+1,"d+":e.getDate(),"h+":e.getHours(),"m+":e.getMinutes(),"s+":e.getSeconds(),"q+":Math.floor((e.getMonth()+3)/3),S:e.getMilliseconds()};/(y+)/.test(n)&&(n=n.replace(RegExp.$1,(e.getFullYear()+"").substr(4-RegExp.$1.length)));for(const r in t)new RegExp("("+r+")").test(n)&&(n=n.replace(RegExp.$1,RegExp.$1.length===1?t[r]:("00"+t[r]).substr((""+t[r]).length)));return n}},C={getOffsetTop(e){if(!e)throw new Error("Element is not provided");if(e instanceof SVGElement){const t=e.getBoundingClientRect(),r=window.pageYOffset||document.documentElement.scrollTop;return t.top+r}let n=0;for(;e;)n+=e.offsetTop,e=e.offsetParent;return n},getScrollValue(){const e={scrollLeft:0,scrollTop:0};return e.scrollLeft=document.body.scrollLeft||document.documentElement.scrollLeft,e.scrollTop=document.body.scrollTop||document.documentElement.scrollTop,e},getPageValue(e){e=e||window.event;const n=e.pageX||e.clientX+this.getScrollValue().scrollLeft,t=e.pageY||e.clientY+this.getScrollValue().scrollTop;return{pageX:n,pageY:t}},addEventListener(e,n,t){e.addEventListener?e.addEventListener(n,t):e.attachEvent?e.attachEvent("on"+n,t):e["on"+n]=t},getViewportWidth(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},getViewportHeight(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}},B={saveAsBlob(e,n){const t=document.createElement("a"),r=window.URL.createObjectURL(e);t.href=r,t.download=n,document.body.appendChild(t),t.click(),URL.revokeObjectURL(r),document.body.removeChild(t)},saveAsUrl(e,n){const t=document.createElement("a");t.href=e,t.download=n,document.body.appendChild(t),t.click(),URL.revokeObjectURL(e),document.body.removeChild(t)}},D={animate(e,n){let t=-1;const r=e.series[0].data.length;let o;o=setInterval(()=>{n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:t}),t=(t+1)%r,n.dispatchAction({type:"highlight",seriesIndex:0,dataIndex:t}),n.dispatchAction({type:"showTip",seriesIndex:0,dataIndex:t}),t>r&&(t=0)},2e3),n.on("mouseover",()=>{clearInterval(o),n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:t})})}},R={sortFromA2Z(e){return e?.length?e.sort((t,r)=>{const o=t.toUpperCase(),s=r.toUpperCase();return o<s?-1:o>s?1:0}):void 0}},v={degrees2Radians(e){return e*Math.PI/180},getDistance(e,n,t,r){const o=this.degrees2Radians(e),s=this.degrees2Radians(t),c=o-s,l=this.degrees2Radians(n)-this.degrees2Radians(r);let i=2*Math.asin(Math.sqrt(Math.pow(Math.sin(c/2),2)+Math.cos(o)*Math.cos(s)*Math.pow(Math.sin(l/2),2)));return i=i*6378.137,i=Math.round(i*1e4)/1e4,i=+i.toFixed(2),console.log("经纬度计算的距离为:"+i),i},calculateDistanceByHaversine(e,n,t="km"){const r=this,o=e.longitude??e.lng,s=e.latitude??e.lat,c=n.longitude??n.lng,l=n.latitude??n.lat;if(o===void 0||s===void 0||c===void 0||l===void 0)throw new Error("无效的坐标格式,缺少经纬度信息");const i=6371,h=r.degrees2Radians(s),a=r.degrees2Radians(l),u=r.degrees2Radians(l-s),f=r.degrees2Radians(c-o),y=Math.sin(u/2)*Math.sin(u/2)+Math.cos(h)*Math.cos(a)*Math.sin(f/2)*Math.sin(f/2),g=2*Math.atan2(Math.sqrt(y),Math.sqrt(1-y)),p=i*g;switch(t){case"m":return p*1e3;case"mi":return p*.621371;case"nmi":return p*.539957;default:return p}},calculateDistancesByHaversine(e,n="km",t=!1){if(e.length<2)return{segments:[],total:0};const r=[];let o=0;for(let s=0;s<e.length-1;s++){const c=this.calculateDistanceByHaversine(e[s],e[s+1],n);r.push(c),o+=c}if(t&&e.length>2){const s=this.calculateDistanceByHaversine(e[e.length-1],e[0],n);r.push(s),o+=s}return{segments:r,total:o}}};class x{static toStandardFormat(n){try{const t=typeof n=="string"?parseFloat(n):n;if(isNaN(t))throw new Error("输入不是有效的数字");if(!isFinite(t))throw new Error("输入是无穷大");return t.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}catch(t){return console.error("格式化失败:",t),"格式错误"}}static toChineseFormat(n){try{const t=typeof n=="string"?parseFloat(n):n;if(isNaN(t))throw new Error("输入不是有效的数字");if(t>9999999999999e-2||t<-9999999999999e-2)throw new Error("输入数字超出范围");const r=t<0,o=Math.abs(t),s=Math.floor(o),c=Math.round((o-s)*100),l=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],i=["","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"],h=["角","分"];let a="",u=s;if(u===0)a=l[0];else{let g=0;for(;u>0;){const p=u%10;p!==0?a=l[p]+i[g]+a:a.charAt(0)!==l[0]&&(a=l[p]+a),u=Math.floor(u/10),g++}a=a.replace(/零+/g,"零"),a=a.replace(/零+$/,"")}let f="";if(c>0){const g=Math.floor(c/10),p=c%10;g>0&&(f+=l[g]+h[0]),p>0&&(f+=l[p]+h[1])}else f="整";let y=(r?"负":"")+a+"圆"+f;return y==="零圆整"&&(y="零圆"),y}catch(t){return console.error("转换失败:",t),"格式错误"}}}const T={desensitizeChineseName(e,n={}){const{keepLength:t=1,keepLast:r=!1}=n;if(!e||e.length===0||e.trim().length===0)throw new Error("姓名不能为空");if(typeof e!="string")throw new Error("姓名必须是字符串");if(e.length<=1)return e;const o=["欧阳","司马","上官","东方","独孤","南宫","闻人","夏侯","诸葛","尉迟","公孙","长孙","宇文","司徒","慕容"];n.compoundSurname&&n.compoundSurname.trim().length>0&&!o.includes(n.compoundSurname)&&o.push(n.compoundSurname);let s="";o.some(l=>e.startsWith(l))?s=o.find(l=>e.startsWith(l))||"":s=e[0]||"";const c=Math.max(t,s.length);if(c>=e.length)return e;if(r&&e.length>2){const l=e.slice(0,c),i=e.slice(-1),h=e.length-c-1;return`${l}${"*".repeat(h)}${i}`}return`${e.slice(0,c)}${"*".repeat(e.length-c)}`}},_={...Object.freeze(Object.defineProperty({__proto__:null,toLetter:e=>e>25||e<0?"":"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e]},Symbol.toStringTag,{value:"Module"})),...Object.freeze(Object.defineProperty({__proto__:null,toMoney:e=>e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},Symbol.toStringTag,{value:"Module"})),isNumber(e){return typeof e=="number"&&!isNaN(e)}},O={isEmptyObject(e){return e?Object.keys(e).length===0&&e.constructor===Object:!0},copy(e,n){for(const t in e)n[t]=e[t]},deepCopy(e,n){for(const t in e){const r=e[t];r instanceof Object?(n[t]={},this.deepCopy(r,n[t])):r instanceof Array?(n[t]=[],this.deepCopy(r,n[t])):n[t]=e[t]}}},L={desensitize(e){return e?e.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2")||e.slice(0,3)+"****"+e.slice(7):""}},k={color:function(){return`#${Math.random().toString(16).slice(2,8)}`},int(e,n){return Math.floor(Math.random()*(n-e+1))+e},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)}},j={mobile:/^1[3-9]\d{9}$/,email:/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,chinese:/^[\u4e00-\u9fa5]+$/,english:/^[a-zA-Z]+$/,chineseStart:/^[\u4e00-\u9fa5]+\w*$/,integer:/^\d+$/,integerAndzero:/^(0|[1-9]+[0-9]*)$/,strongPassword:/^(?!.*[\s\p{C}])(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[\d\W])|(?=.*\d)(?=.*[^\w\s])).{8,}$/u,decimal:/^0\.(0[1-9]|[1-9][0-9]*)$/},I={getLocal(e){return localStorage.getItem(e)},setLocal(e,n){localStorage.setItem(e,n)},removeLocal(e){localStorage.removeItem(e)},getSession(e){return sessionStorage.getItem(e)},setSession(e,n){sessionStorage.setItem(e,n)},removeSession(e){sessionStorage.removeItem(e)}},H={isExist(e,n){if(!e||!n)return!1;const t=e.split(",");return console.log("判断某元素是否在字符串中",t.indexOf(n)===-1),t.indexOf(n)!==-1},includes(e,n){return!e||!n?!1:e.includes(n)},isJSON(e){try{return JSON.parse(e),!0}catch{return!1}},indexsOfAppear(e,n){let t=-1;const r=[];do t=e.indexOf(n,t+1),t!==-1&&r.push(t);while(t!==-1);return r},getMaxTimesAndVal(e){const n=[0,""],t={};for(let s=0;s<e.length;s++){const c=e.charAt(s);t[c]?t[c]++:t[c]=1}let r=1;for(const s in t)r<t[s]&&(r=t[s]);const o=[];for(const s in t)r==t[s]&&o.push(s);return n[0]=r,n[1]=o.join(),n},mask(e,n,t){if(!e)throw new Error("字符串为空");if(typeof n!="number"||typeof t!="number")throw new Error("开始位置或结束位置为空");if(n<0||t>e.length||n>t)throw new Error("开始位置小于0或结束位置超出字符串长度或开始位置大于结束位置");return e.slice(0,n)+"*".repeat(t-n+1)+e.slice(t)}},$=e=>{const t=new RegExp("[?&]"+e+"=([^&#]*)","i").exec(window.location.href);return t?decodeURIComponent(t[1]):null};function P(e){return new URLSearchParams(window.location.search).get(e)}const N={...Object.freeze(Object.defineProperty({__proto__:null,getQueryInfoByName:$,getQueryParam:P},Symbol.toStringTag,{value:"Module"})),getHost(){return window.location.host},getPath(){return window.location.pathname}},F={toList(e,n=2){console.log(e,n);const t={};for(let o=0;o<n;o++)t[o]=[];e.forEach((o,s)=>t[s%n].push(o));const r=[];for(const o in t)r.push(...t[o]);return r},jsLayout(e,n,t){const r=e.offsetWidth,o=n[0].offsetWidth,s=parseInt((r/o).toString()),c=(r-o*s)/(s-1),l=[];for(let i=0,h=n.length;i<h;i++){const a=n[i];if(i<s)a.style.left=(o+c)*i+"px",l[i]=a.offsetHeight;else{const{index:u,value:f}=A.getMinValueAndIndex(l);a.style.left=(o+c)*u+"px",a.style.top=f+t+"px",l[u]=a.offsetHeight+t+f}}}};d.Base64Utils=M,d.MoneyFormatter=x,d.arrayUtils=A,d.booleanUtils=S,d.cookieUtils=U,d.dateUtils=E,d.documentUtils=C,d.downloadUtils=B,d.echartsUtils=D,d.letterUtils=R,d.mapUtils=v,d.nameUtils=T,d.numberUtils=_,d.objectUtils=O,d.phoneUtils=L,d.randomUtils=k,d.regexpUtils=j,d.storageUtils=I,d.stringUtils=H,d.urlUtils=N,d.waterfallUtils=F,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IChineseNameMaskOptions } from "./typing";
|
|
2
|
+
/** 姓名相关操作工具函数 */
|
|
3
|
+
export declare const nameUtils: {
|
|
4
|
+
/**
|
|
5
|
+
* 中文姓名脱敏
|
|
6
|
+
* @param name 姓名
|
|
7
|
+
* @param options 脱敏选项
|
|
8
|
+
* @returns 脱敏后的姓名
|
|
9
|
+
*/
|
|
10
|
+
desensitizeChineseName(name: string, options?: IChineseNameMaskOptions): string;
|
|
11
|
+
};
|
|
@@ -35,4 +35,12 @@ export declare const stringUtils: {
|
|
|
35
35
|
* @returns 数组,第一个元素为出现次数,第二个元素为出现次数最多的字符
|
|
36
36
|
*/
|
|
37
37
|
getMaxTimesAndVal(string: string): [number, string];
|
|
38
|
+
/**
|
|
39
|
+
* 脱敏处理
|
|
40
|
+
* @param str 字符串
|
|
41
|
+
* @param start 开始位置
|
|
42
|
+
* @param end 结束位置
|
|
43
|
+
* @returns 脱敏后的字符串
|
|
44
|
+
*/
|
|
45
|
+
mask(str: string, start: number, end: number): string;
|
|
38
46
|
};
|