import Cookies from 'js-cookie' const appConfig = require('@/app.config') const { cookieExpires } = appConfig export const TOKEN_KEY = 'token' export const ACCOUNT_KEY = 'account' export const setToken = (token) => { Cookies.set(TOKEN_KEY, token, { expires: cookieExpires || 1 }) } export const getToken = () => { const token = Cookies.get(TOKEN_KEY) if (token !== 'undefined') return token else return false } export const setAccount = (account) => { Cookies.set(ACCOUNT_KEY, account, { expires: cookieExpires || 1 }) } export const getAccount = () => { const account = Cookies.get(ACCOUNT_KEY) if (account) return account else return false } export const hasChild = (item) => { return item.children && item.children.length !== 0 } /** * @description 本地存储和获取标签导航列表 */ export const setTagNavListToLocalstorage = list => { localStorage.tagNaveList = JSON.stringify(list) } /** * @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项 */ export const getTagNavListFromLocalstorage = () => { const list = localStorage.tagNaveList return list ? JSON.parse(list) : [] } /** * @param {Array} routers 路由列表数组 * @description 用于找到路由列表中name为home的对象 */ export const getHomeRouter = (routers, homeName = 'Home') => { let i = -1 const len = routers.length let homeRoute = {} while (++i < len) { const item = routers[i] if (item.children && item.children.length) { const res = getHomeRouter(item.children, homeName) if (res.name) return res } else { if (item.name === homeName) homeRoute = item } } return homeRoute } /** * @param {*} list 现有标签导航列表 * @param {*} newRoute 新添加的路由原信息对象 * @description 如果该newRoute已经存在则不再添加 */ export const getNewTagList = (list, newRoute) => { const { name, path, meta } = newRoute const newList = [...list] if (newList.findIndex(item => item.name === name) >= 0) return newList else newList.push({ name, path, meta }) return newList } /** * @param {Number} times 回调函数需要执行的次数 * @param {Function} callback 回调函数 */ export const doCustomTimes = (times, callback) => { let i = -1 while (++i < times) { callback(i) } } export const findNodeUpper = (ele, tag) => { if (ele.parentNode) { if (ele.parentNode.tagName === tag.toUpperCase()) { return ele.parentNode } else { return findNodeUpper(ele.parentNode, tag) } } } export const findNodeUpperByClasses = (ele, classes) => { const parentNode = ele.parentNode if (parentNode) { const classList = parentNode.classList if (classList && classes.every(className => classList.contains(className))) { return parentNode } else { return findNodeUpperByClasses(parentNode, classes) } } } export const findNodeDownward = (ele, tag) => { const tagName = tag.toUpperCase() if (ele.childNodes.length) { let i = -1 const len = ele.childNodes.length while (++i < len) { const child = ele.childNodes[i] if (child.tagName === tagName) return child else return findNodeDownward(child, tag) } } } export const localSave = (key, value) => { localStorage.setItem(key, value) } export const localRead = (key) => { return localStorage.getItem(key) || '' } // scrollTop animation export const scrollTop = (el, from = 0, to, duration = 500, endCallback) => { if (!window.requestAnimationFrame) { window.requestAnimationFrame = ( window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { return window.setTimeout(callback, 1000 / 60) } ) } const difference = Math.abs(from - to) const step = Math.ceil(difference / duration * 50) const scroll = (start, end, step) => { if (start === end) { endCallback && endCallback() return } let d = (start + step > end) ? end : start + step if (start > end) { d = (start - step < end) ? end : start - step } if (el === window) { window.scrollTo(d, d) } else { el.scrollTop = d } window.requestAnimationFrame(() => scroll(d, end, step)) } scroll(from, to, step) }