@yh-kit/utils 1.10.0 → 1.12.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/utils.js CHANGED
@@ -1,14 +1,14 @@
1
- const y = (e) => {
1
+ const w = (e) => {
2
2
  if (!e || !e.length) return {};
3
3
  const n = {};
4
4
  return e.forEach((t) => {
5
5
  const o = Object.assign({ label: t.label, text: t.label }, t);
6
6
  n[t?.value] = o;
7
7
  }), n;
8
- }, m = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8
+ }, b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9
9
  __proto__: null,
10
- toEnumObj: y
11
- }, Symbol.toStringTag, { value: "Module" })), w = Object.assign(
10
+ toEnumObj: w
11
+ }, Symbol.toStringTag, { value: "Module" })), A = Object.assign(
12
12
  {
13
13
  /**
14
14
  * 数组去重
@@ -130,10 +130,10 @@ const y = (e) => {
130
130
  }
131
131
  },
132
132
  {
133
- ...m
133
+ ...b
134
134
  }
135
135
  );
136
- class _ {
136
+ class U {
137
137
  /** Base64 编码表 */
138
138
  static BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
139
139
  /**
@@ -146,15 +146,15 @@ class _ {
146
146
  * @returns 返回转换后的Blob对象,如果转换失败,则返回null。
147
147
  */
148
148
  static toBlob(n, t = "", o = 512) {
149
- const s = (n.split(",")[1] || n).replace(/-/g, "+").replace(/_/g, "/"), c = "=".repeat((4 - s.length % 4) % 4), l = s + c;
149
+ const s = (n.split(",")[1] || n).replace(/-/g, "+").replace(/_/g, "/"), a = "=".repeat((4 - s.length % 4) % 4), u = s + a;
150
150
  try {
151
- const i = atob(l), d = [];
152
- for (let a = 0; a < i.length; a += o) {
153
- const u = i.slice(a, a + o), h = new Array(u.length);
154
- for (let f = 0; f < u.length; f++)
155
- h[f] = u.charCodeAt(f);
156
- const g = new Uint8Array(h);
157
- d.push(g);
151
+ const i = atob(u), d = [];
152
+ for (let c = 0; c < i.length; c += o) {
153
+ const l = i.slice(c, c + o), h = new Array(l.length);
154
+ for (let f = 0; f < l.length; f++)
155
+ h[f] = l.charCodeAt(f);
156
+ const p = new Uint8Array(h);
157
+ d.push(p);
158
158
  }
159
159
  return new Blob(d, { type: t });
160
160
  } catch (i) {
@@ -172,15 +172,15 @@ class _ {
172
172
  * @returns 返回一个File对象,包含解码后的数据。
173
173
  */
174
174
  static toFile(n, t = "file.txt", o = "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), d = [];
176
- for (let u = 0; u < i.length; u += 512) {
177
- const h = i.slice(u, u + 512), g = new Array(h.length);
175
+ const s = n.replace(/^data:.+;base64,/, "").replace(/-/g, "+").replace(/_/g, "/"), a = "=".repeat((4 - s.length % 4) % 4), u = s + a, i = atob(u), d = [];
176
+ for (let l = 0; l < i.length; l += 512) {
177
+ const h = i.slice(l, l + 512), p = new Array(h.length);
178
178
  for (let f = 0; f < h.length; f++)
179
- g[f] = h.charCodeAt(f);
180
- d.push(new Uint8Array(g));
179
+ p[f] = h.charCodeAt(f);
180
+ d.push(new Uint8Array(p));
181
181
  }
182
- const a = new Blob(d, { type: o });
183
- return new File([a], t, { type: o });
182
+ const c = new Blob(d, { type: o });
183
+ return new File([c], t, { type: o });
184
184
  }
185
185
  /**
186
186
  * base64加密 -- 普通字符串转 Base64 编码
@@ -218,10 +218,10 @@ class _ {
218
218
  t.push(224 | r >> 12), t.push(128 | r >> 6 & 63), t.push(128 | r & 63);
219
219
  else {
220
220
  o++;
221
- const s = r, c = n.charCodeAt(o);
222
- if (isNaN(c))
221
+ const s = r, a = n.charCodeAt(o);
222
+ if (isNaN(a))
223
223
  throw new Error("代理对不完整");
224
- 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);
224
+ r = 65536 + ((s & 1023) << 10) + (a & 1023), t.push(240 | r >> 18), t.push(128 | r >> 12 & 63), t.push(128 | r >> 6 & 63), t.push(128 | r & 63);
225
225
  }
226
226
  }
227
227
  return t;
@@ -239,11 +239,11 @@ class _ {
239
239
  const s = n[o++] & 63;
240
240
  t += String.fromCharCode((r & 31) << 6 | s);
241
241
  } else if (r >= 224 && r < 240) {
242
- const s = n[o++] & 63, c = n[o++] & 63;
243
- t += String.fromCharCode((r & 15) << 12 | s << 6 | c);
242
+ const s = n[o++] & 63, a = n[o++] & 63;
243
+ t += String.fromCharCode((r & 15) << 12 | s << 6 | a);
244
244
  } else if (r >= 240 && r < 248) {
245
- const s = n[o++] & 63, c = n[o++] & 63, l = n[o++] & 63, i = (r & 7) << 18 | s << 12 | c << 6 | l, d = Math.floor((i - 65536) / 1024) + 55296, a = (i - 65536) % 1024 + 56320;
246
- t += String.fromCharCode(d, a);
245
+ const s = n[o++] & 63, a = n[o++] & 63, u = n[o++] & 63, i = (r & 7) << 18 | s << 12 | a << 6 | u, d = Math.floor((i - 65536) / 1024) + 55296, c = (i - 65536) % 1024 + 56320;
246
+ t += String.fromCharCode(d, c);
247
247
  } else
248
248
  t += "�";
249
249
  }
@@ -255,8 +255,8 @@ class _ {
255
255
  static _bytesToBase64(n) {
256
256
  let t = "", o = 0;
257
257
  for (; o < n.length; ) {
258
- const r = n[o++], s = o < n.length, c = s ? n[o++] : 0, l = o < n.length, i = l ? n[o++] : 0, d = r >> 2, a = (r & 3) << 4 | c >> 4, u = (c & 15) << 2 | i >> 6, h = i & 63;
259
- s ? l ? t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(a) + this.BASE64_CHARS.charAt(u) + this.BASE64_CHARS.charAt(h) : t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(a) + this.BASE64_CHARS.charAt(u) + "=" : t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(a) + "==";
258
+ const r = n[o++], s = o < n.length, a = s ? n[o++] : 0, u = o < n.length, i = u ? n[o++] : 0, d = r >> 2, c = (r & 3) << 4 | a >> 4, l = (a & 15) << 2 | i >> 6, h = i & 63;
259
+ s ? u ? t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(c) + this.BASE64_CHARS.charAt(l) + this.BASE64_CHARS.charAt(h) : t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(c) + this.BASE64_CHARS.charAt(l) + "=" : t += this.BASE64_CHARS.charAt(d) + this.BASE64_CHARS.charAt(c) + "==";
260
260
  }
261
261
  return t;
262
262
  }
@@ -267,27 +267,27 @@ class _ {
267
267
  const t = n.length;
268
268
  let o = 0;
269
269
  t >= 2 && (n[t - 1] === "=" && o++, n[t - 2] === "=" && o++);
270
- const r = Math.floor(t * 3 / 4) - o, s = new Array(r), c = new Array(256).fill(-1);
270
+ const r = Math.floor(t * 3 / 4) - o, s = new Array(r), a = new Array(256).fill(-1);
271
271
  for (let d = 0; d < this.BASE64_CHARS.length; d++)
272
- c[this.BASE64_CHARS.charCodeAt(d)] = d;
273
- let l = 0, i = 0;
272
+ a[this.BASE64_CHARS.charCodeAt(d)] = d;
273
+ let u = 0, i = 0;
274
274
  for (; i < t; ) {
275
- const d = c[n.charCodeAt(i++)], a = c[n.charCodeAt(i++)], u = i < t ? c[n.charCodeAt(i++)] : -1, h = i < t ? c[n.charCodeAt(i++)] : -1;
276
- if (d === -1 || a === -1)
275
+ const d = a[n.charCodeAt(i++)], c = a[n.charCodeAt(i++)], l = i < t ? a[n.charCodeAt(i++)] : -1, h = i < t ? a[n.charCodeAt(i++)] : -1;
276
+ if (d === -1 || c === -1)
277
277
  throw new Error("无效的 Base64 字符");
278
- const g = d << 2 | a >> 4;
279
- if (s[l++] = g, u !== -1) {
280
- const f = (a & 15) << 4 | u >> 2;
281
- if (s[l++] = f, h !== -1) {
282
- const p = (u & 3) << 6 | h;
283
- s[l++] = p;
278
+ const p = d << 2 | c >> 4;
279
+ if (s[u++] = p, l !== -1) {
280
+ const f = (c & 15) << 4 | l >> 2;
281
+ if (s[u++] = f, h !== -1) {
282
+ const g = (l & 3) << 6 | h;
283
+ s[u++] = g;
284
284
  }
285
285
  }
286
286
  }
287
287
  return s;
288
288
  }
289
289
  }
290
- const A = {
290
+ const S = {
291
291
  /**
292
292
  * 检查是否为空字符串
293
293
  * @param str 要检查的字符串
@@ -431,7 +431,7 @@ const A = {
431
431
  isMobile() {
432
432
  return /Mobi|Android|iPhone/i.test(navigator.userAgent);
433
433
  }
434
- }, v = {
434
+ }, O = {
435
435
  /**
436
436
  * 通过传入的name获取cookie的值
437
437
  * @param name cookie的name
@@ -461,7 +461,7 @@ const A = {
461
461
  deleteCookie(e) {
462
462
  this.setCookie(e, "", -1);
463
463
  }
464
- }, O = {
464
+ }, T = {
465
465
  /**
466
466
  * 获取当前时间字符串
467
467
  * @param locales 区域设置。如:'zh-CN','en-US',"chinese"。默认'zh-CN'。
@@ -509,15 +509,74 @@ const A = {
509
509
  o += 31;
510
510
  break;
511
511
  case 2:
512
- A.isLeapYear(e) ? o += 29 : o += 28;
512
+ S.isLeapYear(e) ? o += 29 : o += 28;
513
513
  break;
514
514
  default:
515
515
  o += 30;
516
516
  break;
517
517
  }
518
518
  return o;
519
+ },
520
+ /**
521
+ * 获取时间字符串(自动短化)
522
+ * @param timestamp 时间戳
523
+ * @param mustIncludeTime 是否必须包含时间
524
+ * @returns 时间字符串
525
+ */
526
+ getTimeStringAutoShort2(e, n) {
527
+ const t = /* @__PURE__ */ new Date(), o = new Date(e), r = t.getFullYear(), s = t.getMonth() + 1, a = t.getDate(), u = o.getFullYear(), i = o.getMonth() + 1, d = o.getDate();
528
+ let c = "";
529
+ const l = n ? " " + this.formatDate(o, "hh:mm") : "";
530
+ if (r === u) {
531
+ const f = t.getTime() - e;
532
+ if (s === i && a === d)
533
+ f < 60 * 1e3 ? c = "刚刚" : c = this.formatDate(o, "hh:mm");
534
+ else {
535
+ const g = /* @__PURE__ */ new Date();
536
+ g.setDate(g.getDate() - 1);
537
+ const m = /* @__PURE__ */ new Date();
538
+ if (m.setDate(m.getDate() - 2), i === g.getMonth() + 1 && d === g.getDate())
539
+ c = "昨天" + l;
540
+ else if (i === m.getMonth() + 1 && d === m.getDate())
541
+ c = "前天" + l;
542
+ else if (f / 36e5 <= 7 * 24) {
543
+ const y = new Array(7);
544
+ y[0] = "星期日", y[1] = "星期一", y[2] = "星期二", y[3] = "星期三", y[4] = "星期四", y[5] = "星期五", y[6] = "星期六", c = y[o.getDay()] + l;
545
+ } else c = this.formatDate(o, "yyyy/M/d") + l;
546
+ }
547
+ } else
548
+ c = this.formatDate(o, "yyyy/M/d") + l;
549
+ return c;
550
+ },
551
+ /**
552
+ * 格式化日期
553
+ * @param date 日期对象
554
+ * @param fmt 格式化字符串
555
+ * @returns 格式化后的日期字符串
556
+ */
557
+ formatDate(e, n) {
558
+ const t = {
559
+ "M+": e.getMonth() + 1,
560
+ //月份
561
+ "d+": e.getDate(),
562
+ //日
563
+ "h+": e.getHours(),
564
+ //小时
565
+ "m+": e.getMinutes(),
566
+ //分
567
+ "s+": e.getSeconds(),
568
+ //秒
569
+ "q+": Math.floor((e.getMonth() + 3) / 3),
570
+ //季度
571
+ S: e.getMilliseconds()
572
+ //毫秒
573
+ };
574
+ /(y+)/.test(n) && (n = n.replace(RegExp.$1, (e.getFullYear() + "").substr(4 - RegExp.$1.length)));
575
+ for (const o in t)
576
+ new RegExp("(" + o + ")").test(n) && (n = n.replace(RegExp.$1, RegExp.$1.length === 1 ? t[o] : ("00" + t[o]).substr(("" + t[o]).length)));
577
+ return n;
519
578
  }
520
- }, R = {
579
+ }, L = {
521
580
  /**
522
581
  * 获取元素相对于文档顶部的偏移量(距离)
523
582
  * 处理了SVG元素的特殊情况。
@@ -588,7 +647,7 @@ const A = {
588
647
  getViewportHeight() {
589
648
  return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
590
649
  }
591
- }, U = {
650
+ }, I = {
592
651
  /**
593
652
  * 将blob对象转化成文件并导出到本地
594
653
  * @param blob blob对象
@@ -597,8 +656,17 @@ const A = {
597
656
  saveAsBlob(e, n) {
598
657
  const t = document.createElement("a"), o = window.URL.createObjectURL(e);
599
658
  t.href = o, t.download = n, document.body.appendChild(t), t.click(), URL.revokeObjectURL(o), document.body.removeChild(t);
659
+ },
660
+ /**
661
+ * 直接下载url
662
+ * @param url 下载url
663
+ * @param filename 文件名
664
+ */
665
+ saveAsUrl(e, n) {
666
+ const t = document.createElement("a");
667
+ t.href = e, t.download = n, document.body.appendChild(t), t.click(), URL.revokeObjectURL(e), document.body.removeChild(t);
600
668
  }
601
- }, L = {
669
+ }, k = {
602
670
  /**
603
671
  * echarts动画函数
604
672
  * @param option echarts配置
@@ -630,7 +698,7 @@ const A = {
630
698
  });
631
699
  });
632
700
  }
633
- }, I = {
701
+ }, H = {
634
702
  /**
635
703
  * 将选中的字母数组从A-Z排序:用于试题选择答案的排序实例
636
704
  * @param arr 字母数组
@@ -642,7 +710,7 @@ const A = {
642
710
  return r < s ? -1 : r > s ? 1 : 0;
643
711
  }) : void 0;
644
712
  }
645
- }, T = {
713
+ }, j = {
646
714
  /**
647
715
  * 角度(度数)转弧度
648
716
  * 在数学和编程里,角度有两种常用单位,分别是度(°)和弧度(rad)。
@@ -663,10 +731,10 @@ const A = {
663
731
  * @returns 距离值 单位:km
664
732
  */
665
733
  getDistance(e, n, t, o) {
666
- const r = this.degrees2Radians(e), s = this.degrees2Radians(t), c = r - s, l = this.degrees2Radians(n) - this.degrees2Radians(o);
734
+ const r = this.degrees2Radians(e), s = this.degrees2Radians(t), a = r - s, u = this.degrees2Radians(n) - this.degrees2Radians(o);
667
735
  let i = 2 * Math.asin(
668
736
  Math.sqrt(
669
- Math.pow(Math.sin(c / 2), 2) + Math.cos(r) * Math.cos(s) * Math.pow(Math.sin(l / 2), 2)
737
+ Math.pow(Math.sin(a / 2), 2) + Math.cos(r) * Math.cos(s) * Math.pow(Math.sin(u / 2), 2)
670
738
  )
671
739
  );
672
740
  return i = i * 6378.137, i = Math.round(i * 1e4) / 1e4, i = +i.toFixed(2), console.log("经纬度计算的距离为:" + i), i;
@@ -687,22 +755,22 @@ const A = {
687
755
  * @returns 距离值
688
756
  */
689
757
  calculateDistanceByHaversine(e, n, t = "km") {
690
- const o = this, r = e.longitude ?? e.lng, s = e.latitude ?? e.lat, c = n.longitude ?? n.lng, l = n.latitude ?? n.lat;
691
- if (r === void 0 || s === void 0 || c === void 0 || l === void 0)
758
+ const o = this, r = e.longitude ?? e.lng, s = e.latitude ?? e.lat, a = n.longitude ?? n.lng, u = n.latitude ?? n.lat;
759
+ if (r === void 0 || s === void 0 || a === void 0 || u === void 0)
692
760
  throw new Error("无效的坐标格式,缺少经纬度信息");
693
- const i = 6371, d = o.degrees2Radians(s), a = o.degrees2Radians(l), u = o.degrees2Radians(l - s), h = o.degrees2Radians(c - r), g = Math.sin(u / 2) * Math.sin(u / 2) + Math.cos(d) * Math.cos(a) * Math.sin(h / 2) * Math.sin(h / 2), f = 2 * Math.atan2(Math.sqrt(g), Math.sqrt(1 - g)), p = i * f;
761
+ const i = 6371, d = o.degrees2Radians(s), c = o.degrees2Radians(u), l = o.degrees2Radians(u - s), h = o.degrees2Radians(a - r), p = Math.sin(l / 2) * Math.sin(l / 2) + Math.cos(d) * Math.cos(c) * Math.sin(h / 2) * Math.sin(h / 2), f = 2 * Math.atan2(Math.sqrt(p), Math.sqrt(1 - p)), g = i * f;
694
762
  switch (t) {
695
763
  case "m":
696
- return p * 1e3;
764
+ return g * 1e3;
697
765
  // 米
698
766
  case "mi":
699
- return p * 0.621371;
767
+ return g * 0.621371;
700
768
  // 英里
701
769
  case "nmi":
702
- return p * 0.539957;
770
+ return g * 0.539957;
703
771
  // 海里
704
772
  default:
705
- return p;
773
+ return g;
706
774
  }
707
775
  },
708
776
  /**
@@ -718,8 +786,8 @@ const A = {
718
786
  const o = [];
719
787
  let r = 0;
720
788
  for (let s = 0; s < e.length - 1; s++) {
721
- const c = this.calculateDistanceByHaversine(e[s], e[s + 1], n);
722
- o.push(c), r += c;
789
+ const a = this.calculateDistanceByHaversine(e[s], e[s + 1], n);
790
+ o.push(a), r += a;
723
791
  }
724
792
  if (t && e.length > 2) {
725
793
  const s = this.calculateDistanceByHaversine(e[e.length - 1], e[0], n);
@@ -728,7 +796,7 @@ const A = {
728
796
  return { segments: o, total: r };
729
797
  }
730
798
  };
731
- class j {
799
+ class $ {
732
800
  /**
733
801
  * 转换为标准金额格式(带千分位和两位小数)
734
802
  * @param num 要转换的数字
@@ -758,40 +826,40 @@ class j {
758
826
  throw new Error("输入不是有效的数字");
759
827
  if (t > 9999999999999e-2 || t < -9999999999999e-2)
760
828
  throw new Error("输入数字超出范围");
761
- const o = t < 0, r = Math.abs(t), s = Math.floor(r), c = Math.round((r - s) * 100), l = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"], i = ["", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"], d = ["角", "分"];
762
- let a = "", u = s;
763
- if (u === 0)
764
- a = l[0];
829
+ const o = t < 0, r = Math.abs(t), s = Math.floor(r), a = Math.round((r - s) * 100), u = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"], i = ["", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"], d = ["角", "分"];
830
+ let c = "", l = s;
831
+ if (l === 0)
832
+ c = u[0];
765
833
  else {
766
834
  let f = 0;
767
- for (; u > 0; ) {
768
- const p = u % 10;
769
- p !== 0 ? a = l[p] + i[f] + a : a.charAt(0) !== l[0] && (a = l[p] + a), u = Math.floor(u / 10), f++;
835
+ for (; l > 0; ) {
836
+ const g = l % 10;
837
+ g !== 0 ? c = u[g] + i[f] + c : c.charAt(0) !== u[0] && (c = u[g] + c), l = Math.floor(l / 10), f++;
770
838
  }
771
- a = a.replace(/零+/g, "零"), a = a.replace(/零+$/, "");
839
+ c = c.replace(/零+/g, "零"), c = c.replace(/零+$/, "");
772
840
  }
773
841
  let h = "";
774
- if (c > 0) {
775
- const f = Math.floor(c / 10), p = c % 10;
776
- f > 0 && (h += l[f] + d[0]), p > 0 && (h += l[p] + d[1]);
842
+ if (a > 0) {
843
+ const f = Math.floor(a / 10), g = a % 10;
844
+ f > 0 && (h += u[f] + d[0]), g > 0 && (h += u[g] + d[1]);
777
845
  } else
778
846
  h = "整";
779
- let g = (o ? "负" : "") + a + "圆" + h;
780
- return g === "零圆整" && (g = "零圆"), g;
847
+ let p = (o ? "负" : "") + c + "圆" + h;
848
+ return p === "零圆整" && (p = "零圆"), p;
781
849
  } catch (t) {
782
850
  return console.error("转换失败:", t), "格式错误";
783
851
  }
784
852
  }
785
853
  }
786
- const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
854
+ const M = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], x = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
787
855
  __proto__: null,
788
- toLetter: b
789
- }, Symbol.toStringTag, { value: "Module" })), x = (e) => e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), M = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
856
+ toLetter: M
857
+ }, Symbol.toStringTag, { value: "Module" })), E = (e) => e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), C = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
790
858
  __proto__: null,
791
- toMoney: x
792
- }, Symbol.toStringTag, { value: "Module" })), H = {
793
- ...S,
794
- ...M,
859
+ toMoney: E
860
+ }, Symbol.toStringTag, { value: "Module" })), N = {
861
+ ...x,
862
+ ...C,
795
863
  /**
796
864
  * 判断是否为数字
797
865
  * @param val 待判断的值
@@ -800,7 +868,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
800
868
  isNumber(e) {
801
869
  return typeof e == "number" && !isNaN(e);
802
870
  }
803
- }, k = {
871
+ }, P = {
804
872
  /**
805
873
  * 判断对象是否为空
806
874
  * @param obj 对象
@@ -831,7 +899,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
831
899
  o instanceof Object ? (n[t] = {}, this.deepCopy(o, n[t])) : o instanceof Array ? (n[t] = [], this.deepCopy(o, n[t])) : n[t] = e[t];
832
900
  }
833
901
  }
834
- }, N = {
902
+ }, F = {
835
903
  /**
836
904
  * 脱敏
837
905
  * @param phone 电话号码/手机号码
@@ -840,7 +908,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
840
908
  desensitize(e) {
841
909
  return e ? e.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2") || e.slice(0, 3) + "****" + e.slice(7) : "";
842
910
  }
843
- }, P = {
911
+ }, V = {
844
912
  /**
845
913
  * 生成随机颜色
846
914
  * @returns 随机颜色值
@@ -864,7 +932,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
864
932
  uniqueId() {
865
933
  return Date.now().toString(36) + Math.random().toString(36).substr(2, 5);
866
934
  }
867
- }, $ = {
935
+ }, W = {
868
936
  /**
869
937
  * 验证手机号
870
938
  */
@@ -901,7 +969,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
901
969
  * 验证0.01~0.99正则:最多两位小数。0.1、0.10、0.9、0.90
902
970
  */
903
971
  decimal: /^0\.(0[1-9]|[1-9][0-9]*)$/
904
- }, D = {
972
+ }, Y = {
905
973
  /**
906
974
  * 通过key值获取 localStorage 中存储的某个值
907
975
  * @param key 获取的key
@@ -948,7 +1016,7 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
948
1016
  removeSession(e) {
949
1017
  sessionStorage.removeItem(e);
950
1018
  }
951
- }, F = {
1019
+ }, z = {
952
1020
  /**
953
1021
  * 判断某元素是否在字符串中-比includes()方法更兼容,includes为ES6新增方法,IE不支持。小程序也不支持
954
1022
  * @param str 字符串
@@ -1004,8 +1072,8 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
1004
1072
  getMaxTimesAndVal(e) {
1005
1073
  const n = [0, ""], t = {};
1006
1074
  for (let s = 0; s < e.length; s++) {
1007
- const c = e.charAt(s);
1008
- t[c] ? t[c]++ : t[c] = 1;
1075
+ const a = e.charAt(s);
1076
+ t[a] ? t[a]++ : t[a] = 1;
1009
1077
  }
1010
1078
  let o = 1;
1011
1079
  for (const s in t)
@@ -1019,15 +1087,15 @@ const b = (e) => e > 25 || e < 0 ? "" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e], S = /*
1019
1087
  const t = new RegExp("[?&]" + e + "=([^&#]*)", "i").exec(window.location.href);
1020
1088
  return t ? decodeURIComponent(t[1]) : null;
1021
1089
  };
1022
- function C(e) {
1090
+ function D(e) {
1023
1091
  return new URLSearchParams(window.location.search).get(e);
1024
1092
  }
1025
- const E = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1093
+ const R = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1026
1094
  __proto__: null,
1027
1095
  getQueryInfoByName: B,
1028
- getQueryParam: C
1029
- }, Symbol.toStringTag, { value: "Module" })), V = {
1030
- ...E,
1096
+ getQueryParam: D
1097
+ }, Symbol.toStringTag, { value: "Module" })), q = {
1098
+ ...R,
1031
1099
  /**
1032
1100
  * 获取当前域名
1033
1101
  * @returns 当前url链接的host信息
@@ -1042,7 +1110,7 @@ const E = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1042
1110
  getPath() {
1043
1111
  return window.location.pathname;
1044
1112
  }
1045
- }, W = {
1113
+ }, Z = {
1046
1114
  /**
1047
1115
  * 处理瀑布流数据,使其竖向瀑布流布局呈现横向瀑布流的展现形式。适用于 column-gap: 20rpx; column-count: 2; 布局的瀑布流
1048
1116
  * @param list 瀑布流数据-数组
@@ -1067,37 +1135,37 @@ const E = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1067
1135
  * @param step 间距
1068
1136
  */
1069
1137
  jsLayout(e, n, t) {
1070
- const o = e.offsetWidth, r = n[0].offsetWidth, s = parseInt((o / r).toString()), c = (o - r * s) / (s - 1), l = [];
1138
+ const o = e.offsetWidth, r = n[0].offsetWidth, s = parseInt((o / r).toString()), a = (o - r * s) / (s - 1), u = [];
1071
1139
  for (let i = 0, d = n.length; i < d; i++) {
1072
- const a = n[i];
1140
+ const c = n[i];
1073
1141
  if (i < s)
1074
- a.style.left = (r + c) * i + "px", l[i] = a.offsetHeight;
1142
+ c.style.left = (r + a) * i + "px", u[i] = c.offsetHeight;
1075
1143
  else {
1076
- const { index: u, value: h } = w.getMinValueAndIndex(l);
1077
- a.style.left = (r + c) * u + "px", a.style.top = h + t + "px", l[u] = a.offsetHeight + t + h;
1144
+ const { index: l, value: h } = A.getMinValueAndIndex(u);
1145
+ c.style.left = (r + a) * l + "px", c.style.top = h + t + "px", u[l] = c.offsetHeight + t + h;
1078
1146
  }
1079
1147
  }
1080
1148
  }
1081
1149
  };
1082
1150
  export {
1083
- _ as Base64Utils,
1084
- j as MoneyFormatter,
1085
- w as arrayUtils,
1086
- A as booleanUtils,
1087
- v as cookieUtils,
1088
- O as dateUtils,
1089
- R as documentUtils,
1090
- U as downloadUtils,
1091
- L as echartsUtils,
1092
- I as letterUtils,
1093
- T as mapUtils,
1094
- H as numberUtils,
1095
- k as objectUtils,
1096
- N as phoneUtils,
1097
- P as randomUtils,
1098
- $ as regexpUtils,
1099
- D as storageUtils,
1100
- F as stringUtils,
1101
- V as urlUtils,
1102
- W as waterfallUtils
1151
+ U as Base64Utils,
1152
+ $ as MoneyFormatter,
1153
+ A as arrayUtils,
1154
+ S as booleanUtils,
1155
+ O as cookieUtils,
1156
+ T as dateUtils,
1157
+ L as documentUtils,
1158
+ I as downloadUtils,
1159
+ k as echartsUtils,
1160
+ H as letterUtils,
1161
+ j as mapUtils,
1162
+ N as numberUtils,
1163
+ P as objectUtils,
1164
+ F as phoneUtils,
1165
+ V as randomUtils,
1166
+ W as regexpUtils,
1167
+ Y as storageUtils,
1168
+ z as stringUtils,
1169
+ q as urlUtils,
1170
+ Z as waterfallUtils
1103
1171
  };
@@ -1 +1 @@
1
- (function(h,m){typeof exports=="object"&&typeof module<"u"?m(exports):typeof define=="function"&&define.amd?define(["exports"],m):(h=typeof globalThis<"u"?globalThis:h||self,m(h.yhkitUtils={}))})(this,function(h){"use strict";const b=Object.assign({unique(t){return t?Array.from(new Set(t)):[]},isExist(t,n){return!t||!n?!1:t.indexOf(n)!==-1},countOfAppear(t,n){let e=0;for(const o of t)o===n&&e++;return e},indexsOfAppear(t,n){let e=-1;const o=[];do e=t.indexOf(n,e+1),e!==-1&&o.push(e);while(e!==-1);return o},sort(t,n="asc"){return t?t.sort((e,o)=>n==="asc"?e>o?1:-1:e<o?1:-1):[]},shuffle(t){if(!t)return[];for(let n=t.length-1;n>0;n--){const e=Math.floor(Math.random()*(n+1));[t[n],t[e]]=[t[e],t[n]]}return t},getMaxValue(t){return t?Math.max(...t):0},getMinValue(t){return t?Math.min(...t):0},getMinValueAndIndex(t){if(t.length===0)return{value:0,index:0};const n={value:t[0],index:0};for(let e=1,o=t.length;e<o;e++){const r=t[e];n.value>r&&(n.value=r,n.index=e)}return n},getMaxValueAndIndex(t){return t.length===0?{value:0,index:0}:t.reduce((n,e,o)=>e<n.value?{value:e,index:o}:n,{value:t[0],index:0})}},{...Object.freeze(Object.defineProperty({__proto__:null,toEnumObj:t=>{if(!t||!t.length)return{};const n={};return t.forEach(e=>{const o=Object.assign({label:e.label,text:e.label},e);n[e?.value]=o}),n}},Symbol.toStringTag,{value:"Module"}))});class A{static BASE64_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static toBlob(n,e="",o=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),d=[];for(let a=0;a<i.length;a+=o){const u=i.slice(a,a+o),f=new Array(u.length);for(let g=0;g<u.length;g++)f[g]=u.charCodeAt(g);const p=new Uint8Array(f);d.push(p)}return new Blob(d,{type:e})}catch(i){return console.error("Failed to convert base64 to blob:",i),null}}static toFile(n,e="file.txt",o="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),d=[];for(let u=0;u<i.length;u+=512){const f=i.slice(u,u+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],e,{type:o})}static encode(n){if(!n)return"";const e=this._stringToUtf8Bytes(n);return this._bytesToBase64(e)}static decode(n){if(!n)return"";n=n.replace(/\s/g,"");const e=this._base64ToBytes(n);return this._utf8BytesToString(e)}static _stringToUtf8Bytes(n){const e=[];for(let o=0;o<n.length;o++){let r=n.charCodeAt(o);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6),e.push(128|r&63);else if(r<55296||r>=57344)e.push(224|r>>12),e.push(128|r>>6&63),e.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),e.push(240|r>>18),e.push(128|r>>12&63),e.push(128|r>>6&63),e.push(128|r&63)}}return e}static _utf8BytesToString(n){let e="",o=0;for(;o<n.length;){const r=n[o++];if(r<128)e+=String.fromCharCode(r);else if(r>=192&&r<224){const s=n[o++]&63;e+=String.fromCharCode((r&31)<<6|s)}else if(r>=224&&r<240){const s=n[o++]&63,c=n[o++]&63;e+=String.fromCharCode((r&15)<<12|s<<6|c)}else if(r>=240&&r<248){const s=n[o++]&63,c=n[o++]&63,l=n[o++]&63,i=(r&7)<<18|s<<12|c<<6|l,d=Math.floor((i-65536)/1024)+55296,a=(i-65536)%1024+56320;e+=String.fromCharCode(d,a)}else e+="�"}return e}static _bytesToBase64(n){let e="",o=0;for(;o<n.length;){const r=n[o++],s=o<n.length,c=s?n[o++]:0,l=o<n.length,i=l?n[o++]:0,d=r>>2,a=(r&3)<<4|c>>4,u=(c&15)<<2|i>>6,f=i&63;s?l?e+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(u)+this.BASE64_CHARS.charAt(f):e+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+this.BASE64_CHARS.charAt(u)+"=":e+=this.BASE64_CHARS.charAt(d)+this.BASE64_CHARS.charAt(a)+"=="}return e}static _base64ToBytes(n){const e=n.length;let o=0;e>=2&&(n[e-1]==="="&&o++,n[e-2]==="="&&o++);const r=Math.floor(e*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 l=0,i=0;for(;i<e;){const d=c[n.charCodeAt(i++)],a=c[n.charCodeAt(i++)],u=i<e?c[n.charCodeAt(i++)]:-1,f=i<e?c[n.charCodeAt(i++)]:-1;if(d===-1||a===-1)throw new Error("无效的 Base64 字符");const p=d<<2|a>>4;if(s[l++]=p,u!==-1){const g=(a&15)<<4|u>>2;if(s[l++]=g,f!==-1){const y=(u&3)<<6|f;s[l++]=y}}}return s}}const w={isEmptyString(t){return typeof t=="string"&&t.trim()===""},isNumber(t){return typeof t=="number"&&!isNaN(t)},isObject(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)},isEmptyObject(t){return t?Object.keys(t).length===0&&t.constructor===Object:!0},isBoolean(t){return typeof t=="boolean"},isArray(t){return Array.isArray(t)},isFunction(t){return typeof t=="function"},isPromise(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"},isElement(t){return t instanceof Element},isPhone(t){return/^1[3-9]\d{9}$/.test(t)},isEmail(t){return/^[\w.-]+@[\w.-]+\.\w+$/.test(t)},isJSON(t){try{return JSON.parse(t),!0}catch{return!1}},isImageLoaded(t){return t.complete&&t.naturalWidth!==0},isInViewport(t){const n=t.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.bottom<=window.innerHeight&&n.right<=window.innerWidth},isLeapYear(t){return t%4===0&&t%100!==0||t%400===0},isMobile(){return/Mobi|Android|iPhone/i.test(navigator.userAgent)}},S={getCookie(t){if(!t)return;const n=document.cookie.match(new RegExp("(^| )"+t+"=([^;]+)"));return n?decodeURIComponent(n[2]):null},setCookie(t,n,e=7){const o=new Date;o.setTime(o.getTime()+e*24*60*60*1e3),document.cookie=`${t}=${encodeURIComponent(n)};expires=${o.toUTCString()};path=/`},deleteCookie(t){this.setCookie(t,"",-1)}},M={getTimeString(t,n=!1){return n?new Date().toLocaleString(t,{hour12:!0}):new Date().toLocaleString("chinese",{hour12:!1})},diffDays(t,n){const e=new Date(t).getTime(),o=new Date(n).getTime();return e>o?Math.abs(Math.floor((e-o)/(24*3600*1e3))):Math.abs(Math.floor((o-e)/(24*3600*1e3)))},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)},getWhichDays(t,n,e){let o=e;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:w.isLeapYear(t)?o+=29:o+=28;break;default:o+=30;break}return o}},U={getOffsetTop(t){if(!t)throw new Error("Element is not provided");if(t instanceof SVGElement){const e=t.getBoundingClientRect(),o=window.pageYOffset||document.documentElement.scrollTop;return e.top+o}let n=0;for(;t;)n+=t.offsetTop,t=t.offsetParent;return n},getScrollValue(){const t={scrollLeft:0,scrollTop:0};return t.scrollLeft=document.body.scrollLeft||document.documentElement.scrollLeft,t.scrollTop=document.body.scrollTop||document.documentElement.scrollTop,t},getPageValue(t){t=t||window.event;const n=t.pageX||t.clientX+this.getScrollValue().scrollLeft,e=t.pageY||t.clientY+this.getScrollValue().scrollTop;return{pageX:n,pageY:e}},addEventListener(t,n,e){t.addEventListener?t.addEventListener(n,e):t.attachEvent?t.attachEvent("on"+n,e):t["on"+n]=e},getViewportWidth(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},getViewportHeight(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}},B={saveAsBlob(t,n){const e=document.createElement("a"),o=window.URL.createObjectURL(t);e.href=o,e.download=n,document.body.appendChild(e),e.click(),URL.revokeObjectURL(o),document.body.removeChild(e)}},E={animate(t,n){let e=-1;const o=t.series[0].data.length;let r;r=setInterval(()=>{n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:e}),e=(e+1)%o,n.dispatchAction({type:"highlight",seriesIndex:0,dataIndex:e}),n.dispatchAction({type:"showTip",seriesIndex:0,dataIndex:e}),e>o&&(e=0)},2e3),n.on("mouseover",()=>{clearInterval(r),n.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:e})})}},C={sortFromA2Z(t){return t?.length?t.sort((e,o)=>{const r=e.toUpperCase(),s=o.toUpperCase();return r<s?-1:r>s?1:0}):void 0}},_={degrees2Radians(t){return t*Math.PI/180},getDistance(t,n,e,o){const r=this.degrees2Radians(t),s=this.degrees2Radians(e),c=r-s,l=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(l/2),2)));return i=i*6378.137,i=Math.round(i*1e4)/1e4,i=+i.toFixed(2),console.log("经纬度计算的距离为:"+i),i},calculateDistanceByHaversine(t,n,e="km"){const o=this,r=t.longitude??t.lng,s=t.latitude??t.lat,c=n.longitude??n.lng,l=n.latitude??n.lat;if(r===void 0||s===void 0||c===void 0||l===void 0)throw new Error("无效的坐标格式,缺少经纬度信息");const i=6371,d=o.degrees2Radians(s),a=o.degrees2Radians(l),u=o.degrees2Radians(l-s),f=o.degrees2Radians(c-r),p=Math.sin(u/2)*Math.sin(u/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(e){case"m":return y*1e3;case"mi":return y*.621371;case"nmi":return y*.539957;default:return y}},calculateDistancesByHaversine(t,n="km",e=!1){if(t.length<2)return{segments:[],total:0};const o=[];let r=0;for(let s=0;s<t.length-1;s++){const c=this.calculateDistanceByHaversine(t[s],t[s+1],n);o.push(c),r+=c}if(e&&t.length>2){const s=this.calculateDistanceByHaversine(t[t.length-1],t[0],n);o.push(s),r+=s}return{segments:o,total:r}}};class v{static toStandardFormat(n){try{const e=typeof n=="string"?parseFloat(n):n;if(isNaN(e))throw new Error("输入不是有效的数字");if(!isFinite(e))throw new Error("输入是无穷大");return e.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}catch(e){return console.error("格式化失败:",e),"格式错误"}}static toChineseFormat(n){try{const e=typeof n=="string"?parseFloat(n):n;if(isNaN(e))throw new Error("输入不是有效的数字");if(e>9999999999999e-2||e<-9999999999999e-2)throw new Error("输入数字超出范围");const o=e<0,r=Math.abs(e),s=Math.floor(r),c=Math.round((r-s)*100),l=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],i=["","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"],d=["角","分"];let a="",u=s;if(u===0)a=l[0];else{let g=0;for(;u>0;){const y=u%10;y!==0?a=l[y]+i[g]+a:a.charAt(0)!==l[0]&&(a=l[y]+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),y=c%10;g>0&&(f+=l[g]+d[0]),y>0&&(f+=l[y]+d[1])}else f="整";let p=(o?"负":"")+a+"圆"+f;return p==="零圆整"&&(p="零圆"),p}catch(e){return console.error("转换失败:",e),"格式错误"}}}const O={...Object.freeze(Object.defineProperty({__proto__:null,toLetter:t=>t>25||t<0?"":"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[t]},Symbol.toStringTag,{value:"Module"})),...Object.freeze(Object.defineProperty({__proto__:null,toMoney:t=>t.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},Symbol.toStringTag,{value:"Module"})),isNumber(t){return typeof t=="number"&&!isNaN(t)}},x={isEmptyObject(t){return t?Object.keys(t).length===0&&t.constructor===Object:!0},copy(t,n){for(const e in t)n[e]=t[e]},deepCopy(t,n){for(const e in t){const o=t[e];o instanceof Object?(n[e]={},this.deepCopy(o,n[e])):o instanceof Array?(n[e]=[],this.deepCopy(o,n[e])):n[e]=t[e]}}},R={desensitize(t){return t?t.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2")||t.slice(0,3)+"****"+t.slice(7):""}},L={color:function(){return`#${Math.random().toString(16).slice(2,8)}`},int(t,n){return Math.floor(Math.random()*(n-t+1))+t},uniqueId(){return Date.now().toString(36)+Math.random().toString(36).substr(2,5)}},T={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(t){return localStorage.getItem(t)},setLocal(t,n){localStorage.setItem(t,n)},removeLocal(t){localStorage.removeItem(t)},getSession(t){return sessionStorage.getItem(t)},setSession(t,n){sessionStorage.setItem(t,n)},removeSession(t){sessionStorage.removeItem(t)}},j={isExist(t,n){if(!t||!n)return!1;const e=t.split(",");return console.log("判断某元素是否在字符串中",e.indexOf(n)===-1),e.indexOf(n)!==-1},includes(t,n){return!t||!n?!1:t.includes(n)},isJSON(t){try{return JSON.parse(t),!0}catch{return!1}},indexsOfAppear(t,n){let e=-1;const o=[];do e=t.indexOf(n,e+1),e!==-1&&o.push(e);while(e!==-1);return o},getMaxTimesAndVal(t){const n=[0,""],e={};for(let s=0;s<t.length;s++){const c=t.charAt(s);e[c]?e[c]++:e[c]=1}let o=1;for(const s in e)o<e[s]&&(o=e[s]);const r=[];for(const s in e)o==e[s]&&r.push(s);return n[0]=o,n[1]=r.join(),n}},k=t=>{const e=new RegExp("[?&]"+t+"=([^&#]*)","i").exec(window.location.href);return e?decodeURIComponent(e[1]):null};function H(t){return new URLSearchParams(window.location.search).get(t)}const P={...Object.freeze(Object.defineProperty({__proto__:null,getQueryInfoByName:k,getQueryParam:H},Symbol.toStringTag,{value:"Module"})),getHost(){return window.location.host},getPath(){return window.location.pathname}},N={toList(t,n=2){console.log(t,n);const e={};for(let r=0;r<n;r++)e[r]=[];t.forEach((r,s)=>e[s%n].push(r));const o=[];for(const r in e)o.push(...e[r]);return o},jsLayout(t,n,e){const o=t.offsetWidth,r=n[0].offsetWidth,s=parseInt((o/r).toString()),c=(o-r*s)/(s-1),l=[];for(let i=0,d=n.length;i<d;i++){const a=n[i];if(i<s)a.style.left=(r+c)*i+"px",l[i]=a.offsetHeight;else{const{index:u,value:f}=b.getMinValueAndIndex(l);a.style.left=(r+c)*u+"px",a.style.top=f+e+"px",l[u]=a.offsetHeight+e+f}}}};h.Base64Utils=A,h.MoneyFormatter=v,h.arrayUtils=b,h.booleanUtils=w,h.cookieUtils=S,h.dateUtils=M,h.documentUtils=U,h.downloadUtils=B,h.echartsUtils=E,h.letterUtils=C,h.mapUtils=_,h.numberUtils=O,h.objectUtils=x,h.phoneUtils=R,h.randomUtils=L,h.regexpUtils=T,h.storageUtils=I,h.stringUtils=j,h.urlUtils=P,h.waterfallUtils=N,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
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=>{if(!e||!e.length)return{};const n={};return e.forEach(t=>{const o=Object.assign({label:t.label,text:t.label},t);n[t?.value]=o}),n}},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"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yh-kit/utils",
3
3
  "private": false,
4
- "version": "1.10.0",
4
+ "version": "1.12.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -29,4 +29,18 @@ export declare const dateUtils: {
29
29
  * @returns 当年的第几天
30
30
  */
31
31
  getWhichDays(year: number, month: number, day: number): number;
32
+ /**
33
+ * 获取时间字符串(自动短化)
34
+ * @param timestamp 时间戳
35
+ * @param mustIncludeTime 是否必须包含时间
36
+ * @returns 时间字符串
37
+ */
38
+ getTimeStringAutoShort2(timestamp: number, mustIncludeTime: boolean): string;
39
+ /**
40
+ * 格式化日期
41
+ * @param date 日期对象
42
+ * @param fmt 格式化字符串
43
+ * @returns 格式化后的日期字符串
44
+ */
45
+ formatDate(date: Date, fmt: string): string;
32
46
  };
@@ -8,4 +8,10 @@ export declare const downloadUtils: {
8
8
  * @param filename 文件名
9
9
  */
10
10
  saveAsBlob(blob: Blob | MediaSource, filename: string): void;
11
+ /**
12
+ * 直接下载url
13
+ * @param url 下载url
14
+ * @param filename 文件名
15
+ */
16
+ saveAsUrl(url: string, filename: string): void;
11
17
  };