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