@zkwq/business 0.2.23 → 0.2.24
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 +732 -153
- package/dist/index.js +80 -78
- package/dist/index.min.js +6 -6
- package/dist/index.umd.cjs +4 -4
- package/dist/index.umd.min.cjs +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -41,11 +41,18 @@
|
|
|
41
41
|
- [HoverCard(悬停卡片组件)](#hovercard)
|
|
42
42
|
- [FollowButton(关注按钮组件)](#followbutton)
|
|
43
43
|
- [AvatarGroup(头像组组件)](#avatargroup)
|
|
44
|
+
- [CaptchaDialog(机器人验证对话框组件)](#captchadialog)
|
|
45
|
+
- [CaptchaFormItem(验证码表单项组件)](#captchaformitem)
|
|
46
|
+
- [MultipleSpan(多值文本组件)](#multiplespan)
|
|
44
47
|
- [工具函数](#工具函数)
|
|
45
48
|
- [加密与哈希函数](#加密与哈希函数)
|
|
46
49
|
- [ID与字符串生成函数](#id与字符串生成函数)
|
|
47
50
|
- [数据验证与处理函数](#数据验证与处理函数)
|
|
51
|
+
- [表单验证函数](#表单验证函数)
|
|
48
52
|
- [数据转换函数](#数据转换函数)
|
|
53
|
+
- [数组工具函数](#数组工具函数)
|
|
54
|
+
- [文件与下载函数](#文件与下载函数)
|
|
55
|
+
- [浏览器环境检测函数](#浏览器环境检测函数)
|
|
49
56
|
- [URL与参数处理函数](#url与参数处理函数)
|
|
50
57
|
- [数据存储函数](#数据存储函数)
|
|
51
58
|
- [其他工具函数](#其他工具函数)
|
|
@@ -53,8 +60,9 @@
|
|
|
53
60
|
- [http(HTTP请求工具)](#http)
|
|
54
61
|
- [CONSTANT(常量集合)](#constant)
|
|
55
62
|
- [ScrollTool(滚动工具)](#scrolltool)
|
|
56
|
-
- [
|
|
63
|
+
- [ExportUtil(导出工具)](#exportutil)
|
|
57
64
|
- [Bus(事件总线)](#bus)
|
|
65
|
+
- [CheckRobot(机器人验证工具)](#checkrobot)
|
|
58
66
|
- [HighLight(高亮工具)](#highlight)
|
|
59
67
|
- [服务模块](#服务模块)
|
|
60
68
|
- [日志服务](#日志服务)
|
|
@@ -454,8 +462,8 @@ export default {
|
|
|
454
462
|
```vue
|
|
455
463
|
<template>
|
|
456
464
|
<div>
|
|
457
|
-
<avatar :
|
|
458
|
-
<avatar :
|
|
465
|
+
<avatar :url="avatarUrl" :size="40" />
|
|
466
|
+
<avatar :url="avatarUrl" :size="60" :round="true" />
|
|
459
467
|
<avatar :size="80" />
|
|
460
468
|
</div>
|
|
461
469
|
</template>
|
|
@@ -479,7 +487,7 @@ export default {
|
|
|
479
487
|
|
|
480
488
|
```vue
|
|
481
489
|
<template>
|
|
482
|
-
<button v-
|
|
490
|
+
<button v-ripple>点击我</button>
|
|
483
491
|
</template>
|
|
484
492
|
```
|
|
485
493
|
|
|
@@ -627,7 +635,7 @@ export default {
|
|
|
627
635
|
|
|
628
636
|
```vue
|
|
629
637
|
<template>
|
|
630
|
-
<x-header :back="true" back-home="handleBackHome">
|
|
638
|
+
<x-header :back="true" :back-home="handleBackHome">
|
|
631
639
|
<base-button>操作</base-button>
|
|
632
640
|
</x-header>
|
|
633
641
|
</template>
|
|
@@ -829,9 +837,9 @@ export default {
|
|
|
829
837
|
|
|
830
838
|
```vue
|
|
831
839
|
<template>
|
|
832
|
-
<user-profile
|
|
833
|
-
:
|
|
834
|
-
:avatar-size="80"
|
|
840
|
+
<user-profile
|
|
841
|
+
:profile="userInfo"
|
|
842
|
+
:avatar-size="80"
|
|
835
843
|
:avatar-round="true"
|
|
836
844
|
/>
|
|
837
845
|
</template>
|
|
@@ -1317,6 +1325,130 @@ export default {
|
|
|
1317
1325
|
</script>
|
|
1318
1326
|
```
|
|
1319
1327
|
|
|
1328
|
+
### CaptchaDialog
|
|
1329
|
+
|
|
1330
|
+
机器人验证对话框组件,通过图形算式验证用户非机器人身份,验证成功后触发事件或刷新页面。通常配合 `CheckRobot.createCaptchaDialog()` 使用。
|
|
1331
|
+
|
|
1332
|
+
#### Events
|
|
1333
|
+
|
|
1334
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1335
|
+
|--------|------|----------|
|
|
1336
|
+
| on-success | 验证通过时触发 | - |
|
|
1337
|
+
|
|
1338
|
+
#### Methods
|
|
1339
|
+
|
|
1340
|
+
| 方法名 | 说明 | 参数 |
|
|
1341
|
+
|--------|------|------|
|
|
1342
|
+
| show | 显示验证对话框 | - |
|
|
1343
|
+
| hide | 隐藏验证对话框并重置表单 | - |
|
|
1344
|
+
|
|
1345
|
+
#### 示例
|
|
1346
|
+
|
|
1347
|
+
```javascript
|
|
1348
|
+
// 推荐:通过 CheckRobot 工具函数触发
|
|
1349
|
+
import { CheckRobot } from '@zkwq-x/business'
|
|
1350
|
+
CheckRobot.createCaptchaDialog()
|
|
1351
|
+
```
|
|
1352
|
+
|
|
1353
|
+
```vue
|
|
1354
|
+
<!-- 手动使用组件 -->
|
|
1355
|
+
<template>
|
|
1356
|
+
<captcha-dialog ref="captchaDialog" @on-success="handleSuccess" />
|
|
1357
|
+
</template>
|
|
1358
|
+
|
|
1359
|
+
<script>
|
|
1360
|
+
export default {
|
|
1361
|
+
methods: {
|
|
1362
|
+
showCaptcha() {
|
|
1363
|
+
this.$refs.captchaDialog.show()
|
|
1364
|
+
},
|
|
1365
|
+
handleSuccess() {
|
|
1366
|
+
console.log('验证通过')
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
</script>
|
|
1371
|
+
```
|
|
1372
|
+
|
|
1373
|
+
### CaptchaFormItem
|
|
1374
|
+
|
|
1375
|
+
验证码表单项组件,封装了图形验证码输入框与验证码图片(点击可刷新),用于嵌入表单中使用。
|
|
1376
|
+
|
|
1377
|
+
#### Props
|
|
1378
|
+
|
|
1379
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1380
|
+
|------|------|------|--------|--------|
|
|
1381
|
+
| prop | 表单验证字段名 | String | - | - |
|
|
1382
|
+
| captcha | 验证码值(v-model) | String | - | - |
|
|
1383
|
+
| captchaKey | 验证码 Key(用于获取图形验证码) | String | - | - |
|
|
1384
|
+
| showLabel | 是否显示 label | Boolean | - | false |
|
|
1385
|
+
|
|
1386
|
+
#### Events
|
|
1387
|
+
|
|
1388
|
+
| 事件名 | 说明 | 回调参数 |
|
|
1389
|
+
|--------|------|----------|
|
|
1390
|
+
| input | 输入值变化时触发 | (value: string) |
|
|
1391
|
+
|
|
1392
|
+
#### Methods
|
|
1393
|
+
|
|
1394
|
+
| 方法名 | 说明 | 参数 |
|
|
1395
|
+
|--------|------|------|
|
|
1396
|
+
| handleRefreshCaptcha | 刷新验证码图片 | - |
|
|
1397
|
+
|
|
1398
|
+
#### 示例
|
|
1399
|
+
|
|
1400
|
+
```vue
|
|
1401
|
+
<template>
|
|
1402
|
+
<base-form :model="form" :rules="rules" ref="form">
|
|
1403
|
+
<captcha-form-item
|
|
1404
|
+
prop="captcha"
|
|
1405
|
+
v-model.trim="form.captcha"
|
|
1406
|
+
:captcha-key="clientId"
|
|
1407
|
+
/>
|
|
1408
|
+
</base-form>
|
|
1409
|
+
</template>
|
|
1410
|
+
|
|
1411
|
+
<script>
|
|
1412
|
+
export default {
|
|
1413
|
+
data() {
|
|
1414
|
+
return {
|
|
1415
|
+
clientId: 'your-client-id',
|
|
1416
|
+
form: { captcha: null }
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
</script>
|
|
1421
|
+
```
|
|
1422
|
+
|
|
1423
|
+
### MultipleSpan
|
|
1424
|
+
|
|
1425
|
+
多值文本组件,将字符串数组以逗号分隔渲染为行内 `<span>` 列表,支持分隔符间距控制。
|
|
1426
|
+
|
|
1427
|
+
#### Props
|
|
1428
|
+
|
|
1429
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
1430
|
+
|------|------|------|--------|--------|
|
|
1431
|
+
| data | 文本数组 | Array | - | - |
|
|
1432
|
+
| gutter | 分隔符间距大小 | String | medium/large | 'medium' |
|
|
1433
|
+
|
|
1434
|
+
#### 示例
|
|
1435
|
+
|
|
1436
|
+
```vue
|
|
1437
|
+
<template>
|
|
1438
|
+
<multiple-span :data="authors" gutter="large" />
|
|
1439
|
+
</template>
|
|
1440
|
+
|
|
1441
|
+
<script>
|
|
1442
|
+
export default {
|
|
1443
|
+
data() {
|
|
1444
|
+
return {
|
|
1445
|
+
authors: ['张三', '李四', '王五']
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
</script>
|
|
1450
|
+
```
|
|
1451
|
+
|
|
1320
1452
|
## 工具函数
|
|
1321
1453
|
|
|
1322
1454
|
### 加密与哈希函数
|
|
@@ -1334,30 +1466,60 @@ const hash = BaseUtil.MD5('hello world')
|
|
|
1334
1466
|
console.log(hash) // 输出: 5eb63bbbe01eeed093cb22bb8f5acdc3
|
|
1335
1467
|
```
|
|
1336
1468
|
|
|
1337
|
-
####
|
|
1469
|
+
#### AESEncode(message[, aesKeyStr, aesIvStr])
|
|
1338
1470
|
- **功能**: 使用AES算法加密数据
|
|
1339
|
-
- **参数**:
|
|
1340
|
-
- `
|
|
1341
|
-
- `
|
|
1471
|
+
- **参数**:
|
|
1472
|
+
- `message` (String): 要加密的数据
|
|
1473
|
+
- `aesKeyStr` (String): 加密密钥,默认使用内置 AES_KEY
|
|
1474
|
+
- `aesIvStr` (String): 加密向量,默认使用内置 AES_IV
|
|
1342
1475
|
- **返回值**: String - 加密后的字符串
|
|
1343
1476
|
- **示例**:
|
|
1344
1477
|
```javascript
|
|
1345
1478
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1346
1479
|
|
|
1347
|
-
const encrypted = BaseUtil.
|
|
1480
|
+
const encrypted = BaseUtil.AESEncode('sensitive data')
|
|
1348
1481
|
```
|
|
1349
1482
|
|
|
1350
|
-
####
|
|
1483
|
+
#### AESDecode(message[, aesKeyStr, aesIvStr])
|
|
1351
1484
|
- **功能**: 使用AES算法解密数据
|
|
1352
|
-
- **参数**:
|
|
1353
|
-
- `
|
|
1354
|
-
- `
|
|
1485
|
+
- **参数**:
|
|
1486
|
+
- `message` (String): 加密的数据
|
|
1487
|
+
- `aesKeyStr` (String): 解密密钥,默认使用内置 AES_KEY
|
|
1488
|
+
- `aesIvStr` (String): 解密向量,默认使用内置 AES_IV
|
|
1489
|
+
- **返回值**: String - 解密后的原始数据
|
|
1490
|
+
- **示例**:
|
|
1491
|
+
```javascript
|
|
1492
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1493
|
+
|
|
1494
|
+
const decrypted = BaseUtil.AESDecode(encryptedData)
|
|
1495
|
+
```
|
|
1496
|
+
|
|
1497
|
+
#### AESEncodeBase64(message[, aesKeyStr, aesIvStr])
|
|
1498
|
+
- **功能**: 使用AES算法加密数据,返回 Base64 格式密文
|
|
1499
|
+
- **参数**:
|
|
1500
|
+
- `message` (String): 要加密的数据
|
|
1501
|
+
- `aesKeyStr` (String): 加密密钥,默认使用内置 AES_KEY
|
|
1502
|
+
- `aesIvStr` (String): 加密向量,默认使用内置 AES_IV
|
|
1503
|
+
- **返回值**: String - Base64 格式的加密字符串
|
|
1504
|
+
- **示例**:
|
|
1505
|
+
```javascript
|
|
1506
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1507
|
+
|
|
1508
|
+
const encrypted = BaseUtil.AESEncodeBase64('sensitive data')
|
|
1509
|
+
```
|
|
1510
|
+
|
|
1511
|
+
#### AESDecodeBase64(message[, aesKeyStr, aesIvStr])
|
|
1512
|
+
- **功能**: 解密 AESEncodeBase64 产生的 Base64 格式密文
|
|
1513
|
+
- **参数**:
|
|
1514
|
+
- `message` (String): Base64 格式的加密数据
|
|
1515
|
+
- `aesKeyStr` (String): 解密密钥,默认使用内置 AES_KEY
|
|
1516
|
+
- `aesIvStr` (String): 解密向量,默认使用内置 AES_IV
|
|
1355
1517
|
- **返回值**: String - 解密后的原始数据
|
|
1356
1518
|
- **示例**:
|
|
1357
1519
|
```javascript
|
|
1358
1520
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1359
1521
|
|
|
1360
|
-
const decrypted = BaseUtil.
|
|
1522
|
+
const decrypted = BaseUtil.AESDecodeBase64(encryptedBase64Data)
|
|
1361
1523
|
```
|
|
1362
1524
|
|
|
1363
1525
|
### ID与字符串生成函数
|
|
@@ -1387,7 +1549,7 @@ const str = BaseUtil.randomString(8)
|
|
|
1387
1549
|
console.log(str) // 输出: "a1b2c3d4" (示例)
|
|
1388
1550
|
```
|
|
1389
1551
|
|
|
1390
|
-
####
|
|
1552
|
+
#### guid()
|
|
1391
1553
|
- **功能**: 生成UUID字符串
|
|
1392
1554
|
- **参数**: 无
|
|
1393
1555
|
- **返回值**: String - UUID格式的字符串
|
|
@@ -1395,12 +1557,102 @@ console.log(str) // 输出: "a1b2c3d4" (示例)
|
|
|
1395
1557
|
```javascript
|
|
1396
1558
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1397
1559
|
|
|
1398
|
-
const uuid = BaseUtil.
|
|
1560
|
+
const uuid = BaseUtil.guid()
|
|
1399
1561
|
console.log(uuid) // 输出: "f47ac10b-58cc-4372-a567-0e02b2c3d479" (示例)
|
|
1400
1562
|
```
|
|
1401
1563
|
|
|
1402
1564
|
### 数据验证与处理函数
|
|
1403
1565
|
|
|
1566
|
+
#### isString(obj)
|
|
1567
|
+
- **功能**: 检查值是否为字符串类型
|
|
1568
|
+
- **参数**:
|
|
1569
|
+
- `obj` (Any): 要检查的值
|
|
1570
|
+
- **返回值**: Boolean
|
|
1571
|
+
- **示例**:
|
|
1572
|
+
```javascript
|
|
1573
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1574
|
+
|
|
1575
|
+
console.log(BaseUtil.isString('hello')) // true
|
|
1576
|
+
console.log(BaseUtil.isString(123)) // false
|
|
1577
|
+
```
|
|
1578
|
+
|
|
1579
|
+
#### isObject(obj)
|
|
1580
|
+
- **功能**: 检查值是否为普通对象类型
|
|
1581
|
+
- **参数**:
|
|
1582
|
+
- `obj` (Any): 要检查的值
|
|
1583
|
+
- **返回值**: Boolean
|
|
1584
|
+
- **示例**:
|
|
1585
|
+
```javascript
|
|
1586
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1587
|
+
|
|
1588
|
+
console.log(BaseUtil.isObject({})) // true
|
|
1589
|
+
console.log(BaseUtil.isObject([])) // false
|
|
1590
|
+
```
|
|
1591
|
+
|
|
1592
|
+
#### isUndefined(val)
|
|
1593
|
+
- **功能**: 检查值是否为 undefined
|
|
1594
|
+
- **参数**:
|
|
1595
|
+
- `val` (Any): 要检查的值
|
|
1596
|
+
- **返回值**: Boolean
|
|
1597
|
+
|
|
1598
|
+
#### isDefined(val)
|
|
1599
|
+
- **功能**: 检查值是否已定义(非 undefined 且非 null)
|
|
1600
|
+
- **参数**:
|
|
1601
|
+
- `val` (Any): 要检查的值
|
|
1602
|
+
- **返回值**: Boolean
|
|
1603
|
+
|
|
1604
|
+
#### looseEqual(a, b)
|
|
1605
|
+
- **功能**: 宽松比较两个值是否相等(对象使用 JSON 序列化比较)
|
|
1606
|
+
- **参数**:
|
|
1607
|
+
- `a` (Any): 第一个值
|
|
1608
|
+
- `b` (Any): 第二个值
|
|
1609
|
+
- **返回值**: Boolean
|
|
1610
|
+
|
|
1611
|
+
#### arrayEquals(arrayA, arrayB)
|
|
1612
|
+
- **功能**: 比较两个数组是否相等(逐元素宽松比较)
|
|
1613
|
+
- **参数**:
|
|
1614
|
+
- `arrayA` (Array): 第一个数组
|
|
1615
|
+
- `arrayB` (Array): 第二个数组
|
|
1616
|
+
- **返回值**: Boolean
|
|
1617
|
+
|
|
1618
|
+
#### isEqual(value1, value2)
|
|
1619
|
+
- **功能**: 比较两个值是否相等,支持数组和普通值
|
|
1620
|
+
- **参数**:
|
|
1621
|
+
- `value1` (Any): 第一个值
|
|
1622
|
+
- `value2` (Any): 第二个值
|
|
1623
|
+
- **返回值**: Boolean
|
|
1624
|
+
|
|
1625
|
+
#### isSupportWebp()
|
|
1626
|
+
- **功能**: 检测当前浏览器是否支持 WebP 图片格式
|
|
1627
|
+
- **参数**: 无
|
|
1628
|
+
- **返回值**: Boolean
|
|
1629
|
+
- **示例**:
|
|
1630
|
+
```javascript
|
|
1631
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1632
|
+
|
|
1633
|
+
if (BaseUtil.isSupportWebp()) {
|
|
1634
|
+
// 使用 WebP 图片
|
|
1635
|
+
}
|
|
1636
|
+
```
|
|
1637
|
+
|
|
1638
|
+
#### HasChinese(str)
|
|
1639
|
+
- **功能**: 检查字符串是否包含中文字符
|
|
1640
|
+
- **参数**:
|
|
1641
|
+
- `str` (String): 要检查的字符串
|
|
1642
|
+
- **返回值**: Boolean
|
|
1643
|
+
|
|
1644
|
+
#### HasWhiteSpace(str)
|
|
1645
|
+
- **功能**: 检查字符串是否包含空格
|
|
1646
|
+
- **参数**:
|
|
1647
|
+
- `str` (String): 要检查的字符串
|
|
1648
|
+
- **返回值**: Boolean
|
|
1649
|
+
|
|
1650
|
+
#### IsNumber(val)
|
|
1651
|
+
- **功能**: 检查值是否为数字类型
|
|
1652
|
+
- **参数**:
|
|
1653
|
+
- `val` (Any): 要检查的值
|
|
1654
|
+
- **返回值**: Boolean
|
|
1655
|
+
|
|
1404
1656
|
#### isEmpty(val)
|
|
1405
1657
|
- **功能**: 检查值是否为空(null、undefined、空字符串、空数组、空对象)
|
|
1406
1658
|
- **参数**:
|
|
@@ -1431,200 +1683,410 @@ console.log(BaseUtil.isArrayEmpty([1, 2, 3])) // false
|
|
|
1431
1683
|
console.log(BaseUtil.isArrayEmpty(undefined)) // true
|
|
1432
1684
|
```
|
|
1433
1685
|
|
|
1434
|
-
####
|
|
1435
|
-
- **功能**:
|
|
1436
|
-
- **参数**:
|
|
1437
|
-
- `
|
|
1438
|
-
- **返回值**: Boolean -
|
|
1686
|
+
#### isFunction(functionToCheck)
|
|
1687
|
+
- **功能**: 检查值是否为函数
|
|
1688
|
+
- **参数**:
|
|
1689
|
+
- `functionToCheck` (Any): 要检查的值
|
|
1690
|
+
- **返回值**: Boolean - 如果值是函数返回true,否则返回false
|
|
1439
1691
|
- **示例**:
|
|
1440
1692
|
```javascript
|
|
1441
1693
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1442
1694
|
|
|
1443
|
-
console.log(BaseUtil.
|
|
1444
|
-
console.log(BaseUtil.
|
|
1445
|
-
console.log(BaseUtil.
|
|
1695
|
+
console.log(BaseUtil.isFunction(() => {})) // true
|
|
1696
|
+
console.log(BaseUtil.isFunction(function() {})) // true
|
|
1697
|
+
console.log(BaseUtil.isFunction('hello')) // false
|
|
1446
1698
|
```
|
|
1447
1699
|
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1700
|
+
### 表单验证函数
|
|
1701
|
+
|
|
1702
|
+
> 以下验证函数符合 Element-UI / base-form 的 validator 规范,可直接用于表单 rules 配置。
|
|
1703
|
+
|
|
1704
|
+
#### ValidateMobile(rule, value, callback)
|
|
1705
|
+
- **功能**: 验证手机号格式
|
|
1453
1706
|
- **示例**:
|
|
1454
1707
|
```javascript
|
|
1455
1708
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1456
1709
|
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1710
|
+
rules: {
|
|
1711
|
+
phone: [{ validator: BaseUtil.ValidateMobile, trigger: 'blur' }]
|
|
1712
|
+
}
|
|
1460
1713
|
```
|
|
1461
1714
|
|
|
1715
|
+
#### ValidateMobileCode(rule, value, callback)
|
|
1716
|
+
- **功能**: 验证短信验证码(6位纯数字)
|
|
1717
|
+
|
|
1718
|
+
#### ValidateCaptcha(rule, value, callback)
|
|
1719
|
+
- **功能**: 验证图形验证码(纯数字)
|
|
1720
|
+
|
|
1721
|
+
#### ValidateEmail(rule, value, callback)
|
|
1722
|
+
- **功能**: 验证邮箱格式
|
|
1723
|
+
|
|
1724
|
+
#### ValidateEmailCode(rule, value, callback)
|
|
1725
|
+
- **功能**: 验证邮箱验证码(6位纯数字)
|
|
1726
|
+
|
|
1462
1727
|
### 数据转换函数
|
|
1463
1728
|
|
|
1464
|
-
####
|
|
1465
|
-
- **功能**:
|
|
1466
|
-
- **参数**:
|
|
1467
|
-
- `
|
|
1468
|
-
- **返回值**: String -
|
|
1729
|
+
#### formatNumber(val)
|
|
1730
|
+
- **功能**: 格式化数字,添加千位分隔符
|
|
1731
|
+
- **参数**:
|
|
1732
|
+
- `val` (Number): 要格式化的数字
|
|
1733
|
+
- **返回值**: String - 格式化后的数字字符串(如 "5,416,252")
|
|
1469
1734
|
- **示例**:
|
|
1470
1735
|
```javascript
|
|
1471
1736
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1472
1737
|
|
|
1473
|
-
console.log(BaseUtil.
|
|
1474
|
-
console.log(BaseUtil.formatFileSize(1048576)) // "1 MB"
|
|
1475
|
-
console.log(BaseUtil.formatFileSize(1073741824)) // "1 GB"
|
|
1738
|
+
console.log(BaseUtil.formatNumber(5416252)) // "5,416,252"
|
|
1476
1739
|
```
|
|
1477
1740
|
|
|
1478
|
-
####
|
|
1479
|
-
- **功能**:
|
|
1480
|
-
- **参数**:
|
|
1481
|
-
- `
|
|
1482
|
-
|
|
1483
|
-
- **返回值**: String - 格式化后的日期字符串
|
|
1741
|
+
#### formatKNumber(val)
|
|
1742
|
+
- **功能**: 格式化数字为 K 单位(千)
|
|
1743
|
+
- **参数**:
|
|
1744
|
+
- `val` (Number): 要格式化的数字
|
|
1745
|
+
- **返回值**: String|Number - 小于1000返回原值,否则返回如 "6.2K" 格式的字符串
|
|
1484
1746
|
- **示例**:
|
|
1485
1747
|
```javascript
|
|
1486
1748
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1487
1749
|
|
|
1488
|
-
console.log(BaseUtil.
|
|
1489
|
-
console.log(BaseUtil.
|
|
1750
|
+
console.log(BaseUtil.formatKNumber(6252)) // "6.3K"
|
|
1751
|
+
console.log(BaseUtil.formatKNumber(500)) // 500
|
|
1490
1752
|
```
|
|
1491
1753
|
|
|
1492
|
-
####
|
|
1493
|
-
- **功能**:
|
|
1494
|
-
- **参数**:
|
|
1495
|
-
- `
|
|
1496
|
-
- `
|
|
1497
|
-
- **返回值**: String -
|
|
1754
|
+
#### scaleNumber(val, scale)
|
|
1755
|
+
- **功能**: 对数字进行固定小数位数格式化
|
|
1756
|
+
- **参数**:
|
|
1757
|
+
- `val` (Number): 要格式化的数字
|
|
1758
|
+
- `scale` (Number): 保留的小数位数
|
|
1759
|
+
- **返回值**: String - 固定小数位的数字字符串
|
|
1760
|
+
- **示例**:
|
|
1761
|
+
```javascript
|
|
1762
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1763
|
+
|
|
1764
|
+
console.log(BaseUtil.scaleNumber(3.14159, 2)) // "3.14"
|
|
1765
|
+
```
|
|
1766
|
+
|
|
1767
|
+
#### ConvertArrayToString(array[, splitSign])
|
|
1768
|
+
- **功能**: 将数组转换为分隔符连接的字符串,自动过滤 null 值
|
|
1769
|
+
- **参数**:
|
|
1770
|
+
- `array` (Array): 要转换的数组
|
|
1771
|
+
- `splitSign` (String): 分隔符,默认 `','`
|
|
1772
|
+
- **返回值**: String - 转换后的字符串,数组为空时返回 `''`
|
|
1773
|
+
- **示例**:
|
|
1774
|
+
```javascript
|
|
1775
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1776
|
+
|
|
1777
|
+
console.log(BaseUtil.ConvertArrayToString(['张三', '李四', '王五'])) // "张三,李四,王五"
|
|
1778
|
+
console.log(BaseUtil.ConvertArrayToString(['a', 'b'], ' | ')) // "a | b"
|
|
1779
|
+
```
|
|
1780
|
+
|
|
1781
|
+
#### ConvertStringToArray(str[, splitSign])
|
|
1782
|
+
- **功能**: 将分隔符连接的字符串转换为数组
|
|
1783
|
+
- **参数**:
|
|
1784
|
+
- `str` (String): 要转换的字符串
|
|
1785
|
+
- `splitSign` (String): 分隔符,默认 `','`
|
|
1786
|
+
- **返回值**: Array - 转换后的数组,str 为空时返回 `[]`
|
|
1787
|
+
- **示例**:
|
|
1788
|
+
```javascript
|
|
1789
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1790
|
+
|
|
1791
|
+
console.log(BaseUtil.ConvertStringToArray('张三,李四,王五')) // ['张三', '李四', '王五']
|
|
1792
|
+
```
|
|
1793
|
+
|
|
1794
|
+
#### clearHighlight(str)
|
|
1795
|
+
- **功能**: 清除字符串中的高亮 HTML 标签(`<span class="Highlight">`)
|
|
1796
|
+
- **参数**:
|
|
1797
|
+
- `str` (String): 包含高亮标签的字符串
|
|
1798
|
+
- **返回值**: String - 清除标签后的纯文本
|
|
1498
1799
|
- **示例**:
|
|
1499
1800
|
```javascript
|
|
1500
1801
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1501
1802
|
|
|
1502
|
-
|
|
1503
|
-
console.log(BaseUtil.
|
|
1803
|
+
const raw = '这是<span class="Highlight">高亮</span>内容'
|
|
1804
|
+
console.log(BaseUtil.clearHighlight(raw)) // "这是高亮内容"
|
|
1805
|
+
```
|
|
1806
|
+
|
|
1807
|
+
#### ClearHtml(text)
|
|
1808
|
+
- **功能**: 清除字符串中所有 HTML 标签
|
|
1809
|
+
- **参数**:
|
|
1810
|
+
- `text` (String): 含 HTML 标签的字符串
|
|
1811
|
+
- **返回值**: String - 纯文本字符串
|
|
1812
|
+
|
|
1813
|
+
### 数组工具函数
|
|
1814
|
+
|
|
1815
|
+
#### ArraySwapItems(arr, src, dest)
|
|
1816
|
+
- **功能**: 交换数组中两个元素的位置
|
|
1817
|
+
- **参数**:
|
|
1818
|
+
- `arr` (Array): 目标数组
|
|
1819
|
+
- `src` (Number): 源元素索引
|
|
1820
|
+
- `dest` (Number): 目标元素索引
|
|
1821
|
+
- **返回值**: Array - 操作后的数组
|
|
1822
|
+
|
|
1823
|
+
#### ArrayValueEquals(a, b)
|
|
1824
|
+
- **功能**: 严格比较两个数组的值是否完全相同(引用相等或逐元素 `===`)
|
|
1825
|
+
- **参数**:
|
|
1826
|
+
- `a` (Array): 第一个数组
|
|
1827
|
+
- `b` (Array): 第二个数组
|
|
1828
|
+
- **返回值**: Boolean
|
|
1829
|
+
|
|
1830
|
+
#### ArrayUpItem(arr, index)
|
|
1831
|
+
- **功能**: 将数组中指定位置的元素上移一位
|
|
1832
|
+
- **参数**:
|
|
1833
|
+
- `arr` (Array): 目标数组
|
|
1834
|
+
- `index` (Number): 元素索引,已是第一位则不操作
|
|
1835
|
+
|
|
1836
|
+
#### ArrayDownItem(arr, index)
|
|
1837
|
+
- **功能**: 将数组中指定位置的元素下移一位
|
|
1838
|
+
- **参数**:
|
|
1839
|
+
- `arr` (Array): 目标数组
|
|
1840
|
+
- `index` (Number): 元素索引,已是最后一位则不操作
|
|
1841
|
+
|
|
1842
|
+
### 文件与下载函数
|
|
1843
|
+
|
|
1844
|
+
#### DownloadFile(base64File, fileName)
|
|
1845
|
+
- **功能**: 将 Base64 编码的文件数据下载到本地
|
|
1846
|
+
- **参数**:
|
|
1847
|
+
- `base64File` (String): Base64 格式的文件数据
|
|
1848
|
+
- `fileName` (String): 下载文件名
|
|
1849
|
+
- **示例**:
|
|
1850
|
+
```javascript
|
|
1851
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1852
|
+
|
|
1853
|
+
BaseUtil.DownloadFile(base64Data, 'report.pdf')
|
|
1504
1854
|
```
|
|
1505
1855
|
|
|
1856
|
+
#### DownloadUrl(url, fileName)
|
|
1857
|
+
- **功能**: 通过 URL 下载文件
|
|
1858
|
+
- **参数**:
|
|
1859
|
+
- `url` (String): 文件 URL
|
|
1860
|
+
- `fileName` (String): 下载文件名
|
|
1861
|
+
- **示例**:
|
|
1862
|
+
```javascript
|
|
1863
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1864
|
+
|
|
1865
|
+
BaseUtil.DownloadUrl('https://example.com/file.pdf', 'file.pdf')
|
|
1866
|
+
```
|
|
1867
|
+
|
|
1868
|
+
#### Base64toBlob(base64Data[, contentType, sliceSize])
|
|
1869
|
+
- **功能**: 将 Base64 字符串转换为 Blob 对象
|
|
1870
|
+
- **参数**:
|
|
1871
|
+
- `base64Data` (String): Base64 编码数据
|
|
1872
|
+
- `contentType` (String): MIME 类型,默认 `''`
|
|
1873
|
+
- `sliceSize` (Number): 切片大小,默认 `512`
|
|
1874
|
+
- **返回值**: Blob
|
|
1875
|
+
|
|
1876
|
+
#### isPDF(file)
|
|
1877
|
+
- **功能**: 检测文件是否为 PDF 格式(通过读取文件头字节判断)
|
|
1878
|
+
- **参数**:
|
|
1879
|
+
- `file` (File): 文件对象
|
|
1880
|
+
- **返回值**: Promise\<Boolean\>
|
|
1881
|
+
- **示例**:
|
|
1882
|
+
```javascript
|
|
1883
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1884
|
+
|
|
1885
|
+
BaseUtil.isPDF(file).then(result => {
|
|
1886
|
+
console.log('是否为PDF:', result)
|
|
1887
|
+
})
|
|
1888
|
+
```
|
|
1889
|
+
|
|
1890
|
+
### 浏览器环境检测函数
|
|
1891
|
+
|
|
1892
|
+
#### isIE()
|
|
1893
|
+
- **功能**: 检测当前浏览器是否为 IE
|
|
1894
|
+
- **返回值**: Boolean
|
|
1895
|
+
|
|
1896
|
+
#### isEdge()
|
|
1897
|
+
- **功能**: 检测当前浏览器是否为 Edge
|
|
1898
|
+
- **返回值**: Boolean
|
|
1899
|
+
|
|
1900
|
+
#### isFirefox()
|
|
1901
|
+
- **功能**: 检测当前浏览器是否为 Firefox
|
|
1902
|
+
- **返回值**: Boolean
|
|
1903
|
+
|
|
1506
1904
|
### URL与参数处理函数
|
|
1507
1905
|
|
|
1508
|
-
#### getQueryString(name)
|
|
1906
|
+
#### getQueryString(name[, mode])
|
|
1509
1907
|
- **功能**: 获取URL查询字符串参数值
|
|
1510
|
-
- **参数**:
|
|
1908
|
+
- **参数**:
|
|
1511
1909
|
- `name` (String): 参数名
|
|
1512
|
-
-
|
|
1910
|
+
- `mode` (String): 路由模式,`'history'`(默认)或 `'hash'`
|
|
1911
|
+
- **返回值**: String - 参数值,如果不存在则返回空字符串 `''`
|
|
1513
1912
|
- **示例**:
|
|
1514
1913
|
```javascript
|
|
1515
1914
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1516
1915
|
|
|
1517
1916
|
// 假设当前URL为: https://example.com?id=123&name=test
|
|
1518
|
-
console.log(BaseUtil.getQueryString('id'))
|
|
1519
|
-
console.log(BaseUtil.getQueryString('name'))
|
|
1520
|
-
console.log(BaseUtil.getQueryString('nonexistent'))
|
|
1917
|
+
console.log(BaseUtil.getQueryString('id')) // "123"
|
|
1918
|
+
console.log(BaseUtil.getQueryString('name')) // "test"
|
|
1919
|
+
console.log(BaseUtil.getQueryString('nonexistent')) // ""
|
|
1920
|
+
|
|
1921
|
+
// hash 路由模式(URL为: https://example.com/#/?id=456)
|
|
1922
|
+
console.log(BaseUtil.getQueryString('id', 'hash')) // "456"
|
|
1521
1923
|
```
|
|
1522
1924
|
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
-
|
|
1925
|
+
### 数据存储函数
|
|
1926
|
+
|
|
1927
|
+
> 存储函数基于 localStorage/sessionStorage 封装,支持过期时间,内部使用 Base64 编码存储。
|
|
1928
|
+
|
|
1929
|
+
#### setStorage(key, value[, expire])
|
|
1930
|
+
- **功能**: 设置本地存储数据(localStorage),支持过期时间
|
|
1931
|
+
- **参数**:
|
|
1932
|
+
- `key` (String): 存储键名
|
|
1933
|
+
- `value` (Any): 要存储的值(自动序列化)
|
|
1934
|
+
- `expire` (Number): 过期时间(毫秒),默认 `7200000`(2小时),传 `-1` 表示永不过期
|
|
1935
|
+
- **返回值**: 无
|
|
1529
1936
|
- **示例**:
|
|
1530
1937
|
```javascript
|
|
1531
1938
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1532
1939
|
|
|
1533
|
-
|
|
1534
|
-
|
|
1940
|
+
BaseUtil.setStorage('user', { id: 1, name: 'John' })
|
|
1941
|
+
BaseUtil.setStorage('token', 'abc123', -1) // 永不过期
|
|
1535
1942
|
```
|
|
1536
1943
|
|
|
1537
|
-
|
|
1944
|
+
#### getStorage(key)
|
|
1945
|
+
- **功能**: 获取本地存储数据,过期自动清除并返回 null
|
|
1946
|
+
- **参数**:
|
|
1947
|
+
- `key` (String): 存储键名
|
|
1948
|
+
- **返回值**: Any - 存储的值,如果不存在或已过期则返回 null
|
|
1949
|
+
- **示例**:
|
|
1950
|
+
```javascript
|
|
1951
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1538
1952
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1953
|
+
const user = BaseUtil.getStorage('user')
|
|
1954
|
+
console.log(user) // { id: 1, name: 'John' } (示例)
|
|
1955
|
+
```
|
|
1956
|
+
|
|
1957
|
+
#### removeStorage(key)
|
|
1958
|
+
- **功能**: 删除本地存储数据
|
|
1959
|
+
- **参数**:
|
|
1542
1960
|
- `key` (String): 存储键名
|
|
1543
|
-
- `value` (Any): 要存储的值(会自动序列化为JSON)
|
|
1544
1961
|
- **返回值**: 无
|
|
1545
1962
|
- **示例**:
|
|
1546
1963
|
```javascript
|
|
1547
1964
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1548
1965
|
|
|
1549
|
-
BaseUtil.
|
|
1966
|
+
BaseUtil.removeStorage('user')
|
|
1550
1967
|
```
|
|
1551
1968
|
|
|
1552
|
-
####
|
|
1553
|
-
- **功能**:
|
|
1554
|
-
- **参数**:
|
|
1969
|
+
#### setSession(key, value[, expire])
|
|
1970
|
+
- **功能**: 设置会话存储数据(sessionStorage),支持过期时间
|
|
1971
|
+
- **参数**:
|
|
1555
1972
|
- `key` (String): 存储键名
|
|
1556
|
-
-
|
|
1973
|
+
- `value` (Any): 要存储的值(自动序列化)
|
|
1974
|
+
- `expire` (Number): 过期时间(毫秒),默认 `72000000`(20小时)
|
|
1975
|
+
- **返回值**: 无
|
|
1557
1976
|
- **示例**:
|
|
1558
1977
|
```javascript
|
|
1559
1978
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1560
1979
|
|
|
1561
|
-
|
|
1562
|
-
console.log(user) // { id: 1, name: 'John' } (示例)
|
|
1980
|
+
BaseUtil.setSession('tempData', { page: 1 })
|
|
1563
1981
|
```
|
|
1564
1982
|
|
|
1565
|
-
####
|
|
1566
|
-
- **功能**:
|
|
1567
|
-
- **参数**:
|
|
1983
|
+
#### getSession(key)
|
|
1984
|
+
- **功能**: 获取会话存储数据,过期自动清除并返回 null
|
|
1985
|
+
- **参数**:
|
|
1986
|
+
- `key` (String): 存储键名
|
|
1987
|
+
- **返回值**: Any - 存储的值,如果不存在或已过期则返回 null
|
|
1988
|
+
- **示例**:
|
|
1989
|
+
```javascript
|
|
1990
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
1991
|
+
|
|
1992
|
+
const data = BaseUtil.getSession('tempData')
|
|
1993
|
+
```
|
|
1994
|
+
|
|
1995
|
+
#### removeSession(key)
|
|
1996
|
+
- **功能**: 删除会话存储数据
|
|
1997
|
+
- **参数**:
|
|
1568
1998
|
- `key` (String): 存储键名
|
|
1569
1999
|
- **返回值**: 无
|
|
1570
2000
|
- **示例**:
|
|
1571
2001
|
```javascript
|
|
1572
2002
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1573
2003
|
|
|
1574
|
-
BaseUtil.
|
|
2004
|
+
BaseUtil.removeSession('tempData')
|
|
1575
2005
|
```
|
|
1576
2006
|
|
|
1577
2007
|
### 其他工具函数
|
|
1578
2008
|
|
|
1579
|
-
####
|
|
1580
|
-
- **功能**:
|
|
1581
|
-
- **参数**:
|
|
1582
|
-
- `
|
|
1583
|
-
- `wait` (Number): 等待时间(毫秒)
|
|
1584
|
-
- **返回值**: Function - 防抖后的函数
|
|
2009
|
+
#### ClearInterval(timer)
|
|
2010
|
+
- **功能**: 安全清除 setInterval 定时器并置为 null
|
|
2011
|
+
- **参数**:
|
|
2012
|
+
- `timer`: 定时器引用
|
|
1585
2013
|
- **示例**:
|
|
1586
2014
|
```javascript
|
|
1587
2015
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1588
2016
|
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
2017
|
+
let timer = setInterval(() => {}, 1000)
|
|
2018
|
+
BaseUtil.ClearInterval(timer)
|
|
2019
|
+
```
|
|
1592
2020
|
|
|
1593
|
-
|
|
2021
|
+
#### ClearTimeout(timer)
|
|
2022
|
+
- **功能**: 安全清除 setTimeout 定时器并置为 null
|
|
2023
|
+
- **参数**:
|
|
2024
|
+
- `timer`: 定时器引用
|
|
2025
|
+
|
|
2026
|
+
#### CalcTextWidth(text[, font])
|
|
2027
|
+
- **功能**: 使用 Canvas 计算文本的像素宽度
|
|
2028
|
+
- **参数**:
|
|
2029
|
+
- `text` (String): 要计算的文本
|
|
2030
|
+
- `font` (String): CSS font 字符串,默认为系统默认字体 14px
|
|
2031
|
+
- **返回值**: Number - 文本像素宽度
|
|
2032
|
+
- **示例**:
|
|
2033
|
+
```javascript
|
|
2034
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
2035
|
+
|
|
2036
|
+
const width = BaseUtil.CalcTextWidth('Hello World')
|
|
2037
|
+
console.log(width) // 输出像素宽度数值
|
|
1594
2038
|
```
|
|
1595
2039
|
|
|
1596
|
-
####
|
|
1597
|
-
- **功能**:
|
|
1598
|
-
- **参数**:
|
|
1599
|
-
- `
|
|
1600
|
-
|
|
1601
|
-
- **返回值**: Function - 节流后的函数
|
|
2040
|
+
#### GenerateNonce(length)
|
|
2041
|
+
- **功能**: 生成指定长度的大写随机字符串(含数字和字母)
|
|
2042
|
+
- **参数**:
|
|
2043
|
+
- `length` (Number): 字符串长度,为空时返回 null
|
|
2044
|
+
- **返回值**: String|null
|
|
1602
2045
|
- **示例**:
|
|
1603
2046
|
```javascript
|
|
1604
2047
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1605
2048
|
|
|
1606
|
-
const
|
|
1607
|
-
|
|
1608
|
-
|
|
2049
|
+
const nonce = BaseUtil.GenerateNonce(16)
|
|
2050
|
+
console.log(nonce) // 输出如: "A3B7C2D9E1F4G8H5"
|
|
2051
|
+
```
|
|
1609
2052
|
|
|
1610
|
-
|
|
2053
|
+
#### isArrayContains(arr, item)
|
|
2054
|
+
- **功能**: 检查数组是否包含指定元素
|
|
2055
|
+
- **参数**:
|
|
2056
|
+
- `arr` (Array): 目标数组
|
|
2057
|
+
- `item` (Any): 要查找的元素
|
|
2058
|
+
- **返回值**: Boolean
|
|
2059
|
+
- **示例**:
|
|
2060
|
+
```javascript
|
|
2061
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
2062
|
+
|
|
2063
|
+
console.log(BaseUtil.isArrayContains([1, 2, 3], 2)) // true
|
|
2064
|
+
console.log(BaseUtil.isArrayContains([1, 2, 3], 5)) // false
|
|
1611
2065
|
```
|
|
1612
2066
|
|
|
1613
|
-
####
|
|
1614
|
-
- **功能**:
|
|
1615
|
-
- **参数**:
|
|
1616
|
-
- `
|
|
1617
|
-
- **返回值**:
|
|
2067
|
+
#### getStringLength(str)
|
|
2068
|
+
- **功能**: 获取字符串的字节长度(中文字符计2字节,英文字符计1字节)
|
|
2069
|
+
- **参数**:
|
|
2070
|
+
- `str` (String): 目标字符串
|
|
2071
|
+
- **返回值**: Number - 字节长度
|
|
1618
2072
|
- **示例**:
|
|
1619
2073
|
```javascript
|
|
1620
2074
|
import { BaseUtil } from '@zkwq-x/business'
|
|
1621
2075
|
|
|
1622
|
-
|
|
1623
|
-
|
|
2076
|
+
console.log(BaseUtil.getStringLength('hello')) // 5
|
|
2077
|
+
console.log(BaseUtil.getStringLength('你好')) // 4
|
|
2078
|
+
```
|
|
1624
2079
|
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
2080
|
+
#### getPlainUrl(url)
|
|
2081
|
+
- **功能**: 获取去除查询参数后的纯 URL
|
|
2082
|
+
- **参数**:
|
|
2083
|
+
- `url` (String): 原始 URL
|
|
2084
|
+
- **返回值**: String|null - 去除 `?` 及其后内容的 URL,url 为空时返回 null
|
|
2085
|
+
- **示例**:
|
|
2086
|
+
```javascript
|
|
2087
|
+
import { BaseUtil } from '@zkwq-x/business'
|
|
2088
|
+
|
|
2089
|
+
console.log(BaseUtil.getPlainUrl('https://example.com/page?id=1')) // "https://example.com/page"
|
|
1628
2090
|
```
|
|
1629
2091
|
|
|
1630
2092
|
### Base64Util
|
|
@@ -1681,68 +2143,146 @@ http.post('/api/data', { name: 'test' }).then(response => {
|
|
|
1681
2143
|
|
|
1682
2144
|
### CONSTANT
|
|
1683
2145
|
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
####
|
|
1687
|
-
|
|
1688
|
-
|
|
|
1689
|
-
|
|
1690
|
-
|
|
|
1691
|
-
|
|
|
2146
|
+
常量集合,包含资源类型、投票类型、上传地址、移动端断点等业务常量。
|
|
2147
|
+
|
|
2148
|
+
#### 导出常量
|
|
2149
|
+
|
|
2150
|
+
| 常量名 | 说明 | 值 |
|
|
2151
|
+
|--------|------|----|
|
|
2152
|
+
| TYPE_ARTICLE | 文章类型 | `'article'` |
|
|
2153
|
+
| TYPE_PATENT | 专利类型 | `'patent'` |
|
|
2154
|
+
| TYPE_REPORT | 报告类型 | `'report'` |
|
|
2155
|
+
| TYPE_BOOK | 图书类型 | `'book'` |
|
|
2156
|
+
| TYPE_HANDBOOK | 手册类型 | `'handbook'` |
|
|
2157
|
+
| TYPE_PROJECT | 项目类型 | `'project'` |
|
|
2158
|
+
| TYPE_SCIENCE_DB | 科学数据类型 | `'sciencedata'` |
|
|
2159
|
+
| TYPE_SOFTWARE | 软件类型 | `'software'` |
|
|
2160
|
+
| TYPE_MONOGRAPH | 专著类型 | `'monograph'` |
|
|
2161
|
+
| TYPE_AWARD | 奖项类型 | `'award'` |
|
|
2162
|
+
| TYPE_LITERATURE | 文献类型 | `'literature'` |
|
|
2163
|
+
| TYPE_NEWS | 新闻类型 | `'news'` |
|
|
2164
|
+
| TYPE_JOURNAL | 期刊类型 | `'journal'` |
|
|
2165
|
+
| TYPE_CHINAXIV | ChinaXiv类型 | `'chinaxiv'` |
|
|
2166
|
+
| TYPE_BULLETIN | 公告类型 | `'bulletin'` |
|
|
2167
|
+
| TYPE_BULLETIN_REPORT | 公告报告类型 | `'bulletin_report'` |
|
|
2168
|
+
| TYPE_FAVLIST | 收藏列表类型 | `'favlist'` |
|
|
2169
|
+
| TYPE_COMMENT | 评论类型 | `'comment'` |
|
|
2170
|
+
| VOTE_TYPE_NEUTRAL | 中立投票 | `'neutral'` |
|
|
2171
|
+
| VOTE_TYPE_UP | 点赞投票 | `'up'` |
|
|
2172
|
+
| TYPE_FOLLOWER | 粉丝类型 | `'follower'` |
|
|
2173
|
+
| TYPE_FOLLOWEE | 关注类型 | `'followee'` |
|
|
2174
|
+
| UPLOAD_ACTION | 默认文件上传地址 | 动态(基于 location) |
|
|
2175
|
+
| UPLOAD_ACTION_HKY | HKY 文件上传地址 | 动态(基于 location) |
|
|
2176
|
+
| BASE_FILE_URL | 文件下载基础 URL | 动态(基于 location) |
|
|
2177
|
+
| MOBILE_CLIENT_WIDTH | 移动端宽度断点 | `576` |
|
|
2178
|
+
| AES_KEY | AES 加密默认密钥 | 内置值 |
|
|
2179
|
+
| AES_IV | AES 加密默认向量 | 内置值 |
|
|
1692
2180
|
|
|
1693
2181
|
#### 示例
|
|
1694
2182
|
|
|
1695
2183
|
```javascript
|
|
1696
2184
|
import { CONSTANT } from '@zkwq-x/business';
|
|
1697
2185
|
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
2186
|
+
if (item.type === CONSTANT.TYPE_ARTICLE) {
|
|
2187
|
+
// 处理文章类型
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
const isPC = window.innerWidth > CONSTANT.MOBILE_CLIENT_WIDTH
|
|
1701
2191
|
```
|
|
1702
2192
|
|
|
1703
2193
|
### ScrollTool
|
|
1704
2194
|
|
|
1705
|
-
|
|
2195
|
+
滚动工具类,封装了纵向/横向滚动监听,支持滚动到顶/左边缘及销毁监听。
|
|
2196
|
+
|
|
2197
|
+
#### 构造函数
|
|
2198
|
+
|
|
2199
|
+
```javascript
|
|
2200
|
+
new ScrollTool(dom?, useCapture?)
|
|
2201
|
+
```
|
|
2202
|
+
|
|
2203
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
2204
|
+
|------|------|------|--------|
|
|
2205
|
+
| dom | 监听滚动的 DOM 元素 | Element | `document` |
|
|
2206
|
+
| useCapture | 是否使用捕获阶段 | Boolean | `false` |
|
|
1706
2207
|
|
|
1707
2208
|
#### 方法
|
|
1708
2209
|
|
|
1709
2210
|
| 方法名 | 说明 | 参数 |
|
|
1710
2211
|
|--------|------|------|
|
|
1711
|
-
|
|
|
1712
|
-
|
|
|
1713
|
-
|
|
|
2212
|
+
| toTop | 滚动到最顶部(scrollTop = 0) | - |
|
|
2213
|
+
| toLeft | 滚动到最左侧(scrollLeft = 0) | - |
|
|
2214
|
+
| init(callBack) | 初始化滚动监听,回调参数:`(scrollPosition, isBottom, scrollType, event)` | callBack: Function |
|
|
2215
|
+
| destroy | 销毁滚动监听 | - |
|
|
2216
|
+
|
|
2217
|
+
> `init` 回调参数说明:
|
|
2218
|
+
> - `scrollPosition` (Number): 当前滚动位置
|
|
2219
|
+
> - `isBottom` (Boolean): 是否已到达底部/右侧边缘
|
|
2220
|
+
> - `scrollType` (String): 滚动方向,`'vertical'` 或 `'horizontal'`
|
|
2221
|
+
> - `event` (Event): 原始滚动事件
|
|
1714
2222
|
|
|
1715
2223
|
#### 示例
|
|
1716
2224
|
|
|
1717
2225
|
```javascript
|
|
1718
2226
|
import { ScrollTool } from '@zkwq-x/business';
|
|
1719
2227
|
|
|
1720
|
-
|
|
1721
|
-
|
|
2228
|
+
const scroller = new ScrollTool(this.$refs.container)
|
|
2229
|
+
|
|
2230
|
+
scroller.init((position, isBottom, type) => {
|
|
2231
|
+
if (type === 'vertical' && isBottom) {
|
|
2232
|
+
// 纵向滚动到底,加载更多
|
|
2233
|
+
this.loadMore()
|
|
2234
|
+
}
|
|
2235
|
+
})
|
|
1722
2236
|
|
|
1723
|
-
//
|
|
1724
|
-
|
|
2237
|
+
// 组件销毁时
|
|
2238
|
+
scroller.destroy()
|
|
1725
2239
|
```
|
|
1726
2240
|
|
|
1727
|
-
###
|
|
2241
|
+
### ExportUtil
|
|
1728
2242
|
|
|
1729
|
-
|
|
2243
|
+
资源导出工具模块(对应源文件 `util/quote.js`),提供将搜索结果批量导出为 Excel(.xlsx)或 RIS(.ris)格式的功能。
|
|
1730
2244
|
|
|
1731
|
-
####
|
|
2245
|
+
#### 函数
|
|
1732
2246
|
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
2247
|
+
##### exportExcel(applicationId, fileName, sheetName, models, resourcePrefix)
|
|
2248
|
+
- **功能**: 将资源数据导出为 Excel 文件并触发浏览器下载
|
|
2249
|
+
- **参数**:
|
|
2250
|
+
- `applicationId` (String): 应用 ID
|
|
2251
|
+
- `fileName` (String): 导出文件名(无需扩展名)
|
|
2252
|
+
- `sheetName` (String): Sheet 名称
|
|
2253
|
+
- `models` (Array): 资源数据数组,支持 article/patent/sciencedata/report/book 等类型
|
|
2254
|
+
- `resourcePrefix` (String): 资源详情页 URL 前缀,如 `'https://example.com/article/'`
|
|
2255
|
+
- **返回值**: Promise
|
|
2256
|
+
- **示例**:
|
|
2257
|
+
```javascript
|
|
2258
|
+
import { exportExcel } from '@zkwq-x/business'
|
|
1736
2259
|
|
|
1737
|
-
|
|
2260
|
+
exportExcel('app001', '论文导出', '论文', articleList, 'https://example.com/article/')
|
|
2261
|
+
```
|
|
1738
2262
|
|
|
2263
|
+
##### buildExcelParams(applicationId, fileName, sheetName, models, resourcePrefix)
|
|
2264
|
+
- **功能**: 构建 Excel 导出参数对象(不触发下载,用于自定义处理)
|
|
2265
|
+
- **返回值**: Object - 包含 `appid`、`fileName`、`sheetName`、`head`、`data` 的参数对象
|
|
2266
|
+
|
|
2267
|
+
##### exportRIS(applicationId, fileName, models, resourcePrefix)
|
|
2268
|
+
- **功能**: 将资源数据导出为 RIS 文件并触发浏览器下载
|
|
2269
|
+
- **参数**:
|
|
2270
|
+
- `applicationId` (String): 应用 ID
|
|
2271
|
+
- `fileName` (String): 导出文件名(无需扩展名)
|
|
2272
|
+
- `models` (Array): 资源数据数组
|
|
2273
|
+
- `resourcePrefix` (String): 资源详情页 URL 前缀
|
|
2274
|
+
- **返回值**: Promise
|
|
2275
|
+
- **示例**:
|
|
1739
2276
|
```javascript
|
|
1740
|
-
import {
|
|
2277
|
+
import { exportRIS } from '@zkwq-x/business'
|
|
1741
2278
|
|
|
1742
|
-
|
|
1743
|
-
const formattedQuote = Quote.format('这是一段引用文本');
|
|
2279
|
+
exportRIS('app001', '专利导出', patentList, 'https://example.com/patent/')
|
|
1744
2280
|
```
|
|
1745
2281
|
|
|
2282
|
+
##### buildRISParams(applicationId, fileName, models, resourcePrefix)
|
|
2283
|
+
- **功能**: 构建 RIS 导出参数对象(不触发下载,用于自定义处理)
|
|
2284
|
+
- **返回值**: Object - 包含 `appid`、`fileName`、`text` 的参数对象
|
|
2285
|
+
|
|
1746
2286
|
### Bus
|
|
1747
2287
|
|
|
1748
2288
|
事件总线。
|
|
@@ -1774,23 +2314,62 @@ Bus.on('another-event', handler)
|
|
|
1774
2314
|
Bus.remove('another-event', handler)
|
|
1775
2315
|
```
|
|
1776
2316
|
|
|
2317
|
+
### CheckRobot
|
|
2318
|
+
|
|
2319
|
+
机器人验证工具,通过命令式方式弹出验证码对话框,验证通过后自动刷新页面。通常用于 HTTP 响应拦截器中,当检测到需要人机验证时触发。
|
|
2320
|
+
|
|
2321
|
+
#### 函数
|
|
2322
|
+
|
|
2323
|
+
##### createCaptchaDialog()
|
|
2324
|
+
- **功能**: 创建并显示机器人验证对话框(单例,防止重复弹出)。验证成功后页面自动刷新。
|
|
2325
|
+
- **参数**: 无
|
|
2326
|
+
- **示例**:
|
|
2327
|
+
```javascript
|
|
2328
|
+
import { CheckRobot } from '@zkwq-x/business'
|
|
2329
|
+
|
|
2330
|
+
// 在 axios 拦截器中使用
|
|
2331
|
+
axios.interceptors.response.use(null, error => {
|
|
2332
|
+
if (error.response?.status === 403) {
|
|
2333
|
+
CheckRobot.createCaptchaDialog()
|
|
2334
|
+
}
|
|
2335
|
+
return Promise.reject(error)
|
|
2336
|
+
})
|
|
2337
|
+
```
|
|
2338
|
+
|
|
1777
2339
|
### HighLight
|
|
1778
2340
|
|
|
1779
|
-
|
|
2341
|
+
高亮工具,支持中英文混合文本的关键词高亮,通过 Proxy 实现对对象/数组的递归高亮处理。
|
|
1780
2342
|
|
|
1781
2343
|
#### 方法
|
|
1782
2344
|
|
|
1783
2345
|
| 方法名 | 说明 | 参数 | 返回值 |
|
|
1784
2346
|
|--------|------|------|--------|
|
|
1785
|
-
|
|
|
2347
|
+
| check | 检查文本是否包含指定关键词 | `(str, particles, ignoreCase?)` | Boolean |
|
|
2348
|
+
| build | 对文本(或对象/数组)进行高亮处理,返回含高亮标签的 HTML 字符串或 Proxy | `(obj, particles, options?)` | String\|Proxy |
|
|
2349
|
+
|
|
2350
|
+
> `build` options 参数说明:
|
|
2351
|
+
> - `ignoreCase` (Boolean): 是否忽略大小写,默认 `false`
|
|
2352
|
+
> - `startTag` (String): 高亮包裹标签名,默认 `'span'`
|
|
2353
|
+
> - `classMapper` (Array): 关键词样式映射,格式 `[{ patten: '关键词', classList: ['class1'] }]`
|
|
1786
2354
|
|
|
1787
2355
|
#### 示例
|
|
1788
2356
|
|
|
1789
2357
|
```javascript
|
|
1790
2358
|
import { HighLight } from '@zkwq-x/business';
|
|
1791
2359
|
|
|
2360
|
+
// 检查是否包含关键词
|
|
2361
|
+
const contains = HighLight.check('Vue is awesome', ['Vue'], true)
|
|
2362
|
+
console.log(contains) // true
|
|
2363
|
+
|
|
1792
2364
|
// 高亮文本
|
|
1793
|
-
const
|
|
2365
|
+
const html = HighLight.build('Vue is awesome', ['Vue'], { ignoreCase: true })
|
|
2366
|
+
console.log(html)
|
|
2367
|
+
// 输出: '<span class="highlight_text ">Vue</span> is awesome'
|
|
2368
|
+
|
|
2369
|
+
// 高亮对象属性(通过 Proxy)
|
|
2370
|
+
const obj = { title: 'Vue框架介绍', abstract: '关于Vue的详细介绍' }
|
|
2371
|
+
const highlighted = HighLight.build(obj, ['Vue'], {})
|
|
2372
|
+
console.log(highlighted.title) // 返回高亮后的 title 字符串
|
|
1794
2373
|
```
|
|
1795
2374
|
|
|
1796
2375
|
## 服务模块
|
|
@@ -2108,7 +2687,7 @@ Service.GetSearchSuggestions('Vue').then(suggestions => {
|
|
|
2108
2687
|
|
|
2109
2688
|
```vue
|
|
2110
2689
|
<template>
|
|
2111
|
-
<button v-
|
|
2690
|
+
<button v-ripple>点击我有水波纹效果</button>
|
|
2112
2691
|
</template>
|
|
2113
2692
|
```
|
|
2114
2693
|
|