import {
  getUserInfo,
  getNavList,
  loginOut,
  loginUsersCheck
} from '../util/api/user.js'
import qs from 'qs'
// 入口文件
import Vue from 'vue'
// 配置vuex的步骤
// 1. 运行 cnpm i vuex -S
// 2. 导入包
import Vuex from 'vuex'
// 3. 注册vuex到vue中
Vue.use(Vuex)
// 4. new Vuex.Store() 实例，得到一个 数据仓储对象
const store = new Vuex.Store({
  state: {
    // 大家可以把 state 想象成 组件中的 data ,专门用来存储数据的
    // 如果在 组件中，想要访问，store 中的数据，只能通过 this.$store.state.*** 来访问
    btnRight: [],
    massif_id: '',
    userInfo: {},
    navlistInfo: {},
    isLogin: false,
    firstPage: 'home',
    userMenuLimits: [],
    menuList1: [], //首页菜单
    menuList2: [], //出首页的其他菜单
  },
  getters: {
    btnRight(state) {
      let btnRight = state.btnRight;
      if (btnRight.length == 0) {
        if (sessionStorage.getItem('btnRight') != null) {
          btnRight = JSON.parse(sessionStorage.getItem('btnRight') || [])
        }
      }
      return btnRight
    }
  },
  mutations: {
    // 注意： 如果要操作 store 中的 state 值，只能通过 调用 mutations 提供的方法，才能操作对应的数据，不推荐直接操作 state 中的数据，因为 万一导致了数据的紊乱，不能快速定位到错误的原因，因为，每个组件都可能有操作数据的方法；
    SET_FIRSTPAGE: (state, firstPage) => {
      state.firstPage = firstPage
    },
    SET_MENULIST1: (state, menuList1) => {
      state.menuList1 = menuList1
    },
    SET_MENULIST2: (state, menuList2) => {
      state.menuList2 = menuList2
    },
    SET_ISLOGIN: (state, isLogin) => {
      state.isLogin = isLogin
    },
    SET_USERMENUMITS: (state, userMenuLimits) => {
      state.userMenuLimits = userMenuLimits
    },
    SET_USERINFO: (state, userInfo) => {
      state.userInfo = userInfo
    },
    SET_NAVLISTINFO: (state, navlistInfo) => {
      state.navlistInfo = navlistInfo
    },
    btnRightFun(state, payload) {
      state.btnRight = payload
    },
    // 注意： 如果组件想要调用 mutations 中的方法，只能使用 this.$store.commit('方法名')
    // 这种 调用 mutations 方法的格式，和 this.$emit('父组件中方法名')
    subtract(state, obj) {
      // 注意： mutations 的 函数参数列表中，最多支持两个参数，其中，参数1： 是 state 状态； 参数2： 通过 commit 提交过来的参数；
      console.log(obj)
      state.count -= (obj.c + obj.d)
    },
    // echars的数据
    changeMassifId(state, val) {
      if (val) {
        state.massif_id = val
      } else {
        state.massif_id = ''
      }
    }
  },
  actions: {
    //获取用户信息
    getUserInfo({
      commit,
      state
    }) {
      return new Promise((resolve, reject) => {
        var name = localStorage.getItem("cUsername");
        let postData = qs.stringify({
          real_name: name,
        });
        getUserInfo(postData).then(response => {
          if (response.data.message == "") {
            sessionStorage.setItem('userType', response.data.data[0].role_id)
            sessionStorage.setItem("logo", response.data.data[0].role_logo);
            commit('SET_USERINFO', response.data.data)
            resolve()
          } else {
            this.$message.error(response.data.message);
            reject()
          }
        }).catch(error => {
          reject(error)
        })
      })
    },
    // 获取权限
    getNavList({
      commit,
      state
    }) {
      return new Promise((resolve, reject) => {
        getNavList().then(res => {
          if (res.data.message == "") {
            commit('SET_USERMENUMITS', res.data.data.children)
            commit('SET_NAVLISTINFO', res.data.data)
            let menuList1 = []
            let menuList2 = []
            let navList = res.data.data.children;
            navList.forEach((item) => {
              if (!item.menu && item.children.length) {
                item.menu = "p" + item.children[0].menu
              }
              if (item.children) {
                if (item.menu != "bHome") {
                  menuList2.push(item);
                }
              } else {
                menuList1.push(item);
              }
              // 判断设备管理中设备列表是否有信息修改权限
              if (item.purview_name == "设备管理") {
                if (item.children[0].purview_name == "设备列表") {
                  for (var i = 0; i < item.children[0].children.length; i++) {

                    if (item.children[0].children[i].purview_name == "信息修改") {
                      sessionStorage.setItem("equipmentListAmend", true); // 存储信息修改是否可正常查看操作
                      return false;
                    } else {
                      sessionStorage.removeItem("equipmentListAmend");
                    }
                  }
                }
              }
            });
            let firstPage = ""; //左侧菜单第一项
            if (menuList1.length > 0) {
              firstPage = menuList1[0].menu;
            } else {
              firstPage = menuList2[0].children[0].menu;
            }
            commit('SET_FIRSTPAGE', firstPage) //第一个页面
            let userType = res.data.data.myuser_type; //用户类型
            let userName = res.data.data.username; //用户名
            let myuid = res.data.data.myuid; //用户id
            sessionStorage.setItem("myuser_type", userType);
            sessionStorage.setItem("myuid", myuid);
            commit('SET_MENULIST1', menuList1)
            commit('SET_MENULIST2', menuList2)
            commit('SET_ISLOGIN', true)
            sessionStorage.setItem("sy_isLogin", true);
            resolve(res.data.data.username)
          } else {
            reject()
          }
        }).catch(error => {
          reject(error)
        })
      })
    },

    //退出登录
    loginOut({
      commit
    }) {
      return new Promise((resolve, reject) => {
        loginOut().then((res) => {
          if (res.data.message == "") {
            window.sessionStorage.setItem("isLogin", false);
            window.localStorage.removeItem("session");
            commit('SET_ISLOGIN', false)
            resolve()
          } else {
            // 强制退出
            window.sessionStorage.setItem("isLogin", false);
            window.localStorage.removeItem("session");
            commit('SET_ISLOGIN', false)
            resolve()
          }
        }).catch(err => {
          // 强制退出
          window.sessionStorage.setItem("isLogin", false);
          window.localStorage.removeItem("session");
          commit('SET_ISLOGIN', false)
          resolve()
        })
      })
    },

    // 判断用户登录是否失效
    loginUsersCheck({
      commit
    }) {
      return new Promise((resolve, reject) => {
        loginUsersCheck().then((res) => {
          console.log(res)
          if (res.data.data == 1) { //登录状态
            commit('SET_ISLOGIN', true)
            sessionStorage.setItem("isLogin", true)
            resolve()
          } else { //session过期 
            commit('SET_ISLOGIN', false)
            window.localStorage.removeItem("session");
            sessionStorage.setItem("isLogin", false)
            reject()
          }
        }).catch(err => {
          commit('SET_ISLOGIN', false)
          window.localStorage.removeItem("session");
          sessionStorage.setItem("isLogin", false);
          reject()
        })
      })
    }
  }
})

export default store
