完善登录状态管理: 1. 添加getUserInfo方法 2. 实现token本地存储 3. 添加退出登录功能
This commit is contained in:
parent
1a60bf94b4
commit
28321962f5
@ -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')
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user