jinbi-utils 1.0.0-beta.1

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.
Files changed (72) hide show
  1. package/.babelrc +19 -0
  2. package/.cz-config.js +55 -0
  3. package/.dockerignore +3 -0
  4. package/.editorconfig +12 -0
  5. package/.eslintignore +8 -0
  6. package/.eslintrc.js +54 -0
  7. package/Dockerfile +3 -0
  8. package/README.md +160 -0
  9. package/api-extractor.json +15 -0
  10. package/commitlint.config.js +3 -0
  11. package/dist/index.esm.js +1277 -0
  12. package/dist/index.esm.min.js +15 -0
  13. package/dist/index.umd.js +1348 -0
  14. package/dist/index.umd.min.js +16 -0
  15. package/docs/assets/images/icons.png +0 -0
  16. package/docs/assets/images/icons@2x.png +0 -0
  17. package/docs/assets/images/widgets.png +0 -0
  18. package/docs/assets/images/widgets@2x.png +0 -0
  19. package/docs/assets/js/main.js +1 -0
  20. package/docs/assets/js/search.json +1 -0
  21. package/docs/globals.html +144 -0
  22. package/docs/index.html +147 -0
  23. package/docs/interfaces/file.compressimgqualitycallback.html +212 -0
  24. package/docs/interfaces/file.compressimgscalecallback.html +206 -0
  25. package/docs/interfaces/file.exportbyblobparams.html +294 -0
  26. package/docs/interfaces/file.filesizeobject.html +227 -0
  27. package/docs/interfaces/file.genexportbyblobparams.html +237 -0
  28. package/docs/modules/common.html +188 -0
  29. package/docs/modules/date.html +364 -0
  30. package/docs/modules/file.html +452 -0
  31. package/docs/modules/number.html +356 -0
  32. package/docs/modules/object.html +245 -0
  33. package/docs/modules/print.html +183 -0
  34. package/docs/modules/string.html +352 -0
  35. package/docs/modules/validate.html +389 -0
  36. package/jest.config.js +15 -0
  37. package/package.json +76 -0
  38. package/rollup.config.js +65 -0
  39. package/src/common/index.ts +323 -0
  40. package/src/constant/common.constant.ts +13 -0
  41. package/src/date/index.ts +143 -0
  42. package/src/file/index.ts +296 -0
  43. package/src/http/http.ts +79 -0
  44. package/src/http/httpEnums.ts +61 -0
  45. package/src/index.ts +10 -0
  46. package/src/number/index.ts +190 -0
  47. package/src/object/index.ts +54 -0
  48. package/src/print/index.ts +102 -0
  49. package/src/string/index.ts +111 -0
  50. package/src/validate/index.ts +78 -0
  51. package/src/wecom/wecom.ts +75 -0
  52. package/test/common/index.test.ts +19 -0
  53. package/test/date/index.test.ts +107 -0
  54. package/test/file/index.test.ts +104 -0
  55. package/test/number/index.test.ts +108 -0
  56. package/test/object/index.test.ts +20 -0
  57. package/test/string/index.test.ts +82 -0
  58. package/tsconfig.json +39 -0
  59. package/typedoc.json +9 -0
  60. package/types/common/index.d.ts +47 -0
  61. package/types/constant/common.constant.d.ts +12 -0
  62. package/types/date/index.d.ts +60 -0
  63. package/types/file/index.d.ts +96 -0
  64. package/types/http/http.d.ts +17 -0
  65. package/types/http/httpEnums.d.ts +53 -0
  66. package/types/index.d.ts +10 -0
  67. package/types/number/index.d.ts +62 -0
  68. package/types/object/index.d.ts +25 -0
  69. package/types/print/index.d.ts +11 -0
  70. package/types/string/index.d.ts +53 -0
  71. package/types/validate/index.d.ts +45 -0
  72. package/types/wecom/wecom.d.ts +3 -0
