完成用户退出操作
1.在src\stores\index.js中添加退出登录方法
setToken(newToken) {
this.token = newToken;
},
import { defineStore } from "pinia";
import { ref, computed, reactive } from "vue";
// 你可以认为 state 是 store 的数据 (data),getters 是 store 的计算属性 (computed),而 actions 则是方法 (methods)。
export const useAllDateStore = defineStore("allDate", {
state: () => ({
isCollapse: false,
token: null,
}),
getters: {
// doubleCount: (state) => state.count * 2,
},
actions: {
toggleCollapse() {
this.isCollapse = !this.isCollapse;
},
setToken(newToken) {
this.token = newToken;
},
resetToken() {
// 退出登录, 清空token
this.token = null;
},
},
});
2.在src\components\CommonHeader.vue添加退出登录点击事件
<el-dropdown-item @click="toggleToken">退出</el-dropdown-item>
import { useRouter } from 'vue-router';const router = useRouter()
// toggleToken方法 退出登录
const toggleToken = () => {
store.resetToken() // 清空token
router.push('/login') // 跳转到登录页面
}
<template>
<div class="header">
<!-- 左侧点击四个点的Menu按钮具有折叠菜单栏的功能,右侧user的头像,头像有下栏菜单 -->
<div class="l-content">
<el-button size="small" @click="toggleCollapse">
<component class="icons" is="menu"></component>
</el-button>
<el-breadcrumb separator="/" class="bread">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="r-content"> <el-dropdown>
<span class="el-dropdown-link">
<!-- Dropdown List
<el-icon class="el-icon--right">
<arrow-down />
</el-icon> -->
<!-- 将此部分内容换成我们要显示的用户头像图片(my-vue-project\src\assets\images\user.png) -->
<img :src="getImageUrl('user')" alt="用户头像" class="user" />
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>个人中心</el-dropdown-item>
<el-dropdown-item @click="toggleToken">退出</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown></div>
</div>
</template>
<script setup>
import { ref, computed } from 'vue'
// 通过参数user的名字可以获取动态的图片的url
// 通过new URL()方法可以创建并返回一个URL对象,用来获取图片的url(百度new URL MDN)
// 通过import.meta.url可以获取当前模块的url
const getImageUrl = (user) => {
return new URL(`../assets/images/${user}.png`, import.meta.url).href
}
import { useAllDateStore } from '@/stores/index';
// 获取 store 实例
const store = useAllDateStore();
// 实现toggleCollapse方法
const toggleCollapse = () => {
store.toggleCollapse()
}
// // 路由
import { useRouter } from 'vue-router';
const router = useRouter()
// toggleToken方法 退出登录
const toggleToken = () => {
store.resetToken() // 清空token
router.push('/login') // 跳转到登录页面
}
</script>
<style lang="less" scoped>
.header {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
height: 100%;
background-color: #333;
}
.icons {
width: 20px;
height: 20px;
}
.l-content {
display: flex;
align-items: center;
.el-button {
margin-right: 20px;
}
}
.r-content {
.user {
width: 40px;
height: 40px;
border-radius: 50%;
}
}
:deep(.bread span) {
color: #fff !important;
cursor: pointer !important;
}
</style>
3.效果:
点击"退出按钮"后,页面跳转至登录页面。