完善登录状态管理: 1. 添加getUserInfo方法 2. 实现token本地存储 3. 添加退出登录功能

This commit is contained in:
xh.xin 2025-05-04 13:46:57 +08:00
parent 1a60bf94b4
commit 28321962f5
3 changed files with 31 additions and 4 deletions

View File

@ -1,9 +1,10 @@
import { createApp } from 'vue' import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store, { useUserStore } from './store'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
import { getToken } from './utils/storage'
const app = createApp(App) const app = createApp(App)
@ -11,4 +12,11 @@ app.use(router)
app.use(store) app.use(store)
app.use(ElementPlus) app.use(ElementPlus)
// 初始化store中的token
const token = getToken()
if (token) {
const userStore = useUserStore()
userStore.setToken(token)
}
app.mount('#app') app.mount('#app')

View File

@ -2,6 +2,7 @@ import { defineStore } from 'pinia'
import { ref } from 'vue' import { ref } from 'vue'
import { loginApi } from '../../api/login' import { loginApi } from '../../api/login'
import type { LoginForm } from '../../api/login/types' import type { LoginForm } from '../../api/login/types'
import { setToken as setStorageToken, removeToken } from '../../utils/storage'
export const useUserStore = defineStore('user', () => { export const useUserStore = defineStore('user', () => {
const token = ref('') const token = ref('')
@ -9,6 +10,7 @@ export const useUserStore = defineStore('user', () => {
const setToken = (newToken: string) => { const setToken = (newToken: string) => {
token.value = newToken token.value = newToken
setStorageToken(newToken)
} }
const setUserInfo = (info: object) => { const setUserInfo = (info: object) => {
@ -22,11 +24,16 @@ export const useUserStore = defineStore('user', () => {
return res return res
} }
const getUserInfo = () => {
return userInfo.value
}
return { return {
token, token,
userInfo, userInfo,
setToken, setToken,
setUserInfo, setUserInfo,
login login,
getUserInfo
} }
}) })

View File

@ -48,7 +48,7 @@
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item>个人中心</el-dropdown-item> <el-dropdown-item>个人中心</el-dropdown-item>
<el-dropdown-item>退出登录</el-dropdown-item> <el-dropdown-item @click="handleLogout">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -65,7 +65,9 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue' import { ref } from 'vue'
import { useRoute } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { useUserStore } from '@/store/modules/user'
import { removeToken } from '@/utils/storage'
import { import {
Menu as IconMenu, Menu as IconMenu,
User, User,
@ -77,9 +79,19 @@ import {
const route = useRoute() const route = useRoute()
const isCollapse = ref(false) const isCollapse = ref(false)
const router = useRouter()
const userStore = useUserStore()
const toggleCollapse = () => { const toggleCollapse = () => {
isCollapse.value = !isCollapse.value isCollapse.value = !isCollapse.value
} }
const handleLogout = () => {
userStore.setToken('')
userStore.setUserInfo({})
removeToken()
router.push('/login')
}
</script> </script>
<style scoped> <style scoped>