import moment from "moment"; import React, { useRef, useState } from "react"; import { message, notification, Button } from "antd"; import { getFineBiToken, getPreFineBiUrl } from "@apis/outer"; import { getDmpAccessUrl, getValueByDictCode } from "@apis/dict"; import { getSheetToken } from "@apis/common"; import { switchPage, getUnionId } from "@apis/common.js"; import $store from "@store/"; import utils from "@utils/index"; import RouterCache from '@utils/routerCache'; /** * 公用事件封装文件 */ /**获取url的参数*/ export function getParams(url = "") { url = url || location.href || ""; let args = {}; // 保存参数数据的对象 if (url.indexOf("=") === -1) { return args; } let urlSplit = url.split(/[?&#]/g); urlSplit.map((item, index) => { let str = item.split("="); if (str.length > 1) { args[str[0]] = decodeURIComponent(str[1]); } }); return args; } export function sortby(prop, rev = true) { // prop 属性名 // rev 升序降序 默认升序 return function(a, b) { var val1 = a[prop]; var val2 = b[prop]; return rev ? val1 - val2 : val2 - val1; } } /**下载文件*/ export function download(param) { // 文件类型是否为pdf let type = param.slice(-3); if (type === "pdf") { var saveAs = function (blob, filename) { var URL = window.URL || window.webkitURL; var type = blob.type; var force_saveable_type = "application/octet-stream"; if (type && type !== force_saveable_type) { // 强制下载,而非在浏览器中打开 var slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call(blob, 0, blob.size, force_saveable_type); } var url = URL.createObjectURL(blob); var save_link = document.createElementNS( "http://www.w3.org/1999/xhtml", "a" ); save_link.href = url; save_link.download = filename; var event = new MouseEvent("click", { bubbles: true, cancelable: true, view: window, }); save_link.dispatchEvent(event); URL.revokeObjectURL(url); }; var oReq = new XMLHttpRequest(); var URLToPDF = param; oReq.open("GET", URLToPDF, true); oReq.responseType = "blob"; oReq.onload = function () { var file = new Blob([oReq.response], { type: "application/pdf" }); saveAs(file, "我的策划案.pdf"); }; oReq.send(); return; } // let elemIF = document.createElement('iframe'); // elemIF.src = param; // elemIF.style.display = "none"; // document.body.appendChild(elemIF); } // downLoad('XXXX' ,'test.xlxs') /** * * @param href * @param fileName * @param isBlock 是否文件流 */ export function downLoad2(href, fileName, isBlock = false) { let aEle = document.createElement("a"); // 创建a标签 if (isBlock) { let blob = new Blob([href]); aEle.download = fileName; // 设置下载文件的文件名 aEle.href = window.URL.createObjectURL(blob); } else { aEle.download = fileName; // 设置下载文件的文件名 aEle.href = href; // content为后台返回的下载地址 } // 绑定点击时间 document.body.appendChild(aEle); aEle.click(); // 设置点击事件 // 然后移除 document.body.removeChild(aEle); } /*** * 解决js精度问题 * method ** * add / subtract / multiply /divide * floatObj.add(0.1, 0.2) >> 0.3 * floatObj.multiply(19.9, 100) >> 1990 * */ export var FloatObj = (function () { function decNum(a) { /*获取小数位数*/ var r = 0; a = a.toString(); if (a.indexOf(".") !== -1) { r = a.split(".")[1].length; } return r; } function int(a) { /*去除小数点并转成数值*/ return parseInt(a.toString().replace(".", "")); } function calc(a, b, type) { //加减乘除 var r, da = decNum(a), db = decNum(b), dsum = da + db, dmin = Math.min(da, db), dmax = Math.max(da, db); dsum += dmax - dmin; dsum = Math.pow(10, dsum); dmax = Math.pow(10, dmax); a = int(a); b = int(b); if (da > db) { b *= Math.pow(10, da - db); } else { a *= Math.pow(10, db - da); } switch (type) { case "add": r = (a + b) / dmax; break; case "subtract": r = (a - b) / dmax; break; case "multiply": r = (a * b) / dsum; break; case "divide": r = a / b; break; case "mod": r = (multiply(a, dmax) % multiply(b, dmax)) / dmax; break; } return r; } // 加减乘除的四个接口 // 加 function add(a, b, type) { return calc(a, b, "add"); } // 减 function subtract(a, b, type) { return calc(a, b, "subtract"); } // 乘 function multiply(a, b, type) { return calc(a, b, "multiply"); } // 除 function divide(a, b, type) { return calc(a, b, "divide"); } // 取余 function mod(a, b, type) { return calc(a, b, "mod"); } // exports return { add: add, subtract: subtract, multiply: multiply, divide: divide, mod: mod, formatNum: formatNum, }; })(); // 生成水印 export function setWaterMark(option = {}) { let arr = []; let { waterMarkText = "", eleId = "", toImg = false, toDataURL = false, rotate = 45, color = "rgba(180, 180, 180, 0.2)", // color='red', fontSize = 12, gap = 40, globalAlpha = 1, } = option; if (Object.prototype.toString.call(waterMarkText) == "[object Array]") { arr = waterMarkText; } else if ( Object.prototype.toString.call(waterMarkText) == "[object String]" ) { arr = [waterMarkText]; } var canvas = eleId ? document.getElementById(eleId) : document.createElement("canvas"); if (!canvas) { return false; } var ctx = canvas.getContext("2d"); let horizontalWidth = ctx.measureText(waterMarkText).width; // horizontalWidth = // Math.sqrt((horizontalWidth * horizontalWidth) / 2) + fontSize; // horizontalWidth = horizontalWidth; canvas.width = horizontalWidth * 1 + 20; canvas.height = horizontalWidth * 1 + 20; ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillStyle = color; ctx.globalAlpha = globalAlpha; ctx.font = `${fontSize}px Microsoft Yahei`; // ctx.translate(horizontalWidth/2, horizontalWidth/2); const draw = (text, x, y) => { ctx.save(); ctx.translate(x, y); ctx.rotate((-rotate / 180) * Math.PI); ctx.fillText(text, 0, 0); ctx.restore(); }; arr.map((item, index) => { ctx.beginPath(); draw(item, horizontalWidth / 2 - 20, index * 20 + horizontalWidth / 2 - 20); // ctx.fillText(item, index * 100, index * 100); ctx.closePath(); }); if (toImg) { // debugger //新Image对象,可以理解为DOM var image = new Image(); // canvas.toDataURL 返回的是一串Base64编码的URL // 指定格式 PNG let src = canvas.toDataURL("image/png"); image.src = src; return image; } else if (toDataURL) { let src = canvas.toDataURL("image/png"); return src; } return canvas; } /**带小数的千分位转化*/ export function formatNum(num = 0, n = 0) { try { if (!num || isNaN(num)) { return num; } num = String(Number(num).toFixed(n)); var re = /(-?\d+)(\d{3})/; while (re.test(num)) { num = String(num).replace(re, "$1,$2"); } return num; } catch (e) { } } /**判断一个时间是否在某个时间端内*/ export function isTimes(newdate, startdate, enddate) { var newdate = newdate ? new Date(newdate) : new Date(); var startdate = new Date(startdate); console.log(newdate); console.log(startdate); var enddate = new Date(enddate); var a = newdate.getTime() - startdate.getTime(); var b = newdate.getTime() - enddate.getTime(); console.log(a); console.log(b); if (a < 0 || b > 0) { return false; } else { return true; } } export function recursion(tree = [], oldParam_ = { '200000': '移动端首页' }) { // let param_ = {}; for (let index = 0; index < tree.length; index++) { const item = tree[index]; oldParam_[item.resourceId] = item.resourceName; // 保存每次遍历的结果 if ((item.resourceList).length > 0) { recursion(item.resourceList, oldParam_); } } return oldParam_ } export function calcEnc(str) { let res = []; for (let i = 0; i < str.length; i++) { res.push((str.charCodeAt(i) + 13) * Math.pow(2, i)); } return window.btoa(res.join("%")); } export function tipsLockStatus(callback) { const key = `open${Date.now()}`; const btn = ; notification.open({ message: '消息提示', description: `您的密码将于${sessionStorage.getItem("accountLockTime")}过期,过期后将无法使用数据门户,请点击“确认”立即修改密码,或在3天内前往【首页-右上角-点击头像】修改密码!`, btn, duration: null, placement: 'topLeft', key, style: { width: "600px", bottom: "auto", minHeight: "200px", borderRadius: "10px", }, onClose: () => { }, }); } /**相对时间差 */ export function timeDiffer(date) { let nowTime = moment(); //当下时间 // let nowTime=moment('2019-12-18 10:10:00'); let createTime = moment(date); let du = moment.duration(nowTime - createTime, "ms"); //做差 let years = du.get("year"); let months = du.get("month"); let days = du.get("days"); let hours = du.get("hours"); let mins = du.get("minutes"); let ss = du.get("seconds"); if (years > 0) { return years + "年前"; } else if (months > 0) { return months + "月前"; } else if (days > 0) { return days + "天前"; } else if (hours > 0) { return hours + "小时前"; } else if (mins > 0) { return mins + "分钟前"; } else { return ss + "秒前"; } } export function timestampToTime() { var d = new Date(); var datetime = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); return datetime } export function getArrMax(arr) { arr.sort(function (a, b) { return a - b }) return arr[arr.length - 1] } export async function dealDiffSheetType(item) { return new Promise((resolve, reject) => { let type = item.resourceType; if (item.resourceUrl) { const new_url = item.resourceUrl.indexOf("?") === -1 ? item.resourceUrl + `?accountNm=${localStorage.getItem("account")}` : item.resourceUrl + `&accountNm=${localStorage.getItem("account")}` if (item.resourceUrl.indexOf("datav.aliyuncs.com") > -1 && item.resourceUrl.indexOf("accountNm=") === -1) { item.resourceUrl = new_url; } } switch (item.resourceType) { case "sys": if (item.openType === "blank") { window.open( `${window.location.protocol}//${window.location.host}/#${item.resourceUrl}` ); } resolve({ openType: item.openType, link: item.resourceUrl, type, activeItem: item }); break; case "report": case "yonghong": (async () => { let link = item.resourceUrl; // 遇到 &reportToken 标识符,获取token并拼接到url后 if (link.match(/reportToken/)) { try { let { data, code } = await getSheetToken({ tenantId: "1234", appCode: "admin", appPassword: "MTIzNDU2", }); sessionStorage.setItem("outerToken", data); link = link.replace(/reportToken/, `reportToken=${data}&userName=${sessionStorage.getItem("userName")}&userCode=${sessionStorage.getItem("accountId")}`); sessionStorage.setItem("outerUrl", item.resourceType == "yonghong" ? link + `&token=${sessionStorage.getItem("token")}` : link); console.log("dy4", `拿到token了${data}`);//谜之加了console就不会有获取不到token的情况 resolve({ openType: item.openType, link: link, type: "report", activeItem: item }); } catch (e) { console.error("获取报表token失败哦"); } } else { sessionStorage.setItem("outerUrl", item.resourceType == "yonghong" ? link + `&token=${sessionStorage.getItem("token")}` : link); if (item.openType === "blank") { window.open(item.resourceType == "yonghong" ? item.resourceUrl + `&token=${sessionStorage.getItem("token")}` : item.resourceUrl); } resolve({ openType: item.openType, link: link, type: "report", activeItem: item }); } })(); break; case "module": (async () => { let link = item.resourceUrl; // 遇到 &reportToken 标识符,获取token并拼接到url后 if (link.match(/reportToken/)) { try { let { data, code } = await getSheetToken({ tenantId: "1234", appCode: "admin", appPassword: "MTIzNDU2", }); link = link.replace(/reportToken/, `reportToken=${data}&userName=${sessionStorage.getItem("userName")}&userCode=${sessionStorage.getItem("accountId")}`); } catch (e) { console.error("获取报表token失败哦"); } } sessionStorage.setItem("outerUrl", link); resolve({ openType: item.openType, link: link, type: "module", activeItem: item }); })(); break; case "url": sessionStorage.setItem("outerUrl", item.resourceUrl); if (item.openType === "blank") { window.open(item.resourceUrl); } resolve({ openType: item.openType, link: item.resourceUrl, type: "url", activeItem: item }); break; case "dmpReport": getDmpAccessUrl({ account: sessionStorage.getItem("account") || sessionStorage.getItem("userName"), url: item.resourceUrl, }).then((resp) => { if (+resp.resultCode === 0) { if (item.openType === "blank") { window.open(resp.data, "dmp"); } sessionStorage.setItem("outerUrl", resp.data); resolve({ openType: item.openType, link: resp.data, type: "dmpReport", activeItem: item }); } else { message.error("网络出错了!"); reject(); } }); break; case "thirdsys": window.open(item.resourceUrl, "third"); resolve({ openType: item.openType, link: item.resourceUrl, type: "thirdsys", activeItem: item }); break; case "fine_bi": case "fine_bi_new": getPreFineBiUrl(item.resourceType).then(async (resp) => { if (+resp.resultCode === 0) { let resourceUrl = item.resourceUrl; if (!resourceUrl.match(/^http/)) { resourceUrl = `//${window.location.host}${item.resourceUrl}`; } let link = `${resp.data}${resourceUrl}`.replace( /http:|https:/g, "" ); // 遇到 &reportToken 标识符,获取token并拼接到url后 // if (link.match(/reportToken/)) { // try { // let { data, code } = await getSheetToken({ // tenantId: "1234", // admin: "user", // appPassword: "MTIzNDU2", // }); // link = link.replace(/reportToken/, data); // } catch (e) { // console.error("获取报表token失败哦"); // } // } if (item.openType === "blank") { window.open(link, "fine_bi"); } sessionStorage.setItem("outerUrl", link); resolve({ openType: item.openType, link, type: "fine_bi", activeItem: item }); } }); break; case "fine_tool": case "fine_tool_new": getPreFineBiUrl(item.resourceType).then(async (resp) => { if (+resp.resultCode === 0) { let resourceUrl = item.resourceUrl; if (!resourceUrl.match(/^http/)) { resourceUrl = `//${window.location.host}${item.resourceUrl}`; } let link = `${resp.data}${resourceUrl}`.replace( /http:|https:/g, "" ); // 遇到 &reportToken 标识符,获取token并拼接到url后 // if (link.match(/reportToken/)) { // try { // let { data, code } = await getSheetToken({ // tenantId: "1234", // admin: "user", // appPassword: "MTIzNDU2", // }); // link = link.replace(/reportToken/, data); // } catch (e) { // console.error("获取报表token失败哦"); // } // } if (item.openType === "blank") { window.open(link, "fine_tool"); } sessionStorage.setItem("outerUrl", link); resolve({ openType: item.openType, link, type: "fine_tool", activeItem: item }); } }); break; default: sessionStorage.setItem("outerUrl", item.resourceUrl); sessionStorage.setItem("routeName", item.resourceName); getValueByDictCode({ dictCode: "report_param" }).then( ({ data, resultCode }) => { if (+resultCode === 0) { let types = data.map((item) => { item.key = item.dictValueId; return item; }); let queryString = ""; let paramTypeStr = ( types.filter( (type) => type.dictKey === data.resourceType )[0] || {} ).dictValue || {}; let paramType = JSON.parse(paramTypeStr); // 需要接口返回token if (paramTypeStr.match(/fine_auth_token/)) { getFineBiToken().then((resp) => { if (+resp.resultCode === 0) { document.cookie = `fine_auth_token=${data};fine_remember_login=-1`; queryString = `fine_auth_token=${resp.data}`; sessionStorage.setItem("queryString", queryString); resolve({ openType: item.openType, link: queryString, type: "default", activeItem: item }); } }); } else { for (let k in paramType) { queryString += `&${k}=${calcValue(paramType[k])}`; } sessionStorage.setItem("queryString", queryString.substr(1)); } resolve({ openType: item.openType, link: queryString.substr(1), type: "default", activeItem: item }); } } ); break; } }); } const navToUrl = (item, callback) => { sessionStorage.setItem("curNodeId", item.resourceId); // sessionStorage.setItem("jumpType", item.props.type); dealDiffSheetType(item).then((response) => { if (response.type === "sys") { callback && callback(response.link); } else { callback && callback(`/home/outer/${response.activeItem.resourceId}`); } }); }; /**跨导航栏转跳 */ export function crossMenuClick(f_url, s_url, callback) { let activeTree = utils.findNodeTree($store.sysMenu.menuList, f_url, "resourceUrl"); let activeTreeSon = utils.findNodeTree($store.sysMenu.menuList, s_url, "resourceUrl"); handleClickForUtil(activeTree, "", ((res) => { callback && callback(res); }), activeTreeSon) } /**一级导航栏转跳 */ export function handleClickForUtil(e, type, callback, goSonUrl) { localStorage.setItem("account", sessionStorage.getItem("userName")); let item = null; let submenuList = []; let activeUrl = ""; let locationUrl = ""; let isOuter = false; let isBi = false; if (!goSonUrl) { if (type === "cust") { if (e.target.tagName.match(/li/i)) { item = JSON.parse(e.target.dataset.key || {}); } else { item = JSON.parse(e.target.parentNode.dataset.key || {}); } } else if (type === "item_cust") {//直接传递对象的 item = e; } else { if (e === null) { // message.warning('抱歉!您没有此功能权限!'); return } else { const item_s = e && e.resourceId ? e : (e && e.key ? JSON.parse(e.key) : {}) item = item_s; } } } else { item = e; } sessionStorage.setItem("topNavUrl", item.resourceUrl) if (item.openType === "close") { message.destroy(); return message.warning("该菜单暂未开放"); } if ( item.resourceName === "驾驶舱" || item.resourceName === "报表中心" || item.resourceName === "填报中心" ) { switchPage({ // pageId: relationship[key].pageId, modelName: item.resourceName, pageName: item.resourceName, pageUrl: item.resourceUrl, resourceId: item.resourceId, visitId: sessionStorage.getItem("unionId"), }); $store.sysMenu.setIsShowLeftMenuSearch(true); } else { switchPage({ // pageId: relationship[key].pageId, modelName: item.resourceName, pageName: item.resourceName, pageUrl: item.resourceUrl, resourceId: item.resourceId, visitId: sessionStorage.getItem("unionId"), }); $store.sysMenu.setIsShowLeftMenuSearch(false); } // 一体化跳转处理 if ((item.resourceUrl || "").includes("integration")) { activeUrl = item.resourceUrl; $store.app.setActivedUrl(activeUrl); return navToUrl(item, callback); } // 切换一级菜单清空选项卡 // $store.app.setNavList([], "set"); // 如果是工作台(没二级菜单),重新添加一个nav if (item.resourceUrl === "/home/work" || item.resourceUrl === "/home/reportForWork") { $store.app.setNavList({ name: item.resourceName, path: item.resourceUrl, type: item.resourceType, openType: item.openType, id: item.resourceId, }); sessionStorage.setItem("curNodeId", item.resourceId); $store.app.setCurNav(item.resourceUrl); $store.app.setRefresh(Date.now()); } // 判断是否有子集菜单 if (Array.isArray(item.resourceList) && item.resourceList.length > 0) { if (goSonUrl) { locationUrl = goSonUrl.resourceUrl; submenuList = item.resourceList; activeUrl = goSonUrl.resourceUrl; } else if ((item.resourceList[0] || {}).resourceType === "url") { locationUrl = (item.resourceList[0] || {}).resourceUrl; submenuList = item.resourceList; activeUrl = item.resourceUrl; } else { locationUrl = `/home/outer/${item.resourceId}`; submenuList = item.resourceList; activeUrl = item.resourceUrl; isOuter = true; } } else { if (item.resourceType === "url") { locationUrl = item.resourceUrl; submenuList = []; activeUrl = item.resourceUrl; } else if (item.resourceType === "fine_tool") { submenuList = []; activeUrl = item.resourceUrl; isBi = true; } else { locationUrl = `/home/outer/${item.resourceId}`; submenuList = item.resourceList; activeUrl = item.resourceUrl; isOuter = true; } } // setCurActived(activeUrl); $store.app.setActivedUrl(activeUrl); $store.sysMenu.setSubmenuList(submenuList); sessionStorage.setItem("subMenuList", JSON.stringify(submenuList)); $store.app.setRefresh(Date.now()); if (item.resourceList.length > 0) { let { resourceName, resourceUrl, resourceType, openType, resourceId } = goSonUrl ? goSonUrl : (item.resourceList[0] || {}); $store.app.setNavList({ name: resourceName, path: resourceUrl, type: resourceType, openType: openType, id: resourceId, }); // 记录当前选项卡url $store.app.setCurNav(resourceUrl); } if (isBi) { return navToUrl(item, callback); } if (isOuter) { if (!item.defaultOpen) { $store.app.setCurNav(""); $store.app.setNavList([], "set"); sessionStorage.setItem("outerUrl", ""); if (item.openType === "blank") { return window.open( `${window.location.protocol}//${window.location.host}/#/home/outer` ); } return callback && callback(`/home/outer/${item.resourceId}`); } //防止第一个菜单是2级菜单 let _items = {}; if (item.resourceList.length > 0 && item.resourceList[0].resourceType != "folder") { _items = item.resourceList[0] } else if (item.resourceList.length > 0 && item.resourceList[0].resourceType == "folder" && item.resourceList[0].resourceList.length > 0) { _items = item.resourceList[0].resourceList[0] } else { _items = item } return navToUrl( goSonUrl ? goSonUrl : _items, callback ); } else { if (!item.defaultOpen) { $store.app.setCurNav(""); $store.app.setNavList([], "set"); sessionStorage.setItem("outerUrl", ""); if (item.openType === "blank") { return window.open( `${window.location.protocol}//${window.location.host}/#/home/outer` ); } return callback && callback(`/home/outer/${item.resourceId}`); } callback && callback(locationUrl); } } export function checkIsIe10() { if (window.ActiveXObject) { var reg = /10\.0/ var str = navigator.userAgent if (reg.test(str)) { return true } } return false } export function getSheetToolToken(item) { let link = item.resourceUrl; // 遇到 &reportToken 标识符,获取token并拼接到url后 if (link.match(/reportToken/)) { getSheetToken({ tenantId: "1234", appCode: "admin", appPassword: "MTIzNDU2", }) .then(({ data, code }) => { link = link.replace(/reportToken/, `reportToken=${data}&userName=${sessionStorage.getItem("userName")}&userCode=${sessionStorage.getItem("accountId")}`); }) .catch((e) => { console.error("获取报表token失败哦"); }); } // sessionStorage.setItem("outerUrl", link); return link; } function calcValue(str) { if (str === "sysToken") { return `${sessionStorage.getItem("token")}$`; } } // 格式化树结构 export function mapTree(tree, c_name, la_name, k_name, k = 1) { const haveChildren = Array.isArray(tree[c_name]) && tree[c_name].length > 0; return { ...tree, // level: k++, groupValue: tree.parentName + tree.permissionType + tree.dataResourceName, title: tree[la_name], key: tree.parentName + tree.permissionType + tree.dataResourceName + '', value: tree.parentName + tree.permissionType + tree.dataResourceName + '', // 判断它是否存在子集,若果存在就进行再次进行遍历操作,知道不存在子集便对其他的元素进行操作 children: haveChildren ? tree[c_name].map(i => mapTree(i, c_name, la_name, k_name, k)) : [] }; } // 格式化数据源树结构 export function mapTree2(tree, c_name, la_name, isChildren = false, fathers) { let old_c_name = c_name; let old_la_name = la_name; if (!tree[c_name] && tree["dbs"]) { old_c_name = "dbs" old_la_name = "name" } const haveChildren = Array.isArray(tree[old_c_name]) && tree[old_c_name].length > 0; const lastFather = tree['dsId'] ? tree : { ...tree, ...{ dsId: fathers['dsId'], name: fathers['name'] } } const par = { // disabled:true, dsId: tree['dsId'] ? tree['dsId'] : fathers['dsId'], name: tree['name'] ? tree['name'] : (fathers[old_la_name] || fathers['name']), // title: haveChildren ? tree[old_la_name] : tree, title: haveChildren ? tree[old_la_name] : tree, key: haveChildren ? tree[old_la_name] : tree, value: haveChildren ? tree[old_la_name] : tree, // 判断它是否存在子集,若果存在就进行再次进行遍历操作,知道不存在子集便对其他的元素进行操作 children: haveChildren ? tree[old_c_name].map(i => mapTree2(i, c_name, la_name, old_c_name != "dbs", lastFather)) : [], } return par; } export function getThousandNum(num){ if(!num){return 0} //统一保留2位小数 // num = Math.floor(num*100)/100; num = num.toFixed(2); var TextBox8_all = num+""; var text8_sum = TextBox8_all.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g,'$1,'); return text8_sum; } //大屏转跳-去除缓存 export function deleteCacheAndChangeUrl(url,callback){ RouterCache.deleteCache(url) setTimeout(()=>{ callback && callback(url) },300) } // 格式化树结构 export function findTreeAllNode(tree) { const haveChildren = Array.isArray(tree.children) && tree.children.length > 0; if (haveChildren) { return tree.children.map(i => findTreeAllNode(i)) } else { return tree } } /** * 使用crypto-js的AES算法进行加解密 */ const CryptoJS_key = CryptoJS.enc.Utf8.parse('1234123412ABCDEF') //十六位十六进制数作为密钥 const CryptoJS_iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412') //十六位十六进制数作为密钥偏移量 //加密方法 export function Encrypt(word) { const srcs = CryptoJS.enc.Utf8.parse(word) const encrypted = CryptoJS.AES.encrypt(srcs, CryptoJS_key, { iv: CryptoJS_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) const hexStr = encrypted.ciphertext.toString().toUpperCase() var oldHexStr = CryptoJS.enc.Hex.parse(hexStr) // 将密文转为Base64的字符串 const base64Str = CryptoJS.enc.Base64.stringify(oldHexStr) return base64Str } //解密方法 export function Decrypt(word) { /* * const encryptedHexStr = CryptoJS.enc.Hex.parse(word) * const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr) */ const decrypt = CryptoJS.AES.decrypt(word, CryptoJS_key, { iv: CryptoJS_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8) return decryptedStr.toString() } export function queryToObj() { const url = window.location.href; const result = {}; const urlSplit = url.split('?'); const len = urlSplit.length - 1; const queryParam = urlSplit[len] || ''; queryParam .split('&') .filter(str => str !== '') .forEach(str => { const [key, value] = str.split('='); result[key] = value; }); return result; }; /** * 字符串模板转换 ,将数据源对应{键}的值填入str * * @param {*} str 字符串 * @param {*} source 数据源 * @param {*} handle 处理函数 * @returns */ export function strFormat(str, source, handle = () => { }) { if (str instanceof Function) { return str(source); } else if (!isObject(source)) { return str; } const data = { ...source }; const r = /{[^}]+}/; while (r.test(str)) { const key = str.match(r).toString().replace("{", "").replace("}", ""); const value = get(data, key, []); const ids = toArray(value).filter((id) => id != null); str = str.replace(r, ids.join(",")); handle(key, value); } return str; };