> 文档编写： Mad Dragon <395548460@qq.com> 2020年4月14日

# tools 工具类
`ptool(project-general-tools)` 是一款适用于 vue 项目的 通用工具类，包含 log、moment、cookie、Api、localStorage、sessionStorage ... ，以及 一些常用的函数。

### Api 工具类 (Axios 封装)

Function
```js
tools.Api.get(url,params).then((res)=>{}).catch(error);

tools.Api.post(url,params).then((res)=>{}).catch(error);

tools.Api.jsonp(url,params).then((res)=>{}).catch(error);

tools.Api.delete(url,params).then((res)=>{}).catch(error);

tools.Api.head(url,params).then((res)=>{}).catch(error);

tools.Api.options(url,params).then((res)=>{}).catch(error);

tools.Api.put(url,params).then((res)=>{}).catch(error);

tools.Api.patch(url,params).then((res)=>{}).catch(error);
```

代码示例：
```js
import tools from 'ptool';

const getStat = async () => {
    try {
        const data = await tools.Api.get('http://api.bilibili.com/archive_stat/stat', {
            aid:90822505,
            type:'json' 
        });
        tools.log.info('getStat', data)
    } catch (e) {
        tools.log.error('getStat', e)
    }
};
```
### 时间格式化工具 （MomentJs）

Function
```
// 初始时间
tools.formatInitTime(time = new Date(), norms = 'YYYY-MM-DD')

// 时间 加法
tools.formatAddTime(addNum = 1, addNorms = 'days', time = new Date(), norms = 'YYYY-MM-DD')

// 时间 减法
tools.formatSubtractTime(addNum = 1, addNorms = 'days', time = new Date(), norms = 'YYYY-MM-DD')

// 搜索专用 开始时间
tools.formatStartTime(time = new Date(), norms = 'YYYY-MM-DD')

// 搜索专用 结束时间
tools.formatEndTime(time = new Date(), norms = 'YYYY-MM-DD', addNum = 1, addNorms = 'days')

// 获得时间差
//   时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时：分钟：秒
//   其中，年月日为全格式，例如 ： 2010-10-12 01:00:00
//   返回精度为：秒，分，小时，天
tools.getDateDiff: (startTime, endTime, diffType = 'dhm')
```

代码示例：
```js
import tools from 'ptool';

console.log(tools.formatInitTime());

console.log(tools.formatAddTime(2, 'days'));
```

### log 日志工具类 (console)

Function
```js
tools.log.info(title, ...args)

tools.log.error(title, ...args)

tools.log.debug(title, ...args)

tools.log.warn(title, ...args)

tools.log.table(title, ...args)

// 将日志 存入 localStorage
tools.log.setLog(type,title, ...args)
```
代码示例：
```js
import tools from 'ptool';

// log test
tools.log.info('测试时间打印', tools.formatInitTime());

tools.log.setLog('error','测试',{key:'vlaue'})
```

### cookie

Function
```js
// 设置cookie
tools.cookie.setCookie(name, value, hours, path)

// 获取cookie值
tools.cookie.getCookieValue(name)

// 删除cookie
tools.cookie.deleteCookie(name, path)
```

代码示例：
```js
import tools from 'ptool';

tools.log.info('获取用户ID',tools.cookie.getCookieValue('userId'))
```

###  lStorage 缓存（localStorage）

Function
```js
// 存储localStorage
tools.lStorage.setItem(key, content)

// 获取localStorage
tools.lStorage.getItem(key)

// 删除localStorage
tools.lStorage.removeItem(key)

// 从localStorage删除所有保存的数据
tools.lStorage.clear()

// 获取所有的 缓存数据
tools.lStorage.getAll()

// 删除指定 key匹配的数据
tools.lStorage.removeDataFromKey(key)
```

代码示例：
```js
import tools from 'ptool';

tools.log.info('获取所有的 缓存数据',tools.lStorage.getAll())

//  删除指定 key匹配的数据
tools.lStorage.removeDataFromKey('xxb_')
```

### sStorage 缓存（sessionStorage）

Function
```js
// 存储sessionStorage
tools.sStorage.setItem(key, content)

// 获取sessionStorage
tools.sStorage.getItem(key)

// 删除sessionStorage
tools.sStorage.removeItem(key)

// 从sessionStorage删除所有保存的数据
tools.sStorage.clear()
```

代码示例：
```js
import tools from 'ptool';

tools.log.info('获取sessionStorage',tools.sStorage.getItem('xxxb_user'))
```

### fStorage 缓存（localForage）
> 改进的离线存储

