| 1 |
- {"remainingRequest":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/thread-loader/dist/cjs.js!/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/babel-loader/lib/index.js!/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/src/libs/util.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/src/libs/util.js","mtime":1618306924000},{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":1665684022107},{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/thread-loader/dist/cjs.js","mtime":1665684003955},{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/babel-loader/lib/index.js","mtime":1665684010704}],"contextDependencies":[],"result":["import Cookies from 'js-cookie'; // cookie保存的天数\n\nimport config from '@/config';\nimport { forEach, hasOneOf, objEqual } from '@/libs/tools';\nexport const TOKEN_KEY = 'token';\nexport const NAME_KEY = 'name';\nexport const setToken = token => {\n Cookies.set(TOKEN_KEY, token, {\n expires: config.cookieExpires || 1\n });\n};\nexport const setName = name => {\n Cookies.set(NAME_KEY, name, {\n expires: config.cookieExpires || 1\n });\n};\nexport const getToken = () => {\n const token = Cookies.get(TOKEN_KEY);\n if (token) return token;else return false;\n};\nexport const getName = () => {\n const name = Cookies.get(NAME_KEY);\n if (name) return name;else return false;\n};\nexport const hasChild = item => {\n return item.children && item.children.length !== 0;\n};\n\nconst showThisMenuEle = (item, access) => {\n if (item.meta && item.meta.access && item.meta.access.length) {\n if (hasOneOf(item.meta.access, access)) return true;else return false;\n } else return true;\n};\n/**\n * @param {Array} list 通过路由列表得到菜单列表\n * @returns {Array}\n */\n\n\nexport const getMenuByRouter = (list, access) => {\n let res = [];\n forEach(list, item => {\n if (!item.meta || item.meta && !item.meta.hideInMenu) {\n let obj = {\n icon: item.meta && item.meta.icon || '',\n name: item.name,\n meta: item.meta\n };\n\n if ((hasChild(item) || item.meta && item.meta.showAlways) && showThisMenuEle(item, access)) {\n obj.children = getMenuByRouter(item.children, access);\n }\n\n if (item.meta && item.meta.href) obj.href = item.meta.href;\n if (showThisMenuEle(item, access)) res.push(obj);\n }\n });\n return res;\n};\n/**\n * @param {Array} routeMetched 当前路由metched\n * @returns {Array}\n */\n\nexport const getBreadCrumbList = (route, homeRoute) => {\n let homeItem = { ...homeRoute,\n icon: homeRoute.meta.icon\n };\n let routeMetched = route.matched;\n if (routeMetched.some(item => item.name === homeRoute.name)) return [homeItem];\n let res = routeMetched.filter(item => {\n return item.meta === undefined || !item.meta.hide;\n }).map(item => {\n let meta = { ...item.meta\n };\n if (meta.title && typeof meta.title === 'function') meta.title = meta.title(route);\n let obj = {\n icon: item.meta && item.meta.icon || '',\n name: item.name,\n meta: meta\n };\n return obj;\n });\n res = res.filter(item => {\n return !item.meta.hideInMenu;\n });\n return [{ ...homeItem,\n to: homeRoute.path\n }, ...res];\n};\nexport const getRouteTitleHandled = route => {\n let router = { ...route\n };\n let meta = { ...route.meta\n };\n let title = '';\n\n if (meta.title) {\n if (typeof meta.title === 'function') title = meta.title(router);else title = meta.title;\n }\n\n meta.title = title;\n router.meta = meta;\n return router;\n};\nexport const showTitle = (item, vm) => {\n let title = item.meta.title;\n\n if (vm.$config.useI18n) {\n if (title.includes('{{') && title.includes('}}') && vm.$config.useI18n) title = title.replace(/({{[\\s\\S]+?}})/, (m, str) => str.replace(/{{([\\s\\S]*)}}/, (m, _) => vm.$t(_.trim())));else title = vm.$t(item.name);\n } else title = item.meta && item.meta.title || item.name;\n\n return title;\n};\n/**\n * @description 本地存储和获取标签导航列表\n */\n\nexport const setTagNavListInLocalstorage = list => {\n localStorage.tagNaveList = JSON.stringify(list);\n};\n/**\n * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项\n */\n\nexport const getTagNavListFromLocalstorage = () => {\n const list = localStorage.tagNaveList;\n return list ? JSON.parse(list) : [];\n};\n/**\n * @param {Array} routers 路由列表数组\n * @description 用于找到路由列表中name为home的对象\n */\n\nexport const getHomeRoute = (routers, homeName = 'home') => {\n let i = -1;\n let len = routers.length;\n let homeRoute = {};\n\n while (++i < len) {\n let item = routers[i];\n\n if (item.children && item.children.length) {\n let res = getHomeRoute(item.children, homeName);\n if (res.name) return res;\n } else {\n if (item.name === homeName) homeRoute = item;\n }\n }\n\n return homeRoute;\n};\n/**\n * @param {*} list 现有标签导航列表\n * @param {*} newRoute 新添加的路由原信息对象\n * @description 如果该newRoute已经存在则不再添加\n */\n\nexport const getNewTagList = (list, newRoute) => {\n const {\n name,\n path,\n meta\n } = newRoute;\n let newList = [...list];\n if (newList.findIndex(item => item.name === name) >= 0) return newList;else newList.push({\n name,\n path,\n meta\n });\n return newList;\n};\n/**\n * @param {*} access 用户权限数组,如 ['super_admin', 'admin']\n * @param {*} route 路由列表\n */\n\nconst hasAccess = (access, route) => {\n if (route.meta && route.meta.access) return hasOneOf(access, route.meta.access);else return true;\n};\n/**\n * 权鉴\n * @param {*} name 即将跳转的路由name\n * @param {*} access 用户权限数组\n * @param {*} routes 路由列表\n * @description 用户是否可跳转到该页\n */\n\n\nexport const canTurnTo = (name, access, routes) => {\n const routePermissionJudge = list => {\n return list.some(item => {\n if (item.children && item.children.length) {\n return routePermissionJudge(item.children);\n } else if (item.name === name) {\n return hasAccess(access, item);\n }\n });\n };\n\n return routePermissionJudge(routes);\n};\n/**\n * @param {String} url\n * @description 从URL中解析参数\n */\n\nexport const getParams = url => {\n const keyValueArr = url.split('?')[1].split('&');\n let paramObj = {};\n keyValueArr.forEach(item => {\n const keyValue = item.split('=');\n paramObj[keyValue[0]] = keyValue[1];\n });\n return paramObj;\n};\n/**\n * @param {Array} list 标签列表\n * @param {String} name 当前关闭的标签的name\n */\n\nexport const getNextRoute = (list, route) => {\n let res = {};\n\n if (list.length === 2) {\n res = getHomeRoute(list);\n } else {\n const index = list.findIndex(item => routeEqual(item, route));\n if (index === list.length - 1) res = list[list.length - 2];else res = list[index + 1];\n }\n\n return res;\n};\n/**\n * @param {Number} times 回调函数需要执行的次数\n * @param {Function} callback 回调函数\n */\n\nexport const doCustomTimes = (times, callback) => {\n let i = -1;\n\n while (++i < times) {\n callback(i);\n }\n};\n/**\n * @param {Object} file 从上传组件得到的文件对象\n * @returns {Promise} resolve参数是解析后的二维数组\n * @description 从Csv文件中解析出表格,解析成二维数组\n */\n\nexport const getArrayFromFile = file => {\n let nameSplit = file.name.split('.');\n let format = nameSplit[nameSplit.length - 1];\n return new Promise((resolve, reject) => {\n let reader = new FileReader();\n reader.readAsText(file); // 以文本格式读取\n\n let arr = [];\n\n reader.onload = function (evt) {\n let data = evt.target.result; // 读到的数据\n\n let pasteData = data.trim();\n arr = pasteData.split(/[\\n\\u0085\\u2028\\u2029]|\\r\\n?/g).map(row => {\n return row.split('\\t');\n }).map(item => {\n return item[0].split(',');\n });\n if (format === 'csv') resolve(arr);else reject(new Error('[Format Error]:你上传的不是Csv文件'));\n };\n });\n};\n/**\n * @param {Array} array 表格数据二维数组\n * @returns {Object} { columns, tableData }\n * @description 从二维数组中获取表头和表格数据,将第一行作为表头,用于在iView的表格中展示数据\n */\n\nexport const getTableDataFromArray = array => {\n let columns = [];\n let tableData = [];\n\n if (array.length > 1) {\n let titles = array.shift();\n columns = titles.map(item => {\n return {\n title: item,\n key: item\n };\n });\n tableData = array.map(item => {\n let res = {};\n item.forEach((col, i) => {\n res[titles[i]] = col;\n });\n return res;\n });\n }\n\n return {\n columns,\n tableData\n };\n};\nexport const findNodeUpper = (ele, tag) => {\n if (ele.parentNode) {\n if (ele.parentNode.tagName === tag.toUpperCase()) {\n return ele.parentNode;\n } else {\n return findNodeUpper(ele.parentNode, tag);\n }\n }\n};\nexport const findNodeUpperByClasses = (ele, classes) => {\n let parentNode = ele.parentNode;\n\n if (parentNode) {\n let classList = parentNode.classList;\n\n if (classList && classes.every(className => classList.contains(className))) {\n return parentNode;\n } else {\n return findNodeUpperByClasses(parentNode, classes);\n }\n }\n};\nexport const findNodeDownward = (ele, tag) => {\n const tagName = tag.toUpperCase();\n\n if (ele.childNodes.length) {\n let i = -1;\n let len = ele.childNodes.length;\n\n while (++i < len) {\n let child = ele.childNodes[i];\n if (child.tagName === tagName) return child;else return findNodeDownward(child, tag);\n }\n }\n};\nexport const showByAccess = (access, canViewAccess) => {\n return hasOneOf(canViewAccess, access);\n};\n/**\n * @description 根据name/params/query判断两个路由对象是否相等\n * @param {*} route1 路由对象\n * @param {*} route2 路由对象\n */\n\nexport const routeEqual = (route1, route2) => {\n const params1 = route1.params || {};\n const params2 = route2.params || {};\n const query1 = route1.query || {};\n const query2 = route2.query || {};\n return route1.name === route2.name && objEqual(params1, params2) && objEqual(query1, query2);\n};\n/**\n * 判断打开的标签列表里是否已存在这个新添加的路由对象\n */\n\nexport const routeHasExist = (tagNavList, routeItem) => {\n let len = tagNavList.length;\n let res = false;\n doCustomTimes(len, index => {\n if (routeEqual(tagNavList[index], routeItem)) res = true;\n });\n return res;\n};\nexport const localSave = (key, value) => {\n localStorage.setItem(key, value);\n};\nexport const localRead = key => {\n return localStorage.getItem(key) || '';\n};",null]}
|