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