Vue实训---6-完成用户退出操作

完成用户退出操作

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.效果:

点击"退出按钮"后,页面跳转至登录页面。

相关推荐
布茹 ei ai2 分钟前
5、基于 GEE 的 Sentinel-1 SAR 地震滑坡变化检测系统:2022 泸定地震案例
javascript·sentinel·遥感·gee·云平台
一字白首15 分钟前
Vue Router 进阶,声明式 / 编程式导航 + 重定向 + 404 + 路由模式
前端·javascript·vue.js
d111111111d18 分钟前
C语言中static修斯局部变量,全局变量和函数时分别由什么特性
c语言·javascript·笔记·stm32·单片机·嵌入式硬件·学习
GIS好难学35 分钟前
0帧起手《Vue零基础教程》,从前端框架到GIS开发系列课程
前端·vue.js·前端框架
李瑞丰_liruifengv36 分钟前
使用 Claude Agent SDK 写一个 DeepResearch Agent
javascript·aigc·agent
LYFlied1 小时前
Vue Vapor模式与AI时代前端发展的思考:虚拟DOM与框架的未来
前端·vue.js·人工智能·前端框架
江公望1 小时前
VUE3 动态Prop 10分钟讲清楚
前端·javascript·vue.js
不会写DN1 小时前
JavaScript call、apply、bind 方法解析
开发语言·前端·javascript·node.js
如果你好1 小时前
理解 Proxy 原理及如何拦截 Map、Set 等集合方法调用实现自定义拦截和日志——含示例代码解析
javascript
北辰alk1 小时前
Vue组件缓存终极指南:keep-alive原理与动态更新实战
vue.js