feat: login event after request menus

This commit is contained in:
zy7y 2022-09-13 10:00:40 +08:00
parent 8e154d492a
commit fc1acab2d5
13 changed files with 148 additions and 6 deletions

BIN
backend/mini.db Normal file

Binary file not shown.

BIN
backend/mini.db-shm Normal file

Binary file not shown.

BIN
backend/mini.db-wal Normal file

Binary file not shown.

View File

View File

@ -1,14 +1,21 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import { userStore } from '@/stores/user'
import { ElMessage } from 'element-plus'
const routes = [ const routes = [
{ {
path: '/', path: '/',
redirect: '/login' redirect: '/main'
}, },
{ {
path: '/login', path: '/login',
meta: {title: '登录页'},
component: () => import('@/views/login.vue') component: () => import('@/views/login.vue')
},
{
path: '/main',
meta: {title: '主页'},
component: () => import('@/views/main.vue')
} }
] ]
@ -18,4 +25,20 @@ const router = createRouter({
routes: routes routes: routes
}) })
// 导航守卫
router.beforeEach((to) => {
// 修改页面标题
if(to.meta.title) {
document.title = to.meta.title
}
if (to.path !== "/login") {
if (userStore().token){
return
}
ElMessage.warning("请登录")
return '/login'
}
})
export default router export default router

View File

@ -7,3 +7,17 @@ export function login(data) {
data data
}); });
} }
// 获取用户信息
export function getUserInfo(uid){
return request({
url: `/user/${uid}`
})
}
// 获取权限信息
export function getMenus(rid){
return request({
url: `/role/${rid}/menu`
})
}

View File

@ -1,23 +1,40 @@
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import {login} from '@/service/user' import {getMenus, getUserInfo, login} from '@/service/user'
import router from '@/router'
export const userStore = defineStore('user', () => { export const userStore = defineStore('user', () => {
const uid = ref(0)
const token = ref("") const token = ref("")
const userInfo = ref({})
const userMenus = ref([])
// getter
const accessToken = computed(() => 'Bearer ' + token.value) const accessToken = computed(() => 'Bearer ' + token.value)
// 非setup语法时的actions // 非setup语法时的actions
const loginAction = async (data) => { const loginAction = async (data) => {
// 1. 登录
const res = await login(data) const res = await login(data)
token.value = res.data.token token.value = res.data.token
uid.value = res.data.id
// 2. 获取用户信息
const info = await getUserInfo(res.data.id)
userInfo.value = info.data
// 3. 获取权限信息
const menus = await getMenus(info.data.roles[0].id)
userMenus.value = menus.data
// 4. 跳转
router.push("/main")
// 弹框提示登录成功 // 弹框提示登录成功
ElMessage.success("登录成功.") ElMessage.success("登录成功.")
} }
return { uid, token, accessToken, loginAction } return { token, accessToken, userInfo, userMenus, loginAction }
}, { }, {
persist: true, // 解决pinia刷新时数据丢失问题 persist: true, // 解决pinia刷新时数据丢失问题
}) })

View File

@ -0,0 +1,44 @@
<script setup>
</script>
<template>
<div class="main">
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
</el-container>
</el-container>
</div>
</template>
<style scoped>
.main {
height: 100%;
}
.layout-container-demo .el-header {
position: relative;
background-color: var(--el-color-primary-light-7);
color: var(--el-text-color-primary);
}
.layout-container-demo .el-aside {
color: var(--el-text-color-primary);
background: var(--el-color-primary-light-8);
}
.layout-container-demo .el-menu {
border-right: none;
}
.layout-container-demo .el-main {
padding: 0;
}
.layout-container-demo .toolbar {
display: inline-flex;
align-items: center;
justify-content: center;
height: 100%;
right: 20px;
}
</style>

View File

@ -0,0 +1,11 @@
<script setup>
</script>
<template>
<div>about</div>
</template>
<style scoped>
</style>

View File

@ -0,0 +1,11 @@
<script setup>
</script>
<template>
<div>menu</div>
</template>
<style scoped>
</style>

View File

@ -0,0 +1,11 @@
<script setup>
</script>
<template>
<div>role</div>
</template>
<style scoped>
</style>

View File

@ -0,0 +1,11 @@
<script setup>
</script>
<template>
<div>user</div>
</template>
<style scoped>
</style>