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 }