tools_dj 1.0.83 → 1.0.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +426 -0
- package/lib/index.js +1 -1
- package/lib/request.d.ts +1 -1
- package/lib/request.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,8 @@ npm install tools_dj
|
|
|
10
10
|
|
|
11
11
|
## 使用
|
|
12
12
|
|
|
13
|
+
### 基础使用
|
|
14
|
+
|
|
13
15
|
```typescript
|
|
14
16
|
import { formatDate, is_empty, formatSize } from "tools_dj";
|
|
15
17
|
|
|
@@ -23,6 +25,24 @@ const isEmpty = is_empty(""); // true
|
|
|
23
25
|
const size = formatSize(1024); // "1 KB"
|
|
24
26
|
```
|
|
25
27
|
|
|
28
|
+
### 使用类模块
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// 权限管理
|
|
32
|
+
import { auth } from "tools_dj";
|
|
33
|
+
const authManager = new auth(['read', 'write', 'delete']);
|
|
34
|
+
|
|
35
|
+
// 时间比较
|
|
36
|
+
import { carbon } from "tools_dj";
|
|
37
|
+
const timeCheck = carbon(new Date());
|
|
38
|
+
|
|
39
|
+
// HTTP请求
|
|
40
|
+
import Request from "tools_dj/request";
|
|
41
|
+
const http = new Request({
|
|
42
|
+
headers: { 'Content-Type': 'application/json' }
|
|
43
|
+
}, { baseUrl: 'https://api.example.com' });
|
|
44
|
+
```
|
|
45
|
+
|
|
26
46
|
## API 文档
|
|
27
47
|
|
|
28
48
|
### 数据类型判断
|
|
@@ -260,10 +280,416 @@ const file = base64Img(base64String, 'image.png');
|
|
|
260
280
|
|
|
261
281
|
#### `objToFormData(obj: object, simplify?: boolean): FormData`
|
|
262
282
|
对象转FormData
|
|
283
|
+
- `obj` - 要转换的对象
|
|
284
|
+
- `simplify` - 是否简化(简化后第一层数组将省略索引),默认true
|
|
263
285
|
```typescript
|
|
264
286
|
const formData = objToFormData({name: 'test', files: [file1, file2]});
|
|
265
287
|
```
|
|
266
288
|
|
|
289
|
+
### 数组高级操作
|
|
290
|
+
|
|
291
|
+
#### `findByIndex(array: any[], key: string, data: any): number`
|
|
292
|
+
二维数组查找返回下标
|
|
293
|
+
```typescript
|
|
294
|
+
const users = [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}];
|
|
295
|
+
findByIndex(users, 'id', 2); // 1
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
#### `setObjData(source: any[], sourceKey: string, sourceData: any, nowKey: string, nowData: any): boolean`
|
|
299
|
+
设置二维数组的值
|
|
300
|
+
```typescript
|
|
301
|
+
const data = [{id: 1, name: 'old'}];
|
|
302
|
+
setObjData(data, 'id', 1, 'name', 'new'); // true
|
|
303
|
+
// data: [{id: 1, name: 'new'}]
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### `selectObjData(source: any[], sourceKey: string, sourceData: any): any`
|
|
307
|
+
查找二维数组数据
|
|
308
|
+
```typescript
|
|
309
|
+
const users = [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}];
|
|
310
|
+
selectObjData(users, 'id', 2); // {id: 2, name: 'Jerry'}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
#### `arrSet(arr: any[], index: number, data: any): void`
|
|
314
|
+
在数组任意位置插入数据
|
|
315
|
+
```typescript
|
|
316
|
+
const arr = [1, 2, 4];
|
|
317
|
+
arrSet(arr, 2, 3); // [1, 2, 3, 4]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
#### `sArrMove(arr: any[], startIndex: number, endIndex: number): void`
|
|
321
|
+
源数组移动元素(直接修改原数组)
|
|
322
|
+
```typescript
|
|
323
|
+
const arr = [1, 2, 3, 4];
|
|
324
|
+
sArrMove(arr, 0, 2); // arr变为 [2, 3, 1, 4]
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
#### `rArrMove(arr: any[], startIndex: number, endIndex: number): any[]`
|
|
328
|
+
数组元素位置移动返回新数组(不修改原数组)
|
|
329
|
+
```typescript
|
|
330
|
+
const arr = [1, 2, 3, 4];
|
|
331
|
+
const newArr = rArrMove(arr, 0, 2); // [2, 3, 1, 4]
|
|
332
|
+
// arr仍为 [1, 2, 3, 4]
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
#### `inArr(arr: any[], str: any, force?: boolean): number`
|
|
336
|
+
判断字符是否在数组中,返回索引
|
|
337
|
+
- `force` - 是否强制类型检查,默认false(使用==比较)
|
|
338
|
+
```typescript
|
|
339
|
+
inArr([1, 2, 3], '2'); // 1 (非强制模式)
|
|
340
|
+
inArr([1, 2, 3], '2', true); // -1 (强制模式)
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### 树结构高级操作
|
|
344
|
+
|
|
345
|
+
#### `treeFor(data: any[], callBack: Function, option?: object): void`
|
|
346
|
+
树循环返回子项(叶子节点)
|
|
347
|
+
- `option.cKey` - 子节点字段名,默认'children'
|
|
348
|
+
```typescript
|
|
349
|
+
treeFor(treeData, (node) => {
|
|
350
|
+
console.log('叶子节点:', node);
|
|
351
|
+
});
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
#### `treeStack(data: any[], callBack: Function, option?: object): void`
|
|
355
|
+
树栈循环返回子项
|
|
356
|
+
```typescript
|
|
357
|
+
treeStack(treeData, (node) => {
|
|
358
|
+
console.log('节点:', node);
|
|
359
|
+
});
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
#### `treeRecursion(data: any[], callBack: Function, option?: object): void`
|
|
363
|
+
树递归循环返回子项
|
|
364
|
+
```typescript
|
|
365
|
+
treeRecursion(treeData, (node) => {
|
|
366
|
+
console.log('节点:', node);
|
|
367
|
+
});
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
#### `treeFind(data: any[], option?: object): any[]`
|
|
371
|
+
树中查找节点
|
|
372
|
+
- `option.cKey` - 子节点字段名,默认'children'
|
|
373
|
+
- `option.key` - 查找的字段名,默认'id'
|
|
374
|
+
- `option.value` - 查找的值
|
|
375
|
+
- `option.copy` - 是否复制(去除children),默认true
|
|
376
|
+
```typescript
|
|
377
|
+
treeFind(treeData, {key: 'id', value: 5});
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### `arrToAryTree(items: any[], option?: object): any[]`
|
|
381
|
+
层级树转换成多叉树(带左右值的嵌套集合模型)
|
|
382
|
+
- `option.idKey` - ID字段,默认'id'
|
|
383
|
+
- `option.pidKey` - 父ID字段,默认'pid'
|
|
384
|
+
- `option.rKey` - 右值字段,默认'rgt'
|
|
385
|
+
- `option.lKey` - 左值字段,默认'lft'
|
|
386
|
+
- `option.levelKey` - 层级字段,默认'level'
|
|
387
|
+
```typescript
|
|
388
|
+
const tree = arrToAryTree(flatData);
|
|
389
|
+
// 返回带有lft、rgt、level字段的数组
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### 颜色处理
|
|
393
|
+
|
|
394
|
+
#### `colorMix(color1: string, color2: string, weight: number): string`
|
|
395
|
+
色阶取值(颜色混合)
|
|
396
|
+
- `weight` - 权重0-1,越接近1越接近color2
|
|
397
|
+
```typescript
|
|
398
|
+
colorMix('#ff0000', '#0000ff', 0.5); // "#7f007f" (混合紫色)
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
#### `randomColor(): string`
|
|
402
|
+
生成随机颜色(rgba格式)
|
|
403
|
+
```typescript
|
|
404
|
+
randomColor(); // "rgba(150,200,180,1)"
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### 排序
|
|
408
|
+
|
|
409
|
+
#### `compare(prop: string, type?: string): Function`
|
|
410
|
+
数字排序比较函数
|
|
411
|
+
- `type` - 'up'升序(默认)或'down'降序
|
|
412
|
+
```typescript
|
|
413
|
+
const users = [{age: 25}, {age: 18}, {age: 30}];
|
|
414
|
+
users.sort(compare('age', 'up')); // 按age升序
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
#### `compareDate(prop: string, type?: string): Function`
|
|
418
|
+
时间排序比较函数
|
|
419
|
+
```typescript
|
|
420
|
+
const events = [
|
|
421
|
+
{date: '2024-03-20'},
|
|
422
|
+
{date: '2024-01-15'}
|
|
423
|
+
];
|
|
424
|
+
events.sort(compareDate('date', 'up')); // 按日期升序
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### 函数工具
|
|
428
|
+
|
|
429
|
+
#### `throttle1(func: Function, delay: number): Function`
|
|
430
|
+
节流函数(备选实现)
|
|
431
|
+
```typescript
|
|
432
|
+
const throttled = throttle1(() => {
|
|
433
|
+
console.log('执行');
|
|
434
|
+
}, 1000);
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
#### `fnRuntime(fn: Function, iterations?: number): void`
|
|
438
|
+
测量函数执行时间
|
|
439
|
+
- `iterations` - 迭代次数,默认1
|
|
440
|
+
```typescript
|
|
441
|
+
fnRuntime(() => {
|
|
442
|
+
// 需要测试的代码
|
|
443
|
+
}, 100);
|
|
444
|
+
// 控制台输出: "平均执行时间 100 次数: 0.123456 ms"
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
#### `mergeObj(obj: object[], callbackCon?: object): object`
|
|
448
|
+
深层次对象合并
|
|
449
|
+
- `callbackCon.callback` - 回调函数
|
|
450
|
+
- `callbackCon.callType` - 回调类型
|
|
451
|
+
- `callbackCon.afterBack` - 后置回调
|
|
452
|
+
```typescript
|
|
453
|
+
const merged = mergeObj([
|
|
454
|
+
{a: {b: 1}},
|
|
455
|
+
{a: {c: 2}}
|
|
456
|
+
]);
|
|
457
|
+
// {a: {b: 1, c: 2}}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### 其他工具
|
|
461
|
+
|
|
462
|
+
#### `time_change(data: string): number`
|
|
463
|
+
时间格式转时间戳
|
|
464
|
+
```typescript
|
|
465
|
+
time_change('2024-03-24 10:30'); // 1711252200000
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
## 类模块
|
|
469
|
+
|
|
470
|
+
### 权限管理 (auth)
|
|
471
|
+
|
|
472
|
+
基于位运算的高性能权限管理系统
|
|
473
|
+
|
|
474
|
+
```typescript
|
|
475
|
+
import { auth } from "tools_dj";
|
|
476
|
+
|
|
477
|
+
// 创建权限管理实例
|
|
478
|
+
const authManager = new auth(['read', 'write', 'delete', 'update']);
|
|
479
|
+
|
|
480
|
+
// 初始权限为0
|
|
481
|
+
let userAuth = 0;
|
|
482
|
+
|
|
483
|
+
// 添加权限
|
|
484
|
+
userAuth = authManager.add(userAuth, ['read', 'write']);
|
|
485
|
+
|
|
486
|
+
// 删除权限
|
|
487
|
+
userAuth = authManager.del(userAuth, ['write']);
|
|
488
|
+
|
|
489
|
+
// 判断权限(必须全部存在)
|
|
490
|
+
authManager.andHave(userAuth, ['read', 'write']); // false
|
|
491
|
+
|
|
492
|
+
// 判断权限(只要有一个存在)
|
|
493
|
+
authManager.orHave(userAuth, ['read', 'write']); // true
|
|
494
|
+
|
|
495
|
+
// 获取权限列表
|
|
496
|
+
authManager.getTxt(userAuth); // ['read']
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**API说明:**
|
|
500
|
+
|
|
501
|
+
- `constructor(authList: string[])` - 创建权限管理实例
|
|
502
|
+
- `add(base: number, arr: string[]): number` - 添加权限
|
|
503
|
+
- `del(base: number, arr: string[]): number` - 删除权限
|
|
504
|
+
- `andHave(base: number, arr: string[]): boolean` - AND判断(全部存在)
|
|
505
|
+
- `orHave(base: number, arr: string[]): boolean` - OR判断(至少一个存在)
|
|
506
|
+
- `getTxt(number: number): string[]` - 获取权限名称列表
|
|
507
|
+
|
|
508
|
+
### 时间比较 (date)
|
|
509
|
+
|
|
510
|
+
提供链式时间比较操作
|
|
511
|
+
|
|
512
|
+
```typescript
|
|
513
|
+
import { carbon, contrast } from "tools_dj";
|
|
514
|
+
|
|
515
|
+
// 方式1: 使用carbon函数
|
|
516
|
+
const timeCheck = carbon(new Date('2024-03-24'));
|
|
517
|
+
|
|
518
|
+
// 方式2: 使用contrast类
|
|
519
|
+
const timeCheck2 = new contrast(new Date('2024-03-24'));
|
|
520
|
+
|
|
521
|
+
// 大于
|
|
522
|
+
timeCheck.Gt(new Date('2024-03-20')); // true
|
|
523
|
+
|
|
524
|
+
// 小于
|
|
525
|
+
timeCheck.Lt(new Date('2024-03-30')); // true
|
|
526
|
+
|
|
527
|
+
// 等于
|
|
528
|
+
timeCheck.Eq(new Date('2024-03-24')); // true
|
|
529
|
+
|
|
530
|
+
// 不等于
|
|
531
|
+
timeCheck.Ne(new Date('2024-03-25')); // true
|
|
532
|
+
|
|
533
|
+
// 大于等于
|
|
534
|
+
timeCheck.Gte(new Date('2024-03-24')); // true
|
|
535
|
+
|
|
536
|
+
// 小于等于
|
|
537
|
+
timeCheck.Lte(new Date('2024-03-24')); // true
|
|
538
|
+
|
|
539
|
+
// 判断是否在时间段内
|
|
540
|
+
timeCheck.Between(
|
|
541
|
+
new Date('2024-03-20'),
|
|
542
|
+
new Date('2024-03-30')
|
|
543
|
+
); // true
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**API说明:**
|
|
547
|
+
|
|
548
|
+
- `Gt(date: Date): boolean` - 大于
|
|
549
|
+
- `Lt(date: Date): boolean` - 小于
|
|
550
|
+
- `Eq(date: Date): boolean` - 等于
|
|
551
|
+
- `Ne(date: Date): boolean` - 不等于
|
|
552
|
+
- `Gte(date: Date): boolean` - 大于等于
|
|
553
|
+
- `Lte(date: Date): boolean` - 小于等于
|
|
554
|
+
- `Between(date1: Date, date2: Date): boolean` - 是否在时间段内
|
|
555
|
+
|
|
556
|
+
### 消息通信 (msg)
|
|
557
|
+
|
|
558
|
+
提供跨页面和页面内的消息通信
|
|
559
|
+
|
|
560
|
+
```typescript
|
|
561
|
+
import msg from "tools_dj/msg";
|
|
562
|
+
|
|
563
|
+
// 跨页面消息发送(使用BroadcastChannel)
|
|
564
|
+
msg.pageSend('userUpdate', {id: 1, name: 'Tom'});
|
|
565
|
+
|
|
566
|
+
// 跨页面消息接收
|
|
567
|
+
msg.pageRead('userUpdate', (data) => {
|
|
568
|
+
console.log('收到消息:', data);
|
|
569
|
+
});
|
|
570
|
+
|
|
571
|
+
// 页面内消息发送(使用mitt)
|
|
572
|
+
msg.busSend('event1', {data: 'test'});
|
|
573
|
+
|
|
574
|
+
// 页面内消息接收
|
|
575
|
+
msg.busRead('event1', (data) => {
|
|
576
|
+
console.log('收到事件:', data);
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
// 取消特定监听器
|
|
580
|
+
const handler = (data) => console.log(data);
|
|
581
|
+
msg.busRead('event1', handler);
|
|
582
|
+
msg.busOff('event1', handler);
|
|
583
|
+
|
|
584
|
+
// 取消所有同名监听
|
|
585
|
+
msg.busDown('event1');
|
|
586
|
+
|
|
587
|
+
// store消息监听(适用于Vue的Pinia store)
|
|
588
|
+
msg.storeRead(store, (state) => {
|
|
589
|
+
console.log('store变化:', state);
|
|
590
|
+
});
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
**API说明:**
|
|
594
|
+
|
|
595
|
+
- `pageSend(type: string, data: any): void` - 跨页面消息发送
|
|
596
|
+
- `pageRead(type: string, callback: Function): void` - 跨页面消息接收
|
|
597
|
+
- `busSend(type: string, data: any): void` - 页面内消息发送
|
|
598
|
+
- `busRead(type: string, callback: Function): void` - 页面内消息接收
|
|
599
|
+
- `busOff(type: string, callback: Function): void` - 取消特定监听
|
|
600
|
+
- `busDown(type: string): void` - 取消所有同名监听
|
|
601
|
+
- `storeRead(store: any, callback: Function): void` - store变化监听
|
|
602
|
+
|
|
603
|
+
### HTTP请求 (request)
|
|
604
|
+
|
|
605
|
+
基于Fetch API的HTTP请求封装
|
|
606
|
+
|
|
607
|
+
```typescript
|
|
608
|
+
import Request from "tools_dj/request";
|
|
609
|
+
|
|
610
|
+
// 创建请求实例
|
|
611
|
+
const http = new Request(
|
|
612
|
+
// 默认请求配置
|
|
613
|
+
{
|
|
614
|
+
headers: {
|
|
615
|
+
'Content-Type': 'application/json'
|
|
616
|
+
},
|
|
617
|
+
mode: 'cors',
|
|
618
|
+
credentials: 'include'
|
|
619
|
+
},
|
|
620
|
+
// 全局配置
|
|
621
|
+
{
|
|
622
|
+
baseUrl: 'https://api.example.com',
|
|
623
|
+
timeout: 10000,
|
|
624
|
+
// 成功回调
|
|
625
|
+
callback: async (response) => {
|
|
626
|
+
return await response.json();
|
|
627
|
+
},
|
|
628
|
+
// 失败回调
|
|
629
|
+
errBack: (error) => {
|
|
630
|
+
console.error('请求失败:', error);
|
|
631
|
+
},
|
|
632
|
+
// 请求前回调
|
|
633
|
+
beforeBack: (options) => {
|
|
634
|
+
console.log('发送请求:', options);
|
|
635
|
+
},
|
|
636
|
+
// 获取中断控制器
|
|
637
|
+
abController: (controller) => {
|
|
638
|
+
// 可以手动中断请求
|
|
639
|
+
// controller.abort();
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
);
|
|
643
|
+
|
|
644
|
+
// 发送GET请求
|
|
645
|
+
http.serve('/users', {
|
|
646
|
+
method: 'GET'
|
|
647
|
+
}).then(data => {
|
|
648
|
+
console.log(data);
|
|
649
|
+
});
|
|
650
|
+
|
|
651
|
+
// 发送POST请求
|
|
652
|
+
http.serve('/users', {
|
|
653
|
+
method: 'POST',
|
|
654
|
+
body: JSON.stringify({name: 'Tom', age: 20})
|
|
655
|
+
}, {
|
|
656
|
+
// 单次请求配置
|
|
657
|
+
timeout: 5000,
|
|
658
|
+
callback: async (res) => await res.json()
|
|
659
|
+
}).then(data => {
|
|
660
|
+
console.log(data);
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
// 请求完整URL(会自动检测,不添加baseUrl)
|
|
664
|
+
http.serve('https://other-api.com/data');
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
**配置参数说明:**
|
|
668
|
+
|
|
669
|
+
构造函数参数:
|
|
670
|
+
- `option` - Fetch请求配置对象
|
|
671
|
+
- `method` - 请求方法 (GET, POST, PUT, DELETE等)
|
|
672
|
+
- `mode` - 跨域策略 ("cors", "same-origin", "no-cors")
|
|
673
|
+
- `cache` - 缓存策略 ("no-cache", "default", "reload", "force-cache")
|
|
674
|
+
- `credentials` - 凭证策略 ("same-origin", "include", "omit")
|
|
675
|
+
- `headers` - 请求头对象
|
|
676
|
+
- `redirect` - 重定向处理 ("follow", "manual", "error")
|
|
677
|
+
- `referrerPolicy` - 引用策略
|
|
678
|
+
- `body` - 请求体
|
|
679
|
+
|
|
680
|
+
- `conf` - 全局配置对象
|
|
681
|
+
- `baseUrl` - 基础URL前缀
|
|
682
|
+
- `timeout` - 超时时间(毫秒),默认6000
|
|
683
|
+
- `callback(response)` - 成功回调,处理响应
|
|
684
|
+
- `errBack(error)` - 失败回调
|
|
685
|
+
- `abController(controller)` - 获取中断控制器
|
|
686
|
+
- `beforeBack(options)` - 请求前回调
|
|
687
|
+
|
|
688
|
+
serve方法参数:
|
|
689
|
+
- `url` - 请求地址(相对路径或完整URL)
|
|
690
|
+
- `options` - 本次请求的fetch配置(会与构造函数的option合并)
|
|
691
|
+
- `conf` - 本次请求的配置(会与构造函数的conf合并)
|
|
692
|
+
|
|
267
693
|
## 特性
|
|
268
694
|
|
|
269
695
|
- 🚀 **轻量高效** - 优化的算法实现
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(e){let t={};return e.forEach((function(e){t[JSON.stringify(e)]=e})),e=Object.keys(t).map((function(e){if("undefined"!=e)return JSON.parse(e)}))}function t(e){let t=!1;switch(Object.prototype.toString.call(e).slice(8,-1)){case"Undefined":case"Null":t=!0;break;case"String":t=0===e.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"").length;break;case"Boolean":t=!e;break;case"Array":t=0===e.length;break;case"Number":t=0===e||isNaN(e);break;case"Object":t=0===Object.keys(e).length}return t}function r(e){return Object.prototype.toString.call(e).slice(8,-1)}function n(){return!t(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))}function o(e,t){return Math.round(Math.random()*(t-e))+e}function s(e){let t=e+"";const r=Number(t);return!isNaN(r)&&t.length>0}function c(e=[],t,r=!1){if(r)return e.indexOf(t);{let r=-1,n=e.length;for(let o=0;o<n;o++)e[o]==t&&(r=o);return r}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.memoize=void 0,exports.del_repeat=e,exports.formatDate=function(e,t="day",r="-"){let n=e.getFullYear(),o=(e.getMonth()+1).toString().padStart(2,"0"),s=e.getDate().toString().padStart(2,"0"),c=e.getHours().toString().padStart(2,"0"),i=e.getMinutes().toString().padStart(2,"0"),a={year:1,month:2,day:3,hour:4,minute:5},l="";for(let e=0;e<a[t];e++)0==e&&(l+=n),1==e&&(l+=o),2==e&&(l+=s),3==e&&(l+=c),4==e&&(l+=i),e!=a[t]-1&&(l+=r);return l},exports.time_change=function(e){return Date.parse(e)},exports.formatTime=function(e,t="YYYY-MM-DD hh:mm:ss",r={}){try{e=e.replaceAll("-","/")}catch(e){}e=new Date(e);let n={0:"周日",1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六"},{weeks:o=n}=r,s=e.getFullYear(),c=(e.getMonth()+1).toString().padStart(2,"0"),i=e.getDate().toString().padStart(2,"0"),a=e.getHours().toString().padStart(2,"0"),l=e.getMinutes().toString().padStart(2,"0"),u=e.getSeconds().toString().padStart(2,"0"),p=o[e.getDay()],f=t;return[{format:"YYYY",data:s},{format:"yyyy",data:s},{format:"MM",data:c},{format:"DD",data:i},{format:"dd",data:i},{format:"hh",data:a},{format:"HH",data:a},{format:"mm",data:l},{format:"ss",data:u},{format:"week",data:p},{format:"time_slot",data:a>12?"下午":"上午"}].forEach((function(e,r){-1!=t.indexOf(e.format)&&(f=f.replace(e.format,""+e.data))})),f},exports.getDaysBetween=function(e,t,r=!1){var n=Date.parse(e),o=Date.parse(t),s=0;n>o&&(s=(n-o)/864e5);n<o&&(s=(o-n)/864e5,r&&(s=-s));return s},exports.is_empty=t,exports.repalce=function(e,t,r){return e.substring(0,t)+r+e.substring(t+1)},exports.toGetQuery=function(e,n={}){if(t(e))return"";{let{prefix:o="?"}=n,s=[],c=["",void 0,null];const i=(e,n="")=>{const o=Object.keys(e);for(const a of o){const o=e[a];if(c.includes(o))continue;let l=r(o),u=encodeURIComponent(a);if(t(n)||(u=`${n}[${u}]`),"Array"===l)for(const e of o)s.push(`${u}[]=${encodeURIComponent(e)}`);else if("Object"===l)i(o,u);else{let e=encodeURIComponent(o);s.push(`${u}=${e}`)}}};return i(e),s.length?o+s.join("&"):""}},exports.isLink=function(e){const t=e.indexOf("://");if(-1===t)return!1;const r=e.slice(0,t+1);return-1!==c(["http:","https:","ftp:","file:"],r.toLowerCase())},exports.merge=function(t,r){const n=Object.prototype.toString.call(t);if("Array"==n.slice(8,-1))return t.push.apply(t,r),e(t);if("Object"==n.slice(8,-1))return Object.assign(t,r)},exports.is=r,exports.unique=function(r){if(0==t(r)){let t=e(r);return console.log(t),t}return console.log(!1),!1},exports.first=function(e){if(0!=t(e))return console.log(!1),!1;if("[object Object]"===Object.prototype.toString.call(e))for(const t of e)return console.log(t),t;else console.log(e[0])},exports.last=function(e){if(0!=t(e))return console.log(!1),!1;if("[object Object]"===Object.prototype.toString.call(e))for(const t of e)console.log(t);else console.log(e[e.length-1])},exports.findByIndex=function(e,t,r){return(e||[]).findIndex((e=>e[t]===r))},exports.setObjData=function(e,t,r,n,o){try{return e.find((function(e){return e[t]==r}))[n]=o,!0}catch(e){return!1}},exports.selectObjData=function(e,t,r){try{return e.find((function(e){return e[t]==r}))}catch(e){return""}},exports.handleTree=function(e,t,r,n){const o={id:t||"id",parentId:r||"parentId",childrenList:n||"children"},s=new Map,c=new Map,i=[];let a=e.length;for(let t=0;t<a;t++){let r=e[t];const n=r[o.parentId];s.has(n)||s.set(n,[]),c.set(r[o.id],r),s.get(n).push(r)}for(let t=0;t<a;t++){let r=e[t];const n=r[o.parentId];c.has(n)||i.push(r)}const l=[...i];for(;l.length>0;){const e=l.pop(),t=s.get(e[o.id]);t&&(e[o.childrenList]=t,l.push(...t))}return i},exports.arrToTree=function(e,t={}){let{id:r="id",pKey:n="parentId",cKey:o="children",strict:s=!0,copy:c=!0}=t,i=[];i=c?JSON.parse(JSON.stringify(e)):e;return i.filter((e=>{const t=i.filter((t=>s?t[n]===e[r]:t[n]==e[r]));return t.length&&(e[o]=t),0===e[n]}))},exports.treeToArr=function(e,t={}){let r=[],{cKey:n="children",copy:o=!0}=t,s=[...e];for(;s.length;){let e=s.pop();if(e[n])if(s.push(...e[n]),o){let t={},o=Object.keys(e),s=o.length;for(let r=0;r<s;r++)o[r]!=n&&(t[o[r]]=e[o[r]]);r.push(t)}else r.push(e)}return r},exports.treeFor=function(e,r,n={}){let{cKey:o="children"}=n,s=[...e];for(;s.length;){let e=s.shift();t(e[o])?r&&r(e):s.push(...e[o])}},exports.treeStack=function(e,r,n={}){let{cKey:o="children"}=n,s=[...e];for(;s.length;){let e=s.shift();t(e[o])?r&&r(e):s.push(...e[o])}},exports.treeRecursion=function(e,t,r={}){},exports.treeFind=function(e,t={}){let r=[],{cKey:n="children",key:o="id",value:s,copy:c=!0}=t,i=[...e];for(;i.length;){let e=i.pop();if(e[n]&&i.push(...e[n]),e[o]==s)if(c){let t={},o=Object.keys(e),s=o.length;for(let r=0;r<s;r++)o[r]!=n&&(t[o[r]]=e[o[r]]);r.push(t)}else r.push(e)}return r},exports.base64Img=function(e,t){return r=function(e){for(var t=e.split(","),r=t[0].match(/:(.*?);/)[1],n=atob(t[1]),o=n.length,s=new Uint8Array(o);o--;)s[o]=n.charCodeAt(o);return new Blob([s],{type:r})}(e),n=t,new File([r],n);var r,n},exports.compareDate=function(e,t="up"){return function(r,n){return"up"==t?Date.parse(r[e])-Date.parse(n[e]):Date.parse(n[e])-Date.parse(r[e])}},exports.compare=function(e,t="up"){return function(r,n){return"up"==t?r[e]-n[e]:n[e]-r[e]}},exports.numberRepair=function(e="",t=2,r="0",n=!1){let o="",s=(""+e).length;if(s>t&&1==n)return s;{let n=t-s;if(n>0)for(let e=0;e<n;e++)o+=r;return(o+e).slice(-1*t)}},exports.isMobile=n,exports.setMeta=function(e){if(!t(e)){let t=[];document.head.childNodes.forEach((r=>{switch(r.tagName){case"META":t.push(r);break;case"TITLE":document.title=e.title||"模板测试"}}));const r=document.createElement("META");let o=1,s="yes";e.cZoom&&(n()?e.cZoom.mobile&&(o=e.cZoom.mobile):e.cZoom.pc&&(o=e.cZoom.pc),e.cZoom.isScale&&(s=e.cZoom.isScale));let c=`width=device-width,minimum-scale=${o},initial-scale=${o},user-scalable=${s}`;"no"==s&&(c+=`,maximum-scale=${o}`);const i=[{charset:"utf-8"},{name:"viewport",content:c}],a=document.createDocumentFragment();i.forEach((e=>{a.append(r.cloneNode()),Object.entries(e).forEach((e=>{a.lastChild.setAttribute(e[0],e[1])}))})),t.forEach((e=>{document.head.removeChild(e)})),document.head.prepend(a)}},exports.colorMix=function(e,t,r){r=Math.max(Math.min(Number(r),1),0);let n=parseInt(e.substring(1,3),16),o=parseInt(e.substring(3,5),16),s=parseInt(e.substring(5,7),16),c=parseInt(t.substring(1,3),16),i=parseInt(t.substring(3,5),16),a=parseInt(t.substring(5,7),16),l=Math.round(n*(1-r)+c*r),u=Math.round(o*(1-r)+i*r),p=Math.round(s*(1-r)+a*r);return l=("0"+(l||0).toString(16)).slice(-2),u=("0"+(u||0).toString(16)).slice(-2),p=("0"+(p||0).toString(16)).slice(-2),"#"+l+u+p},exports.sArrMove=function(e,t,r){e.splice(r,0,e.splice(t,1)[0])},exports.rArrMove=function(e,t,r){let n=[].concat(e);return n.splice(r,0,n.splice(t,1)[0]),n},exports.arrSet=function(e,t,r){e.splice(t,0,r)},exports.randomColor=function(){let e=o(100,255),t=o(100,255),r=o(100,255);return"rgba("+e+","+t+","+r+",1)"},exports.randomNumber=o,exports.isDateInRange=function(e,t,r){const n=new Date(e),o=new Date(t),s=new Date(r);return n>=o&&n<=s},exports.throttle1=function(e,t){let r,n=0;return function(...o){const s=Date.now(),c=s-n;clearTimeout(r),c>=t?(e(...o),n=s):r=setTimeout((()=>{e(...o),n=Date.now()}),t-c)}},exports.throttle=function(e,t=1e3,r=!0){let n;const o=(...o)=>{n&&clearInterval(n),r?(n||e(...o),n=setTimeout((function(){n=null}),t)):n=setTimeout((()=>{e(...o)}),t)};return o.cancel=()=>{n&&(clearTimeout(n),n=null)},o},exports.debounce=function(e,t){let r;const n=function(...n){clearTimeout(r),r=setTimeout((()=>{e(...n)}),t)};return n.cancel=()=>{r&&(clearTimeout(r),r=null)},n},exports.arrayGroup=function(e,t="type"){return e.reduce(((e,r)=>{var n;return Object.assign(Object.assign({},e),{[r[t]]:[...null!==(n=e[r[t]])&&void 0!==n?n:[],r]})}),{})},exports.numberFixed=function(e,t=1){const r=e.toString(),n=r.indexOf(".");if(-1===n)return e;const o=r.slice(0,n+1+t);return parseFloat(o)},exports.delObj=function(e,n=""){try{if(t(n)){let t=Object.keys(e);for(let r of t)delete e[r]}else if("Array"==r(n))for(const t of n)delete e[t];else delete e[n]}catch(e){}},exports.delObjEmptyKey=function(e){try{let n=Object.keys(e);for(let o of n)"Number"!=r(e[o])&&t(e[o])&&delete e[o]}catch(e){}},exports.isNum=s,exports.pxToRem=function(e,t=37.5){let r=e;if(s(e)||-1!=e.indexOf("px")){r=(parseFloat(e)/t).toFixed(2)+"rem"}return r},exports.inArr=c,exports.fnRuntime=function(e,t=1){let r=0;for(let n=0;n<t;n++){const t=performance.now();e();r+=performance.now()-t}const n=r/t;console.log(`平均执行时间 ${t} 次数: ${n.toFixed(6)} ms`)},exports.objToFormData=function(e,t=!0){let n=new FormData;return function e(o,s="",c={}){let{level:i=0,pk:a="",type:l=""}=c,u=r(o);if(-1==["Array","Object"].indexOf(u)){if(null!=o){let e=s;t&&2==i&&"Array"==l&&(e=a),n.append(e,o)}}else if("Array"==u){let t=o.length;for(let r=0;r<t;r++){let t=`${s}[${r}]`,n={level:i+1,type:"Array",pk:s};e(o[r],t,n)}}else if("Object"==u){let t=Object.keys(o),r={level:i+1,type:"Object",pk:s};for(const n of t)e(o[n],`${s}${""==s?"":"."}${n}`,r)}}(e),n},exports.formatSize=function(e,t={}){if(0===e)return"0 Bytes";let{decimals:r=2,sizes:n=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],perUnit:o=1024}=t;const s=r<0?0:r,c=Math.floor(Math.log(e)/Math.log(o));return parseFloat((e/Math.pow(o,c)).toFixed(s))+" "+n[c]},exports.arrToAryTree=function(e,t={}){let{idKey:r="id",pidKey:n="pid",rKey:o="rgt",lKey:s="lft",levelKey:c="level"}=t;const i={},a={};let l=e.length;for(let t=0;t<l;t++){let o=e[t],s=o[n],c=o[r];i[c]=Object.assign({},o),a[s]||(a[s]=[]),a[s].push(c)}const u=Object.keys(a),p=Object.keys(i),f=new Set(p);let d=[];u.filter((e=>{f.has(e)||d.push(...a[e])}));let h=1;const m=[],g=[];for(let e=d.length-1;e>=0;e--)m.push({[r]:d[e],[c]:1,processed:!1});for(;m.length>0;){const e=m.pop(),t=i[e[r]];if(e.processed)t[o]=h++,g.push(t);else if(t[s]=h++,t[c]=e[c],m.push({[r]:e[r],[c]:e[c],processed:!0}),a[e[r]])for(let t=a[e[r]].length-1;t>=0;t--)m.push({[r]:a[e[r]][t],[c]:e[c]+1,processed:!1})}return g},exports.mergeObj=function(e,t={}){let{callback:n=null,callType:o="",afterBack:s=null}=t,c={};function i(e,t){let c=Object.keys(e);for(const a of c){let c=r(e[a]);n&&c==o?t[a]=n(e,a):"Object"===c?(t[a]||(t[a]={}),i(e[a],t[a])):t[a]=e[a],s&&s(t,a)}}for(const t of e)i(t,c);return c},Number.prototype.repair=function(e=2){let t="";for(let r=1;r<e;r++)t+="0";return(t+this).slice(-1*e)};exports.memoize=(e,t={})=>{const{context:r=null,ttl:n=0}=t,o=new Map,s=e=>{if("object"==typeof e&&null!==e){if(Array.isArray(e))return`[${e.map(s).join(",")}]`;return`{${Object.keys(e).sort().map((t=>`${t}:${s(e[t])}`)).join(",")}}`}return String(e)};return(...t)=>{const c=s(t),i=o.get(c);if(i&&(0===n||Date.now()-i.timestamp<=n))return i.value;const a=r?e.apply(r,t):e(...t);return o.set(c,{value:a,timestamp:Date.now()}),a}};
|
|
1
|
+
function e(e){let t={};return e.forEach((function(e){t[JSON.stringify(e)]=e})),e=Object.keys(t).map((function(e){if("undefined"!=e)return JSON.parse(e)}))}function t(e){let t=!1;switch(Object.prototype.toString.call(e).slice(8,-1)){case"Undefined":case"Null":t=!0;break;case"String":t=0===e.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"").length;break;case"Boolean":t=!e;break;case"Array":t=0===e.length;break;case"Number":t=0===e||isNaN(e);break;case"Object":t=0===Object.keys(e).length}return t}function r(e){return Object.prototype.toString.call(e).slice(8,-1)}function n(){return!t(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))}function o(e,t){return Math.round(Math.random()*(t-e))+e}function s(e){let t=e+"";const r=Number(t);return!isNaN(r)&&t.length>0}function c(e=[],t,r=!1){if(r)return e.indexOf(t);{let r=-1,n=e.length;for(let o=0;o<n;o++)e[o]==t&&(r=o);return r}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.memoize=void 0,exports.del_repeat=e,exports.formatDate=function(e,t="day",r="-"){let n=e.getFullYear(),o=(e.getMonth()+1).toString().padStart(2,"0"),s=e.getDate().toString().padStart(2,"0"),c=e.getHours().toString().padStart(2,"0"),i=e.getMinutes().toString().padStart(2,"0"),a={year:1,month:2,day:3,hour:4,minute:5},l="";for(let e=0;e<a[t];e++)0==e&&(l+=n),1==e&&(l+=o),2==e&&(l+=s),3==e&&(l+=c),4==e&&(l+=i),e!=a[t]-1&&(l+=r);return l},exports.time_change=function(e){return Date.parse(e)},exports.formatTime=function(e,t="YYYY-MM-DD hh:mm:ss",r={}){try{e=e.replaceAll("-","/")}catch(e){}e=new Date(e);let n={0:"周日",1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六"},{weeks:o=n}=r,s=e.getFullYear(),c=(e.getMonth()+1).toString().padStart(2,"0"),i=e.getDate().toString().padStart(2,"0"),a=e.getHours().toString().padStart(2,"0"),l=e.getMinutes().toString().padStart(2,"0"),u=e.getSeconds().toString().padStart(2,"0"),p=o[e.getDay()],f=t;return[{format:"YYYY",data:s},{format:"yyyy",data:s},{format:"MM",data:c},{format:"DD",data:i},{format:"dd",data:i},{format:"hh",data:a},{format:"HH",data:a},{format:"mm",data:l},{format:"ss",data:u},{format:"week",data:p},{format:"time_slot",data:a>12?"下午":"上午"}].forEach((function(e,r){-1!=t.indexOf(e.format)&&(f=f.replace(e.format,""+e.data))})),f},exports.getDaysBetween=function(e,t,r=!1){var n=Date.parse(e),o=Date.parse(t),s=0;n>o&&(s=(n-o)/864e5);n<o&&(s=(o-n)/864e5,r&&(s=-s));return s},exports.is_empty=t,exports.repalce=function(e,t,r){return e.substring(0,t)+r+e.substring(t+1)},exports.toGetQuery=function(e,n={}){if(t(e))return"";{let{prefix:o="?"}=n,s=[],c=["",void 0,null];const i=(e,n="")=>{const o=Object.keys(e);for(const a of o){const o=e[a];if(c.includes(o))continue;let l=r(o),u=encodeURIComponent(a);if(t(n)||(u=`${n}[${u}]`),"Array"===l)for(const e of o)s.push(`${u}[]=${encodeURIComponent(e)}`);else if("Object"===l)i(o,u);else{let e=encodeURIComponent(o);s.push(`${u}=${e}`)}}};return i(e),s.length?o+s.join("&"):""}},exports.isLink=function(e){const t=e.indexOf("://");if(-1===t)return!1;const r=e.slice(0,t+1);return-1!==c(["http:","https:","ftp:","file:"],r.toLowerCase())},exports.merge=function(t,r){const n=Object.prototype.toString.call(t);if("Array"==n.slice(8,-1))return t.push.apply(t,r),e(t);if("Object"==n.slice(8,-1))return Object.assign(t,r)},exports.is=r,exports.unique=function(r){if(0==t(r)){let t=e(r);return console.log(t),t}return console.log(!1),!1},exports.first=function(e){if(0!=t(e))return console.log(!1),!1;if("[object Object]"===Object.prototype.toString.call(e))for(const t of e)return console.log(t),t;else console.log(e[0])},exports.last=function(e){if(0!=t(e))return console.log(!1),!1;if("[object Object]"===Object.prototype.toString.call(e))for(const t of e)console.log(t);else console.log(e[e.length-1])},exports.findByIndex=function(e,t,r){return(e||[]).findIndex((e=>e[t]===r))},exports.setObjData=function(e,t,r,n,o){try{return e.find((function(e){return e[t]==r}))[n]=o,!0}catch(e){return!1}},exports.selectObjData=function(e,t,r){try{return e.find((function(e){return e[t]==r}))}catch(e){return""}},exports.handleTree=function(e,t,r,n){const o={id:t||"id",parentId:r||"parentId",childrenList:n||"children"},s=new Map,c=new Map,i=[];let a=e.length;for(let t=0;t<a;t++){let r=e[t];const n=r[o.parentId];s.has(n)||s.set(n,[]),c.set(r[o.id],r),s.get(n).push(r)}for(let t=0;t<a;t++){let r=e[t];const n=r[o.parentId];c.has(n)||i.push(r)}const l=[...i];for(;l.length>0;){const e=l.pop(),t=s.get(e[o.id]);t&&(e[o.childrenList]=t,l.push(...t))}return i},exports.arrToTree=function(e,t={}){let{id:r="id",pKey:n="parentId",cKey:o="children",strict:s=!0,copy:c=!0}=t,i=[];i=c?JSON.parse(JSON.stringify(e)):e;return i.filter((e=>{const t=i.filter((t=>s?t[n]===e[r]:t[n]==e[r]));return t.length&&(e[o]=t),0===e[n]}))},exports.treeToArr=function(e,t={}){let r=[],{cKey:n="children",copy:o=!0}=t,s=[...e];for(;s.length;){let e=s.pop();if(e[n])if(s.push(...e[n]),o){let t={},o=Object.keys(e),s=o.length;for(let r=0;r<s;r++)o[r]!=n&&(t[o[r]]=e[o[r]]);r.push(t)}else r.push(e)}return r},exports.treeFor=function(e,r,n={}){let{cKey:o="children"}=n,s=[...e];for(;s.length;){let e=s.shift();t(e[o])?r&&r(e):s.push(...e[o])}},exports.treeStack=function(e,r,n={}){let{cKey:o="children"}=n,s=[...e];for(;s.length;){let e=s.shift();t(e[o])?r&&r(e):s.push(...e[o])}},exports.treeRecursion=function(e,t,r={}){},exports.treeFind=function(e,t={}){let r=[],{cKey:n="children",key:o="id",value:s,copy:c=!0}=t,i=[...e];for(;i.length;){let e=i.pop();if(e[n]&&i.push(...e[n]),e[o]==s)if(c){let t={},o=Object.keys(e),s=o.length;for(let r=0;r<s;r++)o[r]!=n&&(t[o[r]]=e[o[r]]);r.push(t)}else r.push(e)}return r},exports.base64Img=function(e,t){return r=function(e){for(var t=e.split(","),r=t[0].match(/:(.*?);/)[1],n=atob(t[1]),o=n.length,s=new Uint8Array(o);o--;)s[o]=n.charCodeAt(o);return new Blob([s],{type:r})}(e),n=t,new File([r],n);var r,n},exports.compareDate=function(e,t="up"){return function(r,n){return"up"==t?Date.parse(r[e])-Date.parse(n[e]):Date.parse(n[e])-Date.parse(r[e])}},exports.compare=function(e,t="up"){return function(r,n){return"up"==t?r[e]-n[e]:n[e]-r[e]}},exports.numberRepair=function(e="",t=2,r="0",n=!1){let o="",s=(""+e).length;if(s>t&&1==n)return s;{let n=t-s;if(n>0)for(let e=0;e<n;e++)o+=r;return(o+e).slice(-1*t)}},exports.isMobile=n,exports.setMeta=function(e){if(!t(e)){let t=[];document.head.childNodes.forEach((r=>{switch(r.tagName){case"META":t.push(r);break;case"TITLE":document.title=e.title||"模板测试"}}));const r=document.createElement("META");let o=1,s="yes";e.cZoom&&(n()?e.cZoom.mobile&&(o=e.cZoom.mobile):e.cZoom.pc&&(o=e.cZoom.pc),e.cZoom.isScale&&(s=e.cZoom.isScale));let c=`width=device-width,minimum-scale=${o},initial-scale=${o},user-scalable=${s}`;"no"==s&&(c+=`,maximum-scale=${o}`);const i=[{charset:"utf-8"},{name:"viewport",content:c}],a=document.createDocumentFragment();i.forEach((e=>{a.append(r.cloneNode()),Object.entries(e).forEach((e=>{a.lastChild.setAttribute(e[0],e[1])}))})),t.forEach((e=>{document.head.removeChild(e)})),document.head.prepend(a)}},exports.colorMix=function(e,t,r){r=Math.max(Math.min(Number(r),1),0);let n=parseInt(e.substring(1,3),16),o=parseInt(e.substring(3,5),16),s=parseInt(e.substring(5,7),16),c=parseInt(t.substring(1,3),16),i=parseInt(t.substring(3,5),16),a=parseInt(t.substring(5,7),16),l=Math.round(n*(1-r)+c*r),u=Math.round(o*(1-r)+i*r),p=Math.round(s*(1-r)+a*r);return l=("0"+(l||0).toString(16)).slice(-2),u=("0"+(u||0).toString(16)).slice(-2),p=("0"+(p||0).toString(16)).slice(-2),"#"+l+u+p},exports.sArrMove=function(e,t,r){e.splice(r,0,e.splice(t,1)[0])},exports.rArrMove=function(e,t,r){let n=[].concat(e);return n.splice(r,0,n.splice(t,1)[0]),n},exports.arrSet=function(e,t,r){e.splice(t,0,r)},exports.randomColor=function(){let e=o(100,255),t=o(100,255),r=o(100,255);return"rgba("+e+","+t+","+r+",1)"},exports.randomNumber=o,exports.isDateInRange=function(e,t,r){const n=new Date(e),o=new Date(t),s=new Date(r);return n>=o&&n<=s},exports.throttle1=function(e,t){let r,n=0;return function(...o){const s=Date.now(),c=s-n;clearTimeout(r),c>=t?(e(...o),n=s):r=setTimeout((()=>{e(...o),n=Date.now()}),t-c)}},exports.throttle=function(e,t=1e3,r=!0){let n;const o=(...o)=>{n&&clearInterval(n),r?(n||e(...o),n=setTimeout((function(){n=null}),t)):n=setTimeout((()=>{e(...o)}),t)};return o.cancel=()=>{n&&(clearTimeout(n),n=null)},o},exports.debounce=function(e,t){let r;const n=function(...n){clearTimeout(r),r=setTimeout((()=>{e(...n)}),t)};return n.cancel=()=>{r&&(clearTimeout(r),r=null)},n},exports.arrayGroup=function(e,t="type"){return e.reduce(((e,r)=>{var n;return Object.assign(Object.assign({},e),{[r[t]]:[...null!==(n=e[r[t]])&&void 0!==n?n:[],r]})}),{})},exports.numberFixed=function(e,t=1){const r=e.toString(),n=r.indexOf(".");if(-1===n)return e;const o=r.slice(0,n+1+t);return parseFloat(o)},exports.delObj=function(e,n=""){try{if(t(n)){let t=Object.keys(e);for(let r of t)delete e[r]}else if("Array"==r(n))for(const t of n)delete e[t];else delete e[n]}catch(e){}},exports.delObjEmptyKey=function(e){try{let n=Object.keys(e);for(let o of n)"Number"!=r(e[o])&&t(e[o])&&delete e[o]}catch(e){}},exports.isNum=s,exports.pxToRem=function(e,t=37.5){let r=e;if(s(e)||-1!=e.indexOf("px")){r=(parseFloat(e)/t).toFixed(2)+"rem"}return r},exports.inArr=c,exports.fnRuntime=function(e,t=1){let r=0;for(let n=0;n<t;n++){const t=performance.now();e();r+=performance.now()-t}const n=r/t;console.log(`平均执行时间 ${t} 次数: ${n.toFixed(6)} ms`)},exports.objToFormData=function(e,t=!0){let n=new FormData;return function e(o,s="",c={}){let{level:i=0,pk:a="",type:l=""}=c,u=r(o);if(-1==["Array","Object"].indexOf(u)){if(null!=o){let e=s;t&&2==i&&"Array"==l&&(e=a),n.append(e,o)}}else if("Array"==u){let t=o.length;for(let r=0;r<t;r++){let t=`${s}[${r}]`,n={level:i+1,type:"Array",pk:s};e(o[r],t,n)}}else if("Object"==u){let t=Object.keys(o),r={level:i+1,type:"Object",pk:s};for(const n of t)e(o[n],`${s}${""==s?"":"."}${n}`,r)}}(e),n},exports.formatSize=function(e,t={}){let{decimals:r=2,sizes:n=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],perUnit:o=1024}=t;if(0===e)return"0"+n[0];const s=r<0?0:r,c=Math.floor(Math.log(e)/Math.log(o));return parseFloat((e/Math.pow(o,c)).toFixed(s))+" "+n[c]},exports.arrToAryTree=function(e,t={}){let{idKey:r="id",pidKey:n="pid",rKey:o="rgt",lKey:s="lft",levelKey:c="level"}=t;const i={},a={};let l=e.length;for(let t=0;t<l;t++){let o=e[t],s=o[n],c=o[r];i[c]=Object.assign({},o),a[s]||(a[s]=[]),a[s].push(c)}const u=Object.keys(a),p=Object.keys(i),f=new Set(p);let d=[];u.filter((e=>{f.has(e)||d.push(...a[e])}));let h=1;const m=[],g=[];for(let e=d.length-1;e>=0;e--)m.push({[r]:d[e],[c]:1,processed:!1});for(;m.length>0;){const e=m.pop(),t=i[e[r]];if(e.processed)t[o]=h++,g.push(t);else if(t[s]=h++,t[c]=e[c],m.push({[r]:e[r],[c]:e[c],processed:!0}),a[e[r]])for(let t=a[e[r]].length-1;t>=0;t--)m.push({[r]:a[e[r]][t],[c]:e[c]+1,processed:!1})}return g},exports.mergeObj=function(e,t={}){let{callback:n=null,callType:o="",afterBack:s=null}=t,c={};function i(e,t){let c=Object.keys(e);for(const a of c){let c=r(e[a]);n&&c==o?t[a]=n(e,a):"Object"===c?(t[a]||(t[a]={}),i(e[a],t[a])):t[a]=e[a],s&&s(t,a)}}for(const t of e)i(t,c);return c},Number.prototype.repair=function(e=2){let t="";for(let r=1;r<e;r++)t+="0";return(t+this).slice(-1*e)};exports.memoize=(e,t={})=>{const{context:r=null,ttl:n=0}=t,o=new Map,s=e=>{if("object"==typeof e&&null!==e){if(Array.isArray(e))return`[${e.map(s).join(",")}]`;return`{${Object.keys(e).sort().map((t=>`${t}:${s(e[t])}`)).join(",")}}`}return String(e)};return(...t)=>{const c=s(t),i=o.get(c);if(i&&(0===n||Date.now()-i.timestamp<=n))return i.value;const a=r?e.apply(r,t):e(...t);return o.set(c,{value:a,timestamp:Date.now()}),a}};
|
package/lib/request.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ interface conf {
|
|
|
7
7
|
/** 请求超时时间,单位毫秒,默认6000ms */
|
|
8
8
|
timeout?: number;
|
|
9
9
|
/** 请求成功后的回调函数,可以处理响应数据 */
|
|
10
|
-
callback?: (response: Response) => Promise<any> | any;
|
|
10
|
+
callback?: (response: Response, conf: conf) => Promise<any> | any;
|
|
11
11
|
/** 请求失败时的错误处理回调函数 */
|
|
12
12
|
errBack?: (error: Error) => void;
|
|
13
13
|
/** 获取AbortController实例的回调,用于手动中断请求 */
|
package/lib/request.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});const e=require("./index");exports.default=class{constructor(e={},t={}){this.options={},this.conf={baseUrl:"",timeout:6e3},this.options=e,Object.assign(this.conf,t)}serve(t="",o={},c={}){const n=(0,e.mergeObj)([this.conf,c]);let r=(0,e.mergeObj)([this.options,o],{callback:function(e,t){if(e[t])return e[t](e,t)},callType:"Function",afterBack:function(t,o){"Undefined"===(0,e.is)(t[o])&&delete t[o]}});const{timeout:s=6e3,baseUrl:i}=n;(0,e.isLink)(t)||(t=i+t);const a=new AbortController,l=a.signal;n.abController&&n.abController(a),n.beforeBack&&n.beforeBack(r);const b=setTimeout((()=>{a.abort()}),s);return fetch(t,Object.assign(Object.assign({},r),{signal:l})).then((e=>(clearTimeout(b),n.callback?n.callback(e):e))).catch((e=>{throw n.errBack&&n.errBack(e),clearTimeout(b),e}))}};
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});const e=require("./index");exports.default=class{constructor(e={},t={}){this.options={},this.conf={baseUrl:"",timeout:6e3},this.options=e,Object.assign(this.conf,t)}serve(t="",o={},c={}){const n=(0,e.mergeObj)([this.conf,c]);let r=(0,e.mergeObj)([this.options,o],{callback:function(e,t){if(e[t])return e[t](e,t)},callType:"Function",afterBack:function(t,o){"Undefined"===(0,e.is)(t[o])&&delete t[o]}});const{timeout:s=6e3,baseUrl:i}=n;(0,e.isLink)(t)||(t=i+t);const a=new AbortController,l=a.signal;n.abController&&n.abController(a),n.beforeBack&&n.beforeBack(r);const b=setTimeout((()=>{a.abort()}),s);return fetch(t,Object.assign(Object.assign({},r),{signal:l})).then((e=>(clearTimeout(b),n.callback?n.callback(e,n):e))).catch((e=>{throw n.errBack&&n.errBack(e),clearTimeout(b),e}))}};
|