• vue-element-admin学习笔记--权限加载及自定义布局(6)


    接着之前的笔记,参考源码的布局,增加用户下拉部分,其中个人信息后续回补充到具体的表单页面。搜索的组件准备弄成全文检索,暂时放置。现在布局部分还差了TagsView和右侧的抽屉功能。

    Eldropdown 用户信息的下拉

    用户信息部分直接使用了Dropdown组件,在vue-element-admin源码中有首页、个人中心、项目地址等及退出功能,自己测试先实现首页、个人中心(占位置不实现)、一个外链、退出功能。
    主要使用router-link来实现。退出功能在el-dropdown-item中使用 @click.native来监听组件根元素的原生事件。用户的logout方法也比较好理解,即初始化掉对应的store并且删除相关的cookie.用户头像部分需要给用户增加一个属性,存储头像图片的URL。NavBar中增加logout方法,如下:

     methods: {
        async logout() {
          await this.$store.dispatch("user/logout");
          this.$router.push(`/user/login?redirect=${this.$route.fullPath}`);
        }
      }
    

    在store的user模块下增加logout方法,同时需要增加对外访问的API方法及MOCK数据,其中logout方法和API中方法如下:
    src>store>modules>user中

      logout({ commit, state }) {
        return new Promise((resolve, reject) => {
          logout(state.userInfo.token)
            .then(() => {
              commit("SET_TOKEN", "");
              commit("SET_ROLES", []);
              removeToken();
              resetRouter();
              resolve();
            })
            .catch(error => {
              reject(error);
            });
        });
      },
    

    这里增加了router中的一个resetRouter方法,问题的描述在vue-element-admin的源码中有说明"// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465"
    src>api>user.js中

    export function logout(token) {
      return request({
        url: "/api/user/logout",
        method: "post",
        data: { token: token }
      });
    }
    
    

    在Mock数据中,单独配置了一个user.js用来存放测试用户的数据,这里导入的时候需要注意,在node.js环境下无法直接使用ES6的import。user.js如下:

    const userInfoMock = {
      userObj: {
        admin: {
          name: "admin",
          password: "111111",
          token: "AAAAAA",
          roles: ["admin"],
          avatar:
            "https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png"
        },
        user: {
          name: "user",
          password: "222222",
          token: "BBBBBB",
          roles: ["user"],
          avatar:
            "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
        },
        guest: {
          name: "guest",
          password: "333333",
          token: "CCCCCC",
          roles: ["guest"],
          avatar:
            "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"
        }
      }
    };
    
    module.exports = userInfoMock;
    

    user_logout.js的内容如下,和user_login类似,user_login中还是使用之前的数据方式:

    function logout(req) {
      const method = req.method;
      let { token } = req.body;
      let res = null;
      const userJsonObj = require("./user").userObj;
      switch (method) {
        case "POST":
          for (let item in userJsonObj) {
            if (userJsonObj[item] && userJsonObj[item].token === token) {
              res = {
                message: userJsonObj[item].name + "退出成功",
                userInfo: { token: token }
              };
              break;
            }
          }
          res = {
            message: "未知用户,退出成功",
            userInfo: { token: token }
          };
          break;
        default:
          res = null;
      }
      return res;
    }
    
    //node.js下运行,按照模块规范注册
    module.exports = logout;
    
    
  • 相关阅读:
    CAN总线布线规范
    使用make_ext4fs时报错,No such file or directory
    安装arm-2009q3交叉编译器后,执行No such file....
    Busybox下make menconfig报错处理!
    解决Markdown转为PDF后,尖括号不能正确显示问题。
    开发板与PC直连 交叉、直连网线做法
    BusyBox tftp使用
    STM32的flash数据页转存过程分析!
    c语言中log函数的使用!
    POJ 3667 Hotel
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/12605280.html
Copyright © 2020-2023  润新知