New file |
| | |
| | | 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) |
| | | } |