• 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;
    
    
  • 相关阅读:
    Qt模拟C#的File类对文件进行操作
    Qt Creator (C++)保存文件
    winfrom LED时钟
    winfrom 水晶按钮
    C#语言的Image和byte数组的互相转换
    GDI+ 绘图闪烁解决方法
    vue webpack 架构下使用 bootstrap 的模态框modal 做遮罩效果组件及应用
    windows 版Tomcat 7.0的配置
    转:说说JSON和JSONP
    HttpWebRequest在GetResponse时总是超时
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/12605280.html
Copyright © 2020-2023  润新知