# sr-utils-base

> 电商场景下，常用基础工具函数集合。

Latest version **0.0.6** (published 2022-12-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install sr-utils-base
pnpm add sr-utils-base
yarn add sr-utils-base
bun add sr-utils-base
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.6 |
| Published | 2022-12-29 |
| First published | 2022-12-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 217.4 KB |
| Known vulnerabilities | 0 (+4 in 1 direct dependencies) |
| Install scripts | no |
| Author | brynnxu |
| Maintainers | xuerlin02 |

## Links

- npm: https://www.npmjs.com/package/sr-utils-base
- npm.io page: https://npm.io/package/sr-utils-base

## Dependencies (8)

- [react](https://npm.io/package/react.md) ^18.2.0
- [tslib](https://npm.io/package/tslib.md) ^2.4.1
- [big.js](https://npm.io/package/big.js.md) ^6.2.1
- [moment](https://npm.io/package/moment.md) ^2.29.4
- [nanoid](https://npm.io/package/nanoid.md) ~2.1.11
- [react-dom](https://npm.io/package/react-dom.md) ^18.2.0
- [typescript](https://npm.io/package/typescript.md) ^4.1.5
- [@rollup/plugin-typescript](https://npm.io/package/@rollup/plugin-typescript.md) ^9.0.2

## Recent versions

- 0.0.6 (latest) — 2022-12-29
- 0.0.5 — 2022-12-08
- 0.0.4 — 2022-12-06
- 0.0.3 — 2022-12-06
- 0.0.2 — 2022-12-06
- 0.0.1 — 2022-12-06

## README

电商场景下，常用基础工具函数集合。

# 一、视图显示

## 1、金额

### 1.1 priceFormat

&emsp;&emsp;说明：格式化金额为可以直接显示的字符串 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;price (number|string|Big): 金额(分) \
&emsp;&emsp;&emsp;&emsp;[fill=false] (boolean): 是否保持两位小数 \
&emsp;&emsp;&emsp;&emsp;[fallback=''] (string): 无效金额时的默认返回 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回一个处理好的字符串。 \
&emsp;&emsp;例子

```javascript
_.priceFormat(1000, true);
// =>10.00
```

```javascript
_.priceFormat(1000);
// =>10
```

## 2、数字

### 2.1 numberFromat

&emsp;&emsp;说明：数量格式化 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;number (any): 待格式化的参数 \
&emsp;&emsp;&emsp;&emsp;[decimal=0] (number): 小数精度 \
&emsp;&emsp;&emsp;&emsp;[thousandMark=false] (boolean): 是否插入千分位 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回一个处理好的字符串。 \
&emsp;&emsp;例子

```javascript
\_.numberFromat(1000000, 2, true);
// =>1,000,000.00

```

```javascript
_.numberFromat(1000000);
// =>1000000
```

### 2.2 add(加), subtract(减), multiply(乘), divide(除)

&emsp;&emsp;说明：数字加减乘除运算并不丢失精度 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;num1 (number): 参与计算的参数 1 \
&emsp;&emsp;&emsp;&emsp;num2 (number): 参与计算的参数 2 \
&emsp;&emsp;&emsp;&emsp;[digits=2] (number): 输出结果保留的小数精度 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回一个处理好的字符串。 \
&emsp;&emsp;例子

```javascript
\_.add(100.01, 2.2);
// =>102.21

```

```javascript
_.add(100.01, 2.2, 1);
// =>102.2
```

## 3、单位转换

### 3.1 fen2Yuan

&emsp;&emsp;说明：分转换为元 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;fen (number | string | undefined | null): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理好的字符串。 \
&emsp;&emsp;例子

```javascript
\_.fen2Yuan(1011);
// =>10.11

```

```javascript
_.fen2Yuan(1010);
// =>10.1
```

### 3.2 yuan2Fen

&emsp;&emsp;说明：元转换为分 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;yuan (number | string ): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理好的数字。 \
&emsp;&emsp;例子

```javascript
\_.yuan2Fen(101.111);
// =>10111

```

```javascript
_.yuan2Fen(101);
// =>10100
```

### 3.3 kg2g

&emsp;&emsp;说明：kg 转换为 g \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;kg (number ): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回转换后的 g 数。 \
&emsp;&emsp;例子

```javascript
\_.kg2g(101.1);
// =>101100
```

### 3.4 g2kg

&emsp;&emsp;说明：g 转换为 kg \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;g (number ): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回转换后的 kg 数。 \
&emsp;&emsp;例子

```javascript
\_.g2kg(101);
// =>0.101
```

### 3.5 km2m

&emsp;&emsp;说明：km 转换为 m \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;km (number ): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回转换后的 m。 \
&emsp;&emsp;例子

```javascript
\_.km2m(10);
// =>10000
```

### 3.6 m2km

&emsp;&emsp;说明：m 转换为 km \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;m (number ): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回转换后的 km。 \
&emsp;&emsp;例子

```javascript
\_.m2km(10);
// =>0.01
```

### 3.7 percentToDiscount

&emsp;&emsp;说明：百分比转折扣数字 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;value (any): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回转换后的折扣。 \
&emsp;&emsp;例子

```javascript
\_.percentToDiscount(70);
// =>7
```

```javascript
\_.percentToDiscount(75);
// =>7.5
```

## 4、手机号

### 4.1 percentToDiscount

&emsp;&emsp;说明：百分比转折扣数字 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;phone (number | string): 待转换的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number | string): 中间四位打\*号的手机号。 \
&emsp;&emsp;例子

```javascript
\_.phoneNumberEncryption(18511590764);
// =>185****0764
```

## 5、url

### 5.1 objToUrlStr

&emsp;&emsp;说明：将 object 转成 url 后的参数 string \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;obj (object): 待格式化的 obj \
&emsp;&emsp;&emsp;&emsp;[urlEncode=false] (boolean): 是否开启 encode \
&emsp;&emsp;&emsp;&emsp;[appendixStr='&'] (string): 需要拼接的后续 string \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 拼接好的字符串 \
&emsp;&emsp;例子

```javascript
\_.objToUrlStr({a:1,b:'222',c:'我是参数'});
// =>a=1&b=222&c=我是参数
```

```javascript
\_.objToUrlStr({a:1,b:'222',c:'我是参数'},true);
// =>a=1&b=222&c=%E6%88%91%E6%98%AF%E5%8F%82%E6%95%B0
```

```javascript
\_.objToUrlStr({a:1,b:'222',c:'我是参数'},true,'-');
// a=1-b=222-c=%E6%88%91%E6%98%AF%E5%8F%82%E6%95%B0
```

### 5.2 urlStrToObj

&emsp;&emsp;说明：将 url 后的参数 string 转成 object \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;url (sting): 待格式化的 string \
&emsp;&emsp;&emsp;&emsp;[urlDecode=false] (boolean): 是否需要 decode \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(object): 转化好的 object \
&emsp;&emsp;例子

```javascript
\_.urlStrToObj('?abc=foo&def=%5Basf%5D&xyz=5', true);
// =>{ abc: 'foo', def: '[asf]', xyz: '5' }
```

```javascript
\_.urlStrToObj('abc=foo&def=%5Basf%5D&xyz=5');
// =>{ abc: 'foo', def: '%5Basf%5D', xyz: '5' }
```

# 二、判断与校验

## 1、数据类型判断

&emsp;&emsp;isNaN, isArray, isEmpty, isFunction, isJsonString, isNull, isNumber, isObject, isString, isUndefined

## 2、常用校验

### 2.1 isEmail

&emsp;&emsp;说明：验证是否是邮箱地址 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;num (string): 待验证的字符串 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是邮箱 \
&emsp;&emsp;例子

```javascript
\_.isEmail('441332612@qq.com');
// =>true
```

### 2.2 isMobilePhone

&emsp;&emsp;说明：验证是否是手机号(可含 86) \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;num (string): 待验证的字符串 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是手机号 \
&emsp;&emsp;例子

```javascript
\_.isMobilePhone('18511590764');
// =>true
```

```javascript
\_.isMobilePhone('8618511590764');
// =>true
```

### 2.3 isPostCode

&emsp;&emsp;说明：验证是否是邮编 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;num (string): 待验证的字符串 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是邮编 \
&emsp;&emsp;例子

```javascript
\_.isPostCode('454781');
// =>true
```

### 2.4 isValidIDCard

&emsp;&emsp;说明：验证是否是身份证号 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;value (string): 待验证的字符串 \
&emsp;&emsp;&emsp;&emsp;[isIncludeHongKongAndAoMenAndTaiwan=true] (boolean): 是否包含港澳台 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是身份证号 \
&emsp;&emsp;例子

```javascript
\_.isValidIDCard('410883199309236543');
// =>true
```

### 2.5 isPositiveNum

&emsp;&emsp;说明：验证是否是正数 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;value (number): 待验证的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是正数 \
&emsp;&emsp;例子

```javascript
\_.isPositiveNum(3.1);
// =>true
```

```javascript
\_.isPositiveNum(-3.1);
// =>false
```

### 2.6 isPositiveInteger

&emsp;&emsp;说明：验证是否是正正数数 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;value (number): 待验证的参数 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否是正整数 \
&emsp;&emsp;例子

```javascript
\_.isPositiveInteger(3.1);
// =>false
```

```javascript
\_.isPositiveInteger(3);
// =>true
```

### 2.7 digitalCheck

&emsp;&emsp;说明：所填数字范围校验 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;value (string): 待验证的参数 \
&emsp;&emsp;&emsp;&emsp;minValue (number): 最小值（不包含） \
&emsp;&emsp;&emsp;&emsp;maxValue (number): 最大值（不包含） \
&emsp;&emsp;&emsp;&emsp;[decimalPlaces = 0] (number): 第一个参数的小数位最多有几位 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(boolean): 是否符合验证条件(在最小值和最大值之间且小数位数满足要求) \
&emsp;&emsp;例子

```javascript
\_.digitalCheck('6.55',3,10);
// =>false
```

```javascript
\_.digitalCheck('6.55',3,10,2);
// =>true
```

# 三、功能性方法

## 1、图片

### 1.1 imageMogr

enum EnumImageMogr2Type { \
&emsp;&emsp;CROP = 'crop', // 裁剪 \
&emsp;&emsp;THUMBNAIL = 'thumbnail', // 缩放\
}\
interface ImageMogrOptions { \
&emsp;&emsp;width?: number; \
&emsp;&emsp;height?: number; \
&emsp;&emsp;quality?: number; \
&emsp;&emsp;strip?: boolean; \
&emsp;&emsp;format?: 'jpg' | 'bmp' | 'gif' | 'png' | 'webp' | 'yjpeg'; \
&emsp;&emsp;interlace?: 0 | 1; \
&emsp;&emsp;type?: EnumImageMogr2Type; \
}\
&emsp;&emsp;说明：万象图片处理 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;url? (string): 待验证的参数 \
&emsp;&emsp;&emsp;&emsp;options? (ImageMogrOptions): 最小值（不包含） \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理后的图片地址 \
&emsp;&emsp;例子

```javascript
\_.imageMogr('https://cdn-we-retail.ym.tencent.com//web/order_ic_lite.png', {
    width: 300,
    height: 300,
    quality: 0.5,
    format: 'png',
  });
// =>https://cdn-we-retail.ym.tencent.com//web/order_ic_lite.png?imageMogr2/thumbnail/300x300/quality/0.5/strip/format/png
```

## 2、颜色

### 2.1 hexToRgb

&emsp;&emsp;说明：颜色处理 hex ---> rgb \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;h (string): 待处理的哈希值 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理后的 rgb 格式 \
&emsp;&emsp;例子

```javascript
\_.hexToRgb('#5a66ff')
// =>rgb(90,102,255)
```

### 2.2 rgbaToHexA

&emsp;&emsp;说明：颜色处理 rgba ---> hex \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;r (number): 0~255 \
&emsp;&emsp;&emsp;&emsp;g (number): 0~255 \
&emsp;&emsp;&emsp;&emsp;b (number): 0~255 \
&emsp;&emsp;&emsp;&emsp;a (number): 0~1 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理后的 hex 格式 \
&emsp;&emsp;例子

```javascript
\_.rgbaToHexA(90, 102, 255, 0.2)
// =>#5a66ff33
```

## 3 时间处理

### 3.1 timeFormat

&emsp;&emsp;说明：时间格式化 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;base (string | number | Moment): 待处理的时间 \
&emsp;&emsp;&emsp;&emsp;[tmpl = 'YYYY-MM-DD HH:mm:ss'] (string): 输出的时间格式 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回处理好的时间 \
&emsp;&emsp;例子

```javascript
\_.timeFormat('2022-11-11 14:48:26', 'YYYY-MM-DD')
// => 2022-11-11
```

```javascript
\_.timeFormat(1669013697063)
// => 2022-11-21 14:54:57
```

```javascript
\_.timeFormat('1669013697063')
// => 2022-11-21 14:54:57
```

## 4 字符串

### 4.1 getStrLen

&emsp;&emsp;说明：时间格式化 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;str (string): 待处理的时间 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回字符串的长度(中文+2) \
&emsp;&emsp;例子

```javascript
\_.getStrLen('')
// => 0
```

```javascript
\_.getStrLen('abc)
// => 3
```

```javascript
\_.getStrLen('abc哈哈')
// => 7
```

## 5 安全

### 5.1 nanoid

&emsp;&emsp;说明：生成随机不重复的 key \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;size? (number): 生成串的长度 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回加密好的字符串 \
&emsp;&emsp;例子

```javascript
\_.nanoid('10')
// => BxNhJFhDwp
```

```javascript
\_.nanoid('10')
// => KJ_LtzVP0SPKwzw_fQg8b
```

### 5.2 nanoNum

&emsp;&emsp;说明：生成随机不重复的 key \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回加密好的串 \
&emsp;&emsp;例子

```javascript
\_.nanoNum()
// => 514208596452099
```

## 6 位置

### 6.1 getCoordinateDistance

&emsp;&emsp;说明：计算获取两个坐标点之间的距离(m) \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;lat1 (number): 第一个坐标的经度 \
&emsp;&emsp;&emsp;&emsp;lng1 (number): 第一个坐标的纬度 \
&emsp;&emsp;&emsp;&emsp;lat2 (number): 第二个坐标的经度 \
&emsp;&emsp;&emsp;&emsp;lng2 (number): 第二个坐标的纬度 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(number): 返回字符串的长度(中文+2) \
&emsp;&emsp;例子

```javascript
\_.getCoordinateDistance(109.7, 31.84, 110.96, 31.36)
// => 141789.1293000133
```

## 7 请求

### 7.1 sleep

&emsp;&emsp;说明：睡眠函数 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;sleep (number): 延迟时间 ms \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(promise): promise \
&emsp;&emsp;例子

```javascript
\_.sleep(500)
```

### 7.2 getErrMsg

&emsp;&emsp;说明：睡眠函数 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;err (unknown): err 数据 \
&emsp;&emsp;&emsp;&emsp;[defaultMsg = '网络错误'] (string): 默认的错误消息 \
&emsp;&emsp;返回 \
&emsp;&emsp;&emsp;&emsp;(string): 返回错误信息 \
&emsp;&emsp;例子

```javascript
\_.getErrMsg({msg: '接口超时'})
// => 接口超时
```

## 8 位置

### 8.1 downloadFile

&emsp;&emsp;说明：文件下载 \
&emsp;&emsp;参数 \
&emsp;&emsp;&emsp;&emsp;fileUrl (string): 文件地址 \
&emsp;&emsp;&emsp;&emsp;fileName (string): 文件名称 \
&emsp;&emsp;例子

```javascript
\_.downloadFile('https://cdn-we-retail.ym.tencent.com//web/order_ic_lite.png', '示例图片')
```

---
_Source: https://npm.io/package/sr-utils-base · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
