123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- import JsEncrypt from './jsencrypt.min.js'
- import * as types from './types'
- import { PUBLIC_KEY } from '../config.js'
- /**
- * guid
- */
- export function guid() {
- function S4() {
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
- }
- return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4())
- }
- /**
- * 对象深拷贝
- * @author yxk
- */
- export function deepCopy(target = null) {
- let res = null
- if (typeof target === 'object') {
- if (types.isArray(target)) {
- res = []
- target.forEach(item => {
- res.push(deepCopy(item))
- })
- } else if (types.isObject(target)) {
- res = {}
- const keys = Object.keys(target)
- keys.forEach(key => {
- res[key] = deepCopy(target[key])
- })
- } else {
- res = target
- }
- } else {
- res = target
- }
- return res
- }
- /**
- * 两个浮点数求和
- * @author yxk
- * @param num1
- * @param num2
- * @return {number}
- */
- export function addOperation(num1, num2) {
- let r1, r2, m;
- try {
- r1 = (num1.toString().split('.')[1] || []).length;
- } catch (e) {
- r1 = 0;
- }
- try {
- r2 = (num2.toString().split('.')[1] || []).length;
- } catch (e) {
- r2 = 0;
- }
- m = Math.pow(10, Math.max(r1, r2));
- return Math.round(multiOperation(num1, m) + multiOperation(num2, m)) / m;
- }
- /**
- * 两个浮点数相减
- * @author yxk
- * @param num1
- * @param num2
- * @return {number}
- */
- export function subOperation(num1, num2) {
- let r1, r2, m;
- try {
- r1 = (num1.toString().split('.')[1] || []).length;
- } catch (e) {
- r1 = 0;
- }
- try {
- r2 = num2.toString().split('.')[1].length;
- } catch (e) {
- r2 = 0;
- }
- m = Math.pow(10, Math.max(r1, r2));
- return Math.round(multiOperation(num1, m) - multiOperation(num2, m)) / m;
- }
- /**
- * 两个浮点数相乘
- * @author yxk
- * @param num1
- * @param num2
- * @return {number}
- */
- export function multiOperation(num1, num2) {
- let m = 0
- const s1 = num1.toString()
- const s2 = num2.toString()
- try {
- m += (s1.split('.')[1] || []).length
- } catch (e) {
- console.log(e)
- }
- try {
- m += (s2.split('.')[1] || []).length
- } catch (e) {
- console.log(e)
- }
- return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
- }
- /**
- * 两个浮点数相除
- * @author yxk
- * @param num1
- * @param num2
- * @return {number}
- */
- export function divideOperation(num1, num2) {
- let m = 0
- const s1 = num1.toString()
- const s2 = num2.toString()
- try {
- m += (s1.split('.')[1] || []).length
- } catch (e) {
- console.log(e)
- }
- try {
- m += (s2.split('.')[1] || []).length
- } catch (e) {
- console.log(e)
- }
- const n1 = multiOperation(num1, Math.pow(10, m))
- const n2 = multiOperation(num2, Math.pow(10, m))
- return Number(n1) / Number(n2)
- }
- /**
- * 金额转换
- * 1234567.05 => 1,234,567.05
- * @author yxk
- * @param {string|number} num 金额
- * @param {string} emptyStr 金额错误时,补空位
- * @return {string}
- */
- export function splitNumber(num, emptyStr = '--') {
- if (num === 0) return num
- if (!num) return emptyStr
- num = Number(num)
- if (isNaN(num)) return emptyStr
- if (num < 1000) return num.toFixed(2)
- num = num.toFixed(2)
- let numArr = num.split('.')
- let endStr = numArr.length > 1 ? numArr[1] : null
- let arr = numArr[0].split('');
- let arr0 = [].concat(arr);
- let index = 0;
- for (let i = arr0.length - 1; i >= 0; i--) {
- let j = arr.length - i;
- if (i % 3 === 0 && i !== 0) {
- arr0.splice(j + index, 0, ',');
- index++
- }
- }
- let res = arr0.join('')
- return endStr ? `${res}.${endStr}` : res;
- }
- /**
- * 判断是否为手机号
- * @param {String} val
- */
- export function isMobile(val) {
- const reg = /^1\d{10}$/
- return reg.test(val)
- }
- /**
- * 判断是否为邮箱
- * @param {String} val
- */
- export function isEmail(val) {
- const reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
- return reg.test(val)
- }
- /**
- * 判断Appid
- * @param {String} val
- */
- export function isAppid(val) {
- const reg = /[a-zA-Z0-9]{8}/
- return reg.test(val)
- }
- /**
- * rpx 转 px
- * @param {String|Number} val
- */
- export function unitToPx(val) {
- val = String(val)
- if (val.endsWith('rpx')) {
- let num = val.replace('rpx', '')
- if (isNaN(Number(num))) return val
- return uni.upx2px(num) + 'px'
- } else {
- return val
- }
- }
- /**
- * 判断两个对象内容是否相同
- * @author yxk
- * @param {Object} obj_1
- * @param {Object} obj_2
- * @return {Boolean}
- */
- export function compareObj(obj_1, obj_2) {
- if (obj_1 === obj_2) return true
- if (!types.isObject(obj_1) || !types.isObject(obj_2)) {
- return obj_1 === obj_2
- }
- let keys_1 = Object.keys(obj_1) || []
- let keys_2 = Object.keys(obj_2) || []
- if (keys_1.length !== keys_2.length) {
- keys_1 = keys_2 = null
- return false
- }
- // key 取交集,如果交集数组的长度和不等于数组的长度说明两个数组的值不相同
- let keys = keys_1.filter(o => keys_2.includes(o))
- if (keys.length !== keys_1.length) {
- keys_1 = keys_2 = keys = null
- return false
- }
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i]
- if (!compareObj(obj_1[key], obj_2[key])) {
- keys_1 = keys_2 = keys = null
- return false
- }
- }
- keys_1 = keys_2 = keys = null
- return true
- }
- /**
- * 加密
- * @param {string} str
- * @return {string}
- */
- export function RSAencrypt(str) {
- const jse = new JsEncrypt()
- jse.setPublicKey(PUBLIC_KEY)
- return jse.encrypt(str)
- }
|