Function
```js
import localforage from 'localforage';

// 创建并返回一个实例
const fStorage = localforage.createInstance({
name:'test'
});


// getItem 从仓库中获取 key 对应的值并将结果提供给回调函数。如果 key 不存在，getItem() 将返回 null。
fStorage.getItem('somekey').then(function(value) {
    // 当离线仓库中的值被载入时，此处代码运行
    console.log(value);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// setItem 将数据保存到离线仓库。你可以存储如下类型的 JavaScript 对象：
/*
    Array
    ArrayBuffer
    Blob
    Float32Array
    Float64Array
    Int8Array
    Int16Array
    Int32Array
    Number
    Object
    Uint8Array
    Uint8ClampedArray
    Uint16Array
    Uint32Array
    String
*/
fStorage.setItem('somekey', 'some value').then(function (value) {
    // 当值被存储后，可执行其他操作
    console.log(value);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// removeItem 从离线仓库中删除 key 对应的值。
fStorage.removeItem('somekey').then(function() {
    // 当值被移除后，此处代码运行
    console.log('Key is cleared!');
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// clear 从数据库中删除所有的 key，重置数据库。
fStorage.clear().then(function() {
    // 当数据库被全部删除后，此处代码运行
    console.log('Database is now empty.');
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// length 获取离线仓库中的 key 的数量（即数据仓库的“长度”）。
fStorage.length().then(function(numberOfKeys) {
    // 输出数据库的大小
    console.log(numberOfKeys);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// key 根据 key 的索引获取其名
fStorage.key(2).then(function(keyName) {
    // key 名
    console.log(keyName);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// keys 获取数据仓库中所有的 key。
fStorage.keys().then(function(keys) {
    // 包含所有 key 名的数组
    console.log(keys);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// iterate 迭代数据仓库中的所有 value/key 键值对。
// 同样的代码，但使用 ES6 Promises
fStorage.iterate(function(value, key, iterationNumber) {
    // 此回调函数将对所有 key/value 键值对运行
    console.log([key, value]);
}).then(function() {
    console.log('Iteration has completed');
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});
// 提前退出迭代：
fStorage.iterate(function(value, key, iterationNumber) {
    if (iterationNumber < 3) {
        console.log([key, value]);
    } else {
        return [key, value];
    }
}).then(function(result) {
    console.log('Iteration has completed, last iterated pair:');
    console.log(result);
}).catch(function(err) {
    // 当出错时，此处代码运行
    console.log(err);
});

// config storeName:数据仓库的名称  version:数据库的版本 description:数据库的描述
fStorage.config({
    storeName:'test',
    version:1,
    description:'test fStorage',
});
```

代码示例：
```js
import tools from 'ptool';

tools.log.info('获取sessionStorage',tools.sStorage.getItem('xxxb_user'))
```

### 常用函数

#### getUUID
```js
tools.getUUID(len, radix)
```

#### getResult 数组里取指定 key 的value 值
```js
tools.getResult(arr = [], id = '', find = 'id', result = 'value')
```

#### formatPhoneNumber 格式化手机号  隐藏中间数据
```js
tools.formatPhoneNumber(phone)
```

#### numberToPercentage 数字转换成 百分比
```js
tools.numberToPercentage(phone)
```

#### on  绑定事件 on(element, event, handler)
```js
tools.on()
```

#### off  解绑事件 off(element, event, handler)
```js
tools.off()
```

#### CDN  图片cdn
须在`.env` 文件配置 VUE_APP_CDN 
```js
tools.CDN()
```

#### url url处理
```js
tools.url.build(url, param)

tools.url.getParam(name)

tools.url.getParamKeys()

tools.url.getParamVals()

tools.url.getParamMap()

tools.url.paramStringToMap(str)

tools.url.mapToParamString(m)

```

#### object object处理
```js
tools.object.isObject(obj)

tools.object.isFunction(obj)

tools.object.isArray(obj)

tools.object.isNull(obj)

tools.object.isNotNull(obj)

tools.object.length(obj)

tools.object.getChildrenPath(obj, c, k)

tools.object.merge(t, s, mergeArray = false)

tools.object.isObject(obj)
```

#### string string处理
```js
tools.string.trim(str)

tools.string.isBlank(str)

tools.string.isNotBlank(str)

tools.string.isEmpty(str)

tools.string.isNotEmpty(str)

tools.string.equalsIgnoreCase(a,b)
```

#### list list处理
```js
tools.list.isEmpty(l)

tools.list.isNotEmpty(l)

tools.list.stringToList(s)

tools.list.find(l, k, v, j)

tools.list.indexOf(l, k, v, b, j)
```

#### map map处理
```js
tools.map.mapsExtVal(maps,key)

tools.map.listToMap(list,key)

tools.map.isEqualForString(a,b)

tools.map.isEmpty(m)

tools.map.isNotEmpty(m)

tools.map.isEqual(a, b, isWeak, isString)

tools.map.keys(m)

tools.map.vals(m)
```