@@ -0,0 +1,1348 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('axios')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'axios'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["jinbi-utils"] = {}, global.axios));
5
+ })(this, (function (exports, axios) { 'use strict';
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
10
+
11
+ var fromTypeMap = {
12
+ isWxWork: 'wecom',
13
+ isWeixin: 'wechat',
14
+ isMobile: 'mobile',
15
+ isMobileAny: 'mobile',
16
+ };
17
+
18
+ /**
19
+ * 通用函数
20
+ * @packageDocumentation
21
+ * @module Common
22
+ * @preferred
23
+ */
24
+ /**
25
+ * 判断val 是否是空值
26
+ #### 使用说明
27
+ ```
28
+ isEmpty('') 返回 true
29
+ isEmpty(null) 返回 true
30
+ isEmpty(undefined) 返回 true
31
+ isEmpty(12323) 返回 false
32
+ ```
33
+ */
34
+ function isEmpty(val) {
35
+ return val === null || val === '' || val === undefined;
36
+ }
37
+ // from jinbizhihui
38
+ // 获取环境变量
39
+ // export const getEnvValue = (type: string) => {
40
+ // return import.meta.env[type]
41
+ // }
42
+ var clearLoginData = function () {
43
+ // 这里做指定的 key 清除 是为了 避免 清除掉 jsapiticket 等一些需要有的字段 防止多次请求
44
+ localStorage.removeItem('wecom_userinfo');
45
+ localStorage.removeItem('wecom_token');
46
+ localStorage.removeItem('projectActive');
47
+ localStorage.removeItem('loginTime');
48
+ localStorage.removeItem('projectInfo');
49
+ };
50
+ // 获取url中参数
51
+ var getQueryString = function (url, queryKey) {
52
+ var reg = new RegExp("&{1}" + queryKey + "\\=[a-zA-Z0-9_-]+", 'g');
53
+ var matchResult = url.replace(/\?/g, '&').match(reg)[0];
54
+ return matchResult.substr(matchResult.indexOf('=') + 1);
55
+ };
56
+ var getQueryVariable = function (variable) {
57
+ var query = window.location.search.substring(1);
58
+ var vars = query.split('&');
59
+ for (var i = 0; i < vars.length; i++) {
60
+ var pair = vars[i].split('=');
61
+ if (pair[0] === variable) {
62
+ return pair[1];
63
+ }
64
+ }
65
+ return (false);
66
+ };
67
+ var getWecomToken = function () {
68
+ return localStorage.getItem('wecom_token');
69
+ };
70
+ // 判断设备类型
71
+ var getDeviceType = function () {
72
+ var ua = navigator.userAgent.toLowerCase();
73
+ var isWxWork = /wxwork/.test(ua); // 企业微信
74
+ var isWeixin = /micromessenger/.test(ua) && !isWxWork; // 微信,排除企业微信
75
+ // 使用屏幕宽度判断是否移动设备
76
+ var isMobileScreen = window.innerWidth <= 768;
77
+ return {
78
+ isWxWork: isWxWork,
79
+ isWeixin: isWeixin,
80
+ isMobileScreen: isMobileScreen,
81
+ isMobileAny: isWxWork || isWeixin || isMobileScreen,
82
+ };
83
+ };
84
+ var getFromType = function (res) {
85
+ var result = 'wecom';
86
+ for (var key in res) {
87
+ var value = res[key];
88
+ if (value) {
89
+ result = fromTypeMap[key];
90
+ break;
91
+ }
92
+ }
93
+ return result;
94
+ };
95
+ function randomString(e) {
96
+ e = e || 32;
97
+ var t = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
98
+ var a = t.length;
99
+ var n = '';
100
+ for (var i = 0; i < e; i++)
101
+ n += t.charAt(Math.floor(Math.random() * a));
102
+ return n;
103
+ }
104
+ var getCookie = function (cookieName) {
105
+ var cookie = '';
106
+ var cookieArr = document.cookie.split('; ');
107
+ for (var i = 0; i < cookieArr.length; i++) {
108
+ var valueArr = cookieArr[i].split('=');
109
+ if (valueArr[0] === cookieName) {
110
+ cookie = valueArr[1];
111
+ break;
112
+ }
113
+ }
114
+ return cookie;
115
+ };
116
+ // || 'cc51882c781d8035b98335ccb44787b42dd9d91ba3b85a45ff3e867857a526bfbbddcdc27b8edce9a52882d1838e0b8e6ccf658ed105df9a898b1c977c588bd1'
117
+ var buildUUID = function () {
118
+ var hexList = [];
119
+ for (var i = 0; i <= 15; i++) {
120
+ hexList[i] = i.toString(16);
121
+ }
122
+ var uuid = '';
123
+ for (var i = 1; i <= 36; i++) {
124
+ if (i === 9 || i === 14 || i === 19 || i === 24) {
125
+ uuid += '-';
126
+ }
127
+ else if (i === 15) {
128
+ uuid += 4;
129
+ }
130
+ else if (i === 20) {
131
+ uuid += hexList[(Math.random() * 4) | 8];
132
+ }
133
+ else {
134
+ uuid += hexList[(Math.random() * 16) | 0];
135
+ }
136
+ }
137
+ return uuid.replace(/-/g, '');
138
+ };
139
+ var getTicket = function () {
140
+ return localStorage.getItem('jsapiTicket');
141
+ };
142
+ var setTicket = function (jsapiTicket) {
143
+ return localStorage.setItem('jsapiTicket', jsapiTicket);
144
+ };
145
+ var removeTicket = function () {
146
+ return localStorage.removeItem('jsapiTicket');
147
+ };
148
+ var formateTimestamp = function (timestamp, type) {
149
+ if (type === void 0) { type = 'YYYY年MM月DD日 hh:mm:ss'; }
150
+ if (!timestamp) {
151
+ return '-';
152
+ }
153
+ var date = new Date(timestamp);
154
+ var year = date.getFullYear() + '';
155
+ var month = date.getMonth() + 1;
156
+ var day = date.getDate();
157
+ var houre = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
158
+ var minute = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
159
+ var second = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
160
+ var result = type.replace('YYYY', year + '').replace('MM', month + '').replace('DD', day + '').replace('hh', houre + '').replace('mm', minute + '').replace('ss', second + '');
161
+ return result;
162
+ };
163
+ var convertBase64UrlToBlob = function (urlData) {
164
+ // console.log('urlData', urlData)
165
+ // 将以base64的图片url数据转换为Blob
166
+ var bytes = window.atob(urlData.split(',')[1]); // 去掉url的头,并转换为byte
167
+ // 处理异常,将ascii码小于0的转换为大于0
168
+ var ab = new ArrayBuffer(bytes.length);
169
+ var ia = new Uint8Array(ab);
170
+ for (var i = 0; i < bytes.length; i++) {
171
+ ia[i] = bytes.charCodeAt(i);
172
+ }
173
+ return new Blob([ab], { type: 'image/png' });
174
+ };
175
+ var getEnvironment = function () {
176
+ var isMobile = window.navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i); // 是否手机端
177
+ var isWx = /micromessenger/i.test(navigator.userAgent); // 是否微信
178
+ var isComWx = /wxwork/i.test(navigator.userAgent); // 是否企业微信
179
+ if (isComWx && isMobile) { //手机端企业微信
180
+ return 'com-wx-mobile';
181
+ }
182
+ else if (isComWx && !isMobile) { //PC端企业微信
183
+ return 'com-wx-pc';
184
+ }
185
+ else if (isWx && isMobile) { // 手机端微信
186
+ return 'wx-mobile';
187
+ }
188
+ else if (isWx && !isMobile) { // PC端微信
189
+ return 'wx-pc';
190
+ }
191
+ else {
192
+ return 'other';
193
+ }
194
+ };
195
+ var getIsComWx = function () {
196
+ var isComWx = /wxwork/i.test(navigator.userAgent); // 是否企业微信
197
+ return isComWx;
198
+ };
199
+ var getIsDevelopment = function () {
200
+ var result = false;
201
+ if (location.origin === 'uat2-h5-wecom.hengdayun.com' || location.origin === '127.0.0.1:8081' || location.origin === 'localhost:8081') {
202
+ result = true;
203
+ }
204
+ return result;
205
+ };
206
+ // 处理时间,企微不能通过dayjs以及moment处理时间
207
+ // 过滤数组重复数据
208
+ var filterRepeat = function (arr, fieldName) {
209
+ var set = new Set();
210
+ return arr.filter(function (item) {
211
+ var key = item[fieldName];
212
+ if (set.has(key)) {
213
+ return false;
214
+ }
215
+ else {
216
+ set.add(key);
217
+ return true;
218
+ }
219
+ });
220
+ };
221
+ // 将 base64 转换为 Blob
222
+ var base64ToBlob = function (base64) {
223
+ var arr = base64.split(","), mime = arr[0].match(/:(.\*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
224
+ while (n--) {
225
+ u8arr[n] = bstr.charCodeAt(n);
226
+ }
227
+ return new Blob([u8arr], {
228
+ type: mime,
229
+ });
230
+ };
231
+ // 将 base64 转换为 File
232
+ var base64ToFile = function (base64, fileName) {
233
+ var arr = base64.split(",");
234
+ var mime = arr[0].match(/:(.*);/)[1];
235
+ var bstr = atob(arr[1]);
236
+ var n = bstr.length;
237
+ var u8arr = new Uint8Array(n);
238
+ while (n--) {
239
+ u8arr[n] = bstr.charCodeAt(n);
240
+ }
241
+ return new File([u8arr], fileName, { type: mime });
242
+ };
243
+ // 处理时间,企微不能通过dayjs以及moment处理时间
244
+ var isImage = function (type) {
245
+ return /^image\//i.test(type);
246
+ };
247
+ // 获取文件数据
248
+ var getFileData = function (optionName) {
249
+ var _a = optionName.split(','), _b = _a[0], name = _b === void 0 ? '' : _b, _c = _a[1], url = _c === void 0 ? '' : _c;
250
+ return {
251
+ name: decodeURIComponent(name),
252
+ url: decodeURIComponent(url)
253
+ };
254
+ };
255
+ // 验证是否为数字
256
+ var validateTwoDecimal = function (v) {
257
+ if (!v || v === '')
258
+ return true;
259
+ return /^(\d+)(\.\d{1,2})?$/.test(v.toString());
260
+ };
261
+ // 生成uuid
262
+ var uuid = function (len, radix) {
263
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
264
+ var uuid = [], i;
265
+ radix = radix || chars.length;
266
+ if (len) {
267
+ // Compact form
268
+ for (i = 0; i < len; i++)
269
+ uuid[i] = chars[0 | Math.random() * radix];
270
+ }
271
+ else {
272
+ // rfc4122, version 4 form
273
+ var r = void 0;
274
+ // rfc4122 requires these characters
275
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
276
+ uuid[14] = '4';
277
+ // Fill in random data. At i==19 set the high bits of clock sequence as
278
+ // per rfc4122, sec. 4.1.5
279
+ for (i = 0; i < 36; i++) {
280
+ if (!uuid[i]) {
281
+ r = 0 | Math.random() * 16;
282
+ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
283
+ }
284
+ }
285
+ }
286
+ return uuid.join('');
287
+ };
288
+ var getToken = function (cacheType, key) {
289
+ var token = '';
290
+ var cacheTypeToLower = cacheType.toLowerCase();
291
+ if (cacheTypeToLower === 'localstorage') {
292
+ token = localStorage.getItem('token' ) || '';
293
+ }
294
+ else if (cacheTypeToLower === 'sessionstorage') {
295
+ token = sessionStorage.getItem('token' ) || '';
296
+ }
297
+ else {
298
+ token = localStorage.getItem('token' ) || sessionStorage.getItem('token') || '';
299
+ }
300
+ return token;
301
+ };
302
+ var removeToken = function (cacheType, key) {
303
+ var cacheTypeToLower = cacheType.toLowerCase();
304
+ if (cacheTypeToLower === 'localstorage') {
305
+ localStorage.removeItem('token' );
306
+ }
307
+ else if (cacheTypeToLower === 'sessionstorage') {
308
+ sessionStorage.removeItem('token' );
309
+ }
310
+ else {
311
+ localStorage.removeItem('token' );
312
+ sessionStorage.getItem('token' );
313
+ }
314
+ };
315
+
316
+ /**
317
+ * 时间处理相关
318
+ * @packageDocumentation
319
+ * @module Date
320
+ * @preferred
321
+ */
322
+ /**
323
+ * 解决ios不支持 new Date('2020-02-02')问题
324
+ #### 使用说明
325
+ ```
326
+ compatibleDate('2020-03-04') 返回 2020/03/04
327
+ compatibleDate(Date.now()) 返回 Date.now()
328
+ compatibleDate(new Date()) 返回 new Date()
329
+ ```
330
+ */
331
+ function compatibleDate(date) {
332
+ if (typeof date === 'string') {
333
+ return date.replace(/-/g, '/');
334
+ }
335
+ return date;
336
+ }
337
+ /**
338
+ * 调用原生 new Date 返回 Date实例 解决ios不支持 yyyy-MM-dd HH:mm:ss 格式new Date
339
+ #### 使用说明
340
+ ```
341
+ newDate() 返回 new Date()
342
+ newDate('2020-03-04') 返回 new Date('2020-03-04')
343
+ ```
344
+ */
345
+ function newDate(date) {
346
+ if (!date)
347
+ return new Date();
348
+ return new Date(compatibleDate(date));
349
+ }
350
+ /**
351
+ * 格式化时间
352
+ #### 使用说明
353
+ ```
354
+ formatTime() 返回 yyyy-MM-dd HH:mm:ss 格式的当前时间
355
+ formatTime('2018-02-02 00:00:00') 返回 2018-02-02 00:00:00
356
+ formatTime('2018-02-02', 'yyyy/MM/dd') 返回 2018/02/02
357
+ formatTime('2018-02-02 23:50:50', 'yyyy/MM/dd HH:mm:ss') 返回 2018/02/02 23:50:50
358
+ formatTime('2018-02-02 23:50:50', 'MM/dd HH:mm:ss') 返回 02/02 23:50:50
359
+ formatTime(new Date('2018-02-02 23:50:50') + 200, 'yyyy/MM/dd HH:mm:ss S') 返回 2018/02/02 23:50:50 200
360
+ ```
361
+ */
362
+ function formatTime(date, fmt) {
363
+ if (date === void 0) { date = Date.now(); }
364
+ if (fmt === void 0) { fmt = 'yyyy-MM-dd HH:mm:ss'; }
365
+ date = compatibleDate(date);
366
+ date = new Date(date);
367
+ var o = {
368
+ 'M+': date.getMonth() + 1,
369
+ 'd+': date.getDate(),
370
+ 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
371
+ 'H+': date.getHours(),
372
+ 'm+': date.getMinutes(),
373
+ 's+': date.getSeconds(),
374
+ 'q+': Math.floor((date.getMonth() + 3) / 3),
375
+ S: date.getMilliseconds(),
376
+ };
377
+ if (/(y+)/.test(fmt)) {
378
+ fmt = fmt.replace(RegExp.$1, ("" + date.getFullYear()).substr(4 - RegExp.$1.length));
379
+ }
380
+ Object.keys(o).forEach(function (k) {
381
+ if (new RegExp("(" + k + ")").test(fmt)) {
382
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
383
+ }
384
+ });
385
+ return fmt;
386
+ }
387
+ /**
388
+ * 格式化相对时间
389
+ #### 使用说明
390
+ ```
391
+ fromNow('') 返回 -
392
+ fromNow(Date.now() - 2000) 返回 刚刚
393
+ fromNow(now - 3420 * 1000) 返回 58分钟前面
394
+ fromNow(now - 3600 * 1000 * 3) 返回 3小时前
395
+ fromNow(now - 3600 * 1000 * 24 * 1.5) 返回 1天前
396
+ fromNow(now - day5) 返回 当前时间的5天前日期 格式 yyyy年MM月dd日 HH时mm分ss秒
397
+ fromNow(Date.now() + 2000) 返回 Date.now() + 2000
398
+ fromNow('', '', 'defaultValue') 等于 defaultValue
399
+ ```
400
+ */
401
+ function fromNow(time, fmt, defaultValue) {
402
+ if (fmt === void 0) { fmt = 'yyyy年MM月dd日 HH时mm分ss秒'; }
403
+ if (defaultValue === void 0) { defaultValue = '-'; }
404
+ if (isEmpty(time)) {
405
+ return defaultValue;
406
+ }
407
+ time = compatibleDate(time);
408
+ var d = new Date(time);
409
+ var now = Date.now();
410
+ var diff = (now - d.getTime()) / 1000;
411
+ if (diff < 0) {
412
+ return time;
413
+ }
414
+ if (diff < 30) {
415
+ return '刚刚';
416
+ }
417
+ if (diff < 3600) {
418
+ return Math.ceil(diff / 60) + "\u5206\u949F\u524D";
419
+ }
420
+ if (diff < 3600 * 24) {
421
+ return Math.floor(diff / 3600) + "\u5C0F\u65F6\u524D";
422
+ }
423
+ if (diff < 3600 * 24 * 2) {
424
+ return '1天前';
425
+ }
426
+ return formatTime(time, fmt);
427
+ }
428
+ /**
429
+ * 增加日期天数
430
+ #### 使用说明
431
+ ```
432
+ addDays('') 返回 -
433
+ addDays('2018-02-02') 返回 2018-02-02
434
+ addDays('2018-02-02', 2) 返回 2018-02-04
435
+ addDays('2018-02-02', 2, 'yyyy/MM/dd') 返回 2018/02/04
436
+ addDays(new Date('2020-03-04'), 2, 'yyyy/MM/dd') 返回 2020/03/06
437
+ addDays(Date.now(), 2, 'yyyy/MM/dd') 返回 今天 + 2天
438
+ ```
439
+ */
440
+ function addDays(date, days, fmt) {
441
+ if (days === void 0) { days = 0; }
442
+ if (fmt === void 0) { fmt = 'yyyy-MM-dd'; }
443
+ if (isEmpty(date)) {
444
+ return '-';
445
+ }
446
+ date = compatibleDate(date);
447
+ var d = new Date(date);
448
+ d.setDate(d.getDate() + Number(days));
449
+ return formatTime(d, fmt);
450
+ }
451
+ // 获取当前时间月份
452
+
453
+ /*! *****************************************************************************
454
+ Copyright (c) Microsoft Corporation.
455
+
456
+ Permission to use, copy, modify, and/or distribute this software for any
457
+ purpose with or without fee is hereby granted.
458
+
459
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
460
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
461
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
462
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
463
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
464
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
465
+ PERFORMANCE OF THIS SOFTWARE.
466
+ ***************************************************************************** */
467
+
468
+ function __awaiter(thisArg, _arguments, P, generator) {
469
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
470
+ return new (P || (P = Promise))(function (resolve, reject) {
471
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
472
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
473
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
474
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
475
+ });
476
+ }
477
+
478
+ function __generator(thisArg, body) {
479
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
480
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
481
+ function verb(n) { return function (v) { return step([n, v]); }; }
482
+ function step(op) {
483
+ if (f) throw new TypeError("Generator is already executing.");
484
+ while (_) try {
485
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
486
+ if (y = 0, t) op = [op[0] & 2, t.value];
487
+ switch (op[0]) {
488
+ case 0: case 1: t = op; break;
489
+ case 4: _.label++; return { value: op[1], done: false };
490
+ case 5: _.label++; y = op[1]; op = [0]; continue;
491
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
492
+ default:
493
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
494
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
495
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
496
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
497
+ if (t[2]) _.ops.pop();
498
+ _.trys.pop(); continue;
499
+ }
500
+ op = body.call(thisArg, _);
501
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
502
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
503
+ }
504
+ }
505
+
506
+ /**
507
+ * number处理相关
508
+ * @packageDocumentation
509
+ * @module Number
510
+ * @preferred
511
+ */
512
+ /**
513
+ * 千分位格式化
514
+ #### 使用说明
515
+ ```
516
+ toThousands(1) => 1
517
+ toThousands(12345) => 12,345
518
+ toThousands('12323.12') 返回 '12,323.12'
519
+ ```
520
+ */
521
+ function toThousands(num, defaultValue) {
522
+ if (defaultValue === void 0) { defaultValue = '-'; }
523
+ if (isEmpty(num)) {
524
+ return defaultValue;
525
+ }
526
+ var val = num.toString();
527
+ if (!val.includes('.')) {
528
+ val += '.';
529
+ }
530
+ return val.replace(/\d(?=(\d{3})+\.)/g, function ($0) { return $0 + ","; }).replace(/\.$/, '');
531
+ }
532
+ /**
533
+ * 阿拉伯数组转中文数字
534
+ #### 使用说明
535
+ ```
536
+ convertCurrency(0) 返回 '壹拾贰元壹角贰分'
537
+ convertCurrency(1234567809) 返回 '壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰零玖元整'
538
+ ```
539
+ * @param {number} money 金额
540
+ */
541
+ function convertCurrency(money) {
542
+ if (money === void 0) { money = ''; }
543
+ var maxNum = 999999999999999.9999; // 最大处理的数字
544
+ if (isEmpty(money)) {
545
+ return '';
546
+ }
547
+ if (Number(money) >= maxNum) {
548
+ // 超出最大处理数字
549
+ return money;
550
+ }
551
+ var cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
552
+ var cnIntRadice = ['', '拾', '佰', '仟'];
553
+ var cnIntUnits = ['', '万', '亿', '兆']; // 对应整数部分扩展单位
554
+ var cnDecUnits = ['角', '分', '毫', '厘']; // 对应小数部分单位
555
+ var cnInteger = '整'; // 整数金额时后面跟的字符
556
+ var cnIntLast = '元'; // 整型完以后的单位
557
+ var integerNum; // 金额整数部分
558
+ var decimalNum; // 金额小数部分
559
+ var chineseStr = ''; // 输出的中文金额字符串
560
+ var parts; // 分离金额后用的数组,预定义
561
+ money = parseFloat(money).toString();
562
+ if (money === '0') {
563
+ chineseStr = cnNums[0] + cnIntLast + cnInteger;
564
+ return chineseStr;
565
+ }
566
+ // 转换为字符串
567
+ money = money.toString();
568
+ if (money.indexOf('.') === -1) {
569
+ integerNum = money;
570
+ decimalNum = '';
571
+ }
572
+ else {
573
+ parts = money.split('.');
574
+ integerNum = parts[0];
575
+ decimalNum = parts[1].substr(0, 4);
576
+ }
577
+ // 获取整型部分转换
578
+ if (parseInt(integerNum, 10) > 0) {
579
+ var zeroCount = 0;
580
+ var intLen = integerNum.length;
581
+ for (var i = 0; i < intLen; i += 1) {
582
+ var n = integerNum.substr(i, 1);
583
+ var p = intLen - i - 1;
584
+ var q = p / 4;
585
+ var m = p % 4;
586
+ if (n === '0') {
587
+ zeroCount += 1;
588
+ }
589
+ else {
590
+ if (zeroCount > 0) {
591
+ chineseStr += cnNums[0];
592
+ }
593
+ // 归零
594
+ zeroCount = 0;
595
+ chineseStr += cnNums[parseInt(n, 10)] + cnIntRadice[m];
596
+ }
597
+ if (m === 0 && zeroCount < 4) {
598
+ chineseStr += cnIntUnits[q];
599
+ }
600
+ }
601
+ chineseStr += cnIntLast;
602
+ }
603
+ // 小数部分
604
+ if (decimalNum !== '') {
605
+ var decLen = decimalNum.length;
606
+ for (var i = 0; i < decLen; i += 1) {
607
+ var dn = decimalNum.substr(i, 1);
608
+ if (dn !== '0') {
609
+ chineseStr += cnNums[Number(dn)] + cnDecUnits[i];
610
+ }
611
+ }
612
+ }
613
+ if (chineseStr === '') {
614
+ chineseStr += cnNums[0] + cnIntLast + cnInteger;
615
+ }
616
+ else if (decimalNum === '') {
617
+ chineseStr += cnInteger;
618
+ }
619
+ return chineseStr;
620
+ }
621
+ /**
622
+ * 格式化小数位
623
+ #### 使用说明
624
+ ```
625
+ formatFloat('1.2345') 返回 '1.23'
626
+ formatFloat('1.2345', 3) 返回 '1.235'
627
+ formatFloat('1', 3) 返回 '1.000'
628
+ ```
629
+ * @param {*} val 小数
630
+ * @param {number} [pos=2] 保留的小数位
631
+ */
632
+ function formatFloat(val, pos) {
633
+ if (pos === void 0) { pos = 2; }
634
+ var f = parseFloat(String(val));
635
+ if (Number.isNaN(f)) {
636
+ return '';
637
+ }
638
+ f = Math.round(Number(val) * Math.pow(10, pos)) / Math.pow(10, pos); // pow 幂
639
+ var s = f.toString();
640
+ var rs = s.indexOf('.');
641
+ if (rs < 0) {
642
+ rs = s.length;
643
+ s += '.';
644
+ }
645
+ while (s.length <= rs + pos) {
646
+ s += '0';
647
+ }
648
+ return s;
649
+ }
650
+ /**
651
+ * 向上取整
652
+ #### 使用说明
653
+ ```
654
+ ceil('1.23') 返回 2
655
+ ceil('1.234', 2) 返回 1.24
656
+ ceil('1.230', 2) 返回 1.23
657
+ ```
658
+ * @param {*} val
659
+ * @param {number} [pos=2] 保留的小数位
660
+ */
661
+ function ceil(val, pos) {
662
+ if (pos === void 0) { pos = 0; }
663
+ if (isEmpty(val)) {
664
+ return val;
665
+ }
666
+ var swell = Math.pow(10, pos);
667
+ var swellVal = Number(val) * swell;
668
+ var newVal = Math.ceil(swellVal) / swell;
669
+ return newVal;
670
+ }
671
+ /**
672
+ * 向下取整
673
+ #### 使用说明
674
+ ```
675
+ floor('1.23') 返回 1
676
+ floor('1.234', 2) 返回 1.23
677
+ floor('1.230', 2) 返回 1.23
678
+ ```
679
+ * @param {*} val
680
+ * @param {number} [pos=2] 保留的小数位
681
+ */
682
+ function floor(val, pos) {
683
+ if (pos === void 0) { pos = 0; }
684
+ if (isEmpty(val)) {
685
+ return val;
686
+ }
687
+ var swell = Math.pow(10, pos);
688
+ var swellVal = Number(val) * swell;
689
+ return Math.floor(swellVal) / swell;
690
+ }
691
+
692
+ /**
693
+ * 文件处理相关
694
+ * @packageDocumentation
695
+ * @module File
696
+ * @preferred
697
+ */
698
+ /**
699
+ * 计算文件大小
700
+ #### 使用说明
701
+ ```
702
+ calcFileSize(100) 返回 { size: 100, unit: 'B' }
703
+ calcFileSize(1024) 返回 { size: 1, unit: 'KB' }
704
+ calcFileSize(1024, 'KB') 返回 { size: 1, unit: 'MB' }
705
+ calcFileSize(1126.4, 'mb') 返回 { size: 1.1, unit: 'GB' }
706
+ calcFileSize(Math.pow(1024, 2), 'kb') 返回 { size: 1, unit: 'GB' }
707
+ ```
708
+ * @param size 单位 k
709
+ * @returns number
710
+ */
711
+ function calcFileSize(size, unit) {
712
+ if (unit === void 0) { unit = 'B'; }
713
+ var unitList = ['B', 'KB', 'MB', 'GB', 'TB'];
714
+ var currentUnitIndex = unitList.indexOf(unit.toUpperCase());
715
+ currentUnitIndex = currentUnitIndex === -1 ? 0 : currentUnitIndex;
716
+ // todo 单位换算。
717
+ while (size >= 1024 && currentUnitIndex < unitList.length) {
718
+ size = size / 1024;
719
+ currentUnitIndex += 1;
720
+ }
721
+ return {
722
+ size: size,
723
+ unit: unitList[currentUnitIndex],
724
+ };
725
+ }
726
+ /**
727
+ * 文件大小转换
728
+ #### 使用说明
729
+ ```
730
+ fileSizeFormat('') 返回 -
731
+ fileSizeFormat('1024') 返回 1KB
732
+ fileSizeFormat('1024', 'KB') 返回 1MB
733
+ fileSizeFormat('2645', 'B') 返回 ceil(2645 / 1024, 2)MB
734
+ ```
735
+ * @param {string} str 字符串 单位k
736
+ */
737
+ function fileSizeFormat(str, unit, defaultValue) {
738
+ if (unit === void 0) { unit = 'B'; }
739
+ if (defaultValue === void 0) { defaultValue = '-'; }
740
+ if (isEmpty(str)) {
741
+ return defaultValue;
742
+ }
743
+ var o = calcFileSize(parseFloat(str.toString()), unit);
744
+ return "" + ceil(o.size, 2) + o.unit;
745
+ }
746
+ /**
747
+ * base64转换为file
748
+ * dataurl base64图片
749
+ * */
750
+ function dataURLtoBlob(dataurl) {
751
+ var mime = dataurl.match(/:(.*?);/)[1];
752
+ var bytes = window.atob(dataurl.split(',')[1]); // 去掉url的头,并转换为byte
753
+ // 处理异常,将ascii码小于0的转换为大于0
754
+ var ab = new ArrayBuffer(bytes.length);
755
+ var ia = new Uint8Array(ab);
756
+ for (var i = 0; i < bytes.length; i += 1) {
757
+ ia[i] = bytes.charCodeAt(i);
758
+ }
759
+ return new Blob([ab], { type: mime });
760
+ }
761
+ function blobToDataURL(blob) {
762
+ return new Promise(function (resolve, reject) {
763
+ var reader = new FileReader();
764
+ reader.onload = function (e) {
765
+ if (!e || !e.target) {
766
+ reject(e);
767
+ }
768
+ else {
769
+ resolve(e.target.result);
770
+ }
771
+ };
772
+ reader.onerror = function (err) {
773
+ reject(err);
774
+ };
775
+ reader.readAsDataURL(blob);
776
+ });
777
+ }
778
+ /**
779
+ * 压缩图片方法
780
+ * @param file 图片
781
+ * @param scaleCallback 宽高 压缩规则
782
+ * @param qualityCallback 质量 压缩规则
783
+ */
784
+ function compressImg(file, scaleCallback, qualityCallback) {
785
+ return new Promise(function (resolve, reject) {
786
+ var fileSize = parseFloat((file.size / 1024 / 1024).toString());
787
+ var read = new FileReader();
788
+ read.onload = function (e) {
789
+ var img = new Image();
790
+ img.onload = function () {
791
+ // 读取图片宽高
792
+ var w = img.width;
793
+ var h = img.height;
794
+ // 生成canvas
795
+ var canvas = document.createElement('canvas');
796
+ var ctx = canvas.getContext('2d');
797
+ // 处理函数返回的不是 number & NaN 类型的情况
798
+ var scale = scaleCallback ? scaleCallback(w, h) : 1;
799
+ if (Number.isNaN(scale) || typeof scale !== 'number') {
800
+ scale = 1;
801
+ }
802
+ var quality = qualityCallback ? qualityCallback(fileSize, scale, w, h) : 1;
803
+ if (Number.isNaN(quality) || typeof quality !== 'number') {
804
+ quality = 1;
805
+ }
806
+ // 图片 缩放规则
807
+ if (ctx) {
808
+ var scaleW = parseInt((w * scale).toString(), 10);
809
+ var scaleH = parseInt((h * scale).toString(), 10);
810
+ // 创建属性节点
811
+ canvas.setAttribute('width', scaleW.toString());
812
+ canvas.setAttribute('height', scaleH.toString());
813
+ ctx.drawImage(img, 0, 0, scaleW, scaleH);
814
+ }
815
+ // 图片质量 压缩
816
+ var base64 = canvas.toDataURL(file.type, quality);
817
+ resolve(dataURLtoBlob(base64));
818
+ };
819
+ img.onerror = function (evt) {
820
+ reject(evt);
821
+ };
822
+ if (e.target) {
823
+ img.src = e.target.result;
824
+ }
825
+ };
826
+ read.onerror = function (e) {
827
+ reject(e);
828
+ };
829
+ read.readAsDataURL(file);
830
+ });
831
+ }
832
+ /**
833
+ * 生成导出函数
834
+ */
835
+ function genExportByBlob(_a) {
836
+ var axiosRequest = _a.axiosRequest, _b = _a.notWithCredentials, notWithCredentials = _b === void 0 ? [] : _b;
837
+ return function exportByBlob(config) {
838
+ var _this = this;
839
+ var filename = config.filename;
840
+ var url = config.url, _a = config.data, data = _a === void 0 ? {} : _a, _b = config.params, params = _b === void 0 ? {} : _b, _c = config.method, method = _c === void 0 ? 'post' : _c;
841
+ return new Promise(function (resolve, reject) {
842
+ axiosRequest({
843
+ method: method,
844
+ url: url,
845
+ data: data,
846
+ params: params,
847
+ responseType: 'blob',
848
+ config: {
849
+ withCredentials: notWithCredentials.some(function (str) {
850
+ return !url.includes(str);
851
+ }),
852
+ },
853
+ }).then(function (res) { return __awaiter(_this, void 0, void 0, function () {
854
+ var response, reader_1, headers, contentDisposition, responseFilename, splitFileName, suffix, blob, downloadElement, href;
855
+ return __generator(this, function (_a) {
856
+ switch (_a.label) {
857
+ case 0:
858
+ response = res === null || res === void 0 ? void 0 : res.data;
859
+ if (!(response.type === 'application/json')) return [3 /*break*/, 1];
860
+ reader_1 = new FileReader();
861
+ reader_1.readAsText(response, 'utf-8');
862
+ reader_1.onload = function () {
863
+ var result = {};
864
+ try {
865
+ result = JSON.parse(reader_1.result);
866
+ }
867
+ catch (e) {
868
+ result = response;
869
+ }
870
+ // Message.error((result && result.message) || '导出失败');
871
+ reject(result);
872
+ };
873
+ return [3 /*break*/, 3];
874
+ case 1:
875
+ try {
876
+ headers = res.headers;
877
+ contentDisposition = headers['content-disposition'];
878
+ responseFilename = decodeURIComponent(contentDisposition.split(';')[1].split('filename=')[1]);
879
+ // 有传文件名称&不带后缀 使用服务端的文件拓展名
880
+ if (filename && !filename.includes('.')) {
881
+ splitFileName = responseFilename.split('.');
882
+ suffix = splitFileName[splitFileName.length - 1];
883
+ filename += "." + suffix;
884
+ }
885
+ else if (!filename) {
886
+ filename = responseFilename;
887
+ }
888
+ }
889
+ catch (e) {
890
+ // 默认名称
891
+ if (!filename) {
892
+ filename = 'download.xlsx';
893
+ }
894
+ }
895
+ blob = new Blob([res.data]);
896
+ downloadElement = document.createElement('a');
897
+ return [4 /*yield*/, blobToDataURL(blob)];
898
+ case 2:
899
+ href = _a.sent();
900
+ downloadElement.href = href;
901
+ downloadElement.download = filename;
902
+ document.body.appendChild(downloadElement);
903
+ downloadElement.click(); // 点击下载
904
+ document.body.removeChild(downloadElement); // 下载完成移除元素
905
+ // window.URL.revokeObjectURL(href);
906
+ resolve(res);
907
+ _a.label = 3;
908
+ case 3: return [2 /*return*/];
909
+ }
910
+ });
911
+ }); }).catch(function (e) {
912
+ reject(e);
913
+ });
914
+ });
915
+ };
916
+ }
917
+
918
+ /**
919
+ * object处理相关
920
+ * @packageDocumentation
921
+ * @module Object
922
+ * @preferred
923
+ */
924
+ /**
925
+ * 比较两者的值是否相等
926
+ #### 使用说明
927
+ ```
928
+ deepEqual({a: 10}, {a: 10}) 返回 true
929
+ deepEqual({a: 10}, {a: 10, b: 20}) 返回 false
930
+ ```
931
+ * @param {*} x 用来比较的值
932
+ * @param {*} y 另一个用来比较的值
933
+ */
934
+ function deepEqual(x, y) {
935
+ var ok = Object.keys, tx = typeof x, ty = typeof y;
936
+ return x && y && tx === 'object' && tx === ty
937
+ ? ok(x).length === ok(y).length && ok(x).every(function (key) { return deepEqual(x[key], y[key]); })
938
+ : x === y;
939
+ }
940
+ function getNodePath(node, nodeValue, nodeKey, childrenKey, path) {
941
+ if (path === void 0) { path = []; }
942
+ path.push(node);
943
+ if (node[nodeKey] === nodeValue) {
944
+ throw 'GOT IT!';
945
+ }
946
+ if (node[childrenKey] && node[childrenKey].length > 0) {
947
+ for (var i = 0; i < node[childrenKey].length; i++) {
948
+ getNodePath(node[childrenKey][i], nodeValue, nodeKey, childrenKey, path);
949
+ }
950
+ }
951
+ path.pop();
952
+ }
953
+ /**
954
+ * 查找树结构节点路径
955
+ * @param {*} nodeValue 节点值
956
+ * @param {string} nodeKey 节点键
957
+ * @param {Array} treeArray 树数据
958
+ * @param {string} children 子集键
959
+ */
960
+ function findNodePath(nodeValue, nodeKey, treeArray, childrenKey) {
961
+ var path = [];
962
+ try {
963
+ for (var i = 0; i < treeArray.length; i++) {
964
+ getNodePath(treeArray[i], nodeValue, nodeKey, childrenKey, path);
965
+ }
966
+ }
967
+ catch (e) {
968
+ return path;
969
+ }
970
+ }
971
+
972
+ /**
973
+ * validate处理相关
974
+ * @packageDocumentation
975
+ * @module Validate
976
+ * @preferred
977
+ */
978
+ /** 是否是外部网址
979
+ * @param {string} path
980
+ * @returns {Boolean}
981
+ */
982
+ function isExternal(path) {
983
+ return /^(https?:|mailto:|tel:)/.test(path);
984
+ }
985
+ /**
986
+ * 去掉前后空格
987
+ * @param {*} str
988
+ */
989
+ function trimVal(str) {
990
+ if (!str) {
991
+ return str;
992
+ }
993
+ var reg = /^\s+|\s+$/g;
994
+ return str.replace(reg, '');
995
+ }
996
+ /**
997
+ * 校验 手机
998
+ * @param {*} val
999
+ */
1000
+ function isMobile(val) {
1001
+ var reg = /^0?(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/;
1002
+ return reg.test(val.toString());
1003
+ }
1004
+ /**
1005
+ * 校验 手机
1006
+ * 规则: 以1为开头,总共11位数
1007
+ * @export
1008
+ * @param {*} val
1009
+ * @returns
1010
+ */
1011
+ function isMobileSimple(val) {
1012
+ var reg = /^1/;
1013
+ val = val.toString();
1014
+ return reg.test(val) && val.length === 11;
1015
+ }
1016
+ /**
1017
+ * 校验 固定电话
1018
+ * 规则: 必须带区号
1019
+ * @param {*} val
1020
+ */
1021
+ function isTelephone(val) {
1022
+ var reg = /^0[1-9][0-9]{1,2}-[2-8][0-9]{6,7}$/;
1023
+ return reg.test(String(val));
1024
+ }
1025
+ /**
1026
+ * 校验 邮箱
1027
+ * @param {*} val
1028
+ */
1029
+ function isEmail(val) {
1030
+ /* eslint-disable no-useless-escape */
1031
+ var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
1032
+ return reg.test(val);
1033
+ }
1034
+ /**
1035
+ * 校验 QQ
1036
+ * @param {*} val
1037
+ */
1038
+ function isQQ(val) {
1039
+ var reg = /^[1-9][0-9]{4,9}$/gim;
1040
+ return reg.test(String(val));
1041
+ }
1042
+
1043
+ /**
1044
+ * string处理相关
1045
+ * @packageDocumentation
1046
+ * @module String
1047
+ * @preferred
1048
+ */
1049
+ /**
1050
+ * 空值处理
1051
+ */
1052
+ function formatEmptyValue(value, defaultValue) {
1053
+ if (defaultValue === void 0) { defaultValue = '-'; }
1054
+ if (isEmpty(value)) {
1055
+ return defaultValue;
1056
+ }
1057
+ return value;
1058
+ }
1059
+ /**
1060
+ * 格式化手机
1061
+ #### 使用说明
1062
+ * ```
1063
+ * formatPhone('18211572781') => '182 1157 2781'
1064
+ * formatPhone('18211572781', '-') => '182-1157-2781'
1065
+ * ```
1066
+ * @param {string | number} phone 手机号
1067
+ * @param {string} [separator=' '] 连接符
1068
+ */
1069
+ function formatPhone(phone, separator, defaultValue) {
1070
+ if (separator === void 0) { separator = ' '; }
1071
+ if (defaultValue === void 0) { defaultValue = '-'; }
1072
+ if (isEmpty(phone)) {
1073
+ return defaultValue;
1074
+ }
1075
+ if (phone.toString().length !== 11) {
1076
+ return phone;
1077
+ }
1078
+ var val = phone.toString().replace(/[^\d]/g, '');
1079
+ var arr = val.split('');
1080
+ var str = '';
1081
+ arr.forEach(function (v, index) {
1082
+ if (index === 3 || index === 7) {
1083
+ str += separator;
1084
+ }
1085
+ str += v;
1086
+ });
1087
+ return str;
1088
+ }
1089
+ /**
1090
+ * 隐藏手机号
1091
+ #### 使用说明
1092
+ * ```
1093
+ * formatPhoneHide('18211572781') => '182****2781'
1094
+ * formatPhoneHide('', '-') => '-'
1095
+ * ```
1096
+ * @param {string | number} phone 手机号
1097
+ * @param {string} defaultValue 没有值放回的默认值
1098
+ */
1099
+ function formatPhoneHide(phone, defaultValue) {
1100
+ if (defaultValue === void 0) { defaultValue = ''; }
1101
+ if (isEmpty(phone)) {
1102
+ return defaultValue;
1103
+ }
1104
+ if (phone.toString().length !== 11) {
1105
+ return phone;
1106
+ }
1107
+ var phoneNumber = phone.toString();
1108
+ return phoneNumber.substr(0, 3) + "****" + phoneNumber.substr(7, 11);
1109
+ }
1110
+ /**
1111
+ * 格式化银行卡 (4位一空格)
1112
+ #### 使用说明
1113
+ * ```
1114
+ * formatBank('6282356862823568123') => '6282 3568 6282 3568 123'
1115
+ * formatBank('', '-') => '-'
1116
+ * ```
1117
+ * @param {strubg | number} val 银行卡号
1118
+ * @param {string} defaultValue 没有值放回的默认值
1119
+ */
1120
+ function formatBank(val, defaultValue) {
1121
+ if (defaultValue === void 0) { defaultValue = ''; }
1122
+ if (isEmpty(val)) {
1123
+ return defaultValue;
1124
+ }
1125
+ return val.toString().replace(/\s/g, '').replace(/(.{4})/g, '$1 ');
1126
+ }
1127
+ /**
1128
+ * 生成26个字母列表
1129
+ #### 使用说明
1130
+ * ```
1131
+ * generateEnglishLetters() => ['A', ..., 'Z'];
1132
+ * ```
1133
+ */
1134
+ function generateEnglishLetters() {
1135
+ var englishLettersList = [];
1136
+ for (var i = 65; i < 91; i += 1) {
1137
+ englishLettersList.push(String.fromCharCode(i));
1138
+ }
1139
+ return englishLettersList;
1140
+ }
1141
+ /**
1142
+ * 驼峰式命名转短横线命名
1143
+ *
1144
+ * @export
1145
+ * @param {*} [string='']
1146
+ * @returns
1147
+ */
1148
+ function humpTurnDashed(string) {
1149
+ if (string === void 0) { string = ''; }
1150
+ var rE = /\B([A-Z])/g;
1151
+ return string.replace(rE, '-$1').toLowerCase();
1152
+ }
1153
+
1154
+ var httpEnum = {
1155
+ // http响应状态码
1156
+ HTTP_STATUS: {
1157
+ // 1xx,临时响应
1158
+ TEMP_RESPOND: {
1159
+ Continue: 100,
1160
+ SwitchingProtocal: 101 // 针对请求头的Upgrade返回的信息。表明服务器正在切换到指定的协议
1161
+ },
1162
+ // 2xx,成功
1163
+ SUCCESS: {
1164
+ Ok: 200,
1165
+ Created: 201,
1166
+ Accepted: 202,
1167
+ NoAuthoritativeInformation: 203,
1168
+ NoContent: 204,
1169
+ ResetContent: 205,
1170
+ ParticalContent: 206 // 客户端使用Range请求头时,返回该状态码
1171
+ },
1172
+ // 3xx,重定向
1173
+ REDIRECT: {
1174
+ MultipleChoice: 300,
1175
+ MovedPermanently: 301,
1176
+ Found: 302,
1177
+ SeeOther: 303,
1178
+ NotModified: 304,
1179
+ TemporaryRedirect: 307,
1180
+ PermanentRedirect: 308 // 永久重定向。基本和301相同。但是严格禁止修改请求方式和请求体。
1181
+ },
1182
+ // 4xx,请求错误
1183
+ REQUEST_ERROR: {
1184
+ BadRequest: 400,
1185
+ UnAuthorized: 401,
1186
+ Forbidden: 403,
1187
+ NotFound: 404,
1188
+ MethodNotAllowed: 405,
1189
+ NotAccepted: 406,
1190
+ ProxyAuthorizationRequired: 407,
1191
+ RequestTimeout: 408,
1192
+ UpgradeRequired: 426,
1193
+ TokenUnAuthorized: 499,
1194
+ },
1195
+ // 5xx,服务器错误
1196
+ SERVER_ERROR: {
1197
+ InternalServerError: 500,
1198
+ BadGateway: 502,
1199
+ ServiceUnavailable: 503,
1200
+ GateTimeout: 504,
1201
+ HttpVersionNotSupported: 505 // 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码。
1202
+ }
1203
+ },
1204
+ // http状态码
1205
+ CODES: {
1206
+ Success: '00000',
1207
+ UnAuthorized: '00099',
1208
+ UnAuthorizedPhone: '11001',
1209
+ UnAuthorizedWecom: '11000',
1210
+ UnAuthorizedHavePhone: '11002',
1211
+ },
1212
+ // http状态码白名单,在具体业务中处理
1213
+ ERR_CODE_WHITE_LIST: []
1214
+ };
1215
+
1216
+ var request = axios__default["default"].create({
1217
+ timeout: 15000,
1218
+ headers: {
1219
+ // 'Authorization': getToken(),
1220
+ "Content-Type": "application/json",
1221
+ },
1222
+ });
1223
+ // const requestArr = [request];
1224
+ /**
1225
+ * @param cacheType localStorage | sessionStorage | both
1226
+ * @param currentMode local | dev | test | prod 等自定义mode
1227
+ * @param errorCb 错误回调
1228
+ * @param getTokenCb 获取token的回调
1229
+ * @param tokenKey
1230
+ * */
1231
+ var http = function (_a) {
1232
+ var cacheType = _a.cacheType, currentMode = _a.currentMode, errorCb = _a.errorCb, getTokenCb = _a.getTokenCb; _a.tokenKey;
1233
+ request.interceptors.request.use(function (config) { return __awaiter(void 0, void 0, void 0, function () {
1234
+ var token, deviceType;
1235
+ return __generator(this, function (_a) {
1236
+ token = getToken(cacheType);
1237
+ deviceType = getDeviceType();
1238
+ config.headers.Authorization = token;
1239
+ config.headers.token = token;
1240
+ config.headers.FrontType = getFromType(deviceType);
1241
+ return [2 /*return*/, config];
1242
+ });
1243
+ }); }, function (error) {
1244
+ // do something with request error
1245
+ return Promise.reject(error);
1246
+ });
1247
+ // response interceptor
1248
+ request.interceptors.response.use(function (response) { return __awaiter(void 0, void 0, void 0, function () {
1249
+ var res, statusCode, errMsg;
1250
+ return __generator(this, function (_a) {
1251
+ res = response.data;
1252
+ statusCode = res.code || response.status;
1253
+ // blob文件流
1254
+ if (res instanceof Blob) {
1255
+ return [2 /*return*/, res];
1256
+ }
1257
+ // 成功
1258
+ if (statusCode === httpEnum.CODES.Success) {
1259
+ return [2 /*return*/, res];
1260
+ }
1261
+ // token失效
1262
+ if (statusCode === httpEnum.CODES.UnAuthorized) {
1263
+ if (currentMode !== "local" && currentMode !== "dev" && currentMode !== 'development') {
1264
+ removeToken(cacheType);
1265
+ if (getTokenCb && typeof getTokenCb === "function") {
1266
+ getTokenCb();
1267
+ }
1268
+ }
1269
+ return [2 /*return*/, Promise.reject(new Error("token过期!"))];
1270
+ }
1271
+ errMsg = res.message || res.msg;
1272
+ return [2 /*return*/, Promise.reject(new Error(errMsg || "Error"))];
1273
+ });
1274
+ }); }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
1275
+ return __generator(this, function (_a) {
1276
+ if (errorCb && typeof errorCb === "function") {
1277
+ errorCb(error);
1278
+ }
1279
+ return [2 /*return*/, Promise.reject(error)];
1280
+ });
1281
+ }); });
1282
+ return request;
1283
+ };
1284
+
1285
+ exports.addDays = addDays;
1286
+ exports.base64ToBlob = base64ToBlob;
1287
+ exports.base64ToFile = base64ToFile;
1288
+ exports.blobToDataURL = blobToDataURL;
1289
+ exports.buildUUID = buildUUID;
1290
+ exports.calcFileSize = calcFileSize;
1291
+ exports.ceil = ceil;
1292
+ exports.clearLoginData = clearLoginData;
1293
+ exports.compatibleDate = compatibleDate;
1294
+ exports.compressImg = compressImg;
1295
+ exports.convertBase64UrlToBlob = convertBase64UrlToBlob;
1296
+ exports.convertCurrency = convertCurrency;
1297
+ exports.dataURLtoBlob = dataURLtoBlob;
1298
+ exports.deepEqual = deepEqual;
1299
+ exports.fileSizeFormat = fileSizeFormat;
1300
+ exports.filterRepeat = filterRepeat;
1301
+ exports.findNodePath = findNodePath;
1302
+ exports.floor = floor;
1303
+ exports.formatBank = formatBank;
1304
+ exports.formatEmptyValue = formatEmptyValue;
1305
+ exports.formatFloat = formatFloat;
1306
+ exports.formatPhone = formatPhone;
1307
+ exports.formatPhoneHide = formatPhoneHide;
1308
+ exports.formatTime = formatTime;
1309
+ exports.formateTimestamp = formateTimestamp;
1310
+ exports.fromNow = fromNow;
1311
+ exports.genExportByBlob = genExportByBlob;
1312
+ exports.generateEnglishLetters = generateEnglishLetters;
1313
+ exports.getCookie = getCookie;
1314
+ exports.getDeviceType = getDeviceType;
1315
+ exports.getEnvironment = getEnvironment;
1316
+ exports.getFileData = getFileData;
1317
+ exports.getFromType = getFromType;
1318
+ exports.getIsComWx = getIsComWx;
1319
+ exports.getIsDevelopment = getIsDevelopment;
1320
+ exports.getQueryString = getQueryString;
1321
+ exports.getQueryVariable = getQueryVariable;
1322
+ exports.getTicket = getTicket;
1323
+ exports.getToken = getToken;
1324
+ exports.getWecomToken = getWecomToken;
1325
+ exports.http = http;
1326
+ exports.httpEnum = httpEnum;
1327
+ exports.humpTurnDashed = humpTurnDashed;
1328
+ exports.isEmail = isEmail;
1329
+ exports.isEmpty = isEmpty;
1330
+ exports.isExternal = isExternal;
1331
+ exports.isImage = isImage;
1332
+ exports.isMobile = isMobile;
1333
+ exports.isMobileSimple = isMobileSimple;
1334
+ exports.isQQ = isQQ;
1335
+ exports.isTelephone = isTelephone;
1336
+ exports.newDate = newDate;
1337
+ exports.randomString = randomString;
1338
+ exports.removeTicket = removeTicket;
1339
+ exports.removeToken = removeToken;
1340
+ exports.setTicket = setTicket;
1341
+ exports.toThousands = toThousands;
1342
+ exports.trimVal = trimVal;
1343
+ exports.uuid = uuid;
1344
+ exports.validateTwoDecimal = validateTwoDecimal;
1345
+
1346
+ Object.defineProperty(exports, '__esModule', { value: true });
1347
+
1348
+ }));