const utils = { getUserIP: function () { var MyPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection var pc = new MyPeerConnection({ iceServers: [] }) var noop = function () {} var localIPs = {} var newObj = {} var ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g function iterateIP (ip) { if (!localIPs[ip]) localStorage.setItem('localip', ip) localIPs[ip] = true newObj['ip'] = ip } pc.createDataChannel('') pc.createOffer().then(function (sdp) { sdp.sdp.split('\n').forEach(function (line) { if (line.indexOf('candidate') < 0) return line.match(ipRegex).forEach(iterateIP) }) pc.setLocalDescription(sdp, noop, noop) }).catch(function (reason) { // An error occurred, so handle the failure to connect }) pc.onicecandidate = function (ice) { if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return ice.candidate.candidate.match(ipRegex).forEach(iterateIP) } return newObj }, // 小数加法 accAdd (arg1, arg2) { var r1, r2, m, c try { r1 = arg1.toString().split('.')[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split('.')[1].length } catch (e) { r2 = 0 } c = Math.abs(r1 - r2) m = Math.pow(10, Math.max(r1, r2)) if (c > 0) { var cm = Math.pow(10, c) if (r1 > r2) { arg1 = Number(arg1.toString().replace('.', '')) arg2 = Number(arg2.toString().replace('.', '')) * cm } else { arg1 = Number(arg1.toString().replace('.', '')) * cm arg2 = Number(arg2.toString().replace('.', '')) } } else { arg1 = Number(arg1.toString().replace('.', '')) arg2 = Number(arg2.toString().replace('.', '')) } return (arg1 + arg2) / m }, // 乘法 accMul (arg1, arg2) { var m = 0 var s1 = arg1.toString() var s2 = arg2.toString() try { m += s1.split('.')[1].length } catch (e) {} try { m += s2.split('.')[1].length } catch (e) {} return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m) } } export default utils