{"remainingRequest":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\cssc-fvue\\src\\utils.js","dependencies":[{"path":"D:\\jenkins\\workspace\\cssc-fvue\\src\\utils.js","mtime":1667804639602},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["import \"core-js/modules/es6.string.iterator\";\nimport \"core-js/modules/es6.map\";\nimport \"core-js/modules/es6.array.find-index\";\nimport \"core-js/modules/es6.regexp.constructor\";\nimport \"core-js/modules/es6.regexp.match\";\nimport \"core-js/modules/es6.regexp.replace\";\nimport \"core-js/modules/es6.number.parse-int\";\nimport \"core-js/modules/es7.array.includes\";\nimport \"core-js/modules/es6.string.includes\";\nimport _toConsumableArray from \"D:/jenkins/workspace/cssc-fvue/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport \"core-js/modules/es6.number.constructor\";\nimport \"core-js/modules/web.dom.iterable\";\nimport \"core-js/modules/es6.regexp.to-string\";\nimport \"core-js/modules/es6.regexp.split\";\nimport { Message, MessageBox, Notification } from 'element-ui';\nvar closeAllNotificationFlag = false; //是否隐藏感叹号校验提示\n\nvar notifications = {}; //用来获取弹窗的实例,以对对应弹窗进行操作\n\nvar utils = {\n //根据传入的值和数组进行比较,相等返回该数据个某条数据\n indexOfList: function indexOfList(list, key, value) {\n for (var i = 0; i < list.length; i++) {\n if (list[i][key] == value) {\n return list[i];\n }\n }\n },\n //字节数转KB或者MB\n bigDecimal: function bigDecimal(bytes) {\n var returnValue = bytes / (1024 * 1024);\n\n if (returnValue > 1) {\n return returnValue.toFixed(2) + \"M\";\n } else {\n returnValue = bytes / 1024;\n return returnValue.toFixed(0) + \"KB\";\n }\n },\n //获取指定字符后面所有字符\n substringType: function substringType(str, type) {\n var returnValue = str.split(\".\");\n return returnValue[returnValue.length - 1];\n },\n // 获取随机的名称\n getName: function getName() {\n return Math.random().toString(36).substr(2);\n },\n // 获取控件是否可编辑\n getWriteable: function getWriteable(permission) {\n if (permission === 'w' || permission === 'b') {\n return true;\n }\n\n return false;\n },\n // 获取控件是否添加必填校验\n addRequiredOrNot: function addRequiredOrNot(permission, validate, linkageValidate, _this) {\n //判断是否有联动校验\n if (linkageValidate.length > 0) {\n linkageValidate.forEach(function (ele) {\n if (ele && ele.validate && \"data.\" + ele.target == _this.atter) {\n validate = ele.validate;\n }\n });\n }\n\n if (permission !== 'b') {\n return validate;\n } //如果表单授权为某控件加了必填则必填\n\n\n if (permission === 'b' && validate && !validate.required && validate.constructor === Object) {\n validate.required = true;\n }\n\n if (validate === undefined || validate === null) {\n validate = \"required\";\n } else if (validate.constructor === String) {\n var ary = validate.split(\"|\");\n\n if (!ary.some(function (item) {\n return item === \"required\";\n })) {\n ary.splice(0, 0, \"required\");\n validate = ary.join(\"|\");\n }\n } else if (validate.constructor === Object) {\n validate = Object.assign({\n required: true\n }, validate);\n } else {\n throw \"validate不是允许的类型\";\n }\n\n return validate;\n },\n // 格式化日期\n formatDate: function formatDate(value) {\n var date = null;\n\n if (!value) {\n return date;\n }\n\n if (value.constructor == Date && !isNaN(value.getTime())) {\n date = value;\n } else if (value.constructor == String || value.constructor == Number) {\n date = new Date(value);\n } else {\n throw \"格式化日期时,传入的数据格式不正确。\";\n }\n\n var y = date.getFullYear();\n var MM = date.getMonth() + 1;\n MM = MM < 10 ? '0' + MM : MM;\n var d = date.getDate();\n d = d < 10 ? '0' + d : d;\n var h = date.getHours();\n h = h < 10 ? '0' + h : h;\n var m = date.getMinutes();\n m = m < 10 ? '0' + m : m;\n var s = date.getSeconds();\n s = s < 10 ? '0' + s : s;\n return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;\n },\n // 格式化日期\n formatDateYear: function formatDateYear(value) {\n var date = new Date(value);\n var y = date.getFullYear();\n var MM = date.getMonth() + 1;\n MM = MM < 10 ? '0' + MM : MM;\n var d = date.getDate();\n d = d < 10 ? '0' + d : d;\n return y + '-' + MM + '-' + d;\n },\n // 比较2个日期\n daysBetween: function daysBetween(DateOne, DateTwo, notSupportEquals) {\n if (!DateOne || !DateTwo) {\n return true;\n }\n\n var date1 = new Date(DateOne).getTime() || new Date(new Date().format(\"yyyy-MM-dd\") + \" \" + DateOne).getTime();\n var date2 = new Date(DateTwo).getTime() || new Date(new Date().format(\"yyyy-MM-dd\") + \" \" + DateTwo).getTime();\n\n if (notSupportEquals) {\n //大于。v2>v1 。\n if (date2 > date1) {\n return true;\n } else {\n return false;\n }\n } else {\n //大于等于。v2>=v1 。只要v1不大于v2即可\n if (date1 > date2) {\n return false;\n } else {\n return true;\n }\n }\n },\n dateCalc: function dateCalc(startDate, endDate, op) {\n if (!startDate || !endDate || startDate.length == 0 || endDate.length == 0) {\n return 0;\n }\n\n if (op.legend == 0) {\n op = \"day\";\n }\n\n var date1 = new Date(startDate).getTime() || new Date(new Date().format(\"yyyy-MM-dd\") + \" \" + startDate).getTime();\n var date2 = new Date(endDate).getTime() || new Date(new Date().format(\"yyyy-MM-dd\") + \" \" + endDate).getTime();\n var res = 0;\n var days = date2 - date1;\n\n switch (op) {\n case \"month\":\n res = parseInt(days / (1000 * 60 * 60 * 24 * 30));\n break;\n\n case \"day\":\n res = parseInt(days / (1000 * 60 * 60 * 24));\n break;\n\n case \"hour\":\n res = parseInt(days / (1000 * 60 * 60));\n break;\n\n case \"minute\":\n res = parseInt(days / (1000 * 60));\n break;\n\n default:\n res = parseInt(days / 1000);\n }\n\n return res;\n },\n // 平铺结构转嵌套结构\n tile2nest: function tile2nest(array, key, pKey, childrenKey) {\n if (!array || array.constructor !== Array) {\n return array;\n } // 复制一份,避免修改原始数组\n\n\n var ary = _toConsumableArray(array);\n\n key = key || \"id\";\n pKey = pKey || \"parentId\";\n childrenKey = childrenKey || \"children\"; // 定义一个待移除数组\n\n var ary2remove = [];\n ary.map(function (item) {\n if (item[key] !== item[pKey]) {\n // 找父节点\n var p = ary.filter(function (c) {\n return c[key] === item[pKey];\n });\n\n if (p && p.length == 1) {\n p[0].children = p[0].children || []; // 将子节点放到父节点中\n\n p[0].children.push(item);\n ary2remove.push(item[key]);\n }\n }\n }); // 遍历移除待删除对象\n\n ary2remove.map(function (item) {\n ary = ary.filter(function (c) {\n return c[key] !== item;\n });\n });\n return ary;\n },\n // 从对象中获取和验证字段路径\n getAndValidPath: function getAndValidPath(obj, key) {\n if (!obj || obj.constructor != Object || !key || key.constructor != String) {\n return null;\n }\n\n if (!obj.hasOwnProperty(key)) {\n return null;\n }\n\n var path = obj[key];\n\n if (/^\\w+.*\\w+$/.test(path)) {\n return path;\n } else {\n return null;\n }\n },\n // 获取Vue实例中指定className的父实例\n getParentInstanceByClassName: function getParentInstanceByClassName(instance, className) {\n if (!instance) {\n throw \"VueComponent实例为空.\";\n }\n\n if (instance.$el.className && instance.$el.className.indexOf(className) > -1) {\n return instance;\n } else if (instance.$root && instance.$root._uid == instance._uid) {\n throw \"\\u67E5\\u627EVueComponent\\u5B9E\\u4F8B\\u6811\\u65F6\\u627E\\u5230\\u6839\\u8282\\u70B9\\u90FD\\u672A\\u627E\\u5230className\\u4E3A\".concat(className, \"\\u7684\\u5B9E\\u4F8B.\");\n } else if (instance.$parent) {\n return utils.getParentInstanceByClassName(instance.$parent, className);\n }\n },\n // 获取控件所在表单对应的实例对象\n getOnlineFormInstance: function getOnlineFormInstance(instance) {\n if (!instance) {\n throw \"VueComponent实例为空.\";\n }\n\n if (instance.$el.getAttribute && instance.$el.getAttribute(\"name\") === 'online-form') {\n return instance;\n } else if (instance.$root && instance.$root._uid == instance._uid) {\n throw \"\\u67E5\\u627EVueComponent\\u5B9E\\u4F8B\\u6811\\u65F6\\u627E\\u5230\\u6839\\u8282\\u70B9\\u90FD\\u672A\\u627E\\u5230name\\u4E3Aonline-form\\u7684\\u5B9E\\u4F8B.\";\n } else if (instance.$parent) {\n return utils.getOnlineFormInstance(instance.$parent);\n }\n },\n // 根据自定义标签名(组件名)获取某个Vue实例\n getInstanceByTag: function getInstanceByTag(instance, args) {\n if (!instance) {\n throw \"VueComponent实例为空.\";\n }\n\n if (args.includes(instance.$options._componentTag)) {\n return instance;\n } else if (instance.$root && instance.$root._uid == instance._uid) {\n throw \"\\u67E5\\u627EVueComponent\\u5B9E\\u4F8B\\u6811\\u65F6\\u627E\\u5230\\u6839\\u8282\\u70B9\\u90FD\\u672A\\u627E\\u5230name\\u4E3Atag\\u7684\\u5B9E\\u4F8B.\";\n } else if (instance.$parent) {\n return utils.getInstanceByTag(instance.$parent, args);\n }\n },\n // 获取Vue实例及父级实例中有reload方法的实例\n getReloadMethod: function getReloadMethod(instance) {\n if (!instance) {\n return null;\n }\n\n if (instance.reload && instance.reload.constructor === Function) {\n return instance;\n } else if (instance.$root && instance.$root._uid == instance._uid) {\n return null;\n } else if (instance.$parent) {\n return utils.getReloadMethod(instance.$parent);\n }\n },\n // 重新加载当前页面(不会刷新整个页面,只刷新router-view部分)\n reload: function reload() {\n var viewElementAry = document.getElementsByName(\"app-base-main\");\n\n if (!viewElementAry || viewElementAry.length != 1) {\n window.location.reload();\n } else {\n var viewInst = viewElementAry[0].__vue__;\n\n if (!viewInst || !viewInst._isVue) {\n window.location.reload();\n }\n\n var r = utils.getReloadMethod(viewInst);\n\n if (r) {\n r.reload();\n } else {\n window.location.reload();\n }\n }\n },\n // 获取在线表单的json格式字符串的表单数据(validate参数决定是否需要对表单进行验证)\n getOnlineFormData: function getOnlineFormData(validate) {\n return new Promise(function (resolve, reject) {\n var formElementAry = document.getElementsByName(\"online-form\");\n\n if (!formElementAry || formElementAry.length < 1) {\n var frmFrame = $('#frmFrame');\n\n if (frmFrame && frmFrame.length > 0) {\n var frm = frmFrame[0];\n var isCallBack = false;\n var cancelTimeout = false;\n var isTimeOut = false; // 子页面是否收到了消息\n\n var isRoger = false;\n frm.contentWindow.postMessage(\"saveData\", '*');\n window.addEventListener('message', function (e) {\n if (e.data && e.data.constructor == Object) {\n if (e.data.type == 'saveData' && !isCallBack) {\n isCallBack = true;\n\n if (e.data.state && !isTimeOut) {\n var iframeData = {\n businessKey: e.data.businessKey,\n sysCode: e.data.sysCode\n };\n\n if (e.data.vars) {\n iframeData.vars = e.data.vars;\n }\n\n resolve(iframeData);\n }\n } else if (e.data.type == 'cancelTimeout') {\n cancelTimeout = true;\n } else if (e.data.type == 'roger' && !isRoger) {\n isRoger = true;\n }\n }\n }); // 只要子页面引入了hotent.helper.js,父页面发送了消息后,子页面会马上回复`roger`。\n // 这里设置0.5秒后未收到`roger`消息则认为子页面未引入hotent.helper.js,此时直接reject。\n\n setTimeout(function () {\n if (!isRoger) {\n reject(6);\n }\n }, 500); // 设置10秒超时机制,如果超时则不再往下执行\n\n setTimeout(function () {\n if (!isCallBack && !cancelTimeout) {\n isTimeOut = true;\n reject(5);\n }\n }, 10000);\n } else {\n reject(1);\n }\n } else {\n var frmInst = formElementAry[0].__vue__;\n\n if (!frmInst || !frmInst._isVue) {\n reject(2);\n } //处理handsontable子表数据\n\n\n var refs = frmInst.$refs[\"onlineForm\"].$refs;\n var hotData = true;\n\n if (refs) {\n for (var ref in refs) {\n if (refs.hasOwnProperty(ref) && ref.indexOf('hottable.') == 0) {\n var refEle = refs[ref];\n hotData = refEle.getHotTableData(true);\n\n if (hotData && Array.isArray(hotData)) {\n var names = ref.split('.');\n\n if (hotData && Array.isArray(hotData)) {\n frmInst.data[names[1]][names[2]] = _toConsumableArray(hotData);\n } else {\n frmInst.data[names[1]][names[2]] = [];\n }\n }\n }\n }\n }\n\n if (!validate) {\n resolve(JSON.stringify(frmInst.data));\n return;\n }\n\n frmInst.$root.$validator.validateAll(\"custom-form\").then(function (result) {\n if (hotData === false) {\n //hottable子表数据校验失败\n reject(7);\n return;\n }\n\n if (result) {\n resolve(JSON.stringify(frmInst.data));\n } else {\n reject({\n reason: 3,\n errors: frmInst.$root.$validator.errors.items\n });\n }\n });\n }\n });\n },\n // 获取表单数据失败的处理\n handleGetFormDataReject: function handleGetFormDataReject(reason, needConfirm) {\n return new Promise(function (resolve, reject) {\n var errors = [];\n\n if (reason && reason.constructor == Object) {\n errors = reason.errors;\n reason = reason.reason;\n }\n\n switch (reason) {\n case 1:\n Message.error(\"未获取到在线表单或者URL表单.\");\n reject();\n break;\n\n case 2:\n Message.error(\"使用了在线表单,但是表单为空或者加载失败.\");\n reject();\n break;\n\n case 3:\n var errorMsg = [];\n errors && errors.forEach(function (e) {\n var fieldLabel = \"\";\n\n if (e.field) {\n if (e.field.indexOf(\"-\") != -1) {\n fieldLabel = e.field.substr(e.field.indexOf(\"-\") + 1);\n } else {\n fieldLabel = e.field;\n }\n }\n\n errorMsg.push(\"\".concat(fieldLabel, \" \").concat(e.msg));\n });\n\n if (errorMsg.length > 0) {\n if (document.getElementsByName(\"online-form\")[0]) {\n var frmInst = document.getElementsByName(\"online-form\")[0].__vue__;\n\n var jsonObj = frmInst.$refs.onlineForm.$refs;\n\n for (var key in jsonObj) {\n if (jsonObj[key].$el.textContent) {\n var textContent = jsonObj[key].$el.textContent;\n\n for (var i = 0; i < errorMsg.length; i++) {\n if (textContent.indexOf(errorMsg[i]) != -1) {\n document.getElementsByClassName(key)[0].style.color = \"red\";\n break;\n }\n }\n }\n }\n }\n\n utils.handleReject(errorMsg);\n } else {\n Message.warning(\"请正确的填写表单内容.\");\n }\n\n reject();\n break;\n\n case 5:\n Message.error(\"URL表单处理业务数据超时.\");\n reject();\n break;\n\n case 6:\n if (needConfirm) {\n MessageBox.confirm(\"URL表单页面未正确处理数据,是否仍然启动流程?\", {\n type: \"warning\"\n }).then(function () {\n return resolve();\n }).catch(function () {\n return reject();\n });\n } else {\n resolve();\n }\n\n break;\n\n case 7:\n //hottable子表数据校验失败。\n reject();\n break;\n\n default:\n Message.error(\"\\u83B7\\u53D6\\u8868\\u5355\\u6570\\u636E\\u65F6\\u53D1\\u751F\\u9884\\u671F\\u4E4B\\u5916\\u7684\\u5F02\\u5E38\\uFF0Creason:\".concat(reason));\n reject();\n break;\n }\n });\n },\n //关闭所有校验通知\n closeAllNotification: function closeAllNotification() {\n closeAllNotificationFlag = true;\n\n for (var key in notifications) {\n notifications[key].close();\n delete notifications[key];\n }\n },\n handleReject: function handleReject(errorMsg) {\n utils.closeAllNotification();\n closeAllNotificationFlag = false;\n var notifi = Notification.error({\n title: \"错误提示\",\n dangerouslyUseHTMLString: true,\n message: \"\\u8BF7\\u6B63\\u786E\\u7684\\u586B\\u5199\\u4EE5\\u4E0B\\u8868\\u5355\\u5185\\u5BB9\\uFF1A
\".concat(errorMsg.join('
')),\n duration: 0,\n onClose: function onClose() {\n if (!closeAllNotificationFlag) {\n setTimeout(function () {\n var n = Notification.warning({\n customClass: \"customClass\",\n duration: 0,\n showClose: false,\n onClick: function onClick() {\n n.close();\n utils.handleReject(errorMsg);\n }\n });\n notifications[n.id] = n;\n }, 10);\n }\n }\n });\n notifications[notifi.id] = notifi;\n },\n // 获取指定dom元素的父级中具有指定属性的dom元素\n getParentElementByAttribute: function getParentElementByAttribute(el, attribute) {\n if (!el || !el.hasAttribute || el.hasAttribute.constructor !== Function) {\n throw \"传入的元素el不能为空且必须为HTMLHtmlElement类型.\";\n }\n\n if (!attribute || attribute.constructor !== String) {\n throw \"传入的属性attribute不能为空且必须为String类型.\";\n }\n\n if (el.hasAttribute(attribute)) {\n return el;\n } else if (el.tagName === 'HTML') {\n return null;\n } else {\n return utils.getParentElementByAttribute(el.parentElement, attribute);\n }\n },\n // 从父级dom元素中获取指定属性的值\n getSomeAttributeFromParentElement: function getSomeAttributeFromParentElement(el, attribute) {\n var pEl = utils.getParentElementByAttribute(el, attribute);\n\n if (pEl && pEl.getAttribute && pEl.getAttribute.constructor === Function) {\n return pEl.getAttribute(attribute);\n }\n\n return null;\n },\n // 通过路径取得对象中的属性\n getValueByPath: function getValueByPath(obj, path, subIndex) {\n if (!obj || !path || path.constructor != String) {\n return null;\n }\n\n if (!/^\\w?.*[\\w|\\]]$/.test(path)) {\n return null;\n }\n\n var pathAry = path.split(\".\");\n\n if (pathAry.length == 1) {\n return obj[path];\n } else if (pathAry.length > 1) {\n var ret = obj;\n\n for (var i = 0; i < pathAry.length; i++) {\n var key = pathAry[i];\n var match = /^(\\w+)\\[(\\d+)\\]$/.exec(key);\n\n if (match) {\n ret = ret[match[1]][match[2]];\n } else if (ret && ret.constructor === Array) {\n var index = 0;\n\n if (subIndex != null && subIndex != undefined) {\n var preIndex = Number.parseInt(subIndex);\n\n if (!isNaN(preIndex)) {\n index = preIndex;\n }\n }\n\n ret = ret[index][key];\n } else {\n ret = ret[key];\n }\n }\n\n return ret;\n }\n\n return null;\n },\n // 通过路径设置对象中的属性\n setValueByPath: function setValueByPath(obj, path, value, subIndex) {\n if (!obj || !path || path.constructor != String) {\n return;\n }\n\n if (!/^\\w?.*[\\w|\\]]$/.test(path)) {\n return;\n }\n\n var pathAry = path.split(\".\");\n\n if (pathAry.length == 1) {\n obj[path] = value;\n } else if (pathAry.length > 1) {\n var ret = obj;\n\n for (var i = 0; i < pathAry.length; i++) {\n var key = pathAry[i];\n var match = /^(\\w+)\\[(\\d+)\\]$/.exec(key);\n\n if (i == pathAry.length - 1) {\n if (match) {\n ret[match[1]][match[2]] = value;\n } else if (ret && ret.constructor === Array) {\n var index = 0;\n\n if (subIndex != null && subIndex != undefined) {\n var preIndex = Number.parseInt(subIndex);\n\n if (!isNaN(preIndex)) {\n index = preIndex;\n }\n }\n\n obj.$set(ret[index], key, value); //ret[index][key] = value;\n } else {\n //ret[key] = value;\n obj.$set(ret, key, value);\n }\n } else {\n if (match) {\n ret = ret[match[1]][match[2]];\n } else {\n ret = ret[key];\n }\n }\n }\n }\n\n obj.$forceUpdate();\n },\n\n /**\r\n * 将字符串转为json对象。\r\n * @param jsonStr\r\n * @param type 可不填写parseToJson\r\n * @returns\r\n */\n parseToJson: function parseToJson(jsonStr, type) {\n type = type || 1;\n if (!jsonStr || jsonStr === \"\") return; //如果包含换行,下面解析json会报错,所以将换行替换为2个空格符\n\n jsonStr = jsonStr.replace(/\\n/g, \" \");\n\n try {\n switch (type) {\n case 1:\n return eval(\"(\" + jsonStr + \")\");\n break;\n\n case 4:\n JSON.parse(jsonStr);\n break;\n\n default:\n throw \"解析json对象错误\";\n break;\n }\n } catch (e) {\n return utils.parseToJson(jsonStr, type + 1);\n }\n },\n\n /**\r\n * 将数字转换成人名币大写。\r\n *\r\n * @param currencyDigits\r\n * @returns\r\n */\n convertCurrency: function convertCurrency(currencyDigits) {\n var MAXIMUM_NUMBER = 99999999999.99;\n var CN_ZERO = \"零\";\n var CN_ONE = \"壹\";\n var CN_TWO = \"贰\";\n var CN_THREE = \"叁\";\n var CN_FOUR = \"肆\";\n var CN_FIVE = \"伍\";\n var CN_SIX = \"陆\";\n var CN_SEVEN = \"柒\";\n var CN_EIGHT = \"捌\";\n var CN_NINE = \"玖\";\n var CN_TEN = \"拾\";\n var CN_HUNDRED = \"佰\";\n var CN_THOUSAND = \"仟\";\n var CN_TEN_THOUSAND = \"万\";\n var CN_HUNDRED_MILLION = \"亿\";\n var CN_SYMBOL = \"\";\n var CN_DOLLAR = \"元\";\n var CN_TEN_CENT = \"角\";\n var CN_CENT = \"分\";\n var CN_INTEGER = \"整\";\n var integral;\n var decimal;\n var outputCharacters;\n var parts;\n var digits, radices, bigRadices, decimals;\n var zeroCount;\n var i, p, d;\n var quotient, modulus;\n currencyDigits = currencyDigits.toString();\n\n if (currencyDigits == \"\") {\n return \"\";\n }\n\n if (currencyDigits.match(/[^,.\\d]/) != null) {\n return \"\";\n }\n\n if (currencyDigits.match(/^((\\d{1,3}(,\\d{3})*(.((\\d{3},)*\\d{1,3}))?)|(\\d+(.\\d+)?))$/) == null) {\n return \"\";\n }\n\n currencyDigits = currencyDigits.replace(/,/g, \"\");\n currencyDigits = currencyDigits.replace(/^0+/, \"\");\n\n if (Number(currencyDigits) > MAXIMUM_NUMBER) {\n return \"\";\n }\n\n parts = currencyDigits.split(\".\");\n\n if (parts.length > 1) {\n integral = parts[0];\n decimal = parts[1];\n decimal = decimal.substr(0, 2);\n } else {\n integral = parts[0];\n decimal = \"\";\n }\n\n digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);\n radices = new Array(\"\", CN_TEN, CN_HUNDRED, CN_THOUSAND);\n bigRadices = new Array(\"\", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);\n decimals = new Array(CN_TEN_CENT, CN_CENT);\n outputCharacters = \"\";\n\n if (Number(integral) > 0) {\n zeroCount = 0;\n\n for (i = 0; i < integral.length; i++) {\n p = integral.length - i - 1;\n d = integral.substr(i, 1);\n quotient = p / 4;\n modulus = p % 4;\n\n if (d == \"0\") {\n zeroCount++;\n } else {\n if (zeroCount > 0) {\n outputCharacters += digits[0];\n }\n\n zeroCount = 0;\n outputCharacters += digits[Number(d)] + radices[modulus];\n }\n\n if (modulus == 0 && zeroCount < 4) {\n outputCharacters += bigRadices[quotient];\n }\n }\n\n outputCharacters += CN_DOLLAR;\n }\n\n if (decimal != \"\") {\n for (i = 0; i < decimal.length; i++) {\n d = decimal.substr(i, 1);\n\n if (d != \"0\") {\n outputCharacters += digits[Number(d)] + decimals[i];\n }\n }\n }\n\n if (outputCharacters == \"\") {\n outputCharacters = CN_ZERO + CN_DOLLAR;\n }\n\n if (decimal == \"\") {\n outputCharacters += CN_INTEGER;\n }\n\n outputCharacters = CN_SYMBOL + outputCharacters;\n return outputCharacters;\n },\n\n /**\r\n * 数字格式转换成千分位\r\n *@param{Object}num\r\n */\n thousandBit: function thousandBit(num) {\n if ((num + \"\").trim() == \"\") {\n return \"\";\n }\n\n if (isNaN(num)) {\n return \"\";\n }\n\n num = num + \"\";\n\n if (/^.*\\..*$/.test(num)) {\n var pointIndex = num.lastIndexOf(\".\");\n var intPart = num.substring(0, pointIndex);\n var pointPart = num.substring(pointIndex + 1, num.length);\n var intPart = intPart + \"\";\n var re = /(-?\\d+)(\\d{3})/;\n\n while (re.test(intPart)) {\n intPart = intPart.replace(re, \"$1,$2\");\n }\n\n num = intPart + \".\" + pointPart;\n } else {\n num = num + \"\";\n var re = /(-?\\d+)(\\d{3})/;\n\n while (re.test(num)) {\n num = num.replace(re, \"$1,$2\");\n }\n }\n\n return num;\n },\n\n /**\r\n * 通过name获取页面url地址参数\r\n * @param name\r\n * @returns\r\n *\r\n */\n getUrlKey: function getUrlKey(name) {\n return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, \"\"])[1].replace(/\\+/g, '%20')) || null;\n },\n //选择器上下移\n down: function down(ary, selectArr, this_) {\n if (ary.length > 0 && selectArr.length > 0) {\n var idx = selectArr.indexOf(ary[ary.length - 1]);\n\n if (idx + 1 < selectArr.length) {\n var t = selectArr[idx + 1];\n selectArr[idx + 1] = selectArr[idx];\n selectArr[idx] = t;\n this_.calacInputSuffixHeight();\n this_.syncInputValue();\n }\n }\n },\n up: function up(ary, selectArr, this_) {\n if (ary.length > 0 && selectArr.length > 0) {\n var idx = selectArr.indexOf(ary[ary.length - 1]);\n\n if (idx != 0) {\n var t = selectArr[idx - 1];\n selectArr[idx - 1] = selectArr[idx];\n selectArr[idx] = t;\n this_.calacInputSuffixHeight();\n this_.syncInputValue();\n }\n }\n },\n Array: {\n //上移按钮\n up: function up(idx, list) {\n idx = parseInt(idx);\n\n if (idx < 1) {\n return;\n }\n\n var t = list[idx - 1];\n list[idx - 1] = list[idx];\n list[idx] = t;\n },\n //下移按钮\n down: function down(idx, list) {\n idx = parseInt(idx);\n\n if (idx >= list.length - 1) {\n return;\n }\n\n var t = list[idx + 1];\n list[idx + 1] = list[idx];\n list[idx] = t;\n },\n resumeSn: function resumeSn(list) {\n for (var k = 0; k < list.length; k++) {\n list[k].sn = k;\n }\n\n return list;\n },\n\n /**\r\n * idx 原位置\r\n * num 目标位置\r\n * list 数组\r\n */\n moveToNum: function moveToNum(idx, target, list) {\n if (target == -1) {\n target = 0;\n } else if (idx >= target) {\n target = target + 1;\n }\n\n var t = list.splice(idx, 1);\n list.insert(target, t[0]);\n this.resumeSn(list);\n },\n //删除按钮\n del: function del(idx, list) {\n list.splice(idx, 1);\n },\n //找到指定元素的未知\n idxOf: function idxOf(val, list) {\n for (var i = 0; i < list.length; i++) {\n if (list[i] == val) return i;\n }\n\n return -1;\n },\n //删除指定元素\n remove: function remove(val, list) {\n var idx = this.idxOf(val, list);\n\n if (idx > -1) {\n list.splice(idx, 1);\n }\n },\n //置顶\n top: function top(idx, list) {\n if (idx >= list.length || idx < 1) {\n return;\n } //逐个交换\n\n\n for (var i = 0; i < idx; i++) {\n var temp = list[i];\n list[i] = list[idx];\n list[idx] = temp;\n }\n },\n //置底\n bottom: function bottom(idx, list) {\n if (idx >= list.length - 1 || idx < 0) {\n return;\n } //逐个交换\n\n\n for (var i = list.length - 1; i > idx; i--) {\n var temp = list[i];\n list[i] = list[idx];\n list[idx] = temp;\n }\n }\n },\n\n /**\r\n * 对象转url参数\r\n * @param {*} data\r\n * @param {*} isPrefix\r\n */\n queryParams: function queryParams(data) {\n var isPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var prefix = isPrefix ? '?' : '';\n var _result = [];\n\n var _loop = function _loop(key) {\n var value = data[key]; // 去掉为空的参数\n\n if (['', undefined, null].includes(value)) {\n return \"continue\";\n }\n\n if (value.constructor === Array) {\n value.forEach(function (_value) {\n _result.push(encodeURIComponent(key) + '[]=' + encodeURIComponent(_value));\n });\n } else {\n _result.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n };\n\n for (var key in data) {\n var _ret = _loop(key);\n\n if (_ret === \"continue\") continue;\n }\n\n return _result.length ? prefix + _result.join('&') : '';\n },\n Menu: {\n addSubMenus: function addSubMenus(that, children) {\n var this_ = this;\n\n if (children && children.length > 0) {\n //\t\t\t\t\tif(!parent.children){\n //\t\t\t\t\t\tparent.children = [{path:'/', redirect:children[0].menuUrl}];\n //\t\t\t\t\t}\n children.forEach(function (m) {\n //const route = {path: m.menuUrl, name: m.alias, component: resolve => require([`@/${m.templateUrl}`], resolve )};\n //parent.children.push(route);\n if (m.children && m.children.length > 0) {\n this_.addSubMenus(that, m.children);\n }\n });\n }\n },\n addToRouter: function addToRouter(that, route) {\n var routes = that.$router.options.routes;\n var isIn = false;\n routes.forEach(function (r) {\n if (r.path == route.path) {\n isIn = true;\n }\n });\n\n if (!isIn) {\n that.$router.options.routes.push(route);\n that.$router.addRoutes([route]);\n }\n },\n addSyncMenus: function addSyncMenus(that, menus) {\n var _this2 = this;\n\n if (menus && menus.constructor === Array && menus.length > 0) {\n // 更新当前选中的菜单\n setTimeout(function () {\n var curRoutePath = that.$route.path;\n menus.forEach(function (m) {\n //将动态菜单添加到路由\n if (m.code != 'home' && m.code != 'statement' && that.menuMaps[m.code]) {\n //const route = {path: m.path, component: resolve => require([`@/${m.templateUrl}`], resolve )};\n //添加路由信息\n if (that.menuMaps[m.code] && that.menuMaps[m.code].length > 0) {\n _this2.addSubMenus(that, that.menuMaps[m.code]);\n } //this.addToRouter(that,route);\n\n }\n\n var p = new RegExp(\"^/\".concat(m.alias, \"/.*$\"));\n\n if (p.test(curRoutePath)) {\n that.activeMenuIndex = m.alias;\n }\n });\n }, 100);\n }\n }\n }\n}; // 在数组上扩展一个删除指定项的方法\n\nArray.prototype.remove = function (item) {\n this.splice(this.findIndex(function (v) {\n return v === item;\n }), 1);\n}; // 在数组上扩展一个去重的方法\n\n\nArray.prototype.unique = function (arg) {\n var res = new Map();\n return this.filter(function (m) {\n if (arg) {\n return !res.has(m[arg]) && res.set(m[arg], 1);\n } else {\n return !res.has(m) && res.set(m, 1);\n }\n });\n};\n\nexport default utils;",null]}