/**
|
* 工具包
|
* 请勿修改此处代码,因为插件更新后此处代码会被覆盖。
|
* 作者:VK
|
*/
|
var fnUtil = {};
|
fnUtil.alipay = require('./alipay');
|
fnUtil.wxpay = require('./wxpay');
|
|
/**
|
* 产生指定位数的随机数(支持任意字符,默认纯数字)
|
* @params {Number} length 数据源
|
* @params {String} str 指定的字符串中随机范围
|
*/
|
fnUtil.random = function(length, str) {
|
let s = "";
|
let list = "0123456789";
|
//abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
|
if (str) list = str;
|
for (let i = 0; i < length; i++) {
|
let code = list[Math.floor(Math.random() * list.length)];
|
s += code;
|
}
|
return s;
|
};
|
|
/**
|
* 日期格式化
|
* @params {Date || Number} date 需要格式化的时间
|
*/
|
fnUtil.timeFormat = function(time, fmt = 'yyyy-MM-dd hh:mm:ss', targetTimezone = 8) {
|
try {
|
if (!time) {
|
return "";
|
}
|
// 其他更多是格式化有如下:
|
// yyyy-MM-dd hh:mm:ss|yyyy年MM月dd日 hh时MM分等,可自定义组合
|
let date;
|
if (typeof time === "number") {
|
if (time.toString().length == 10) time *= 1000;
|
date = new Date(time);
|
} else {
|
date = time;
|
}
|
|
const dif = date.getTimezoneOffset();
|
const timeDif = dif * 60 * 1000 + (targetTimezone * 60 * 60 * 1000);
|
const east8time = date.getTime() + timeDif;
|
|
date = new Date(east8time);
|
let opt = {
|
"M+": date.getMonth() + 1, //月份
|
"d+": date.getDate(), //日
|
"h+": date.getHours(), //小时
|
"m+": date.getMinutes(), //分
|
"s+": date.getSeconds(), //秒
|
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
|
"S": date.getMilliseconds() //毫秒
|
};
|
if (/(y+)/.test(fmt)) {
|
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
|
}
|
for (let k in opt) {
|
if (new RegExp("(" + k + ")").test(fmt)) {
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (opt[k]) : (("00" + opt[k]).substr(("" + opt[
|
k])
|
.length)));
|
}
|
}
|
return fmt;
|
} catch (err) {
|
// 若格式错误,则原值显示
|
return time;
|
}
|
};
|
|
|
/**
|
* request 请求库
|
*/
|
fnUtil.request = async function(obj = {}) {
|
if (Object.prototype.toString.call(obj.content) === "[object object]") obj.content = JSON.stringify(obj
|
.content);
|
if (typeof obj.dataType === "undefined") obj.dataType = "json";
|
// 当返回的是二进制时,需要设置dataType = default
|
if (obj.dataType == "default" || obj.dataType === "") delete obj.dataType;
|
if (obj.useContent) obj.content = JSON.stringify(obj.data);
|
if (!obj.method) obj.method = "POST";
|
if (typeof obj.headers === "undefined" && typeof obj.header !== "undefined") {
|
obj.headers = obj.header;
|
}
|
let originalRes = await uniCloud.httpclient.request(obj.url, obj);
|
if (!obj.needOriginalRes && originalRes && originalRes.data) {
|
return originalRes.data;
|
} else {
|
return originalRes;
|
}
|
};
|
// 是否是手机访问
|
fnUtil.isMobile = function(ua, isPC) {
|
if (typeof isPC !== "undefined") return !isPC;
|
let system = {
|
ios: false,
|
android: false
|
};
|
let p = ua.toLowerCase();
|
system.ios = p.indexOf("iphone") > -1 || p.indexOf("ipad") > -1;
|
system.android = p.indexOf("android") > -1;
|
if (system.ios || system.android) {
|
return true;
|
} else {
|
return false;
|
}
|
};
|
|
|
const isSnakeCase = new RegExp('_(\\w)', 'g');
|
const isCamelCase = new RegExp('[A-Z]', 'g');
|
|
function parseObjectKeys(obj, type) {
|
let parserReg;
|
let parser;
|
switch (type) {
|
case 'snake2camel':
|
parser = fnUtil.snake2camel
|
parserReg = isSnakeCase
|
break
|
case 'camel2snake':
|
parser = fnUtil.camel2snake
|
parserReg = isCamelCase
|
break
|
}
|
for (const key in obj) {
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
if (parserReg.test(key)) {
|
const keyCopy = parser(key)
|
obj[keyCopy] = obj[key]
|
delete obj[key]
|
if (Object.prototype.toString.call((obj[keyCopy])) === '[object Object]') {
|
obj[keyCopy] = parseObjectKeys(obj[keyCopy], type)
|
} else if (Array.isArray(obj[keyCopy])) {
|
obj[keyCopy] = obj[keyCopy].map((item) => {
|
return parseObjectKeys(item, type)
|
})
|
}
|
}
|
}
|
}
|
return obj
|
}
|
|
fnUtil.snake2camel = function(value) {
|
return value.replace(isSnakeCase, (_, c) => (c ? c.toUpperCase() : ''))
|
}
|
|
fnUtil.camel2snake = function(value) {
|
return value.replace(isCamelCase, str => '_' + str.toLowerCase())
|
}
|
|
// 转驼峰
|
fnUtil.snake2camelJson = function(obj) {
|
return parseObjectKeys(obj, 'snake2camel');
|
};
|
|
// 转蛇形
|
fnUtil.camel2snakeJson = function(obj) {
|
return parseObjectKeys(obj, 'camel2snake');
|
};
|
|
|
module.exports = fnUtil;
|