![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqIvd4P4-1660092916032)(1169AE9900C14841ACE12938CC4563B0)]](https://i-blog.csdnimg.cn/blog_migrate/2707c91e07f3175fc6e63e90ca5c8ce1.png)
第一步 store user 用户
login({ commit }, userInfo) {
const { username, password } = userInfo
console.log(1, '第一步:login')
return new Promise((resolve, reject) => {
login({
user_tel: username.trim(),
user_password: password
}).then(response => {
const { data } = response
console.log(data,'login 登录时候获取到的数据')
commit('SET_TITLE', data.title)
commit('SET_TOKEN', data.user.user_name)
setToken(data.user.user_role)
resolve()
commit('SET_USERID', data.user.user_id)
commit('SET_AVATAR', defaultSettings.ImgServer + data.user.user_icon)
setUserId(data.user.user_id)
setAvatar(defaultSettings.ImgServer + data.user.user_icon)
setTitle(data.title)
commit('SET_ROLES', user_role)
}).catch(error => {
reject(error)
})
})
},
第二步 store permission 用户路由权限
if (hasToken) {
if (to.path === '/login') {
next({
path: '/'
})
NProgress.done()
} else {
try {
if (hasRoles) {
next()
} else {
console.log(2, '路由守卫, 第一次从login 跳转')
const abc = await store.dispatch('user/nav')
const accessRoutes = await store.dispatch('permission/generateRoutes', abc)
router.addRoutes(accessRoutes)
next({
...to,
replace: true
})
}
} catch (error) {
await store.dispatch('user/resetToken')
Message.error(error || 'Has Error')
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
}
第三步 第一步 store user 注入组件
const actions = {
nav({
state
}) {
return new Promise((resolve, reject) => {
const abcd = []
console.log(3, '第三步:获取菜单')
console.log(state.title,'')
getUserTreeList({
user_id: state.user_id
}).then(res => {
let fatherPaths = res.data.map(item => item.tree_path)
console.log('第三步判断:有概况页面')
if (fatherPaths.includes('/')) {
} else {
console.log('第三步判断:不存在概况页面')
let p = {
path: '/',
hidden: true,
component: Layout,
redirect: res.data[0]?.childs[0].tree_path || res.data[0].tree_path,
}
abcd.push(p)
}
res.data.forEach(item => {
let p = {
path: item.tree_path,
component: Layout,
meta: {
title: item.tree_name,
icon: item.tree_icon
}
}
if (item.childs.length > 0) {
p.redirect = item.childs[0].tree_path
}
let childNav = item.childs ? item.childs : []
let c = childNav.map(item => {
return {
path: item.tree_path,
name: item.tree_path,
component: (resolve) => require([`@/views/${item.tree_component}`], resolve),
meta: {
title: item.tree_name
}
}
})
p.children = c
abcd.push(p)
})
resolve(abcd)
})
})
},
第四步 store permision.js 全局路由守卫
const actions = {
async generateRoutes({ commit,}, roles) {
console.log(4, '菜单')
var role=['admin','editor']
commit('user/SET_ROLES',role,{root:true})
return new Promise(resolve => {
let accessedRoutes
let four = [{
path: '*',
redirect: '/404',
hidden: true
}]
if (roles[0].path) {
accessedRoutes = [...roles,...four]||[]
} else {
accessedRoutes = four||[]
}
console.log(roles)
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
})
},
}