| | |
| | | import { |
| | | log |
| | | } from 'mathjs'; |
| | | import JSEncrypt from './jsencrypt'; |
| | | import { |
| | | ACCESSTOKEN, |
| | | config |
| | | } from '@/common/config.js' |
| | | |
| | | let publicKey = |
| | | 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTREknOkrusbeH7kBe3mSw4AwVT438IWmX/jKmcvYxaAWRrBJiMl7gk37L78HBG/ZstLLcdKBYYdj/5cvVWDQfv+uxbv/piZhOmQej98jWIXEA8aFEk724nFRJ7nfcEhHSWfzbTfgZw0KDO1mWdjWHnHIx/MtD0HIFFIyzg3aO7wIDAQAB'; |
| | | |
| | | //校验银行卡号 |
| | | export function verifyBankCard(str) { |
| | | //银行卡号长度在16到19之间 |
| | | if (str.length < 16 || str.length > 19) { |
| | | return false; |
| | | } |
| | | var num = /^\d*$/; |
| | | if (!num.exec(str)) { |
| | | //银行卡号必须全为数字; |
| | | return false; |
| | | } |
| | | //开头6位 |
| | | var strBin = |
| | | "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99"; |
| | | if (strBin.indexOf(str.substring(0, 2)) == -1) { //银行卡号开头6位不符合规范 |
| | | return false; |
| | | } |
| | | var lastNum = str.substr(str.length - 1, 1); //取出最后一位(与luhm进行比较) |
| | | var first15Num = str.substr(0, str.length - 1); //前15或18位 |
| | | var newArr = new Array(); |
| | | for (var i = first15Num.length - 1; i > -1; i--) { //前15或18位倒序存进数组 |
| | | newArr.push(first15Num.substr(i, 1)); |
| | | } |
| | | var arrJiShu = new Array(); //奇数位*2的积 <9 |
| | | var arrJiShu2 = new Array(); //奇数位*2的积 >9 |
| | | |
| | | var arrOuShu = new Array(); //偶数位数组 |
| | | for (var j = 0; j < newArr.length; j++) { |
| | | if ((j + 1) % 2 == 1) { //奇数位 |
| | | if (parseInt(newArr[j]) * 2 < 9) |
| | | arrJiShu.push(parseInt(newArr[j]) * 2); |
| | | else |
| | | arrJiShu2.push(parseInt(newArr[j]) * 2); |
| | | } else //偶数位 |
| | | arrOuShu.push(newArr[j]); |
| | | } |
| | | |
| | | var jishu_child1 = new Array(); //奇数位*2 >9 的分割之后的数组个位数 |
| | | var jishu_child2 = new Array(); //奇数位*2 >9 的分割之后的数组十位数 |
| | | for (var h = 0; h < arrJiShu2.length; h++) { |
| | | jishu_child1.push(parseInt(arrJiShu2[h]) % 10); |
| | | jishu_child2.push(parseInt(arrJiShu2[h]) / 10); |
| | | } |
| | | |
| | | var sumJiShu = 0; //奇数位*2 < 9 的数组之和 |
| | | var sumOuShu = 0; //偶数位数组之和 |
| | | var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和 |
| | | var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和 |
| | | var sumTotal = 0; |
| | | for (var m = 0; m < arrJiShu.length; m++) { |
| | | sumJiShu = sumJiShu + parseInt(arrJiShu[m]); |
| | | } |
| | | |
| | | for (var n = 0; n < arrOuShu.length; n++) { |
| | | sumOuShu = sumOuShu + parseInt(arrOuShu[n]); |
| | | } |
| | | |
| | | for (var p = 0; p < jishu_child1.length; p++) { |
| | | sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]); |
| | | sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]); |
| | | } |
| | | //计算总和 |
| | | sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2); |
| | | |
| | | //计算Luhm值 |
| | | var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10; |
| | | var luhm = 10 - k; |
| | | |
| | | if (lastNum == luhm) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 加密 |
| | | * @param {Object} pas |
| | | */ |
| | | export function RSAencrypt(pas) { |
| | | //实例化jsEncrypt对象 |
| | | let jse = new JSEncrypt(); |
| | | //设置公钥 |
| | | jse.setPublicKey(publicKey); |
| | | return jse.encrypt(pas); |
| | | } |
| | | |
| | | /** |
| | | * 拼接ftp图片路径 |
| | | * @param {Object} item |
| | | * @param {Object} src |
| | | */ |
| | | export function getImgPath(item, src) { |
| | | if (isBlank(item)) { |
| | | return src |
| | | } |
| | | var ftp = config.sftpURL |
| | | if (typeof item === 'string') { |
| | | const arr = JSON.parse(item) |
| | | return ftp + arr[0].path |
| | | } else if (typeof item === 'object') { |
| | | return ftp + item.path |
| | | } else { |
| | | return ftp + item |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 判断字符串空 |
| | | * @param {Object} str |
| | | */ |
| | | export function isBlank(str) { |
| | | if (str === undefined || str === null || str === '' || str === 'null' || str.length == 0) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | /** |
| | | * 两数相乘 arg1 * arg2 |
| | | * @Date 2020/5/9 13:19 |
| | | **/ |
| | | export function accMul(arg1, arg2) { |
| | | let t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg1.includes('.')) { |
| | | t += arg1.split('.')[1].length |
| | | } |
| | | if (arg2.includes('.')) { |
| | | t += arg2.split('.')[1].length |
| | | } |
| | | const r1 = Number(arg1.replace('.', '')) |
| | | const r2 = Number(arg2.replace('.', '')) |
| | | return (r1 * r2) / Math.pow(10, t) |
| | | if (str === undefined || str === null || str === '' || str === 'null' || str.length == 0) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 两数相除 arg1 / arg2 |
| | | * @Date 2020/5/9 13:18 |
| | | **/ |
| | | export function accDiv(arg1, arg2) { |
| | | let t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg2.includes('.')) { |
| | | t = arg2.split('.')[1].length |
| | | } |
| | | if (arg1.includes('.')) { |
| | | t -= arg1.split('.')[1].length |
| | | } |
| | | const r1 = Number(arg1.replace('.', '')) |
| | | const r2 = Number(arg2.replace('.', '')) |
| | | return accMul((r1 / r2), Math.pow(10, t)) |
| | | } |
| | | /** |
| | | * 判断非空 |
| | | * @param {Object} str |
| | | */ |
| | | export function isNotBlank(str) { |
| | | return !isBlank(str) |
| | | return !isBlank(str) |
| | | } |
| | | |
| | | /** |
| | | * 判断token是否存在 |
| | | */ |
| | | export function getToken() { |
| | | return uni.getStorageSync(ACCESSTOKEN); |
| | | } |
| | | |
| | | /** |
| | | * 判断token是否存在 |
| | | */ |
| | | export function hasToken() { |
| | | return !isBlank(getToken()); |
| | | } |
| | | |
| | | /** |
| | | * 获取用户信息 |
| | | */ |
| | | export function getUserInfo() { |
| | | return JSON.parse(uni.getStorageSync('userInfo')) |
| | | } |
| | | |
| | | /** |
| | | * 判断两个数组的内容是否相同 |
| | | */ |
| | | export function arrEquals(arr1, arr2) { |
| | | // if the other arr2 is a falsy value, return |
| | | if (!arr2) |
| | | return false; |
| | | |
| | | // compare lengths - can save a lot of time |
| | | if (arr1.length != arr2.length) |
| | | return false; |
| | | |
| | | for (var i = 0, l = arr1.length; i < l; i++) { |
| | | // Check if we have nested arr2s |
| | | if (arr1[i] instanceof Array && arr2[i] instanceof Array) { |
| | | // recurse into the nested arr2s |
| | | if (!arr1[i].equals(arr2[i])) |
| | | return false; |
| | | } else if (arr1[i] != arr2[i]) { |
| | | // Warning - two different object instances will never be equal: {x:20} != {x:20} |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前时间 |
| | | */ |
| | | export function getDate(type) { |
| | | const date = new Date(); |
| | | let year = date.getFullYear(); |
| | | let month = date.getMonth() + 1; |
| | | let day = date.getDate(); |
| | | |
| | | if (type === 'start') { |
| | | year = year - 60; |
| | | } else if (type === 'end') { |
| | | year = year + 2; |
| | | } |
| | | month = month > 9 ? month : '0' + month;; |
| | | day = day > 9 ? day : '0' + day; |
| | | return `${year}-${month}-${day}`; |
| | | } |
| | | |
| | | /** |
| | | * 判断是否为整数,为整数则拼接'.0' |
| | | */ |
| | | export function rateMark(num) { |
| | | if (Number.isInteger(num)) { |
| | | return num + '.0' |
| | | } else { |
| | | return num |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 秒转分钟 |
| | | * @param {Object} value |
| | | */ |
| | | export function formatSeconds(value) { |
| | | var secondTime = parseInt(value); // 秒 |
| | | var minuteTime = 0; // 分 |
| | | var hourTime = 0; // 小时 |
| | | if (secondTime > 60) { //如果秒数大于60,将秒数转换成整数 |
| | | //获取分钟,除以60取整数,得到整数分钟 |
| | | minuteTime = parseInt(secondTime / 60); |
| | | //获取秒数,秒数取佘,得到整数秒数 |
| | | secondTime = parseInt(secondTime % 60); |
| | | //如果分钟大于60,将分钟转换成小时 |
| | | if (minuteTime > 60) { |
| | | //获取小时,获取分钟除以60,得到整数小时 |
| | | hourTime = parseInt(minuteTime / 60); |
| | | //获取小时后取佘的分,获取分钟除以60取佘的分 |
| | | minuteTime = parseInt(minuteTime % 60); |
| | | } |
| | | } |
| | | var result = "" + parseInt(secondTime) + "秒"; |
| | | |
| | | if (minuteTime > 0) { |
| | | result = "" + parseInt(minuteTime) + "分" + result; |
| | | } |
| | | if (hourTime > 0) { |
| | | result = "" + parseInt(hourTime) + "小时" + result; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 日期格式化 |
| | | * @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 timeago(date) { //dateTimeStamp是一个时间毫秒,注意时间戳是秒的形式,在这个毫秒的基础上除以1000,就是十位数的时间戳。13位数的都是时间毫秒。 |
| | | if (!date) { |
| | | return |
| | | } |
| | | if (!(date instanceof Date)) { |
| | | date = new Date(date.replace(/-/g, '/')) |
| | | } |
| | | |
| | | var dateTimeStamp = date.getTime() |
| | | |
| | | var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示 |
| | | var hour = minute * 60; |
| | | var day = hour * 24; |
| | | var week = day * 7; |
| | | var halfamonth = day * 15; |
| | | var month = day * 30; |
| | | var now = new Date().getTime(); //获取当前时间毫秒 |
| | | var diffValue = now - dateTimeStamp; //时间差 |
| | | |
| | | if (diffValue < 0) { |
| | | return; |
| | | } |
| | | var minC = diffValue / minute; //计算时间差的分,时,天,周,月 |
| | | var hourC = diffValue / hour; |
| | | var dayC = diffValue / day; |
| | | var weekC = diffValue / week; |
| | | var monthC = diffValue / month; |
| | | var result = ''; |
| | | if (monthC >= 1 && monthC <= 3) { |
| | | result = " " + parseInt(monthC) + "月前" |
| | | } else if (weekC >= 1 && weekC <= 3) { |
| | | result = " " + parseInt(weekC) + "周前" |
| | | } else if (dayC >= 1 && dayC <= 6) { |
| | | result = " " + parseInt(dayC) + "天前" |
| | | } else if (hourC >= 1 && hourC <= 23) { |
| | | result = " " + parseInt(hourC) + "小时前" |
| | | } else if (minC >= 1 && minC <= 59) { |
| | | result = " " + parseInt(minC) + "分钟前" |
| | | } else if (diffValue >= 0 && diffValue <= minute) { |
| | | result = "刚刚" |
| | | } else { |
| | | var datetime = new Date(); |
| | | datetime.setTime(dateTimeStamp); |
| | | var Nyear = datetime.getFullYear(); |
| | | var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1; |
| | | var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate(); |
| | | var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours(); |
| | | var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes(); |
| | | var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds(); |
| | | result = Nyear + "-" + Nmonth + "-" + Ndate |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 数组截取 |
| | | * @param {Object} data |
| | | * @param {Object} index |
| | | * @param {Object} num |
| | | */ |
| | | export function subArray(data, index, num) { |
| | | return data.slice(index * num, (index * num) + num) |
| | | } |
| | | |
| | | // 根据索引替换字符串中的元素,常用语字符串加密 |
| | | export function stringReplace(content, start, num, str) { |
| | | var content = content.split(""); |
| | | content.splice(start, num, str) |
| | | return content.join(""); |
| | | } |
| | | |
| | | export function getByteLength(str) { |
| | | //先把中文替换成两个字节的英文,在计算长度 |
| | | var aa = str.replace(/[\u0391-\uFFE5]/g, "@@") |
| | | return aa.length; |
| | | } |
| | | |
| | | export function getDiffDay(date_1, date_2) { |
| | | // 计算两个日期之间的差值 |
| | | let totalDays, diffDate |
| | | let myDate_1 = new Date(date_1.replace(/-/g, '/')) |
| | | let myDate_2 = new Date(date_2.replace(/-/g, '/')) |
| | | // 将两个日期都转换为毫秒格式,然后做差 |
| | | diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值 |
| | | |
| | | totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整 |
| | | // console.log(totalDays) |
| | | |
| | | return totalDays // 相差的天数 |
| | | } |
| | | |
| | | /** |
| | | * 获取两个日期相差的月日时分 |
| | | * @param {Object} start |
| | | * @param {Object} end |
| | | * @param {Object} cha |
| | | * @param {Object} flag |
| | | */ |
| | | export function timeFn(start, end, cha, flag) { |
| | | if (!!!cha) { |
| | | cha = 0 |
| | | } |
| | | if (!(start instanceof Date)) { |
| | | start = new Date(start.replace(/-/g, '/')) |
| | | } |
| | | start.setSeconds(start.getSeconds() - 1) |
| | | |
| | | if (!(end instanceof Date)) { |
| | | end = new Date(end.replace(/-/g, '/')) |
| | | } |
| | | |
| | | var dateDiff = end.getTime() - start + cha; //时间差的毫秒数 |
| | | if (dateDiff == 0) { |
| | | return null |
| | | } |
| | | var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数 |
| | | var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数 |
| | | var hours = Math.floor(leave1 / (3600 * 1000)) //计算出小时数 |
| | | //计算相差分钟数 |
| | | var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数 |
| | | var minutes = Math.floor(leave2 / (60 * 1000)) //计算相差分钟数 |
| | | //计算相差秒数 |
| | | var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数 |
| | | var seconds = Math.round(leave3 / 1000) |
| | | |
| | | var leave4 = leave3 % (60 * 1000) //计算分钟数后剩余的毫秒数 |
| | | var minseconds = Math.round(leave4 / 1000) |
| | | if (seconds * 1 < 10) { |
| | | seconds = '0' + seconds |
| | | } |
| | | if (minutes * 1 < 10) { |
| | | minutes = '0' + minutes |
| | | } |
| | | if (hours * 1 < 10) { |
| | | hours = '0' + hours |
| | | } |
| | | if (flag) { |
| | | var timeFn = (dayDiff ? dayDiff + "天" : '') + hours + "时" + minutes + "分" + seconds + "秒"; |
| | | return timeFn; |
| | | } |
| | | var timeFn = (dayDiff ? dayDiff + "天" : '') + hours + ":" + minutes + ":" + seconds; |
| | | return timeFn; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 简单的uuid |
| | | */ |
| | | export function guid() { |
| | | return 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { |
| | | var r = Math.random() * 16 | 0, |
| | | v = c == 'x' ? r : (r & 0x3 | 0x8); |
| | | return v.toString(16); |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 获取long型数据 |
| | | */ |
| | | export function glong() { |
| | | return 'xxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { |
| | | var r = Math.floor((Math.random() * 10)) | 0, |
| | | v = c == 'x' ? r : (r & 0x3); |
| | | return v.toString(); |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 页面跳转 |
| | | * @param {Object} url |
| | | * @param {Object} param |
| | | */ |
| | | export function go(url, param) { |
| | | var pm = ''; |
| | | if (param != undefined) { |
| | | if (typeof param === 'string') { |
| | | param = JSON.parse(param) |
| | | } |
| | | for (var p in param) { |
| | | //遍历json对象的每个key/value对,p为key |
| | | pm += '&' + p + '=' + param[p]; |
| | | } |
| | | } |
| | | pm = pm.substr(1); |
| | | uni.navigateTo({ |
| | | url: url + '?' + pm |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 页面跳转 |
| | | * @param {Object} url |
| | | * @param {Object} param |
| | | */ |
| | | export function redirect(url, param) { |
| | | var pm = ''; |
| | | if (param != undefined) { |
| | | if (typeof param === 'string') { |
| | | param = JSON.parse(param) |
| | | } |
| | | for (var p in param) { |
| | | //遍历json对象的每个key/value对,p为key |
| | | pm += '&' + p + '=' + param[p]; |
| | | } |
| | | } |
| | | pm = pm.substr(1); |
| | | uni.redirectTo({ |
| | | url: url + '?' + pm |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 跳转首页 |
| | | */ |
| | | export function goIndex() { |
| | | uni.reLaunch({ |
| | | url: '/pages/index/index' |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 跳转登录页 |
| | | */ |
| | | export function goLogin(callbackUrl) { |
| | | if (callbackUrl) { |
| | | uni.redirectTo({ |
| | | url: `/pages/user/login/index?callbackUrl=/${callbackUrl}` |
| | | }); |
| | | } else { |
| | | uni.redirectTo({ |
| | | url: `/pages/user/login/index` |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 返回 |
| | | */ |
| | | export function goBack() { |
| | | uni.navigateBack() |
| | | } |
| | | |
| | | /** |
| | | * 颜色16进制转RGB方法 |
| | | * @param {Object} c |
| | | */ |
| | | export function colorRgb(c) { |
| | | var sColor = c.toLowerCase(); |
| | | //十六进制颜色值的正则表达式 |
| | | var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; |
| | | // 如果是16进制颜色 |
| | | if (sColor && reg.test(sColor)) { |
| | | if (sColor.length === 4) { |
| | | var sColorNew = "#"; |
| | | for (var i = 1; i < 4; i += 1) { |
| | | sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)); |
| | | } |
| | | sColor = sColorNew; |
| | | } |
| | | //处理六位的颜色值 |
| | | var sColorChange = []; |
| | | for (var i = 1; i < 7; i += 2) { |
| | | sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2))); |
| | | } |
| | | return "(" + sColorChange.join(",") + ",.08)"; |
| | | } |
| | | return sColor; |
| | | }; |
| | | |
| | | /** |
| | | * 验证手机号 |
| | | * @param {Object} mobile |
| | | */ |
| | | export function checkMobile(mobile) { |
| | | return /^1[3456789]\d{9}$/.test(mobile); |
| | | } |
| | | |
| | | /** |
| | | * 验证身份证号 |
| | | * @param {Object} cardNo |
| | | */ |
| | | export function checkCardNo(cardNo) { |
| | | return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/ |
| | | .test(cardNo); |
| | | } |
| | | |
| | | /** |
| | | * 验证邮箱 |
| | | * @param {Object} email |
| | | */ |
| | | export function checkEmail(email) { |
| | | return /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email); |
| | | } |
| | | |
| | | /** |
| | | * 阿拉伯数字转中文数字 |
| | | * @param {Object} num |
| | | */ |
| | | export function NoToChinese(num) { |
| | | var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九"); |
| | | var BB = new Array("", "十", "百", "千", "万", "亿", "点", ""); |
| | | var a = ("" + num).replace(/(^0*)/g, "").split("."), |
| | | k = 0, |
| | | re = ""; |
| | | for (var i = a[0].length - 1; i >= 0; i--) { |
| | | switch (k) { |
| | | case 0: |
| | | re = BB[7] + re; |
| | | break; |
| | | case 4: |
| | | if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0])) |
| | | re = BB[4] + re; |
| | | break; |
| | | case 8: |
| | | re = BB[5] + re; |
| | | BB[7] = BB[5]; |
| | | k = 0; |
| | | break; |
| | | } |
| | | if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re; |
| | | if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re; |
| | | k++; |
| | | } |
| | | if (a.length > 1) //加上小数部分(如果有小数部分) |
| | | { |
| | | re += BB[6]; |
| | | for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)]; |
| | | } |
| | | return re; |
| | | }; |
| | | |
| | | /** |
| | | * 合并对象相同属性 |
| | | * chenlong |
| | | * @param obj1 目标对象 |
| | | * @param obj2 源对象 |
| | | */ |
| | | export function mergeObj(obj1, obj2) { |
| | | const res = {} |
| | | Object.keys(obj2).map(key => { |
| | | if (key in obj1) { |
| | | res[key] = obj2[key] |
| | | } |
| | | }) |
| | | return res |
| | | } |
| | | |
| | | /** |
| | | * 获取返回值 |
| | | * @param {Object} res |
| | | * @param {Object} fun |
| | | */ |
| | | export function getContent(res, fun) { |
| | | if (res.code === 10000) { |
| | | fun(res.data) |
| | | } else { |
| | | uni.showToast({ |
| | | title: res.msg, |
| | | duration: 1500, |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /* 正整数 */ |
| | | export function isInteger(number) { |
| | | const reg = /^[1-9]\d*$/ |
| | | if (reg.test(number)) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | const reg = /^[1-9]\d*$/ |
| | | if (reg.test(number)) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | |
| | | /* 判断是否为空 */ |
| | | export function isEmpty(item) { |
| | | if (item === undefined || item === null || item === '') { |
| | | return true |
| | | } |
| | | return false |
| | | if (item === undefined || item === null || item === '') { |
| | | return true |
| | | } |
| | | return false |
| | | } |
| | | |
| | | /* 校验价格,最多两位小数点 */ |
| | | export function isPrice(price) { |
| | | const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ |
| | | if (reg.test(price)) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ |
| | | if (reg.test(price)) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @returns {number|*} |
| | | */ |
| | | export function formatYuanToFen(val) { |
| | | if (isEmpty(val) || !isPrice(val)) { |
| | | return val |
| | | } |
| | | return parseFloat(val) * 100 |
| | | if (isEmpty(val) || !isPrice(val)) { |
| | | return val |
| | | } |
| | | return parseFloat(val) * 100 |
| | | } |
| | | |
| | | /** |
| | |
| | | * @returns {number|*} |
| | | */ |
| | | export function formatFenToYuan(val) { |
| | | if (isEmpty(val) || !isInteger(val)) { |
| | | return val |
| | | } |
| | | return parseFloat(val) / 100 |
| | | if (isEmpty(val) || !isInteger(val)) { |
| | | return val |
| | | } |
| | | return parseFloat(val) / 100 |
| | | } |
| | | /* 元转分 */ |
| | | export function yuanToFen(amount) { |
| | | let fen = 0 |
| | | if (!amount) { |
| | | return fen; |
| | | } |
| | | fen = accMul(amount,100) |
| | | console.log(amount,fen); |
| | | return fen |
| | | |
| | | |
| | | /** |
| | | * 提示错误信息 |
| | | */ |
| | | export function showErrorMsg(msg) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | /* 分转元 */ |
| | | export function fenToYuan(amount) { |
| | | if (!amount) { |
| | | return "0"; |
| | | } |
| | | amount = amount.toString(); |
| | | if (amount.length == 1) { |
| | | return parseFloat("0.0" + amount); |
| | | } else if (amount.length == 2) { |
| | | return parseFloat("0." + amount); |
| | | } else { |
| | | return parseFloat(amount.substring(0, amount.length - 2) + "." + amount.substring(amount.length - 2)); |
| | | } |
| | | |
| | | /** |
| | | * 提示成功信息 |
| | | */ |
| | | export function showSuccessMsg(msg) { |
| | | uni.showToast({ |
| | | title: msg, |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | // 判断微信、支付宝 2微信 5支付宝 3其他 |
| | | |
| | | |
| | | /** |
| | | * 计算时间差 |
| | | */ |
| | | export function timeDiff(startTime, endTime) { |
| | | // 计算相差的时间 |
| | | const timeDiff = endTime.getTime() - startTime.getTime(); |
| | | if (timeDiff <= 0) return false; |
| | | |
| | | const totalSeconds = Math.floor(timeDiff / 1000); |
| | | const hours = Math.floor(totalSeconds / 60 / 60); |
| | | const minutes = Math.floor((totalSeconds - hours * 60 * 60) / 60); |
| | | const seconds = Math.floor(totalSeconds - hours * 60 * 60 - minutes * 60); |
| | | const timeDiffArray = [hours, minutes, seconds].map(e => { |
| | | return e < 10 ? '0' + e : e; |
| | | }); |
| | | return timeDiffArray; |
| | | } |
| | | |
| | | /** |
| | | * 两数相加 arg1 + arg2 |
| | | * @param arg1 |
| | | * @param arg2 |
| | | * @returns {number} |
| | | */ |
| | | export function add(arg1, arg2) { |
| | | var t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg1.includes('.')) { |
| | | t = arg1.split('.')[1].length |
| | | } |
| | | if (arg2.includes('.')) { |
| | | t = Math.max(arg2.split('.')[1].length, t) |
| | | } |
| | | var m = Math.pow(10, t) |
| | | return Number(((this.mul(arg1, m) + this.mul(arg2, m)) / m)) |
| | | } |
| | | |
| | | /** |
| | | * 两数相减 arg1 - arg2 |
| | | * @param arg1 |
| | | * @param arg2 |
| | | * @returns {number} |
| | | */ |
| | | export function sub(arg1, arg2) { |
| | | var t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg1.includes('.')) { |
| | | t = arg1.split('.')[1].length |
| | | } |
| | | if (arg2.includes('.')) { |
| | | t = Math.max(arg2.split('.')[1].length, t) |
| | | } |
| | | var m = Math.pow(10, t) |
| | | return Number(((this.mul(arg1, m) - this.mul(arg2, m)) / m)) |
| | | } |
| | | |
| | | /** |
| | | * 两数相乘 arg1 * arg2 |
| | | * @param arg1 |
| | | * @param arg2 |
| | | * @returns {number} |
| | | */ |
| | | export function mul(arg1, arg2) { |
| | | var t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg1.includes('.')) { |
| | | t += arg1.split('.')[1].length |
| | | } |
| | | if (arg2.includes('.')) { |
| | | t += arg2.split('.')[1].length |
| | | } |
| | | var r1 = Number(arg1.replace('.', '')) |
| | | var r2 = Number(arg2.replace('.', '')) |
| | | return (r1 * r2) / Math.pow(10, t) |
| | | } |
| | | |
| | | /** |
| | | * 两数相除 arg1 / arg2 |
| | | * @param arg1 |
| | | * @param arg2 |
| | | * @returns {number} |
| | | */ |
| | | export function abs(arg1, arg2) { |
| | | var t = 0 |
| | | arg1 = arg1 ? arg1.toString() : '0' |
| | | arg2 = arg2 ? arg2.toString() : '0' |
| | | if (arg2.includes('.')) { |
| | | t = arg2.split('.')[1].length |
| | | } |
| | | if (arg1.includes('.')) { |
| | | t -= arg1.split('.')[1].length |
| | | } |
| | | var r1 = Number(arg1.replace('.', '')) |
| | | var r2 = Number(arg2.replace('.', '')) |
| | | return this.mul((r1 / r2), Math.pow(10, t)) |
| | | } |
| | | |
| | | /** |
| | | * arg1*100/(arg1+arg2) |
| | | * @param {Object} arg2 |
| | | * @param {Object} arg1 |
| | | */ |
| | | export function percentage(arg1, arg2) { |
| | | var add = this.add(arg1, arg2) |
| | | return this.mul(this.abs(arg1, add), 100) |
| | | } |
| | | |
| | | /** |
| | | * 查看网络状态 |
| | | * false 没有网络 true 有网络 |
| | | */ |
| | | export function getNetworkStatus() { |
| | | var result = '' |
| | | uni.getNetworkType({ |
| | | success: (res) => { |
| | | if (res.networkType == 'none') { |
| | | // this.$u.toast("没有网络"); |
| | | result = false |
| | | } else { |
| | | // this.$u.toast("有网络"); |
| | | result = true |
| | | } |
| | | } |
| | | }) |
| | | return result |
| | | } |
| | | |
| | | /** |
| | | * @param {Object} key 缓存的key |
| | | * @param {Object} param 要缓存的对象 |
| | | * 将param push到缓存数组中 |
| | | */ |
| | | export function setArrayStorageSync(key, param) { |
| | | const data = uni.getStorageSync(key) || [] |
| | | data.push(param) |
| | | uni.setStorageSync(key, data) |
| | | } |
| | | |
| | | // 获取轮播图列表 |
| | | export function getBannerImg(val, state) { |
| | | let list = [] |
| | | if (!isBlank(val) && state === '2') { |
| | | let arr = JSON.parse(val) |
| | | arr.map(x => { |
| | | list.push(config.sftpURL + x.path) |
| | | }) |
| | | } else { |
| | | list = [config.imgUrl + 'no-book.png'] |
| | | } |
| | | return list |
| | | } |
| | | |
| | | // 商品图片路径 |
| | | export function getGoodsImg(val, state) { |
| | | let headImg = "" |
| | | if (!isBlank(val) && state === '2') { |
| | | headImg = config.sftpURL + JSON.parse(val)[0].path |
| | | } else { |
| | | headImg = config.imgUrl + 'no-book.png' |
| | | } |
| | | return headImg |
| | | } |
| | | |
| | | // 图片路径 |
| | | export function GoodsImg(val) { |
| | | let headImg = "" |
| | | if (!isBlank(val)) { |
| | | headImg = config.sftpURL + val |
| | | } else { |
| | | headImg = config.imgUrl + 'no-book.png' |
| | | } |
| | | return headImg |
| | | } |
| | | |
| | | // 保留三位小数 末尾超过向上进1 |
| | | export function getDiscountPrice(price, discount) { |
| | | let newPrice = "" |
| | | let a = Number(price) * Number(discount) / 100 |
| | | let b = a.toFixed(4) |
| | | let c = b[b.length - 1] |
| | | newPrice = c != 0 ? Number(b) + 0.01 : b.slice(0, -1) |
| | | return newPrice |
| | | } |
| | | |
| | | // 判断微信、支付宝 2微信 5支付宝 15云闪付 3其他 |
| | | export function getPlat() { |
| | | // #ifdef H5 |
| | | var ua = window.navigator.userAgent.toLowerCase(); |
| | | //判断是不是微信 |
| | | if (ua.match(/MicroMessenger/i) == 'micromessenger') { |
| | | return 2; |
| | | } |
| | | //判断是不是支付宝 |
| | | if (ua.match(/AlipayClient/i) == 'alipayclient') { |
| | | return 5; |
| | | } |
| | | //判断是不是云闪付 |
| | | if (ua.indexOf('unionpay/1.0') !== -1) { |
| | | return 15; |
| | | } |
| | | // #endif |
| | | // #ifdef MP-WEIXIN |
| | | return 2; |
| | | // #endif |
| | | // #ifdef MP-ALIPAY |
| | | return 5; |
| | | // #endif |
| | | return 3; |
| | | } |
| | | // #ifdef H5 |
| | | var ua = window.navigator.userAgent.toLowerCase(); |
| | | //判断是不是微信 |
| | | if (ua.match(/MicroMessenger/i) == 'micromessenger') { |
| | | return 2; |
| | | } |
| | | //判断是不是支付宝 |
| | | if (ua.match(/AlipayClient/i) == 'alipayclient') { |
| | | return 5; |
| | | } |
| | | //判断是不是云闪付 |
| | | if (ua.indexOf('unionpay/1.0') !== -1) { |
| | | return 15; |
| | | } |
| | | // #endif |
| | | // #ifdef MP-WEIXIN |
| | | return 2; |
| | | // #endif |
| | | // #ifdef MP-ALIPAY |
| | | return 5; |
| | | // #endif |
| | | return 3; |
| | | } |