From fc1acab2d50c513dd4dba3228f42bb124a01a15f Mon Sep 17 00:00:00 2001 From: zy7y <13271962515@163.com> Date: Tue, 13 Sep 2022 10:00:40 +0800 Subject: [PATCH] feat: login event after request menus --- backend/mini.db | Bin 0 -> 4096 bytes backend/mini.db-shm | Bin 0 -> 32768 bytes backend/mini.db-wal | Bin 0 -> 399672 bytes frontend/src/components/layout/header.vue | 0 frontend/src/components/layout/index.vue | 0 frontend/src/router/index.js | 27 ++++++++++++- frontend/src/service/user.js | 14 +++++++ frontend/src/stores/user.js | 25 ++++++++++-- frontend/src/views/main.vue | 44 ++++++++++++++++++++++ frontend/src/views/setting/about.vue | 11 ++++++ frontend/src/views/system/menu.vue | 11 ++++++ frontend/src/views/system/role.vue | 11 ++++++ frontend/src/views/system/user.vue | 11 ++++++ 13 files changed, 148 insertions(+), 6 deletions(-) create mode 100644 backend/mini.db create mode 100644 backend/mini.db-shm create mode 100644 backend/mini.db-wal create mode 100644 frontend/src/components/layout/header.vue create mode 100644 frontend/src/components/layout/index.vue create mode 100644 frontend/src/views/main.vue create mode 100644 frontend/src/views/setting/about.vue create mode 100644 frontend/src/views/system/menu.vue create mode 100644 frontend/src/views/system/role.vue create mode 100644 frontend/src/views/system/user.vue diff --git a/backend/mini.db b/backend/mini.db new file mode 100644 index 0000000000000000000000000000000000000000..e2a2455a104f1cf6a5d6b143f3ac8831aaaf3ab5 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYF`k83r literal 0 HcmV?d00001 diff --git a/backend/mini.db-shm b/backend/mini.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..cb9b4213c40b53af18703d07ba9683c01f40c29c GIT binary patch literal 32768 zcmeI)$xanP6oBC$kV#Nc9IoKNAj%*pDuN;)SCn~>LBIj^9bE7lgq2TX;?n0}W#ZBW z3&K*XOkZ;sY+TS7`mdyNsw=1K)cGEua^Jg&qczMDsQVaVO_)2MzU24!cKd(q=KA>A zIrDjEYxC>3j_uq(=7*#HjCk&^qLFO>4WTxrVU~p%*C&!#p2UhIRwl73#Oh>yGKult z@&A}p91FQ|FXk5V4%#o=A=W>x>*x?&qiOLvd^!|RKmi35P(T3%6i`3`1r$&~0Rvn;U0 zE7p(liq=-(kOa!8=K_~#;3`er;1->9bC>%(u>wKh6gjRbp+F`DPIH;-ne5!A6{w?;W*HR7q`*0@(2~i{ZCU{Z o6i`3`1r$&~0RSID=dUPE7V1-k;HE{mUQ!R50QB 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 QdTKUZqz3xWZI9sp12D+HDF6Tf literal 0 HcmV?d00001 diff --git a/frontend/src/components/layout/header.vue b/frontend/src/components/layout/header.vue new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/layout/index.vue b/frontend/src/components/layout/index.vue new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 94b4727..af2b436 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,14 +1,21 @@ import { createRouter, createWebHistory } from 'vue-router' - +import { userStore } from '@/stores/user' +import { ElMessage } from 'element-plus' const routes = [ { path: '/', - redirect: '/login' + redirect: '/main' }, { path: '/login', + meta: {title: '登录页'}, component: () => import('@/views/login.vue') + }, + { + path: '/main', + meta: {title: '主页'}, + component: () => import('@/views/main.vue') } ] @@ -18,4 +25,20 @@ const router = createRouter({ 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 diff --git a/frontend/src/service/user.js b/frontend/src/service/user.js index d8a7032..248cb1d 100644 --- a/frontend/src/service/user.js +++ b/frontend/src/service/user.js @@ -7,3 +7,17 @@ export function login(data) { data }); } + +// 获取用户信息 +export function getUserInfo(uid){ + return request({ + url: `/user/${uid}` + }) +} + +// 获取权限信息 +export function getMenus(rid){ + return request({ + url: `/role/${rid}/menu` + }) +} diff --git a/frontend/src/stores/user.js b/frontend/src/stores/user.js index efe1226..635b81d 100644 --- a/frontend/src/stores/user.js +++ b/frontend/src/stores/user.js @@ -1,23 +1,40 @@ import { ref, computed } from 'vue' import { defineStore } from 'pinia' 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', () => { - const uid = ref(0) const token = ref("") + const userInfo = ref({}) + const userMenus = ref([]) + + // getter const accessToken = computed(() => 'Bearer ' + token.value) // 非setup语法时的actions const loginAction = async (data) => { + + // 1. 登录 const res = await login(data) 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("登录成功.") } - return { uid, token, accessToken, loginAction } + return { token, accessToken, userInfo, userMenus, loginAction } }, { persist: true, // 解决pinia刷新时数据丢失问题 }) diff --git a/frontend/src/views/main.vue b/frontend/src/views/main.vue new file mode 100644 index 0000000..55ca234 --- /dev/null +++ b/frontend/src/views/main.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/frontend/src/views/setting/about.vue b/frontend/src/views/setting/about.vue new file mode 100644 index 0000000..b62864d --- /dev/null +++ b/frontend/src/views/setting/about.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/frontend/src/views/system/menu.vue b/frontend/src/views/system/menu.vue new file mode 100644 index 0000000..b639786 --- /dev/null +++ b/frontend/src/views/system/menu.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/frontend/src/views/system/role.vue b/frontend/src/views/system/role.vue new file mode 100644 index 0000000..af8913a --- /dev/null +++ b/frontend/src/views/system/role.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/frontend/src/views/system/user.vue b/frontend/src/views/system/user.vue new file mode 100644 index 0000000..3834d2d --- /dev/null +++ b/frontend/src/views/system/user.vue @@ -0,0 +1,11 @@ + + + + +