{"version":3,"sources":["webpack:///./src/components/common/bus.js","webpack:///./src/App.vue?edc5","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/utils/axios.js","webpack:///./src/utils/rootPath.js","webpack:///./src/utils/codeParse.js","webpack:///./src/utils/common.js","webpack:///./src/utils/btnPermissions.js","webpack:///./src/main.js","webpack:///./src/router/index.js","webpack:///./src/utils/utils.js"],"names":["bus","__webpack_require__","Vue","App_render","_h","this","$createElement","_c","_self","attrs","id","isRouterAlive","_e","_withStripped","esExports","render","staticRenderFns","selectortype_template_index_0_src_App","disposed","Component","normalizeComponent","name","provide","reload","data","created","methods","$nextTick","ssrContext","options","__file","loadinginstace","src_App","baseURL","process","backendResponseCode","OK","LOGIN_OK","code","message","DEAL_OK","OPEN_OK","SEND_OK","ACCEPT_OK","UPLOAD_OK","HANDLE_OK","UPDATE_OK","ADD_OK","DELETE_OK","ACTIVATE_OK","RESET_PAS_OK","LOGINOUT_OK","REMOVE_OK","CANCEL_OK","APPLY_OK","DO_NAME_OK","EMAIL_SEND_OK","CODE_SEND_OK","EXP_SEND_OK","CLEAR_OK","axios","defaults","withCredentials","api","headers","timeout","prototype","$axios","interceptors","request","use","config","url","indexOf","Loading","service","lock","text","spinner","background","body","customClass","error","close","Message","promise_default","a","reject","response","console","log","status","$emit","router","replace","path","errMsg","formatFloat","f","digit","m","Math","pow","round","filter","s","isNaN","Number","toString","num","toFixed","str","substring","lastIndexOf","length","slice","getEnumsName","enums","undefined","i","e","value","Date","toJSON","toISOString","JSON","parse","date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","dateUtc","getTime","getTimezoneOffset","formatListTime","FormatDate","fmt","o","M+","d+","h+","m+","s+","q+","floor","S","getMilliseconds","k","test","RegExp","$1","substr","toDayHoursString","mss","parseInt","isUserRoleSet","split","includes","roleSetOperations","routerPath","operation","_operations","window","localStorage","getItem","isHkHost","document","location","hostname","ReturnFloat","MathValue","parseFloat","regYuanToFen","fen","regFenToYuan","reg","regFenToYuanOne","limitFloat","val","sNum","limitFloat4","String","limitFloat8","limitFloat7","getURLParam","parameter","Back","l","j","concat","p","VeryFy","type","notice","vm","go","$message","$toast","exec","myArray","$2","$3","$4","getMobileType","mobile","Validate","num1","num2","ObjEqual","b","typeof_default","length1","ele","constructor","equals","isJSON","obj","isBlank","Object","call","stringify_default","UrlTo","href","origin","isEmojiCharacter","hs","charCodeAt","uc","strlen","len","c","randomString","$chars","maxPos","pwd","charAt","random","refresh","ua","navigator","userAgent","toLowerCase","setTimeout","match","isDef","v","isObject","idOnlyNum","isBrowser","trident","presto","webKit","gecko","u","isIos","isAndroid","isMobile","isWeiXin","isQQ","isApp","isWebApp","isQQbrw","ucLowEnd","ucSpecial","$$","selector","querySelector","$$$","querySelectorAll","Downloads","res","fileName","blob","Blob","downloadElement","createElement","URL","createObjectURL","download","appendChild","click","removeChild","revokeObjectURL","BasicData","serverData","userType","systemManger","operatDirector","operatManger","operatAudit","salesManager","accountTypes","usageEnum","LOGIN","RESET_PASSWORD","MODIFY_MER_BASIC_INFO","MODIFY_MER_SETTLE","TXN_REFUND","TXN_ADJUST","TXN_FORCE_REFUND","TXN_NETTING","MerchantStatus","NotComplete","NoSubmit","InReview","Opening","Reject","Closed","Cancellation","NotActive","operationEnums","read","create","delete","update","apply","approve","export","upload","cash","dispute","adjust","refuse","chargeback","cancel","tochargeback","payout","txnTypeItems","currency","CNY","AED","AUD","BRL","CAD","CHF","DKK","EUR","GBP","HKD","IDR","INR","JPY","KRW","MOP","MYR","NOK","NZD","PHP","RUB","SAR","SEK","SGD","THB","TRY","TWD","USD","ZAR","MDL","ServiceCode","1001","1002","1003","1004","1005","1006","1023","1024","Product","1-NP-01","1-NP-02","1-NP-03","1-NP-06","1-NP-04","1-NP-05","1-AP-07","1-RP-08","2-TF-09","2-TF-10","SubProduct","VISA","MASTER","JCB","DISCOVER","PRI_INSIDE","PUB_INSIDE","SCAN_CODE_PAY","MINI_PROGRAM_PAY","FIXED_CODE_PAY","H5_PAY","ONLINEBANK_PAY","QRCODE_PAY","JSAPI_PAY","Format","H+","hasPermission","userPermission","userPermissionList","Array","isArray","permissionButton","session","get","permissionList","some","directive","inserted","el","binding","vnode","parentNode","$_has","has","component","CollapseTransition","productionTip","ElementUI","size","VueQuillEditor","h","App","$mount","__WEBPACK_IMPORTED_MODULE_0_vue__","__WEBPACK_IMPORTED_MODULE_1_vue_router__","__WEBPACK_IMPORTED_MODULE_2__utils_utils__","home","resolve","require","bind","catch","oe","Router","routes","redirect","meta","title","children","then","keepAlive","beforeEach","to","from","next","getStore","afterEach","route","originalPush","push","err","utils","dom","show","style","display","hide","hasClass","className","addClass","newClass","join","removeClass","replaceClass","newName","oldName","customAttribute","setAttribute","getAttribute","deBounce","fn","delay","timer","_this","_len","arguments","args","_key","clearTimeout","getPos","elem","left","top","getBoundingClientRect","dataBinding","inputId","outputId","objName","getElementById","defineProperty","set","newVal","innerText","addEventListener","event","target","getKeyCode","keyCode","which","getRandomNum","min","max","convertInt","sameSign","vector","x","y","vectorPro","v1","v2","isPointInTrangle","pa","pb","pc","t1","t2","t3","arr","cloneArr","shuffle","newArr","getRandom","temp","randomOne","removeRepeat","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_array_from___default","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_set___default","maxArr","minArr","sumArr","sum","averageArr","getEleCount","testReg","checkPwdLv","nowLv","getRandomColor","need","getRandomStr","n","createScript","charset","script","async","getStar","rate","trim","changeCase","toUpperCase","itemText","forEach","item","ToggleCase","htmlEncode","getSB","getNB","formatMoney","deepCopy","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_json_stringify___default","time","getNowDate","hasDay","hasHour","hasWeek","sign1","sign2","year","month","padStart","day","hour","minutes","seconds","week","getDay","format","timestamp","sign","countDown","endTime","start","dif","d","http","ajax","success","xhr","XMLHttpRequest","ActiveXObject","dataArr","key","postData","open","setRequestHeader","send","onreadystatechange","readyState","responseText","jsonp","onsuccess","onerror","callbackName","onload","getElementsByTagName","setUrlParam","query","urlParse","search","tempArr","decodeURIComponent","store","setCookie","iDay","oDate","setDate","cookie","getCookie","arr2","removeCookie","setLocalStorage","setItem","getLocalStorage","def","removeLocalStorage","removeItem","clearLocalStorage","clear","getEvent","getType","getTarget","srcElement","addHandler","listener","attachEvent","removeHandler","removeEventListener","detachEvent","addAgent","agent","matches","preventDefault","returnValue","stopPropagation","cancelBubble","others","whatBrowser","BrowserAgent","browser","BrowserType","isOpera","isIE","isEdge","isFF","isSafari","isChrome","fIEVersion","IEVersion","setStore","content","sessionStorage","remove"],"mappings":"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","file":"static/js/app.2cb65828ce91b65992ce.js?t=1725588971589","sourcesContent":["import Vue from 'vue';\r\n\r\n// 使用 Event Bus\r\nconst bus = new Vue();\r\n\r\nexport default bus;\n\n\n// WEBPACK FOOTER //\n// ./src/components/common/bus.js","var render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { attrs: { id: \"app\" } },\n    [_vm.isRouterAlive ? _c(\"router-view\") : _vm._e()],\n    1\n  )\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\nif (module.hot) {\n  module.hot.accept()\n  if (module.hot.data) {\n    require(\"vue-hot-reload-api\")      .rerender(\"data-v-7ba5bd90\", esExports)\n  }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7ba5bd90\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","var disposed = false\nfunction injectStyle (ssrContext) {\n  if (disposed) return\n  require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7ba5bd90\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7ba5bd90\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\nComponent.options.__file = \"src/App.vue\"\n\n/* hot reload */\nif (module.hot) {(function () {\n  var hotAPI = require(\"vue-hot-reload-api\")\n  hotAPI.install(require(\"vue\"), false)\n  if (!hotAPI.compatible) return\n  module.hot.accept()\n  if (!module.hot.data) {\n    hotAPI.createRecord(\"data-v-7ba5bd90\", Component.options)\n  } else {\n    hotAPI.reload(\"data-v-7ba5bd90\", Component.options)\n  }\n  module.hot.dispose(function (data) {\n    disposed = true\n  })\n})()}\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","<style>\n    @import \"../static/css/reset.css\";\n    @import \"../static/css/index.css\";\n    @import \"../static/css/mixin.css\";\n    @import \"../static/css/styleChange.css\";    /* 修改elementUi的样式 */\n    @import \"../static/css/color-dark.css\";     /* 深色主题 */\n    @import \"../static/css/webdatarocks.min.css\";\n    /*@import \"./assets/css/theme-green/color-green.css\";   浅绿色主题*/\n</style>\n\n<template>\n    <div id=\"app\">\n      <router-view v-if=\"isRouterAlive\"/>\n    </div>\n</template>\n\n<script>\n    export default {\n        name: \"app\",\n        provide () {\n            return {\n                reload: this.reload\n            }\n        },\n        data() {\n            return {\n                isRouterAlive: true\n            }\n        },\n        created() {\n        },\n        methods: {\n            reload () {\n                this.isRouterAlive = false\n                this.$nextTick(function() {\n                    this.isRouterAlive = true\n                })\n            }\n        }\n    }\n</script>\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","import Vue from 'vue'\r\nimport axios from 'axios'\r\nimport router from '../router'\r\nimport {Loading, Message} from 'element-ui'\r\nimport api from '../utils/rootPath';\r\nimport bus from '../components/common/bus';\r\nimport {setStore} from '../utils/utils'\r\nimport {backendResponseCode, parseReturnFailCode} from '../utils/codeParse';\r\n\r\n/*axios全局配置*/\r\naxios.defaults.withCredentials = true;\r\naxios.defaults.baseURL = api;//process.env.BASE_URL //\r\naxios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8';\r\naxios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest';\r\naxios.defaults.timeout = 120000;\r\nVue.prototype.$axios = axios;\r\n\r\n\r\nvar loadinginstace //加载定义\r\n\r\n// 添加请求拦截器\r\naxios.interceptors.request.use(function (config) {\r\n\r\n  // 在发送请求之前做些什么\r\n  if (config.url.indexOf('fileImport') != -1 || config.url.indexOf('disputeFileImport') != -1 || config.url.indexOf('reconFileImport') != -1\r\n    || config.url.indexOf('disputeTransFileImport') != -1 || config.url.indexOf('importRiskBlackOrWhite') != -1) {\r\n    //这两个接口无需加载loading动画\r\n  } else {\r\n    //加载动画\r\n    loadinginstace = Loading.service({           // 声明一个loading对象\r\n      lock: true,                             // 是否锁屏\r\n      text: 'Loading...',                     // 加载动画的文字\r\n      spinner: 'el-icon-loading',             // 引入的loading图标\r\n      background: 'rgba(0, 0, 0, 0.3)',       // 背景颜色\r\n      body: true,\r\n      customClass: 'mask'                     // 遮罩层新增类名\r\n    })\r\n  }\r\n  //config.headers.token = localStorage.getItem('token');\r\n  // console.info(token);\r\n  return config;\r\n}, function (error) {\r\n  // 对请求错误做些什么\r\n  loadinginstace.close();\r\n  Message.error({message: '加载超时'});\r\n  return Promise.reject(error);\r\n});\r\n\r\n// 添加响应拦截器\r\naxios.interceptors.response.use(function (response) {\r\n  // 对响应数据做点什么\r\n  loadinginstace.close();\r\n  return response;\r\n\r\n}, function (error) {\r\n  // 对响应错误做点什么\r\n  console.log(error);\r\n  loadinginstace.close();\r\n  if (error.response) {\r\n     if (error.response.status == '401') {\r\n      //session错误关闭当前页跳转到登录页面\r\n      bus.$emit('close_current_tags');\r\n      router.replace({\r\n        path: '/login',\r\n      })\r\n    }if (error.response.data.errMsg) {\r\n      Message.error({message: error.response.data.errMsg});\r\n    } else {\r\n      console.error(error.response.status);\r\n      Message.error({message: `Fail code: ${error.response.status}`});\r\n    }\r\n  } else if (error.request) {\r\n    Message.error({message: '已提出请求，但未收到响应'})\r\n    bus.$emit('close_current_tags');\r\n    router.replace({\r\n      path: '/login',\r\n    })\r\n  } else {\r\n    Message.error({message: '在设置触发错误的请求时发生了一些事情'})\r\n  }\r\n  return Promise.reject(error);\r\n});\r\n\r\nexport default axios;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/axios.js","\r\nconst target = process.env.NODE_ENV;\r\nlet baseURL ='';\r\nif (target == 'prod'){//生产环境\r\n    baseURL = process.env.BASE_URL\r\n}else if (target == 'k8s'){//k8s环境（准生产）\r\n    baseURL = process.env.BASE_URL\r\n}else{//本地\r\n     baseURL = \"http://localhost:8080/api/\"//内网测试\r\n}\r\nexport default baseURL;\r\n//关闭所有日志输出  上线时需要取消注释\r\n//console.log = function() {}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/rootPath.js","/**\r\n * 服务端返回的code和对应的映射；\r\n */\r\n///初始化code对应的映射\r\nconst OK  = true\r\nexport const backendResponseCode = {\r\n    //region OK : message\r\n    OK :               OK,\r\n    LOGIN_OK :         { code:OK, message: \"登录成功！\"},\r\n    DEAL_OK :          { code:OK, message: \"处理成功！\" },\r\n    OPEN_OK:           { code:OK, message: \"开通成功！\"},\r\n    SEND_OK:           { code:OK, message: \"发送成功！\"},\r\n    ACCEPT_OK:         { code:OK, message: \"受理成功！\"},\r\n    UPLOAD_OK:         { code:OK, message: \"上传成功！\"},\r\n    HANDLE_OK :        { code:OK, message: \"操作成功！\"},\r\n    UPDATE_OK :        { code:OK, message: \"修改成功！\"},\r\n    ADD_OK :           { code:OK, message: \"添加成功！\"},\r\n    DELETE_OK :        { code:OK, message: \"删除成功！\"},\r\n    ACTIVATE_OK :      { code:OK, message: \"激活成功！\"},\r\n    RESET_PAS_OK :     { code:OK, message: \"重置密码成功！\"},\r\n    LOGINOUT_OK :      { code:OK, message: \"退出登录成功！\"},\r\n    REMOVE_OK :        { code:OK, message: \"移除成功！\"},\r\n    CANCEL_OK :        { code:OK, message: \"解约成功！\"},\r\n    APPLY_OK :         { code:OK, message: \"申请成功！\"},\r\n    DO_NAME_OK:        { code:OK, message: \"实名制认证成功！\"},\r\n    EMAIL_SEND_OK:     { code:OK, message: \"邮件已发送至\"},\r\n    CODE_SEND_OK:      { code:OK, message: \"验证码已发送至\"},\r\n    EXP_SEND_OK:      { code:OK, message: \"批量导入成功\"},\r\n    CLEAR_OK:      { code:OK, message: \"请求受理成功\"},\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/codeParse.js","import Vue from 'vue';\r\n///界面上  分转元\r\nVue.filter('changePrice2money', function (s) {  //金额过滤器\r\n  if (s == null) return '0.00';\r\n  if(isNaN(Number(s,10))) return s;\r\n  // if (/[^0-9\\.]/.test(s)) return \"0.00\";\r\n  s = s.toString().replace(/\\$|\\,/g, '');\r\n  if (isNaN(s)) return '0.00';\r\n  var num = (s / 100).toFixed(4) + '';\r\n  var str = num.substring(0, num.lastIndexOf('.') + 3);\r\n  var intSum = str.substring(0, str.indexOf(\".\")).replace(/\\B(?=(?:\\d{3})+$)/g, ',');//取到整数部分\r\n  var dot = str.substring(str.length, str.indexOf(\".\"))//取到小数部分\r\n  return \"¥ \"+intSum + dot;\r\n})\r\nVue.filter('fmTime2', function (s) { //时分秒\r\n  if (s == null) return '';\r\n  var n = s.slice(11);\r\n  return n;\r\n})\r\n//枚举获取工具\r\nVue.prototype.getEnumsName= function (enums, code) {\r\n  if (code === undefined || code === null) {\r\n    return ''\r\n  }\r\n\r\n  for (let i = 0; i < enums.length; i++) {\r\n    let e = enums[i]\r\n    if (e && e.code === code) {\r\n      return e.name\r\n    }\r\n  }\r\n  return ''\r\n}\r\n///界面上  分转元\r\nVue.filter('changePrice2moneyNo', function (s) {  //金额过滤器\r\n    if (s == null) return '0.00';\r\n    // if (/[^0-9\\.]/.test(s)) return \"0.00\";\r\n    s = s.toString().replace(/\\$|\\,/g, '');\r\n    if (isNaN(s)) return '0.00';\r\n    var num = (s / 100).toFixed(4) + '';\r\n    var str = num.substring(0, num.lastIndexOf('.') + 3);\r\n    var intSum = str.substring(0, str.indexOf(\".\")).replace(/\\B(?=(?:\\d{3})+$)/g, ',');//取到整数部分\r\n    var dot = str.substring(str.length, str.indexOf(\".\"))//取到小数部分\r\n    return intSum + dot;\r\n})\r\n///界面上  元转分  可转百分比\r\nVue.filter('changePrice100money', function (s) {  //金额过滤器\r\n  if (s == null) return '0.00';\r\n  // if (/[^0-9\\.]/.test(s)) return \"0.00\";\r\n  s = s.toString().replace(/\\$|\\,/g, '');\r\n  if (isNaN(s)) return '0.00';\r\n  var num = (s * 100).toFixed(4) + '';\r\n  var str = num.substring(0, num.lastIndexOf('.') + 3);\r\n  var intSum = str.substring(0, str.indexOf(\".\")).replace(/\\B(?=(?:\\d{3})+$)/g, ',');//取到整数部分\r\n  var dot = str.substring(str.length, str.indexOf(\".\"))//取到小数部分\r\n  return intSum + dot;\r\n})\r\n\r\n/////2020-02-11T12:24:18.000+0000转化成正常格式\r\nVue.filter('renderTime', function (s) {  //时间戳转换日期格式\r\n  if (s == null || s == '') return '--';\r\n  var value = new Date(s).toJSON();\r\n  value = new Date(+new Date(value) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\\.[\\d]{3}Z/, '')\r\n  return value;\r\n})\r\n\r\n////将服务端给的为空数据展示为--\r\nVue.filter('changeNewline', function (s) {\r\n  if (s == null || s == undefined || s == '') return '--';\r\n  return s;\r\n})\r\n\r\n//界面上首文字带*\r\nVue.filter('changeCodeHide', function (s) {\r\n  if (s == null || s == '') return '--';\r\n  var reg = /^./\r\n  s = s.replace(reg, '*')\r\n  return s;\r\n})\r\n//身份证*\r\nVue.filter('changeCardHide', function (s) {\r\n  if (s == null || s == '') return '--';\r\n  var reg = /^(.{4})(?:\\d+)(.{4})$/\r\n  s = s.replace(reg, \"$1******$2\");\r\n  return s;\r\n})\r\n\r\n//手机号*\r\nVue.filter('changeTelHide', function (s) {\r\n  if (s == null || s == '') return '--';\r\n  var reg = /^(.{3})(?:\\d+)(.{4})$/\r\n  s = s.replace(reg, \"$1****$2\");\r\n  return s;\r\n})\r\n\r\nVue.filter('formatDate', function (s) {  //时间戳转换日期格式\r\n  if (s == null || s == '') return '--';\r\n  var value = JSON.parse(s)\r\n  var date = new Date(value) //时间戳为10位需*1000，时间戳为13位的话不需乘1000\r\n  var Y = date.getFullYear() + '-'\r\n  var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'\r\n  var D = date.getDate() + ' '\r\n  var h = date.getHours() + ':'\r\n  var m = date.getMinutes() + ':'\r\n  var ss = date.getSeconds()\r\n  return Y + M + D + h + m + ss;\r\n})\r\n//服务端时间格式化(yyyy-MM-dd hh:mm:ss)\r\nVue.filter('formatListTime', function (data) {\r\n  if (!data) return \"\";\r\n  let slice;\r\n  if (data == null || \"\" == data) {\r\n    return data;\r\n  } else if (data.length >= 20) {\r\n    slice = data.substring(0, 19);\r\n  } else {\r\n    slice = data;\r\n  }\r\n\r\n  var dateUtc = new Date(slice);\r\n  let date = new Date(dateUtc.getTime() - new Date().getTimezoneOffset() * 60000);\r\n\r\n  var YY = date.getFullYear() + '-';\r\n  var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';\r\n  var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());\r\n  var hh = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours());\r\n  var mm = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes());\r\n  var ss = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());\r\n  return YY + MM + DD + \" \" + hh + \":\" + mm + \":\" + ss;\r\n})\r\n\r\nVue.prototype.formatListTime = function (data) {\r\n  if (!data) return \"\";\r\n  let slice;\r\n  if (data == null || \"\" == data) {\r\n    return data;\r\n  } else if (data.length >= 20) {\r\n    slice = data.substring(0, 19);\r\n  } else {\r\n    slice = data;\r\n  }\r\n\r\n  var dateUtc = new Date(slice);\r\n  let date = new Date(dateUtc.getTime() - new Date().getTimezoneOffset() * 60000);\r\n\r\n  var YY = date.getFullYear() + '-';\r\n  var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';\r\n  var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());\r\n  var hh = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours());\r\n  var mm = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes());\r\n  var ss = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());\r\n  return YY + MM + DD + \" \" + hh + \":\" + mm + \":\" + ss;\r\n}\r\n//服务端时间格式化(yyyy-MM-dd)\r\nVue.filter('formatListTimeYMD', function (data) {\r\n  if (!data) return \"\";\r\n  let slice;\r\n  if (data.length >= 20) {\r\n    slice = data.substring(0, 19);\r\n  } else {\r\n    slice = data;\r\n  }\r\n\r\n  var dateUtc = new Date(slice);\r\n  let date = new Date(dateUtc.getTime() - new Date().getTimezoneOffset() * 60000);\r\n\r\n  var YY = date.getFullYear() + '-';\r\n  var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';\r\n  var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());\r\n\r\n  return YY + MM + DD;\r\n})\r\n\r\n// 定义时间戳转年月日\r\nVue.prototype.FormatDate = function (date, fmt) { // this.FormatDate(this.TempList[i].createTime,'yyyy-MM-dd hh:mm:ss')this.FormatDate(\"2018/07/09 14:13:11\",'yyyy-MM-dd hh:mm:ss')\r\n  const o = {\r\n    'M+': new Date(date).getMonth() + 1, // 月份\r\n    'd+': new Date(date).getDate(), // 日\r\n    'h+': new Date(date).getHours(), // 小时\r\n    'm+': new Date(date).getMinutes(), // 分\r\n    's+': new Date(date).getSeconds(), // 秒\r\n    'q+': Math.floor((new Date(date).getMonth() + 3) / 3), // 季度\r\n    S: new Date(date).getMilliseconds(), // 毫秒\r\n  };\r\n  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (`${new Date(date).getFullYear()}`).substr(4 - RegExp.$1.length));\r\n  for (const k in o) if (new RegExp(`(${k})`).test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length)));\r\n  return fmt;\r\n};\r\n\r\n///时间秒戳转化天时分秒\r\nVue.prototype.toDayHoursString = function (mss) {\r\n  var days = parseInt(mss / (1000 * 60 * 60 * 24));\r\n  var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n  var minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));\r\n  var seconds = parseInt((mss % (1000 * 60)) / 1000);\r\n  return days + \" 天 \" + hours + \" 时 \" + minutes + \" 分 \" + seconds + \" 秒 \";\r\n};\r\n\r\n\r\n//判断角色是否包含某个参数\r\nVue.prototype.isUserRoleSet = function (str, value) {\r\n\r\n  let go = false;\r\n  if (value) {\r\n    if (value.indexOf(0) != -1) {//这里做判断拦截为0所有权限都有就不必判断了\r\n      go = true\r\n    } else {//如果要检索的字符串值没有出现，则该方法返回 -1。\r\n      var listRole = value.split(',')\r\n      go = listRole.includes(str)\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\n//判断角色拥有的操作权限\r\nVue.prototype.roleSetOperations = function (routerPath, operation) {\r\n  let _operations = JSON.parse(window.localStorage.getItem('ms_operations'));\r\n  // console.error(_operations);\r\n  routerPath = routerPath.replace('/', '');\r\n  // console.error(\"path=>\",routerPath);\r\n  if (_operations && _operations[routerPath]) {\r\n    return _operations[routerPath].split(',').indexOf(operation) >= 0;\r\n  }\r\n  return false;\r\n}\r\n\r\n\r\nVue.prototype.isHkHost = () => {\r\n  let hostEnums = {\r\n    sh: ['172.16.1.180', '192.168.11.223'],\r\n    hk: ['172.16.1.35', '192.168.11.233', '192.168.23.84'],\r\n  }\r\n  // console.error(document.location.hostname)\r\n  return hostEnums.hk.indexOf(document.location.hostname) >= 0;\r\n}\r\n\r\n// 定义保留两位小数\r\nVue.prototype.ReturnFloat = function (value) { // 数字转化\r\n  const newvalue = Math.round(parseFloat(value) * 100) / 100;\r\n  const MathValue = newvalue.toString().split('.');\r\n  if (MathValue.length == 1) {\r\n    value = `${value.toString()}.00`;\r\n    return value;\r\n  }\r\n  if (MathValue.length > 1) {\r\n    if (MathValue[1].length < 2) {\r\n      value = `${value.toString()}0`;\r\n    }\r\n    return value;\r\n  }\r\n};\r\n\r\nfunction ReturnFloat(value) {\r\n  const newvalue = Math.round(parseFloat(value) * 100) / 100;\r\n  const MathValue = newvalue.toString().split('.');\r\n  if (MathValue.length == 1) {\r\n    value = `${value.toString()}.00`;\r\n    return value;\r\n  }\r\n  if (MathValue.length > 1) {\r\n    if (MathValue[1].length < 2) {\r\n      value = `${value.toString()}0`;\r\n    }\r\n    return value;\r\n  }\r\n}\r\n\r\nfunction formatFloat(f, digit) {\r\n  var m = Math.pow(10, digit);\r\n  return Math.round(f * m, 10) / m;\r\n}\r\n\r\n// 精度 元转分\r\nVue.prototype.regYuanToFen = function (fen) {\r\n  var num = fen;\r\n  num = formatFloat(fen  * 100, 0)\r\n  // num = fen * 100;\r\n   // num += '';\r\n  // var reg = num.indexOf('.') > -1 ? /(\\d{1,3})(?=(?:\\d{3})+\\.)/g : /(\\d{1,3})(?=(?:\\d{3})+$)/g;\r\n  // num = ReturnFloat(num)\r\n  return num\r\n}\r\n\r\n// 精度 分转元\r\nVue.prototype.regFenToYuan = (fen) => {\r\n  var num = fen;\r\n  num = formatFloat(fen * 0.01, 4);//(fen /100)//*0.01;\r\n  num += '';\r\n  var reg = num.indexOf('.') > -1 ? /(\\d{1,3})(?=(?:\\d{3})+\\.)/g : /(\\d{1,3})(?=(?:\\d{3})+$)/g;\r\n  num = (num.replace(reg, '$1'));\r\n  num = ReturnFloat(num)\r\n  //return Number(num)\r\n  return num;\r\n};\r\n\r\n// 精度 分转元\r\nVue.prototype.regFenToYuanOne = (fen) => {\r\n  var num = fen;\r\n  num = fen / 100 ;//(fen /100)//*0.01;\r\n  num += '';\r\n  return num;\r\n};\r\n\r\n\r\n//只能input输入保留两位小数\r\nVue.prototype.limitFloat = (val) => {\r\n  let sNum = val.toString(); //先转换成字符串类型\r\n  if (sNum.indexOf('.') == 0) {//第一位就是 .\r\n    console.log('first str is .')\r\n    sNum = '0' + sNum\r\n  }\r\n  sNum = sNum.replace(/[^\\d.]/g, \"\");  //清除“数字”和“.”以外的字符\r\n  sNum = sNum.replace(/\\.{2,}/g, \".\"); //只保留第一个. 清除多余的\r\n  sNum = sNum.replace(\".\", \"$#$\").replace(/\\./g, \"\").replace(\"$#$\", \".\");\r\n  sNum = sNum.replace(/^(\\-)*(\\d+)\\.(\\d\\d).*$/, '$1$2.$3');//只能输入两个小数\r\n  //以上已经过滤，此处控制的是如果没有小数点，首位不能为类似于 01、02的金额\r\n  if (sNum.indexOf(\".\") < 0 && sNum != \"\") {\r\n    sNum = parseFloat(sNum);\r\n  }\r\n  return sNum\r\n}\r\n//只能input输入保留四位位小数\r\nVue.prototype.limitFloat4 = (val) => {\r\n  let sNum = val.toString(); //先转换成字符串类型\r\n  if (sNum.indexOf('.') == 0) {//第一位就是 .\r\n    sNum = '0' + sNum\r\n  }\r\n  sNum = String(sNum).replace(/^(.*\\..{4}).*$/, \"$1\");\r\n  // sNum = parseFloat(sNum); // number = 12.3321\r\n  return sNum\r\n}\r\n\r\n//只能input输入保留8位位小数\r\nVue.prototype.limitFloat8 = (val) => {\r\n  let sNum = val.toString(); //先转换成字符串类型\r\n  if (sNum.indexOf('.') == 0) {//第一位就是 .\r\n    sNum = '0' + sNum\r\n  }\r\n  sNum = String(sNum).replace(/^(.*\\..{8}).*$/, \"$1\");\r\n  // sNum = parseFloat(sNum); // number = 12.3321\r\n  return sNum\r\n}\r\n\r\n//只能input输入保留7位位小数\r\nVue.prototype.limitFloat7 = (val) => {\r\n  let sNum = val.toString(); //先转换成字符串类型\r\n  if (sNum.indexOf('.') == 0) {//第一位就是 .\r\n    sNum = '0' + sNum\r\n  }\r\n  sNum = String(sNum).replace(/^(.*\\..{7}).*$/, \"$1\");\r\n  // sNum = parseFloat(sNum); // number = 12.3321\r\n  return sNum\r\n}\r\n\r\n/* 获取URL参数 */\r\nVue.prototype.getURLParam = function (parameter, Back) {\r\n  let l = '';\r\n  const m = Back;\r\n  if (m.indexOf('?') > -1) {\r\n    const o = m.substr(m.indexOf('?') + 1);\r\n    const j = o.split('&').concat(o.split('?'));\r\n    for (let p = 0; p < j.length; p++) {\r\n      if (j[p].indexOf(`${parameter}=`) === 0) {\r\n        const i = j[p].split('=');\r\n        l = i[1];\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  return l;\r\n};\r\n\r\n\r\n/* Input验证 */\r\nVue.prototype.VeryFy = function (name, type, notice) {\r\n  const vm = this;\r\n  let go = true;\r\n  if (type == 'tel') { // 手机号码\r\n    name = name.replace(/\\s+/g, '').replace(/-/g, '');\r\n    if (!(/^1[3|4|5|6|7|8|9]\\d{9}$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'num') { // 数字类型\r\n    name = name.replace(/\\s+/g, '').replace(/-/g, '');\r\n    if (!(/^[0-9]*$/i.test(name)) && name.length > 0) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'int') { // 正整数\r\n    name = name.toString().replace(/\\s+/g, '').replace(/-/g, '');\r\n    if (!(/^([1-9][0-9]*)$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'long') { // 正数\r\n    name = name.replace(/\\s+/g, '').replace(/-/g, '');\r\n    if (!(/^[0](\\\\.[0-9]*)|[1-9][0-9]*(\\\\.[0-9]*)?$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'extand') { // 数字和字母\r\n    name = name.replace(/\\s+/g, '').replace(/-/g, '');\r\n    if (!(/^[A-Za-z0-9]+$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'email') { // 邮箱\r\n    if (!(/^([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'pwd') { // 密码 数字+大小字母 且(6-20)\r\n\r\n  } else if (type == 'cvv2') { // CVV2码\r\n    if (!(/^[0-9]*$/i.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'validity') { // 卡有效期\r\n    if (!(/^[0-9]*$/i.test(name))) {\r\n      vm.$toast(notice);\r\n      go = false;\r\n    } else if (parseInt(name.substr(0, 2)) > 12) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'idCardNo') { // 身份证\r\n    var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;\r\n    if (!idcard_patter.test(name)) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'postCode') { // 邮箱编码\r\n    if (!(/^[0-9]{6}$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'name') { // 中文且长度在2到15位之间\r\n    if (!(/^[\\u4E00-\\u9FA5\\uf900-\\ufa2d·s]{2,20}$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'extandund') { // 数字、字母、下划线\r\n    if (!(/^\\w+$/.test(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'length') { // 内容不能为空\r\n    if (!name) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type == 'url') { // 内容不能为空\r\n    var url = /^(?:(http|https|ftp):\\/\\/)?((?:[\\w-]+\\.)+[a-z0-9]+)((?:\\/[^/?#]*)+)?(\\?[^#]+)?(#.+)?$/i\r\n    if (!(url.exec(name))) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n} else if (type == 'IP') { // IP\r\n      if (/^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$/.test(myArray[i]) && (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256)) {\r\n          vm.$message.error(notice);\r\n          go = false;\r\n      }\r\n  }\r\n  return go;\r\n};\r\n\r\n/// 返回手机号的运营商，1移动 2联通 3电信\r\nVue.prototype.getMobileType = function (mobile) {\r\n  if (mobile) {\r\n    var ydExp = /^1(3[4-9]|5[012789]|8[23478]|4[7]|7[8])\\\\d{8}$/\r\n    var ltExp = /^1(3[0-2]|5[56]|8[56]|4[5]|7[6])\\\\d{8}$/\r\n    var dxExp = /^1(3[3])|(8[019])\\\\d{8}$/\r\n    if (ydExp.test(mobile)) {\r\n      return '1'\r\n    } else if (ltExp.test(mobile)) {\r\n      return '2'\r\n    } else if (dxExp.test(mobile)) {\r\n      return '3'\r\n    }\r\n  }\r\n  return 0;\r\n}\r\n// 比较两个数字或者日期的大小,num1 > num2为false\r\nVue.prototype.Validate = function (num1, num2, type, notice) {\r\n  const vm = this;\r\n  let go = true;\r\n  if (type === 'num') {\r\n    if (num1 > num2) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  } else if (type === 'date') {\r\n    if (num1 > num2) {\r\n      vm.$message.error(notice);\r\n      go = false;\r\n    }\r\n  }\r\n  return go;\r\n};\r\n\r\n// 定义两个object比较方法\r\nVue.prototype.ObjEqual = function (a, b) {\r\n  if (a == b) return true;\r\n  if (typeof (b) === 'undefined' || b == null || typeof (b) !== 'object') return false;\r\n  let length = 0;\r\n  let\r\n    length1 = 0;\r\n  for (var ele in a) {\r\n    length++;\r\n  }\r\n  for (var ele in b) {\r\n    length1++;\r\n  }\r\n  if (length != length1) return false;\r\n  if (b.constructor == a.constructor) {\r\n    for (var ele in a) {\r\n      if (typeof (a[ele]) === 'object') {\r\n        if (!a[ele].equals(b[ele])) {\r\n          return false;\r\n        }\r\n      } else if (typeof (a[ele]) === 'function') {\r\n        if (!a[ele].toString().equals(b[ele].toString())) {\r\n          return false;\r\n        }\r\n      } else if (a[ele] != b[ele]) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n  return false;\r\n};\r\n\r\n// 判断该字符串是否是json格式\r\nVue.prototype.isJSON = function (str) {\r\n  if (typeof str === 'string') {\r\n    try {\r\n      const obj = JSON.parse(str);\r\n      if (typeof obj === 'object' && obj) {\r\n        return true;\r\n      }\r\n      return false;\r\n    } catch (e) {\r\n      console.log(`error：${str}!!!${e}`);\r\n      return false;\r\n    }\r\n  }\r\n};\r\n\r\n\r\n// 判断对象字符串数组是否为空\r\nVue.prototype.isBlank = function (str) {\r\n  if (Object.prototype.toString.call(str) === '[object Undefined]') { // 空\r\n    return true;\r\n  }\r\n  if (\r\n    Object.prototype.toString.call(str) === '[object String]'\r\n    || Object.prototype.toString.call(str) === '[object Array]') { // 字条串或数组\r\n    return str.length == 0;\r\n  }\r\n  if (Object.prototype.toString.call(str) === '[object Object]') {\r\n    return JSON.stringify(str) == '{}';\r\n  }\r\n  return true;\r\n};\r\n\r\n// 根据环境，自动判断跳转页面方法\r\nVue.prototype.UrlTo = function (href) {\r\n  if (window.location.href.indexOf('localhost') > -1) { // 本地测试\r\n    href = window.location.origin + href;\r\n  } else { // 线上环境/#/Profit/ProfitIndex,/h5/#/Profit/ProfitIndex\r\n    href = `${window.location.origin}/h5${href}`;\r\n  }\r\n  window.location.href = href;\r\n};\r\n\r\n////过滤表情\r\nVue.prototype.isEmojiCharacter = function (substring) {\r\n  for (var i = 0; i < substring.length; i++) {\r\n    var hs = substring.charCodeAt(i);\r\n    if (0xd800 <= hs && hs <= 0xdbff) {\r\n      if (substring.length > 1) {\r\n        var ls = substring.charCodeAt(i + 1);\r\n        var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;\r\n        if (0x1d000 <= uc && uc <= 0x1f77f) {\r\n          return true;\r\n        }\r\n      }\r\n    } else if (substring.length > 1) {\r\n      var ls = substring.charCodeAt(i + 1);\r\n      if (ls == 0x20e3) {\r\n        return true;\r\n      }\r\n    } else {\r\n      if (0x2100 <= hs && hs <= 0x27ff) {\r\n        return true;\r\n      } else if (0x2B05 <= hs && hs <= 0x2b07) {\r\n        return true;\r\n      } else if (0x2934 <= hs && hs <= 0x2935) {\r\n        return true;\r\n      } else if (0x3297 <= hs && hs <= 0x3299) {\r\n        return true;\r\n      } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030\r\n        || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b\r\n        || hs == 0x2b50) {\r\n        return true;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n////汉字与字符的转换\r\nVue.prototype.strlen = function (str) {\r\n  let len = 0;\r\n  for (let i = 0; i < str.length; i++) {\r\n    const c = str.charCodeAt(i);\r\n    // 单字节加1\r\n    if ((c >= 0x0001 && c <= 0x007e) || (c >= 0xff60 && c <= 0xff9f)) {\r\n      len++;\r\n    } else {\r\n      len += 2;\r\n    }\r\n  }\r\n  return len;\r\n}\r\n\r\n//获取随机字符串\r\nVue.prototype.randomString = function (len) {\r\n  len = len || 32;\r\n  var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';\r\n  /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\r\n  var maxPos = $chars.length;\r\n  var pwd = '';\r\n  for (let i = 0; i < len; i++) {\r\n    pwd += $chars.charAt(Math.floor(Math.random() * maxPos));\r\n  }\r\n  return pwd;\r\n}\r\n\r\n//刷新页面\r\nVue.prototype.refresh = function () {\r\n  const ua = window.navigator.userAgent.toLowerCase();\r\n  setTimeout(() => {\r\n    if (ua.match(/MicroMessenger/i) == 'micromessenger') {\r\n      const url = window.location.href;\r\n      if (url.indexOf('?') != '-1') {\r\n        window.location.reload(`${url}&${Date.parse(new Date())}`);\r\n      } else {\r\n        window.location.reload(`${url}?${Date.parse(new Date())}`);\r\n      }\r\n    } else {\r\n      window.location.reload();\r\n    }\r\n  }, 500);\r\n}\r\n\r\n//是否定义,如果参数不等于undefined或者为空，返回true\r\nVue.prototype.isDef = function (v) {\r\n  return v !== undefined && v !== null;\r\n}\r\n\r\n// 判断是否为对象\r\nVue.prototype.isObject = function (obj) {\r\n  return obj !== null && typeof obj === \"object\";\r\n}\r\n//只能输正整数\r\nVue.prototype.idOnlyNum = function (value) {\r\n  value = value.replace(/[^0-9]/g, '');\r\n  return value\r\n};\r\n/* 获取当前环境：\r\n    系统环境： iOS Android 微信 qq等\r\n    浏览器环境 微信内置浏览器、QQ内置浏览器、正常浏览器\r\n    是否app内打开\r\n*/\r\nvar isBrowser = {\r\n  versions: function () {\r\n    const ua = navigator.userAgent.toLowerCase(); //获取浏览器标识并转换为小写\r\n    return {\r\n      trident: ua.indexOf(\"Trident\") > -1,//IE内核\r\n      presto: ua.indexOf(\"Presto\") > -1,//opera内核\r\n      webKit: ua.indexOf(\"AppleWebKit\") > -1,//苹果、谷歌内核\r\n      gecko: ua.indexOf(\"Gecko\") > -1 && u.indexOf(\"KHTML\") == -1,// 火狐内核\r\n      isIos: !!navigator.userAgent.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/), //是否苹果\r\n      isAndroid: ua.indexOf('android') > -1 || ua.indexOf('adr') > -1, //是否安卓\r\n      isMobile: !!ua.match(/AppleWebKit.*Mobile.*/) || !!ua.match(/AppleWebKit/),//是否为移动终端\r\n      isWeiXin: ua.match(/MicroMessenger/i) == \"micromessenger\", //是否微信\r\n      isQQ: ua.indexOf(' qq/') > -1, //是否QQ\r\n      isApp: ua.indexOf('isApp') > -1, //是否某个应用\r\n      isWebApp: ua.indexOf('Safari') == -1, //是否web应该程序，没有头部与底部\r\n      isQQbrw: ua.indexOf(\"MQQBrowser\") > -1,//QQ浏览器\r\n      ucLowEnd: ua.indexOf(\"UCWEB7.\") > -1, // UC判断\r\n      ucSpecial: ua.indexOf(\"rv:1.2.3.4\") > -1, // uc补充判断\r\n    };\r\n  }\r\n}\r\nVue.prototype.isBrowser = isBrowser.versions()\r\n\r\nVue.prototype.$$ = function (selector) {\r\n  return document.querySelector(selector)\r\n}\r\nVue.prototype.$$$ = function (selector) {\r\n  return document.querySelectorAll(selector)\r\n}\r\n\r\n\r\n/**Money格式化 取精度问题  num是你的数据, calc是你除去的数值，可以为空, scale是你要精确到小数点后面几位（其中calc和scale都可以为空，默认2位）**/\r\nfunction formatMoney(num, calc, scale) { /**1000000, 100   => 10,000.00**/\r\n  if (num == null || num == undefined || num == '') {\r\n    num = 0;\r\n  }\r\n  var NewNum = '', total, t, left = 0, last = '.00';\r\n  if (!num) {\r\n    NewNum = '';\r\n  }\r\n  num = Number(num);\r\n  if (!calc) {\r\n    calc = 1;\r\n  }\r\n  if (!scale) {\r\n    scale = 2;\r\n  }\r\n  num = (num / calc).toFixed(scale).toString();\r\n  if (num.split('.').length > 1) {\r\n    last = '.' + num.split('.')[1];\r\n    if (last.length == 2) {\r\n      last += '0';\r\n    }\r\n    num = num.split('.')[0];\r\n  }\r\n  total = num.length;\r\n  t = parseInt(total / 3);\r\n  if (t == 0) {\r\n    NewNum = num + last;\r\n  } else {\r\n    left = total - t * 3;\r\n    if (left > 0) {\r\n      NewNum += num.substr(0, left) + ',';\r\n      for (var i = 0; i < t; i++) {\r\n        NewNum += num.substr(i * 3 + left, 3);\r\n        if (i < t - 1) {\r\n          NewNum += ','\r\n        }\r\n      }\r\n    } else {\r\n      for (var i = 0; i < t; i++) {\r\n        NewNum += num.substr(i * 3, 3);\r\n        if (i < t - 1) {\r\n          NewNum += ','\r\n        }\r\n      }\r\n    }\r\n    NewNum += last;\r\n  }\r\n  return NewNum;\r\n}\r\n\r\n////下载\r\nVue.prototype.Downloads = function (res, fileName) {\r\n  const blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'})\r\n  const downloadElement = document.createElement('a')\r\n  const href = window.URL.createObjectURL(blob);\r\n  downloadElement.href = href\r\n  downloadElement.download = fileName;\r\n  document.body.appendChild(downloadElement)\r\n  downloadElement.click()\r\n  document.body.removeChild(downloadElement) // 下载完成移除元素\r\n  window.URL.revokeObjectURL(href) // 释放掉blob对象\r\n};\r\nVue.prototype.BasicData={\r\n  serverData:[]\r\n}\r\n\r\n//region/***************************一些枚举***************************/\r\n//region 角色枚举\r\nVue.prototype.userType = {\r\n  systemManger: '11',// 11 系统管理员\r\n  operatDirector: '12',// 12 运营主管\r\n  operatManger: '13',// 13 运营录入员\r\n  operatAudit: '14',// 14 运营审核员\r\n  salesManager: '15',// 15 销售经理\r\n};\r\n//endregion\r\n//region 账户类型枚举\r\nVue.prototype.accountTypes = [\r\n{name: \"信用卡\", code: '02'},\r\n{name: \"借记卡\", code: '01'},\r\n{name: \"存折\", code: '03'},\r\n{name: \"对公账户\", code: '04'},\r\n];\r\n//endregion\r\n\r\n//region 发送短信用途\r\nVue.prototype.usageEnum = {\r\n  LOGIN: 1000,\r\n  RESET_PASSWORD: 1001,\r\n  MODIFY_MER_BASIC_INFO: 1100,\r\n  MODIFY_MER_SETTLE: 1101,\r\n  TXN_REFUND: 1200,\r\n  TXN_ADJUST: 1201,\r\n  TXN_FORCE_REFUND: 1202,\r\n  TXN_NETTING: 1203,\r\n};\r\n//endregion\r\n\r\n//region 商户状态枚举\r\nVue.prototype.MerchantStatus = {\r\n  NotComplete: -1,\r\n  NoSubmit: 0,\r\n  InReview: 1,\r\n  Opening: 2,\r\n  Reject: 3,\r\n  Closed: 4,\r\n  Cancellation: 5,\r\n  NotActive: 6\r\n};\r\n//endregion\r\n\r\n//region 权限操作枚举\r\nVue.prototype.operationEnums = {\r\n  read: 'read',\r\n  create: 'create',\r\n  delete: 'delete',\r\n  update: 'update',\r\n  apply: 'apply',\r\n  approve: 'approve',\r\n  close: 'close',\r\n  export: 'export',\r\n  upload: 'upload',\r\n  cash: 'cash',\r\n  dispute: 'dispute',\r\n  adjust: 'adjust',\r\n  refuse: 'refuse',\r\n  chargeback: 'chargeback',\r\n  cancel: 'cancel',\r\n  tochargeback: 'tochargeback',\r\n  payout: 'payout',\r\n};\r\n//endregion\r\n\r\n//region 交易类型枚举\r\nVue.prototype.txnTypeItems = [\r\n  {name: \"提款\", code: 'WD'},\r\n  {name: \"支付\", code: 'NT'},\r\n  {name: \"退款\", code: 'RF'},\r\n  {name: \"拒付\", code: 'CB'},\r\n  {name: \"调查\", code: 'DS'},\r\n  {name: \"下发\", code: 'BF'},\r\n  {name: \"充值\", code: 'DP'},\r\n  {name: \"调账\", code: 'AJ'},\r\n  {name: \"代付\", code: 'BT'},\r\n];\r\n//endregion\r\n\r\n//region 币种枚举\r\nVue.prototype.currency = {\r\n  CNY: {name: \"人民币\", code: \"CNY\"},\r\n  AED: {name: \"阿联酋迪拉姆\", code: \"AED\"},\r\n  AUD: {name: \"澳大利亚元\", code: \"AUD\"},\r\n  BRL: {name: \"巴西里亚尔\", code: \"BRL\"},\r\n  CAD: {name: \"加拿大元\", code: \"CAD\"},\r\n  CHF: {name: \"瑞士法郎\", code: \"CHF\"},\r\n  DKK: {name: \"丹麦克朗\", code: \"DKK\"},\r\n  EUR: {name: \"欧元\", code: \"EUR\"},\r\n  GBP: {name: \"英镑\", code: \"GBP\"},\r\n  HKD: {name: \"港币\", code: \"HKD\"},\r\n  IDR: {name: \"印尼卢比\", code: \"IDR\"},\r\n  INR: {name: \"印度卢比\", code: \"INR\"},\r\n  JPY: {name: \"日元\", code: \"JPY\"},\r\n  KRW: {name: \"韩国元\", code: \"KRW\"},\r\n  MOP: {name: \"澳门元\", code: \"MOP\"},\r\n  MYR: {name: \"林吉特\", code: \"MYR\"},\r\n  NOK: {name: \"挪威克朗\", code: \"NOK\"},\r\n  NZD: {name: \"新西兰元\", code: \"NZD\"},\r\n  PHP: {name: \"菲律宾比索\", code: \"PHP\"},\r\n  RUB: {name: \"卢布\", code: \"RUB\"},\r\n  SAR: {name: \"沙特里亚尔\", code: \"SAR\"},\r\n  SEK: {name: \"瑞典克朗\", code: \"SEK\"},\r\n  SGD: {name: \"新加坡元\", code: \"SGD\"},\r\n  THB: {name: \"泰国铢\", code: \"THB\"},\r\n  TRY: {name: \"土耳其里拉\", code: \"TRY\"},\r\n  TWD: {name: \"新台币\", code: \"TWD\"},\r\n  USD: {name: \"美元\", code: \"USD\"},\r\n  ZAR: {name: \"南非兰特\", code: \"ZAR\"},\r\n  MDL: {name: \"摩尔多瓦列伊\", code: \"MDL\"},\r\n};\r\n//endregion\r\n\r\n//region 服务码\r\nVue.prototype.ServiceCode = {\r\n  '1001': {name: \"信用卡支付(WEB)\", code: \"1001\"},\r\n  '1002': {name: \"信用卡支付(直连)\", code: \"1002\"},\r\n  '1003': {name: \"信用卡支付(3D)\", code: \"1003\"},\r\n  // '1004': {name: \"二维码扫码(主扫)\", code: \"1004\"},\r\n  '1004': {name: \"银联在线(线上模式)\", code: \"1004\"},\r\n  // '1005': {name: \"钱包支付(小程序)\", code: \"1005\"},\r\n  '1005': {name: \"银联扫码（客户端主动扫模式）(线上模式)\", code: \"1005\"},\r\n  '1006': {name: \"微信-扫码，小程序，公众号唤起模式(线上模式)\", code: \"1005\"},\r\n  '1023': {name: \"3D验证服务\", code: \"1023\"},\r\n  '1024': {name: \"汇率转换服务\", code: \"1024\"},\r\n};\r\n//endregion\r\n\r\n//region 产品枚举\r\nVue.prototype.Product = {\r\n  '1-NP-01': {name: \"国际信用卡支付\", code: \"1-NP-01\"},\r\n  // '1-NP-02': {name: \"国际二维码支付\", code: \"1-NP-02\"},\r\n  '1-NP-02': {name: \"银联国际支付\", code: \"1-NP-02\"},\r\n  // '1-NP-03': {name: \"国际钱包支付\", code: \"1-NP-03\"},\r\n  '1-NP-03': {name: \"微信国际支付\", code: \"1-NP-03\"},\r\n  '1-NP-06': {name: \"网银支付\", code: \"1-NP-06\"},\r\n  '1-NP-04': {name: \"二维码支付\", code: \"1-NP-04\"},\r\n  '1-NP-05': {name: \"钱包支付\", code: \"1-NP-05\"},\r\n  '1-AP-07': {name: \"国际信用卡预授权\", code: \"1-AP-07\"},\r\n  '1-RP-08': {name: \"国际信用卡订阅\", code: \"1-RP-08\"},\r\n  '2-TF-09': {name: \"SWIFT转账\", code: \"2-TF-09\"},\r\n  '2-TF-10': {name: \"银行转账\", code: \"2-TF-10\"},\r\n};\r\n//endregion\r\n\r\n//region 子产品枚举\r\nVue.prototype.SubProduct = {\r\n  'VISA': {name: \"VISA\", code: \"VISA\"},\r\n  'MASTER': {name: \"MASTER\", code: \"MASTER\"},\r\n  'JCB': {name: \"JCB\", code: \"JCB\"},\r\n  'DISCOVER': {name: \"DISCOVER\", code: \"DISCOVER\"},\r\n  'PRI_INSIDE': {name: \"国内对私\", code: \"PRI_INSIDE\"},\r\n  'PUB_INSIDE': {name: \"国内对公\", code: \"PUB_INSIDE\"},\r\n  'SCAN_CODE_PAY': {name: \"扫码支付\", code: \"SCAN_CODE_PAY\"},\r\n  'MINI_PROGRAM_PAY': {name: \"小程序支付\", code: \"MINI_PROGRAM_PAY\"},\r\n  'FIXED_CODE_PAY': {name: \"固码支付\", code: \"FIXED_CODE_PAY\"},\r\n  'H5_PAY': {name: \"H5支付\", code: \"H5_PAY\"},\r\n  'ONLINEBANK_PAY': {name: \"银联在线\", code: \"ONLINEBANK_PAY\"},\r\n  'QRCODE_PAY': {name: \"条码支付\", code: \"QRCODE_PAY\"},\r\n  'JSAPI_PAY': {name: \"公众号支付\", code: \"JSAPI_PAY\"},\r\n};\r\n//endregion\r\n\r\n\r\nDate.prototype.Format = function (fmt) {\r\n  var o = {\r\n    \"M+\": this.getMonth() + 1, //月份\r\n    \"d+\": this.getDate(), //日\r\n    \"H+\": this.getHours(), //小时\r\n    \"m+\": this.getMinutes(), //分\r\n    \"s+\": this.getSeconds(), //秒\r\n    \"q+\": Math.floor((this.getMonth() + 3) / 3), //季度\r\n    \"S\": this.getMilliseconds() //毫秒\r\n  };\r\n  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n  for (var k in o)\r\n    if (new RegExp(\"(\" + k + \")\").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n  return fmt;\r\n}\r\n//获取前一天日期\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/common.js","import Vue from 'vue';\r\nimport {session} from '@/utils/utils'\r\n\r\n// 是否有权限\r\nconst hasPermission = userPermission => {\r\n    let userPermissionList = Array.isArray(userPermission) ? userPermission : [userPermission];\r\n    // 当前用户的权限列表\r\n    //const data =  btnPermissions({   });\r\n    const permissionButton = session.get(\"permissionButton\");//服务端那边下发存储在本地的数据\r\n    if(!permissionButton){\r\n        return false;\r\n    }\r\n    let permissionList = JSON.parse(permissionButton);\r\n    return userPermissionList.some(e => permissionList.includes(e));\r\n};\r\n\r\n// 指令\r\nVue.directive('per', {\r\n    inserted: (el, binding, vnode) => {\r\n        let flag = hasPermission(binding.value);\r\n        if (!flag) {\r\n            el.parentNode.removeChild(el);\r\n        }\r\n    }\r\n});\r\n\r\n// 全局判断方法\r\nVue.prototype.$_has = hasPermission;\r\n\r\nlet has = hasPermission;\r\nexport default has;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/btnPermissions.js","import \"babel-polyfill\"     // 必须在最开始引入垫片\r\nimport Vue from 'vue';\r\nimport App from './App.vue';\r\nimport router from './router';\r\nimport ElementUI from 'element-ui';\r\nimport axios from './utils/axios'\r\nimport commons from './utils/common';// / 公共js\r\nimport has from './utils/btnPermissions';\r\nimport {backendResponseCode} from './utils/codeParse';// / 公共js\r\n\r\n\r\nimport 'default-passive-events'\r\nimport 'element-ui/lib/theme-chalk/index.css'; // 默认主题\r\n// import './assets/css/theme-green/index.css'; // 浅绿色主题\r\nimport \"../static/css/reset.css\";\r\nimport \"../static/css/index.css\";\r\nimport \"../static/css/mixin.css\";\r\nimport \"../static/css/styleChange.css\";    /* 修改elementUi的样式 */\r\nimport \"../static/css/color-dark.css\";     /* 深色主题 */\r\n\r\n// fade/zoom 等\r\nimport 'element-ui/lib/theme-chalk/base.css';\r\n// collapse 展开折叠\r\nimport CollapseTransition from 'element-ui/lib/transitions/collapse-transition';\r\nVue.component(CollapseTransition.name, CollapseTransition)\r\n\r\nVue.config.productionTip = false;\r\nVue.use(ElementUI, {\r\n    size: 'small'\r\n});\r\n///引入公共枚举\r\nVue.prototype.backendResponseCode = backendResponseCode\r\n// 富文本编辑器\r\nimport VueQuillEditor from 'vue-quill-editor'\r\nimport 'quill/dist/quill.core.css'\r\nimport 'quill/dist/quill.snow.css'\r\nimport 'quill/dist/quill.bubble.css'\r\nVue.use(VueQuillEditor);\r\n\r\nnew Vue({\r\n    has,\r\n    router,\r\n    render: h => h(App)\r\n}).$mount('#app');\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","import Vue from 'vue';\nimport Router from 'vue-router';\nimport {getStore} from '@/utils/utils'\n\nconst index = resolve => require.ensure([], () => resolve(require(\"@/pages/index.vue\")));\nconst login = resolve => require.ensure([], () => resolve(require(\"@/pages/Login.vue\")));\nconst home = resolve => require.ensure([], () => resolve(require(\"@/components/common/Home.vue\")));\n\nconst allFormsList = resolve => require.ensure([], () => resolve(require(\"@/pages/forms/allFormsList.vue\")));\nconst eachFormsList = resolve => require.ensure([], () => resolve(require(\"@/pages/forms/eachFormsList.vue\")));\nconst historyCount = resolve => require.ensure([], () => resolve(require(\"@/pages/forms/HistoryCount.vue\")));\nconst historyPrice = resolve => require.ensure([], () => resolve(require(\"@/pages/forms/HistoryPrice.vue\")));\nconst playerList = resolve => require.ensure([], () => resolve(require(\"@/pages/player/playerList.vue\")));\nconst sendEmail = resolve => require.ensure([], () => resolve(require(\"@/pages/player/sendEmail.vue\")));\nconst emailList = resolve => require.ensure([], () => resolve(require(\"@/pages/player/emailList.vue\")));\nconst notice = resolve => require.ensure([], () => resolve(require(\"@/pages/notice/notice.vue\")));\nconst noticeHistory = resolve => require.ensure([], () => resolve(require(\"@/pages/notice/noticeHistory.vue\")));\nconst server = resolve => require.ensure([], () => resolve(require(\"@/pages/server/server.vue\")));\nconst serverSub = resolve => require.ensure([], () => resolve(require(\"@/pages/server/serverSub.vue\")));\nconst addServer = resolve => require.ensure([], () => resolve(require(\"@/pages/server/addServer.vue\")));\nconst addRegion = resolve => require.ensure([], () => resolve(require(\"@/pages/server/addRegion.vue\")));\nconst feedbackList = resolve => require.ensure([], () => resolve(require(\"@/pages/feedback/feedbackList.vue\")));\nconst userList = resolve => require.ensure([], () => resolve(require(\"@/pages/user/userList.vue\")));\nconst addUser = resolve => require.ensure([], () => resolve(require(\"@/pages/user/addEditUser.vue\")));\nconst editUser = resolve => require.ensure([], () => resolve(require(\"@/pages/user/editUser.vue\")));\n\nconst forumManage = resolve => require.ensure([], () => resolve(require(\"@/pages/forum/forumManage.vue\")));\nconst forumReply = resolve => require.ensure([], () => resolve(require(\"@/pages/forum/forumReply.vue\")));\nconst activityList = resolve => require.ensure([], () => resolve(require(\"@/pages/activity/activityList.vue\")));\n\nconst indexChannel = resolve => require.ensure([], () => resolve(require(\"@/pages/channel/indexChannel.vue\")));\nconst channelRecharge = resolve => require.ensure([], () => resolve(require(\"@/pages/channel/channelRecharge.vue\")));\n\nVue.use(Router);\n\nlet router = new Router({\n  routes: [\n    {\n      path: '/',\n      redirect: '/login'\n    },\n    {\n      path: '/home',\n      component: home,\n      meta: {title: '主框架'},\n    },\n    {\n      path: '/',\n      component: home,\n      meta: {title: '主框架'},\n      children: [\n        {\n          path: '/index', component: index, meta: {title: '系统首页'}\n        },{\n          path: '/channel', component: indexChannel, meta: {title: '渠道统计'}\n        }, {\n          path: '/404', component: () => import('../pages/404.vue'), meta: {title: '404'}\n        }, {\n          path: '/allFormsList', component: allFormsList, meta: {title: '总统计'}\n        }, {\n          path: '/eachFormsList', component: eachFormsList, meta: {title: '各服状态', keepAlive: true}\n        }, {\n          path: '/historyCount', component: historyCount, meta: {title: '历史新增'}\n        }, {\n          path: '/historyPrice', component: historyPrice, meta: {title: '充值记录'}\n        }, {\n          path: '/playerList', component: playerList, meta: {title: '玩家列表'}\n        }, {\n          path: '/sendEmail', component: sendEmail, meta: {title: '群发邮件'}\n        }, {\n          path: '/emailList', component: emailList, meta: {title: '邮件查询'}\n        },{\n          path: '/notice', component: notice, meta: {title: '发布公告'}\n        },{\n          path: '/noticeHistory', component: noticeHistory, meta: {title: '公告历史'}\n        },{\n          path: '/server', component: server, meta: {title: '分区管理'}\n        },{\n          path: '/addServer', component: addServer, meta: {title: '服务器新增'}\n        },{\n          path: '/feedbackList', component: feedbackList, meta: {title: '意见反馈'}\n        },{\n          path: '/userList', component: userList, meta: {title: '用户列表'}\n        },{\n          path: '/addUser', component: addUser, meta: {title: '用户创建'}\n        }, {\n          path: '/editUser', component: editUser, meta: {title: '修改用户权限'}\n        }, {\n          path: '/forumManage', component: forumManage, meta: {title: '管理'}\n        }, {\n          path: '/forumReply', component: forumReply, meta: {title: '回帖'}\n        }, {\n          path: '/activityList', component: activityList, meta: {title: '活动管理'}\n        }, {\n          path: '/serverSub', component: serverSub, meta: {title: '服务器管理',keepAlive: true}\n        }, {\n          path: '/addRegion', component: addRegion, meta: {title: '新增分区'}\n        }, {\n          path: '/channelRecharge', component: channelRecharge, meta: {title: '充值明细'}\n        }\n      ]\n    },\n    {\n      path: '/login',\n      component: login,\n      meta: {title: '游戏运营管理系统'}\n    },\n    {\n      path: '*',\n      redirect: '/404'\n    },\n  ]\n});\n\n\n//使用钩子函数对路由进行权限跳转\nrouter.beforeEach((to, from, next) => {\n  document.title = to.meta.title;\n  const role = getStore('ms_username');\n  if (!role && to.path !== '/login') {\n    next('/login');\n  }else if(getStore('isChannel')=='true' && to.path == '/index'){\n    next('/channel')\n  } else {\n    next();\n  }\n});\n\n\nrouter.afterEach(route => {\n  // 从路由的元信息中获取 title 属性\n  if (route.meta.title) {\n    document.title = route.meta.title;\n  }\n});\nconst originalPush = Router.prototype.push;\nRouter.prototype.push = function push(location) {\n  return originalPush.call(this, location).catch(err => err)\n};\n\nexport default router\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","// 这四个非常有用的弱封装JavaScript工具库你都使用过吗：\r\n// http://www.360doc.com/content/17/0207/13/13792507_627244171.shtml\r\n// store.js：https://github.com/jaywcjlove/store.js\r\n\r\nlet utils = {\r\n    dom: {\r\n        // 显示\r\n        show (obj) {\r\n            obj.style.display = \"\"\r\n        },\r\n\r\n        // 隐藏\r\n        hide (obj) {\r\n            obj.style.display = \"none\"\r\n        },\r\n\r\n        // 判断是否有该 class\r\n        hasClass (el, className) {\r\n            let reg = new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\");\r\n            return reg.test(el.className)\r\n        },\r\n\r\n        // 添加 class\r\n        addClass (el, className) {\r\n            if (this.hasClass(el, className)) {\r\n                return\r\n            }\r\n            let newClass = el.className.split(\" \");\r\n            newClass.push(className);\r\n            el.className = newClass.join(\" \")\r\n        },\r\n\r\n        // 删除类名\r\n        removeClass (el, className) {\r\n            if (this.hasClass(el, className)) {\r\n                var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n                el.className = el.className.replace(reg, \"\")\r\n            }\r\n        },\r\n\r\n        // 替换类名\r\n        replaceClass (obj, newName, oldName) {\r\n            this.removeClass(obj, oldName);\r\n            this.addClass(obj, newName)\r\n        },\r\n\r\n        /**\r\n         * 获取/设置 自定义属性 data-${name}=val\r\n         * 如果传入了 val 就设置自定义属性 `data-${name}` 的值为 val\r\n         * 如果没有传入了 val 就获取自定义属性 `data-${name}` 的值\r\n         */\r\n        customAttribute (el, name, val) {\r\n            if (val) {\r\n                return el.setAttribute(`data-${name}`, val)\r\n            } else {\r\n                return el.getAttribute(`data-${name}`)\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 去抖（节流）\r\n         * 有一些浏览器事件可以很快地在短时间内多次触发，\r\n         * 例如调整窗口大小、向下滚动页面、搜索框节流等。\r\n         * 如果你将事件监听器绑定到窗口滚动事件，并且用户不断快速地向下滚动页面，\r\n         * 则你的事件可能在1秒内触发数千次。这可能会导致一些严重的性能问题。\r\n         * 解决这个问题的一种方法是去抖，通过限制再次调用函数之前必须经过的时间。\r\n         * 因此，去抖的正确实现是将几个函数调用组合成一个，并且在经过一段时间后仅执行一次。\r\n         *\r\n         * document.addEventListener(\"scroll\", deBounce(function () {\r\n     *   console.log(\"hello\")\r\n     * }, 1000))\r\n         *\r\n         * @param  {Function} fn    要节流的函数\r\n         * @param  {number}   delay 延迟毫秒数\r\n         */\r\n        deBounce (fn, delay) {\r\n            let timer = null;\r\n\r\n            return function (...args) {\r\n                if (timer) {\r\n                    clearTimeout(timer)\r\n                }\r\n\r\n                timer = setTimeout(() => {\r\n                    fn.apply(this, args)\r\n                }, delay)\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 获取元素相对屏幕的位置\r\n         * let one = document.getElementById(\"one\")\r\n         * console.log(getPos(one)) -> {top: 8, left: 8}\r\n         */\r\n        getPos (elem) {\r\n            if (!elem) return {left: 0, top: 0};\r\n\r\n            let top = 0;\r\n            let left = 0;\r\n\r\n            top = elem.getBoundingClientRect().top;\r\n            left = elem.getBoundingClientRect().left;\r\n\r\n            return {top, left}\r\n        },\r\n\r\n        /**\r\n         * 类 Vue 双向数据绑定\r\n         * <input type=\"text\" id=\"one\">\r\n         * <span id=\"two\"></span>\r\n         *\r\n         * dataBinding(\"one\", \"two\")\r\n         */\r\n        dataBinding (inputId, outputId, objName = {}) {\r\n            inputId = document.getElementById(inputId);\r\n            outputId = document.getElementById(outputId);\r\n\r\n            Object.defineProperty(objName, \"str\", {\r\n                get () {\r\n                },\r\n                set (newVal) {\r\n                    outputId.innerText = newVal\r\n                }\r\n            });\r\n            inputId.addEventListener(\"keyup\", function () {\r\n                objName.str = event.target.value\r\n            })\r\n        },\r\n\r\n        /**\r\n         * 键盘事件 keyCode 兼容性写法\r\n         */\r\n        getKeyCode (e) {\r\n            // e = e ? e : (window.event ? window.event : \"\")\r\n            return e.keyCode ? e.keyCode : e.which\r\n        }\r\n    },\r\n    num: {\r\n        /**\r\n         * 返回一个 [min, max] 之间的随机整数\r\n         * @param  {number} min 下界\r\n         * @param  {number} max 上界\r\n         */\r\n        getRandomNum (min, max) {\r\n            return Math.floor(Math.random() * (max - min + 1) + min)\r\n        },\r\n\r\n        /**\r\n         * 让两个整数交换数值\r\n         */\r\n        convertInt (a = 1, b = 2) {\r\n            a ^= b;\r\n            b ^= a;\r\n            a ^= b;\r\n        },\r\n\r\n        /**\r\n         * 符号相同\r\n         * 异或运算:同为 1 或 0 时候等于 0，否则为 1\r\n         * 如 a= 10110，b = 10011 , a ^ b = 00101\r\n         * 二进制第一位：1 表示负，0 表示正\r\n         *\r\n         * sameSign(1, 2) -> true\r\n         * sameSign(1, -2) -> false\r\n         */\r\n        sameSign (a, b) {\r\n            return (a ^ b) >= 0\r\n        },\r\n\r\n        /**\r\n         * 向量\r\n         */\r\n        vector (a, b) {\r\n            return {\r\n                x: b.x - a.x,\r\n                y: b.y - a.y\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 向量叉乘公式\r\n         */\r\n        vectorPro (v1, v2) {\r\n            return v1.x * v2.y - v1.y * v2.x\r\n        },\r\n\r\n        /**\r\n         * 点 p 是否在 △abc 中\r\n         * http://oph264zoo.bkt.clouddn.com/17-8-29/42222.jpg\r\n         * @param  {[type]}  p [description]\r\n         * @param  {[type]}  a [description]\r\n         * @param  {[type]}  b [description]\r\n         * @param  {[type]}  c [description]\r\n         * @return {Boolean}   [description]\r\n         */\r\n        isPointInTrangle (p, a, b, c) {\r\n            var pa = utils.num.vector(p, a);\r\n            var pb = utils.num.vector(p, b);\r\n            var pc = utils.num.vector(p, c);\r\n\r\n            var t1 = utils.num.vectorPro(pa, pb);\r\n            var t2 = utils.num.vectorPro(pb, pc);\r\n            var t3 = utils.num.vectorPro(pc, pa);\r\n\r\n            return utils.num.sameSign(t1, t2) && utils.num.sameSign(t2, t3) && utils.num.sameSign(t1, t3)\r\n        }\r\n    },\r\n    arr: {\r\n        // 克隆数组\r\n        cloneArr (arr) {\r\n            // 从第一个字符就开始 copy\r\n            // slice(start,end) 方法可从已有的数组中返回选定的元素。\r\n            return arr.slice(0)\r\n        },\r\n\r\n        /**\r\n         * 洗牌函数\r\n         * @param  {Array} arr 原数组\r\n         * @param  {boolean} flag 是否改变原数组，默认不改变\r\n         * @return {Array}     新数组\r\n         */\r\n        shuffle (arr, flag = false) {\r\n            let newArr = [];\r\n            if (flag) {\r\n                newArr = arr\r\n            } else {\r\n                newArr = arr.slice(0)\r\n            }\r\n\r\n            for (let i = 0; i < newArr.length; i++) {\r\n                let j = utils.num.getRandom(0, i);\r\n                let temp = newArr[i];\r\n                newArr[i] = newArr[j];\r\n                newArr[j] = temp\r\n            }\r\n            return newArr\r\n        },\r\n\r\n        // 随机获取数组的一个成员\r\n        randomOne (arr) {\r\n            return arr[Math.floor(Math.random() * arr.length)]\r\n        },\r\n\r\n        // 数组去重\r\n        removeRepeat (arr) {\r\n            return Array.from(new Set(arr))\r\n        },\r\n        // [1,2,3,1,\"a\",1,\"a\"].filter(function(ele,index,array){\r\n        //     return index===array.indexOf(ele)\r\n        // })\r\n\r\n        // 数组最大值\r\n        maxArr (arr) {\r\n            return Math.max.apply(null, arr);\r\n\r\n            // var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];\r\n            // var maxInNumbers = Math.max.apply(Math, numbers);\r\n            // var minInNumbers = Math.min.apply(Math, numbers);\r\n        },\r\n\r\n        // 数组最小值\r\n        minArr (arr) {\r\n            return Math.min.apply(null, arr)\r\n        },\r\n\r\n        // 数组数字总和 (必须保证数组每个元素都是 Number)\r\n        sumArr (arr) {\r\n            let sum = 0;\r\n\r\n            for (let i = 0; i < arr.length; i++) {\r\n                sum += arr[i]\r\n            }\r\n\r\n            return sum\r\n        },\r\n\r\n        // 数组数字平均值，小数点可能会有很多位，这里不做处理，处理了使用就不灵活了！\r\n        averageArr (arr) {\r\n            let average = this.sumArr(arr) / arr.length;\r\n            return average\r\n        },\r\n\r\n        /**\r\n         * 一个元素出现的次数\r\n         * getEleCount(\"asd56+asdasdwqe\", \"a\") -> 3\r\n         * getEleCount([1, 2, 3, 4, 2], 3) -> 1\r\n         * @param  {[type]} obj 可以是对象或者数组\r\n         * @param  {[type]} ele [description]\r\n         * @return {[type]}     [description]\r\n         */\r\n        getEleCount (obj, ele) {\r\n            let num = 0;\r\n\r\n            for (let i = 0; i < obj.length; i++) {\r\n                if (ele === obj[i]) {\r\n                    num++\r\n                }\r\n            }\r\n\r\n            return num\r\n        }\r\n    },\r\n    str: {\r\n        /**\r\n         * 正则验证(可扩展)\r\n         * @param  {String} str  需要检测的字符串\r\n         * @param  {String} type 检测类型\r\n         * @return {Boolean}     返回布尔值\r\n         */\r\n        testReg (str, type) {\r\n            switch (type) {\r\n                case \"email\"  :\r\n                    return /^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/.test(str);\r\n                case \"phone\"  :\r\n                    return /^1[3|4|5|6|7|8|9]\\d{9}$/.test(str);\r\n                case \"tel\"    :\r\n                    return /^(0\\d{2,3}-\\d{7,8})(-\\d{1,4})?$/.test(str);\r\n                case \"number\" :\r\n                    return /^[0-9]$/.test(str);\r\n                case \"english\":\r\n                    return /^[a-zA-Z]+$/.test(str);\r\n                case \"chinese\":\r\n                    return /^[\\u4E00-\\u9FA5]+$/.test(str);\r\n                case \"lower\"  :\r\n                    return /^[a-z]+$/.test(str);\r\n                case \"upper\"  :\r\n                    return /^[A-Z]+$/.test(str);\r\n                default :\r\n                    return true\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 检测密码强度\r\n         * checkPwdLv(\"12asdASAD\") -> 3\r\n         * @param  {[type]} str [description]\r\n         * @return {[type]}     [description]\r\n         */\r\n        checkPwdLv (str) {\r\n            let nowLv = 0;\r\n\r\n            // 密码长度 < 6，强度为 0\r\n            if (str.length < 6) {\r\n                return nowLv\r\n            }\r\n            // 密码长度 >= 6，全为数字，强度加 1\r\n            if (/[0-9]/.test(str)) {\r\n                nowLv++\r\n            }\r\n            // 密码长度 >= 6，全为小写字母，强度加 1\r\n            if (/[a-z]/.test(str)) {\r\n                nowLv++\r\n            }\r\n            // 密码长度 >= 6，全为大写字母，强度加 1\r\n            if (/[A-Z]/.test(str)) {\r\n                nowLv++\r\n            }\r\n\r\n            return nowLv\r\n        },\r\n\r\n        /**\r\n         * 产生随机颜色\r\n         * #d9d264 #d09293 #0e608e\r\n         * @param  {Number} need 1:十六进制颜色值 2:RGB颜色值\r\n         */\r\n        getRandomColor (need = 1) {\r\n            if (need === 1) {\r\n                return `#${Math.random().toString(16).substr(2, 6)}`\r\n            } else if (need === 2) {\r\n                return `rgb(${this.getRandom(0, 255)}, ${this.getRandom(0, 255)}, ${this.getRandom(0, 255)})`\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 返回一个随机字符串\r\n         * @param  {Number} n      字符数量 [0, 13]\r\n         * @param  {String} prefix 随机字符串前缀\r\n         * @return {[type]}        [description]\r\n         */\r\n        getRandomStr (n = 5, prefix = \"\") {\r\n            return prefix + Math.random().toString(16).substr(2, n)\r\n        },\r\n\r\n        /**\r\n         * 动态创建 <script>\r\n         */\r\n        createScript (url, charset = \"utf-8\") {\r\n            let script = document.createElement(\"script\");\r\n            script.setAttribute(\"type\", \"text/javascript\");\r\n            script.setAttribute(\"charset\", charset);\r\n            script.setAttribute(\"src\", url);\r\n            script.async = true;\r\n\r\n            return script\r\n        },\r\n\r\n        /**\r\n         * 单行写一个评级组件\r\n         * rate [1, 5]\r\n         * 传入一个 1-5 的数字\r\n         * @return {[type]} [description]\r\n         */\r\n        getStar (rate = 1) {\r\n            \"★★★★★☆☆☆☆☆\".slice(5 - rate, 10 - rate)\r\n        },\r\n\r\n        /**\r\n         * 去掉前后空格\r\n         * 1:前后空格(默认)  2:所有空格  3:前空格 4:后空格\r\n         * @param  {[type]} str  [description]\r\n         * @param  {Number} type [description]\r\n         * @return {[type]}      [description]\r\n         */\r\n        trim (str, type = 1) {\r\n            switch (type) {\r\n                case 1:\r\n                    return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\r\n                case 2:\r\n                    return str.replace(/\\s+/g, \"\");\r\n                case 3:\r\n                    return str.replace(/(^\\s*)/g, \"\");\r\n                case 4:\r\n                    return str.replace(/(\\s*$)/g, \"\");\r\n                default:\r\n                    return str\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 大小写转换\r\n         * 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写\r\n         */\r\n        changeCase (str, type) {\r\n            function ToggleCase(str) {\r\n                var itemText = \"\";\r\n                str.split(\"\").forEach(\r\n                    function (item) {\r\n                        if (/^([a-z]+)/.test(item)) {\r\n                            itemText += item.toUpperCase()\r\n                        } else if (/^([A-Z]+)/.test(item)) {\r\n                            itemText += item.toLowerCase()\r\n                        } else {\r\n                            itemText += item\r\n                        }\r\n                    });\r\n                return itemText\r\n            }\r\n\r\n            switch (type) {\r\n                case 1:\r\n                    return str.replace(/^(\\w)(\\w+)/, function (v, v1, v2) {\r\n                        return v1.toUpperCase() + v2.toLowerCase()\r\n                    });\r\n                case 2:\r\n                    return str.replace(/^(\\w)(\\w+)/, function (v, v1, v2) {\r\n                        return v1.toLowerCase() + v2.toUpperCase()\r\n                    });\r\n                case 3:\r\n                    return ToggleCase(str);\r\n                case 4:\r\n                    return str.toUpperCase();\r\n                case 5:\r\n                    return str.toLowerCase();\r\n                default:\r\n                    return str\r\n            }\r\n        },\r\n\r\n        /**\r\n         * HTML 实体字符转义\r\n         */\r\n        htmlEncode (str) {\r\n            let s = \"\";\r\n            if (str.length === 0) {\r\n                return \"\"\r\n            }\r\n            s = str.replace(/&/g, \"&amp;\");\r\n            s = str.replace(/>/g, \"&gt;\");\r\n            s = str.replace(/</g, \"&lt;\");\r\n            s = str.replace(/\\s/g, \"&nbsp;\");\r\n            // s = str.replace(/\\\"/g, \"&#39;\")\r\n            // s = str.replace(/\\\"/g, \"&quot;\")\r\n            s = str.replace(/\\n/g, \"<br>\");\r\n            return s\r\n        },\r\n\r\n        /**\r\n         * 如何装逼用代码骂别人SB\r\n         * http://www.jfh.com/jfperiodical/article/3224\r\n         * @return {[type]} [description]\r\n         */\r\n        getSB () {\r\n            console.log((!(~+[]) + {})[--[~+\"\"][+[]] * [~+[]] + ~~!+[]] + ({} + [])[[~!+[]] * ~+[]])\r\n        },\r\n\r\n        /**\r\n         * 如何用代码优雅的证明自己NB\r\n         * @return {[type]} [description]\r\n         */\r\n        getNB () {\r\n            console.log(([][[]] + [])[+!![]] + ([] + {})[!+[] + !![]])\r\n        },\r\n\r\n        /**\r\n         * 如何优雅的实现金钱格式化\r\n         * 1234567890 --> 1,234,567,890\r\n         * @return {[type]}       [description]\r\n         */\r\n        formatMoney (str = \"1234567890\") {\r\n            return str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"); // 1,234,567,890\r\n\r\n            // return str.split(\"\").reverse().reduce((prev, next, index) => {\r\n            // return ((index % 3) ? next : (next + \",\")) + prev\r\n            // })\r\n        },\r\n\r\n        /**\r\n         * 实现标准JSON的深拷贝\r\n         * 不考虑IE的情况下，标准JSON格式的对象蛮实用，不过对于undefined和function的会忽略掉。\r\n         * @param  {[type]} a [description]\r\n         * @return {[type]}   [description]\r\n         */\r\n        deepCopy (a) {\r\n            return JSON.parse(JSON.stringify(a));\r\n\r\n            // var a = {\r\n            //     a: 1,\r\n            //     b: { c: 1, d: 2 }\r\n            // }\r\n            // var b=JSON.parse(JSON.stringify(a))\r\n        }\r\n    },\r\n    time: {\r\n        /**\r\n         * 获取当前时间\r\n         * 2017-08-11 22:52:13 星期六\r\n         * @param  {Boolean} hasDay  是否需要年月日\r\n         * @param  {Boolean} hasHour 是否需要十分秒\r\n         * @param  {Boolean} hasWeek 是否需要星期\r\n         * @param  {String} sign1 分隔符\r\n         * @param  {String} sign2 分隔符\r\n         */\r\n        getNowDate (hasDay = true, hasHour = true, hasWeek = true, sign1 = \"-\", sign2 = \":\") {\r\n            let date = new Date();\r\n            let year = date.getFullYear();\r\n            let month = (date.getMonth() + 1).toString().padStart(2, \"0\");\r\n            let day = (date.getDate()).toString().padStart(2, \"0\");\r\n            let hour = (date.getHours()).toString().padStart(2, \"0\");\r\n            let minutes = (date.getMinutes()).toString().padStart(2, \"0\");\r\n            let seconds = (date.getSeconds()).toString().padStart(2, \"0\");\r\n            let weekArr = [\"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期天\"];\r\n            let week = weekArr[date.getDay()];\r\n\r\n            let time1 = hasDay ? `${year}${sign1}${month}${sign1}${day}` : \"\";\r\n            let time2 = hasHour ? `${hour}${sign2}${minutes}${sign2}${seconds}` : \"\";\r\n            let time3 = hasWeek ? `${week}` : \"\";\r\n\r\n            return `${time1} ${time2} ${time3}`.replace(/(^\\s*)|(\\s*$)/g, \"\")\r\n        },\r\n\r\n        /**\r\n         * 格式化时间戳 (分:秒)\r\n         * 61 -> 01:01\r\n         * @param  {Number} timestamp 时间戳\r\n         * @param  {String} sign      分隔符，默认 :\r\n         * @return {[type]}           [description]\r\n         */\r\n        format (timestamp, sign = \":\") {\r\n            timestamp = Math.floor(timestamp);\r\n\r\n            let minute = (Math.floor(timestamp / 60)).toString().padStart(2, \"0\");\r\n            let second = (timestamp % 60).toString().padStart(2, \"0\");\r\n            return `${minute}${sign}${second}`\r\n        },\r\n\r\n        /**\r\n         * 倒计时\r\n         * countDown(\"2017-8-11 24:0:0\") -> 剩余0天0小时54分钟41秒\r\n         * @param  {Date} endTime 结束时间\r\n         * @return {[type]}         [description]\r\n         */\r\n        countDown (endTime) {\r\n            let start = new Date();\r\n            let end = new Date(endTime);\r\n            let dif = end.getTime() - start.getTime();\r\n\r\n            let d = 0;\r\n            let h = 0;\r\n            let m = 0;\r\n            let s = 0;\r\n\r\n            if (dif >= 0) {\r\n                d = Math.floor(dif / 1000 / 3600 / 24);\r\n                h = Math.floor(dif / 1000 / 60 / 60 % 24);\r\n                m = Math.floor(dif / 1000 / 60 % 60);\r\n                s = Math.floor(dif / 1000 % 60);\r\n            }\r\n\r\n            return `仅剩${d}天${h}小时${m}分钟${s}秒`\r\n        }\r\n    },\r\n    http: {\r\n        /**\r\n         * 封装 AJAX\r\n         * @param {Object}        obj 默认是一个空对象\r\n         * @param {string}        obj.type http连接的方式，包括POST和GET两种方式\r\n         * @param {string}        obj.url 发送请求的url\r\n         * @param {boolean}       obj.async 是否为异步请求，true为异步的，false为同步的\r\n         * @param {object}        obj.data 发送的参数，格式为对象类型\r\n         * @param {function}      obj.success ajax发送并接收成功调用的回调函数\r\n         * @param {function}      obj.error ajax发送失败或者接收失败调用的回调函数\r\n         *\r\n         * ajax({\r\n         *    type: \"get\",\r\n         *    Url: \"xxx\",\r\n         *    data: {\r\n         *       id: \"111\"\r\n         *    },\r\n         *    success: function(res){\r\n         *       console.log(res)\r\n         *    }\r\n         * })\r\n         *\r\n         */\r\n        ajax (obj = {}) {\r\n            obj.type = obj.type.toUpperCase() || \"POST\";\r\n            obj.url = obj.url || \"\";\r\n            obj.async = obj.async || true;\r\n            obj.data = obj.data || null;\r\n            obj.success = obj.success || function () {\r\n                };\r\n            obj.error = obj.error || function () {\r\n                };\r\n\r\n            // 能力检测 IE5 IE6\r\n            let xhr = window.XMLHttpRequest\r\n                ? new window.XMLHttpRequest()\r\n                : new window.ActiveXObject(\"Microsoft.XMLHTTP\");\r\n\r\n            let dataArr = [];\r\n            for (let key in obj.data) {\r\n                dataArr.push(key + \"=\" + obj.data[key])\r\n            }\r\n\r\n            // 处理 POST 与 GET\r\n            let postData = dataArr.join(\"&\");\r\n\r\n            if (obj.type === \"POST\") {\r\n                xhr.open(obj.type, obj.url, obj.async);\r\n                xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded;charset=utf-8\");\r\n                xhr.send(postData)\r\n            } else if (obj.type === \"GET\") {\r\n                xhr.open(obj.type, obj.url + \"?\" + postData, obj.async);\r\n                xhr.send()\r\n            }\r\n\r\n            // 异步处理\r\n            xhr.onreadystatechange = function () {\r\n                if (xhr.readyState === 4) {\r\n                    if (xhr.status === 200) {\r\n                        // let res = JSON.parse(xhr.responseText)\r\n                        // obj.success(res)\r\n                        obj.success(xhr.responseText)\r\n                    } else {\r\n                        obj.error(xhr.status)\r\n                    }\r\n                }\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 封装 JSONP\r\n         * @param  {[type]} url       [description]\r\n         * @param  {[type]} onsuccess [description]\r\n         * @param  {[type]} onerror   [description]\r\n         * @param  {[type]} charset   [description]\r\n         * @return {[type]}           [description]\r\n         */\r\n        jsonp (url, onsuccess, onerror, charset) {\r\n            // 必须与服务器回调函数名称一致\r\n            let callbackName = utils.str.getRandomStr(5, \"tt_player\");\r\n\r\n            window[callbackName] = function () {\r\n                if (onsuccess) {\r\n                    onsuccess(arguments[0])\r\n                }\r\n            };\r\n\r\n            // 动态创建 script\r\n            let script = utils.str.createScript(url + \"&callback=\" + callbackName);\r\n\r\n            // 时间监听\r\n            script.onload = script.onreadystatechange = function () {\r\n                if (!script.readyState || /loaded|complete/.test(script.readyState)) {\r\n                    // 移除该 script 的 DOM 对象\r\n                    script.onload = script.onreadystatechange = null;\r\n                    script.parentNode && script.parentNode.removeChild(script);\r\n                    window[callbackName] = null\r\n                }\r\n            };\r\n\r\n            // 错误处理\r\n            script.onerror = function () {\r\n                if (onerror) {\r\n                    onerror()\r\n                }\r\n            };\r\n\r\n            // 发送请求\r\n            document.getElementsByTagName(\"head\")[0].appendChild(script)\r\n        },\r\n\r\n        /**\r\n         * 设置 url 参数\r\n         * setUrlParam({a:1,b:2}) -> a=1&b=2\r\n         * @param {[type]} obj 传入一个对象\r\n         */\r\n        setUrlParam (obj) {\r\n            let query = [];\r\n\r\n            for (let i in obj) {\r\n                if (obj[i] != null && obj[i] !== \"\") {\r\n                    query.push(i + \"=\" + obj[i])\r\n                }\r\n            }\r\n\r\n            return query.join(\"&\")\r\n        },\r\n\r\n        /**\r\n         * 解析 URL 参数\r\n         * http://localhost:8080/?id=123&key=vaule#/restaurant/seller\r\n         * \"?id=123&key=vaule\"\r\n         * {id: \"123\", key: \"vaule\"}\r\n         */\r\n        urlParse (url = window.location.search) {\r\n            // window.location.href 当前文件的绝对地址\r\n            // window.location.search 当前文件的哈希地址\r\n            let obj = {};\r\n            let reg = /[?&][^?&]+=[^?&]+/g;\r\n            let arr = url.match(reg); // [\"?id=123\", \"&key=vaule\"]\r\n\r\n            if (arr) {\r\n                arr.forEach((item) => {\r\n                    // 删除 ? 和 &，以 = 为标志分割数组\r\n                    let tempArr = item.substring(1).split(\"=\"); // [\"id\", \"123\"]  [\"key\", \"vaule\"]\r\n                    // 使用 decodeURIComponent() 对编码后的 URI 进行解码\r\n                    let key = decodeURIComponent(tempArr[0]);\r\n                    let value = decodeURIComponent(tempArr[1]);\r\n                    obj[key] = value;\r\n                })\r\n            }\r\n            return obj\r\n        }\r\n    },\r\n    store: {\r\n        // 存储 cookie\r\n        setCookie (name, value, iDay) {\r\n            var oDate = new Date();\r\n            oDate.setDate(oDate.getDate() + iDay);\r\n            document.cookie = name + \"=\" + value + \";expires=\" + oDate\r\n        },\r\n\r\n        // 获取 cookie\r\n        getCookie (name) {\r\n            var arr = document.cookie.split(\"; \");\r\n            for (var i = 0; i < arr.length; i++) {\r\n                var arr2 = arr[i].split(\"=\");\r\n                if (arr2[0] === name) {\r\n                    return arr2[1]\r\n                }\r\n            }\r\n            return \"\"\r\n        },\r\n        // 删除 cookie\r\n        removeCookie (name) {\r\n            this.setCookie(name, 1, -1)\r\n        },\r\n        // https://github.com/ustbhuangyi/storage\r\n        // 存储 localStorage\r\n        // localStorage.key=\"value\"\r\n        // localStorage.setItem(key, value)\r\n        setLocalStorage (key = \"__test__\", value) {\r\n            if (typeof value !== \"string\") {\r\n                value = JSON.stringify(value)\r\n            }\r\n            return window.localStorage.setItem(key, value)\r\n        },\r\n        // 获取 localStorage\r\n        // localStorage.key\r\n        getLocalStorage (key = \"__test__\", def = \"\") {\r\n            if (localStorage.key) {\r\n                return window.localStorage.getItem(key)\r\n            } else {\r\n                return def\r\n            }\r\n        },\r\n        // 删除单个数据 localStorage\r\n        // localStorage.removeItem(\"key\");\r\n        removeLocalStorage (key = \"__test__\") {\r\n            window.localStorage.removeItem(key)\r\n        },\r\n        // 删除所有数据 localStorage\r\n        clearLocalStorage () {\r\n            return window.localStorage.clear()\r\n        }\r\n    },\r\n    event: {\r\n        // event 兼容\r\n        getEvent (event) {\r\n            return event || window.event\r\n        },\r\n\r\n        // type 兼容\r\n        getType (event) {\r\n            return event.type\r\n        },\r\n\r\n        // target 兼容\r\n        getTarget (event) {\r\n            return event.target ? event.target : event.srcElement\r\n        },\r\n\r\n        // 添加事件句柄\r\n        addHandler (elem, type, listener) {\r\n            if (elem.addEventListener) {\r\n                elem.addEventListener(type, listener, false)\r\n            } else if (elem.attachEvent) {\r\n                elem.attachEvent(\"on\" + type, listener)\r\n            } else {\r\n                // 在这里由于.与\"on\"字符串不能链接，只能用 []\r\n                elem[\"on\" + type] = listener\r\n            }\r\n        },\r\n\r\n        // 移除事件句柄\r\n        removeHandler (elem, type, listener) {\r\n            if (elem.removeEventListener) {\r\n                elem.removeEventListener(type, listener, false)\r\n            } else if (elem.detachEvent) {\r\n                elem.detachEvent(\"on\" + type, listener)\r\n            } else {\r\n                elem[\"on\" + type] = null\r\n            }\r\n        },\r\n\r\n        // 添加事件代理\r\n        addAgent (elem, type, agent, listener) {\r\n            elem.addEventListener(type, function (e) {\r\n                if (e.target.matches(agent)) {\r\n                    listener.call(e.target, e); // this 指向 e.target\r\n                }\r\n            })\r\n        },\r\n\r\n        // 取消默认行为\r\n        preventDefault (event) {\r\n            if (event.preventDefault) {\r\n                event.preventDefault()\r\n            } else {\r\n                event.returnValue = false\r\n            }\r\n        },\r\n\r\n        // 阻止事件冒泡\r\n        stopPropagation (event) {\r\n            if (event.stopPropagation) {\r\n                event.stopPropagation()\r\n            } else {\r\n                event.cancelBubble = true\r\n            }\r\n        }\r\n    },\r\n    others: {\r\n        /**\r\n         * 获取浏览器信息\r\n         * @return {string} 浏览器名称\r\n         */\r\n        whatBrowser () {\r\n            let BrowserAgent = navigator.userAgent; // 返回由客户机发送服务器的 user-agent 头部的值。\r\n            // let BrowserName = navigator.appName // 返回浏览器的名称。\r\n            // let BrowserCode = navigator.appCodeName // 返回浏览器的代码名。\r\n            // let BrowserVersion = navigator.appVersion // 返回浏览器的平台和版本信息。\r\n            // let BrowserCookie = navigator.cookieEnabled // 返回指明浏览器中是否启用 cookie 的布尔值。\r\n            // let BrowserOnline = navigator.onLine //返回指明系统是否处于脱机模式的布尔值。\r\n            // let BrowserPlatform = navigator.platform // 返回运行浏览器的操作系统平台。\r\n            // let BrowserLanguage = navigator.language // 返回 OS 的自然语言设置。\r\n\r\n            let browser = \"Failed to identify the browser\";\r\n\r\n            if (BrowserAgent.indexOf(\"Firefox\") > -1) {\r\n                browser = \"Firefox\"\r\n            } else if (BrowserAgent.indexOf(\"Chrome\") > -1) {\r\n                browser = \"Chrome\"\r\n            } else if (BrowserAgent.indexOf(\"MSIE\") > -1 && BrowserAgent.indexOf(\"Trident\") > -1) {\r\n                browser = \"IE(8-10)\"\r\n            }\r\n            return browser\r\n        },\r\n\r\n        /* 描述：判断浏览器信息 判断当前浏览类型 */\r\n        BrowserType: function () {\r\n            var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串\r\n            var isOpera = userAgent.indexOf(\"Opera\") > -1; //判断是否Opera浏览器\r\n            var isIE = userAgent.indexOf(\"compatible\") > -1 && userAgent.indexOf(\"MSIE\") > -1 && !isOpera; //判断是否IE浏览器\r\n            var isEdge = userAgent.indexOf(\"Windows NT 6.1; Trident/7.0;\") > -1 && !isIE; //判断是否IE的Edge浏览器\r\n            var isFF = userAgent.indexOf(\"Firefox\") > -1; //判断是否Firefox浏览器\r\n            var isSafari = userAgent.indexOf(\"Safari\") > -1 && userAgent.indexOf(\"Chrome\") == -1; //判断是否Safari浏览器\r\n            var isChrome = userAgent.indexOf(\"Chrome\") > -1 && userAgent.indexOf(\"Safari\") > -1; //判断Chrome浏览器\r\n            if (isIE) {\r\n                var reIE = new RegExp(\"MSIE (\\\\d+\\\\.\\\\d+);\");\r\n                reIE.test(userAgent);\r\n                var fIEVersion = parseFloat(RegExp[\"$1\"]);\r\n                if (fIEVersion == 7) { return \"IE7\"; }\r\n                else if (fIEVersion == 8) { return \"IE8\"; }\r\n                else if (fIEVersion == 9) { return \"IE9\"; }\r\n                else if (fIEVersion == 10) { return \"IE10\"; }\r\n                else if (fIEVersion == 11) { return \"IE11\"; }\r\n                else { return \"0\" }//IE版本过低\r\n            }\r\n            if (isFF) { return \"FF\"; }\r\n            if (isOpera) { return \"Opera\"; }\r\n            if (isSafari) { return \"Safari\"; }\r\n            if (isChrome) { return \"Chrome\"; }\r\n            if (isEdge) { return \"Edge\"; }\r\n        },\r\n\r\n        //判断是否是IE浏览器\r\n        isIE: function () {\r\n            var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串\r\n            var isIE = userAgent.indexOf(\"compatible\") > -1 && userAgent.indexOf(\"MSIE\") > -1 && !isOpera; //判断是否IE浏览器\r\n            return isIE ? \"1\" : \"-1\";\r\n        },\r\n\r\n        //判断是否是IE浏览器，包括Edge浏览器\r\n        IEVersion: function () {\r\n            var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串\r\n            var isOpera = userAgent.indexOf(\"Opera\") > -1; //判断是否Opera浏览器\r\n            var isIE = userAgent.indexOf(\"compatible\") > -1 && userAgent.indexOf(\"MSIE\") > -1 && !isOpera; //判断是否IE浏览器\r\n            var isEdge = userAgent.indexOf(\"Windows NT 6.1; Trident/7.0;\") > -1 && !isIE; //判断是否IE的Edge浏览器\r\n            if (isIE) {\r\n                var reIE = new RegExp(\"MSIE (\\\\d+\\\\.\\\\d+);\");\r\n                reIE.test(userAgent);\r\n                var fIEVersion = parseFloat(RegExp[\"$1\"]);\r\n                /*if (fIEVersion == 7) { return \"IE7\"; }\r\n                else if (fIEVersion == 8) { return \"IE8\"; }\r\n                else if (fIEVersion == 9) { return \"IE9\"; }\r\n                else if (fIEVersion == 10) { return \"IE10\"; }\r\n                else if (fIEVersion == 11) { return \"IE11\"; }\r\n                else { return \"0\" } //IE版本过低*/\r\n                return fIEVersion < 11 ? \"0\" : \"1\";\r\n            }\r\n            else if (isEdge) { return \"Edge\"; }\r\n            else {\r\n                return \"-1\";\r\n                //非IE\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * 存储localStorage\r\n */\r\nexport const setStore = (name, content) => {\r\n    if (!name) return;\r\n    if (typeof content !== 'string') {\r\n        content = JSON.stringify(content);\r\n    }\r\n    window.localStorage.setItem(name, content);\r\n};\r\n\r\n/**\r\n * 获取localStorage\r\n */\r\nexport const getStore = name => {\r\n    if (!name) return;\r\n    return window.localStorage.getItem(name);\r\n};\r\nexport const getBoolenStore = (name)=> {\r\n    let data = window.localStorage.getItem(name)\r\n    if (!name) return;\r\n    if (data === 'false') {\r\n        data = false\r\n    } else {\r\n        data = true\r\n    }\r\n    return data\r\n};\r\n\r\n/**\r\n * 删除localStorage\r\n */\r\nexport const removeStore = name => {\r\n    if (!name) return;\r\n    window.localStorage.removeItem(name);\r\n};\r\n\r\n/**\r\n * 执行session回话的方式\r\n */\r\nexport const session = {\r\n    get(name) {\r\n        if (!name) return;\r\n        return window.sessionStorage.getItem(name);\r\n    },\r\n    set(name, content) {\r\n        if (!name) return;\r\n        if (typeof content !== 'string') {\r\n            content = JSON.stringify(content);\r\n        }\r\n        window.sessionStorage.setItem(name, content);\r\n    },\r\n    remove(name) {\r\n        if (!name) return;\r\n        window.sessionStorage.removeItem(name);\r\n    }\r\n};\r\n\r\nexport const Base64 = {\r\n    //加密\r\n    encode(str) {\r\n        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\r\n            function toSolidBytes(match, p1) {\r\n                return String.fromCharCode('0x' + p1);\r\n            }));\r\n    },\r\n    //解密\r\n    decode(str) {\r\n        // Going backwards: from bytestream, to percent-encoding, to original string.\r\n        return decodeURIComponent(atob(str).split('').map(function (c) {\r\n            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n        }).join(''));\r\n    }\r\n}\r\n\r\n/**\r\n * 获取style样式\r\n */\r\nexport const getStyle = (element, attr, NumberMode = 'int') => {\r\n    // console.log(\"className : \",element.className);\r\n    let target;\r\n    // scrollTop 获取方式不同，没有它不属于style，而且只有document.body才能用\r\n    if (attr === 'scrollTop') {\r\n        target = element.scrollTop;\r\n    } else if (element.currentStyle) {\r\n        target = element.currentStyle[attr];\r\n    } else {\r\n        target = document.defaultView.getComputedStyle(element, null)[attr];\r\n    }\r\n    //在获取 opactiy 时需要获取小数 parseFloat\r\n    return NumberMode == 'float' ? parseFloat(target) : parseInt(target);\r\n};\r\n\r\n/**\r\n * 页面到达底部，加载更多\r\n */\r\nexport const loadMore = (element, callback) => {\r\n    let windowHeight = window.screen.height;\r\n    let height;\r\n    let setTop;\r\n    let paddingBottom;\r\n    let marginBottom;\r\n    let requestFram;\r\n    let oldScrollTop;\r\n\r\n    document.body.addEventListener('scroll', () => {\r\n        loadMore();\r\n    }, false);\r\n    //运动开始时获取元素 高度 和 offseTop, pading, margin\r\n    element.addEventListener('touchstart', () => {\r\n        height = element.offsetHeight;\r\n        setTop = element.offsetTop;\r\n        paddingBottom = getStyle(element, 'paddingBottom');\r\n        marginBottom = getStyle(element, 'marginBottom');\r\n    }, {passive: true});\r\n\r\n    //运动过程中保持监听 scrollTop 的值判断是否到达底部\r\n    element.addEventListener('touchmove', () => {\r\n        loadMore();\r\n    }, {passive: true});\r\n\r\n    //运动结束时判断是否有惯性运动，惯性运动结束判断是非到达底部\r\n    element.addEventListener('touchend', () => {\r\n        oldScrollTop = document.body.scrollTop;\r\n        moveEnd();\r\n    }, {passive: true});\r\n\r\n    const moveEnd = () => {\r\n        requestFram = requestAnimationFrame(() => {\r\n            if (document.body.scrollTop != oldScrollTop) {\r\n                oldScrollTop = document.body.scrollTop;\r\n                loadMore();\r\n                moveEnd();\r\n            } else {\r\n                cancelAnimationFrame(requestFram);\r\n                //为了防止鼠标抬起时已经渲染好数据从而导致重获取数据，应该重新获取dom高度\r\n                height = element.offsetHeight;\r\n                loadMore();\r\n            }\r\n        })\r\n    };\r\n\r\n    const loadMore = () => {\r\n        if (document.body.scrollTop + windowHeight >= height + setTop + paddingBottom + marginBottom) {\r\n            callback();\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * 显示返回顶部按钮，开始、结束、运动 三个过程中调用函数判断是否达到目标点\r\n */\r\nexport const showBack = callback => {\r\n    let requestFram;\r\n    let oldScrollTop;\r\n\r\n    document.addEventListener('scroll', () => {\r\n        showBackFun();\r\n    }, false);\r\n    document.addEventListener('touchstart', () => {\r\n        showBackFun();\r\n    }, {passive: true});\r\n\r\n    document.addEventListener('touchmove', () => {\r\n        showBackFun();\r\n    }, {passive: true});\r\n\r\n    document.addEventListener('touchend', () => {\r\n        oldScrollTop = document.body.scrollTop;\r\n        moveEnd();\r\n    }, {passive: true});\r\n\r\n    const moveEnd = () => {\r\n        requestFram = requestAnimationFrame(() => {\r\n            if (document.body.scrollTop != oldScrollTop) {\r\n                oldScrollTop = document.body.scrollTop;\r\n                moveEnd();\r\n            } else {\r\n                cancelAnimationFrame(requestFram);\r\n            }\r\n            showBackFun();\r\n        })\r\n    };\r\n\r\n    //判断是否达到目标点\r\n    const showBackFun = () => {\r\n        if (document.body.scrollTop > 500) {\r\n            callback(true);\r\n        } else {\r\n            callback(false);\r\n        }\r\n    }\r\n};\r\n\r\n\r\n/**\r\n * 运动效果\r\n * @param {HTMLElement} element   运动对象，必选\r\n * @param {JSON}        target    属性：目标值，必选\r\n * @param {number}      duration  运动时间，可选\r\n * @param {string}      mode      运动模式，可选\r\n * @param {function}    callback  可选，回调函数，链式动画\r\n */\r\nexport const animate = (element, target, duration = 400, mode = 'ease-out', callback) => {\r\n    clearInterval(element.timer);\r\n\r\n    //判断不同参数的情况\r\n    if (duration instanceof Function) {\r\n        callback = duration;\r\n        duration = 400;\r\n    } else if (duration instanceof String) {\r\n        mode = duration;\r\n        duration = 400;\r\n    }\r\n\r\n    //判断不同参数的情况\r\n    if (mode instanceof Function) {\r\n        callback = mode;\r\n        mode = 'ease-out';\r\n    }\r\n\r\n    //获取dom样式\r\n    const attrStyle = attr => {\r\n        if (attr === \"opacity\") {\r\n            return Math.round(getStyle(element, attr, 'float') * 100);\r\n        } else {\r\n            return getStyle(element, attr);\r\n        }\r\n    };\r\n    //根字体大小，需要从此将 rem 改成 px 进行运算\r\n    const rootSize = parseFloat(document.documentElement.style.fontSize);\r\n\r\n    const unit = {};\r\n    const initState = {};\r\n\r\n    //获取目标属性单位和初始样式值\r\n    Object.keys(target).forEach(attr => {\r\n        if (/[^\\d^\\.]+/gi.test(target[attr])) {\r\n            unit[attr] = target[attr].match(/[^\\d^\\.]+/gi)[0] || 'px';\r\n        } else {\r\n            unit[attr] = 'px';\r\n        }\r\n        initState[attr] = attrStyle(attr);\r\n    });\r\n\r\n    //去掉传入的后缀单位\r\n    Object.keys(target).forEach(attr => {\r\n        if (unit[attr] == 'rem') {\r\n            target[attr] = Math.ceil(parseInt(target[attr]) * rootSize);\r\n        } else {\r\n            target[attr] = parseInt(target[attr]);\r\n        }\r\n    });\r\n\r\n\r\n    let flag = true; //假设所有运动到达终点\r\n    const remberSpeed = {};//记录上一个速度值,在ease-in模式下需要用到\r\n    element.timer = setInterval(() => {\r\n        Object.keys(target).forEach(attr => {\r\n            let iSpeed = 0;  //步长\r\n            let status = false; //是否仍需运动\r\n            let iCurrent = attrStyle(attr) || 0; //当前元素属性址\r\n            let speedBase = 0; //目标点需要减去的基础值，三种运动状态的值都不同\r\n            let intervalTime; //将目标值分为多少步执行，数值越大，步长越小，运动时间越长\r\n            switch (mode) {\r\n                case 'ease-out':\r\n                    speedBase = iCurrent;\r\n                    intervalTime = duration * 5 / 400;\r\n                    break;\r\n                case 'linear':\r\n                    speedBase = initState[attr];\r\n                    intervalTime = duration * 20 / 400;\r\n                    break;\r\n                case 'ease-in':\r\n                    let oldspeed = remberSpeed[attr] || 0;\r\n                    iSpeed = oldspeed + (target[attr] - initState[attr]) / duration;\r\n                    remberSpeed[attr] = iSpeed;\r\n                    break;\r\n                default:\r\n                    speedBase = iCurrent;\r\n                    intervalTime = duration * 5 / 400;\r\n            }\r\n            if (mode !== 'ease-in') {\r\n                iSpeed = (target[attr] - speedBase) / intervalTime;\r\n                iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);\r\n            }\r\n            //判断是否达步长之内的误差距离，如果到达说明到达目标点\r\n            switch (mode) {\r\n                case 'ease-out':\r\n                    status = iCurrent != target[attr];\r\n                    break;\r\n                case 'linear':\r\n                    status = Math.abs(Math.abs(iCurrent) - Math.abs(target[attr])) > Math.abs(iSpeed);\r\n                    break;\r\n                case 'ease-in':\r\n                    status = Math.abs(Math.abs(iCurrent) - Math.abs(target[attr])) > Math.abs(iSpeed);\r\n                    break;\r\n                default:\r\n                    status = iCurrent != target[attr];\r\n            }\r\n\r\n            if (status) {\r\n                flag = false;\r\n                //opacity 和 scrollTop 需要特殊处理\r\n                if (attr === \"opacity\") {\r\n                    element.style.filter = \"alpha(opacity:\" + (iCurrent + iSpeed) + \")\";\r\n                    element.style.opacity = (iCurrent + iSpeed) / 100;\r\n                } else if (attr === 'scrollTop') {\r\n                    element.scrollTop = iCurrent + iSpeed;\r\n                } else {\r\n                    element.style[attr] = iCurrent + iSpeed + 'px';\r\n                }\r\n            } else {\r\n                flag = true;\r\n            }\r\n\r\n            if (flag) {\r\n                clearInterval(element.timer);\r\n                if (callback) {\r\n                    callback();\r\n                }\r\n            }\r\n        })\r\n    }, 20);\r\n};\r\n\r\n/*获取元素的矩形对象*/\r\nexport function getRectObject(element) {\r\n    var rect = element.getBoundingClientRect();\r\n    /*在IE中,默认坐标从(2,2)开始计算,导致最终距离比其他浏览器多两个像素。*/\r\n    var top = document.documentElement.clientTop;  // 非IE为0，IE为2\r\n    var left = document.documentElement.clientLeft; // 非IE为0，IE为2\r\n    return {\r\n        top: rect.top - top,\r\n        bottom: rect.bottom - top,\r\n        left: rect.left - left,\r\n        right: rect.right - left\r\n    }\r\n}\r\n\r\nexport default utils\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/utils.js"],"sourceRoot":""}