码迷,mamicode.com
首页 > 其他好文 > 详细

vuex 中getters、mutations、actions的使用实例

时间:2021-04-26 13:39:52      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:space   rgb   save   页面   update   改密码   读取   mobile   nbsp   

技术图片

index.js

import Vue from vue;
import Vuex from vuex;
import base from ./modules/base;
import user from ./modules/user;

Vue.use(Vuex);

// store创建工厂
class storeFactory {
  static getInstance = () => {
    const store = new Vuex.Store({
      modules: {
        base,
        user
      },
    });
    return store;
  }
}

export default storeFactory.getInstance();

 

 user.js文件:

import storage from storejs;
import userAPI from ../../api/user;

/* eslint-disable */
export default {
  namespaced: true,
  state: {
    activeFlag: true,
    searchInfo: {}, // 活动列表筛选值
    caseCheckInfo: {}, // 案例审核列表筛选值
    isLogin: false, // 是否登录
    userInfo: {}, // 用户信息
    menuList: [], // 菜单列表
    areaList: [],//专区列表
    curMenuName: ‘‘, // 当前选择的菜单名称
    curMenuButtonList: [], // 当前选中页面可用按钮的集合
    departmentList:[],
    positionList:[]

  },
  getters: {
    caseCheckInfo: state => state.caseCheckInfo,
    activeFlag: state => state.activeFlag,
    searchInfo: state => state.searchInfo,
    // 是否已经登入
    isLogin: state => state.isLogin,// 用户信息
    userInfo: state => state.userInfo,
  },
  mutations: {
    updateUserInfo(state, activeFlag) {
      let storageMy = storage(process.env.GLOBAL_COOKIE_NAME);
      if (!storageMy) {
        storageMy = {};
      }
      const myUserInfo = storageMy.userInfo ? storageMy.userInfo : {};
      myUserInfo.activeFlag = activeFlag;
      console.info(object, myUserInfo.activeFlag);
      const newStorage = { userInfo: myUserInfo };
      storage({ [process.env.GLOBAL_COOKIE_NAME]: newStorage });
      state.userInfo = myUserInfo;
    },
    changeActive(state, flag) {
      state.activeFlag = flag;
    },  // 加载用户信息
    loadUserInfo(state) {
      //  读取storage
      const storageMy = storage(process.env.GLOBAL_COOKIE_NAME);
      if (storageMy) {
        // 如果有userInfo则认为已经登陆了
        if (storageMy.userInfo) {
          state.userInfo = storageMy.userInfo;
          state.activeFlag = state.userInfo.activeFlag == 2;
          state.isLogin = true;
          return;
        }
        state.userInfo = {};
        state.isLogin = false;
      }
      state.userInfo = {};
      state.isLogin = false;
    },
  },
  actions: {
    // 保存用户信息
    save({ state, commit, dispatch }, { userInfo }) {
      //  读取storage
      let storageMy = storage(process.env.GLOBAL_COOKIE_NAME);
      if (!storageMy) {
        storageMy = {};
      }
      const myUserInfo = storageMy.userInfo ? storageMy.userInfo : {};
      myUserInfo.token = userInfo.token ? userInfo.token : myUserInfo.token;
      myUserInfo.userId = userInfo.userId ? userInfo.userId : myUserInfo.userId;
      myUserInfo.userName = userInfo.userName ? userInfo.userName : myUserInfo.userName;
      myUserInfo.mobile = userInfo.mobile ? userInfo.mobile : myUserInfo.mobile;
      myUserInfo.companyCode = userInfo.companyCode ? userInfo.companyCode : myUserInfo.companyCode;
      myUserInfo.areaCode = userInfo.areaCode ? userInfo.areaCode : myUserInfo.areaCode;
      myUserInfo.areaName = userInfo.areaName ? userInfo.areaName : myUserInfo.areaName;
      myUserInfo.companyName = userInfo.companyName ? userInfo.companyName : myUserInfo.companyName;
      myUserInfo.logoUrl = userInfo.logoUrl ? userInfo.logoUrl : ‘‘;
      myUserInfo.activeFlag = userInfo.activeFlag ? userInfo.activeFlag : ‘‘;
      myUserInfo.userCode = userInfo.userCode ? userInfo.userCode : ‘‘;
      let newStorage = { userInfo: myUserInfo };
      storage({ [process.env.GLOBAL_COOKIE_NAME]: newStorage });
      state.userInfo = myUserInfo;
      commit(changeActive, state.userInfo.activeFlag == 2);
      state.isLogin = true;
      if (userInfo.areaCode) {
        dispatch(updateInfo);
      }
    },
async updateInfo() {
      try {
        const res = await userAPI.updateInfo({});
        console.log(res);
      } catch (error) {
        this.$message.error(error.message || error);
      }
    },

    // 登出
    async loginOut({ state }) {
      try {
        storage({ [process.env.GLOBAL_COOKIE_NAME]: ‘‘ });
        state.userInfo = {};
        state.isLogin = false;
      } catch (error) {
        console.log(登录失败, error);
        throw error;
      }
    },
  },
};

 

index.vue文件:中的使用

<script>
import { mapGetters,mapActions, mapMutations } from vuex;

export default {
name:index,
data(){},
created:{},

computed: {
    ...mapGetters({
      userInfo: "user/userInfo",
      activeFlag: "user/activeFlag",
    })
  },

methods: {
    ...mapActions({
      userLogin: user/login,
      saveInfo: user/save,
    }),

//vue中修改store中数据只能通过mutations ...mapMutations({ changeActive:
user/changeActive, updateUserInfo: user/updateUserInfo, }), openDialog() { this.changeActive(true); }, closeDialog() { this.changeActive(false); }, //修改密码 sumbit() { this.$refs[ruleForm].validate(async (valid) => { if (valid) { if (this.update.password !== this.update.checkPassword) { this.$message.error(两次输入密码不一致); return; } this.update.mobile = this.userInfo && this.userInfo.mobile || ‘‘; try { //调完修改接口 掉获取userInfor接口 判断activeFlag==1才能关闭弹框 const neUserInfo = await userAPI.updatePassword(this.update); const resData = neUserInfo.data; this.changeActive(false); this.updateUserInfo(resData.activeFlag); } catch (error) { this.$message.error(error); } } }); }, }, }; </script>

 

vuex 中getters、mutations、actions的使用实例

标签:space   rgb   save   页面   update   改密码   读取   mobile   nbsp   

原文地址:https://www.cnblogs.com/xiaolucky/p/14699589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!