流浪のwolf

卷帝

导航

退出登录操作

  async logout() {
      try {
        await this.$confirm("确定退出吗?");
      } catch (error) {
        return console.log(error);
      }
      // 要退出
      this.$store.dispatch("user/quitAction");
      // 跳转
      this.$router.push("/login");
    },

1 删除 token 

2. 删除用户的资料

import { getToken, setToken, removeToken } from "@/utils/auth";
import { loginApi, getInfoApi, getUserInfoApi } from "@/api/user";
import { resetRouter } from "@/router";
const state = {
  token: getToken(), // 读取cookie里面作为默认值
  userInfo: {}, //用户资料
};

const mutations = {
  // 设置token
  setToken(state, data) {
    state.token = data; // 存vuex
    setToken(data); // 存本地
  },
  // 移除token
  removeToken(state) {
    state.token = null;
    removeToken();
  },
  // 设置用户资料
  setUserInfo(state, data) {
    state.userInfo = data;
  },
  // 删除用户资料
  removeUserInfo(state) {
    state.userInfo = {};
  },
};

const actions = {
  // 登录操作
  async loginAction(context, data) {
    // 接收表单数据 data
    // 发生请求 loginApi,得到token
    let token = await loginApi(data);
    // 触发mutation,存储token
    context.commit("setToken", token);
  },
  // 获取用户资料的action
  async getUserProfileAction(context) {
    let res = await getInfoApi();
    let res2 = await getUserInfoApi(res.userId);
    context.commit("setUserInfo", { ...res, ...res2 });
    return res; // 返回结果
  },
  // 退出操作
  quitAction(context) {
    context.commit("removeToken");
    context.commit("removeUserInfo");
    // 1. 清除 vuex中 permission模块里面的routes为静态路由
    // A模块的action如何触发B模块的muations里面的方法呢?
    // context.commit(方法名,实参,{配置对象})
    context.commit("permission/setRoutes", [], { root: true });
    // 2. 重置路由实例对象
    resetRouter();
  },
};

export default {
  namespaced: true,
  state,
  mutations,
  actions,
};

 

posted on 2023-02-17 07:55  流浪のwolf  阅读(22)  评论(0编辑  收藏  举报