import {
|
config,
|
PublicKey,
|
MD5Key,
|
ACCESSTOKEN
|
} from '@/common/config.js'
|
import JSEncrypt from './jsencrypt';
|
import {
|
hex_md5
|
} from './md5';
|
|
const encrypt = new JSEncrypt()
|
encrypt.setPublicKey(PublicKey)
|
/**
|
* @description rsa加密
|
* @returns {string | false} signParams
|
* @param {String} str
|
*/
|
|
export function encryptPwd(str) {
|
return encrypt.encrypt(str);
|
// let unsignstr = str + randomWord(10);
|
// let utf8str = utf8.encode(unsignstr);
|
// //rsa加密
|
// return encrypt.encrypt(utf8str) || ''
|
}
|
|
function randomWord(range) {
|
// 生成随机字符串
|
let str = "",
|
arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
|
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
|
'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
|
];
|
|
for (let i = 0; i < range; i++) {
|
let pos = Math.round(Math.random() * (arr.length - 1));
|
str += arr[pos];
|
}
|
return str;
|
}
|
export function rupte2(s) {
|
// 奇数位和偶数位提取,然后所有偶数位在前,奇数在后
|
let ll = s.length
|
let s1 = []
|
let s2 = []
|
for (let i = 0; i < ll; i++) {
|
if (i % 2 == 0) {
|
s1.push(s[i])
|
} else {
|
s2.push(s[i])
|
}
|
}
|
return s2.join('') + s1.join('')
|
}
|
|
export function rupte3(s) {
|
// 3位提取,所有第二位数放在前面,第三位数中间,第一位数后面
|
let ll = s.length
|
let s1 = []
|
let s2 = []
|
let s3 = []
|
for (let i = 0; i < ll; i++) {
|
let a = i % 3
|
if (a == 0) {
|
s1.push(s[i])
|
} else if (a == 1) {
|
s2.push(s[i])
|
} else {
|
s3.push(s[i])
|
}
|
}
|
return s2.join('') + s3.join('') + s1.join('')
|
}
|
|
export function rupted_token_str(s) {
|
// 打乱顺序token字符顺序
|
let tmps = rupte3(s)
|
tmps = rupte2(tmps)
|
tmps = rupte3(tmps)
|
tmps = rupte2(tmps)
|
return tmps
|
}
|
|
export function ruptedtoken(token) {
|
// 将token签名并打乱顺序
|
if (token != "") {
|
let unsignstr = token + randomWord(token.length);
|
let signstr = hex_md5(unsignstr + MD5Key).toLowerCase();
|
return rupted_token_str(unsignstr + signstr)
|
} else {
|
return ""
|
}
|
}
|
/**
|
* @description 参数加密
|
* @returns {Object} signParams
|
* @param {Object} params 参数对象
|
*/
|
|
export function signParams(params) {
|
params.signtype = 'MD5';
|
params.timestamp = new Date().getTime() + '';
|
// 计算签名
|
let sortKey = Object.keys(params).sort();
|
let sortList = [];
|
for (let key of sortKey) {
|
let val = encodeURIComponent(params[key]);
|
val = val.replace(/\(/g, '%28')
|
val = val.replace(/\)/g, '%29')
|
val = val.replace(/\*/g, '%2A')
|
val = val.replace(/!/g, '%21')
|
val = val.replace(/'/g, '%27')
|
sortList.push(key + "=" + val);
|
params[key] = val
|
}
|
sortList.push("key=" + MD5Key);
|
//MD5加密
|
params.sign = hex_md5(sortList.join("&")).toUpperCase();
|
return params;
|
}
|
|
//表单序列化
|
export const serialize = data => {
|
let list = [];
|
Object.keys(data).forEach(ele => {
|
list.push(`${ele}=${data[ele]}`)
|
})
|
return list.join('&');
|
};
|
|
/**
|
* @description 对象根据字典排序
|
* @param obj
|
* @returns {{}}
|
*/
|
export function objKeySort(obj) {
|
let newkey = Object.keys(obj).sort();
|
//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
|
let newObj = {}; //创建一个新的对象,用于存放排好序的键值对
|
for (let i = 0; i < newkey.length; i++) { //遍历newkey数组
|
newObj[newkey[i]] = obj[newkey[i]]; //向新创建的对象中按照排好的顺序依次增加键值对
|
}
|
return newObj; //返回排好序的新对象
|
}
|
|
/**
|
* @description json转query string
|
* @param obj
|
*/
|
export function toQueryString(obj) {
|
let pm = '';
|
if (obj !== undefined) {
|
if (typeof obj === 'string') {
|
obj = JSON.parse(obj)
|
}
|
for (let p in obj) {
|
pm += '&' + p + '=' + encodeURI(obj[p]);
|
}
|
}
|
return pm.slice(1)
|
}
|
|
/* 检查空 */
|
export function isBlank(str) {
|
if (str === undefined || str === 'undefined' || str === null || str === '' || str === 'null' || str === '[]') {
|
return true
|
} else {
|
return false
|
}
|
}
|
|
|
export function hasToken() {
|
return !isBlank(uni.getStorageSync(ACCESSTOKEN));
|
}
|
|
|
|
/**
|
* 日期格式化
|
* @param {Object} date
|
* @param {Object} fmt
|
*/
|
export function dateFormat(date, fmt) {
|
if (!date) {
|
return
|
}
|
if (!fmt) {
|
fmt = 'yyyy-MM-dd hh:mm'
|
}
|
if (!(date instanceof Date)) {
|
date = new Date(date.replace(/-/g, '/'))
|
}
|
|
if (/(y+)/.test(fmt)) {
|
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
|
}
|
|
let o = {
|
'M+': date.getMonth() + 1,
|
'd+': date.getDate(),
|
'h+': date.getHours(),
|
'm+': date.getMinutes(),
|
's+': date.getSeconds()
|
};
|
|
for (let k in o) {
|
if (new RegExp(`(${k})`).test(fmt)) {
|
let str = o[k] + '';
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
|
}
|
}
|
return fmt;
|
}
|
// 格式化时间
|
export function LongToDateTime(val) {
|
if (val == null || val == undefined || val == '' || val == 'null' || val == 'undefined') {
|
return '';
|
}
|
var temp = val.toString();
|
// 年
|
var y = temp.slice(0, 4);
|
// 月
|
var m = temp.slice(4, 6);
|
// 日
|
var d = temp.slice(6, 8);
|
// 时
|
var hh = temp.slice(8, 10);
|
// 分
|
var mm = temp.slice(10, 12);
|
// 秒
|
var ss = temp.slice(12, 14);
|
var result = y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss;
|
return result;
|
}
|
/* 正整数 */
|
export function isInteger(number) {
|
const reg = /^[1-9]\d*$/
|
if (reg.test(number)) {
|
return true
|
} else {
|
return false
|
}
|
}
|
|
/**
|
* 将元转换为分(如果可以转换,否则原值返回)
|
* @param val
|
* @returns {number|*}
|
*/
|
export function formatYuanToFen(val) {
|
if (isBlank(val) || !isPrice(val)) {
|
return val
|
}
|
return parseFloat(val) * 100
|
}
|
|
/**
|
* 将分转换为元(如果可以转换,否则原值返回)
|
* @param val
|
* @returns {number|*}
|
*/
|
export function formatFenToYuan(val) {
|
let str = val + ''
|
let accuracy = 0
|
if (str.slice(-2) == "00") {
|
accuracy = 0
|
} else if (str.slice(-1) == "0") {
|
accuracy = 1
|
} else {
|
accuracy = 2
|
}
|
if (val == '0') {
|
accuracy = 0
|
}
|
return (str / 100).toFixed(accuracy)
|
}
|
|
|
// 获取图片路径
|
export function getHeadImg(val) {
|
let headImg = ""
|
if (!isBlank(val)) {
|
headImg = (val.includes('http://') || val.includes('https://')) ? val : config.logoPath + JSON.parse(val)[0]
|
.attPath
|
}
|
return headImg
|
}
|
|
/**
|
* 合并对象相同属性
|
* chenlong
|
* @param obj1
|
* @param obj2
|
*/
|
export function mergeObjSamePro(obj1, obj2) {
|
const res = {}
|
Object.keys(obj2).map(function(key) {
|
if (key in obj1) {
|
res[key] = obj2[key]
|
}
|
})
|
return res
|
}
|