/*
  @description:用户登陆处理
  @Modifier:肖文龙
  @routerPath:
  @date: 2020/08/08
  * */
/* api */
import { getUserToken, userlogout, getUserInfo, getUserMenu } from '@/api/common/loginCenter'
import { findUserByUserId } from '@/api/common/user'// 获取用户个人信息
import { queryProcurementButtonInitInfo } from '@/api/common/buttonMgmt.js'// 获取采购驱动按钮code
/* 公共方法 */
import { setToken, removeToken } from '@/assets/js/utils/auth'
import { malRex, regphone } from '@/assets/js/validate'// 正则
import { Base64 } from 'js-base64'
/* 组件 */
import { MessageBox } from 'element-ui'
// web页面全局配置文件
import website from '@/assets/js/config/website.js'

import router from '@/router'

/*
* 非招采购登录根据角色跳转指定页面的白名单
* procurementWhiteData[key]: 角色编码
* procurementWhiteData[value]: 对应的路由
* */
const procurementWhiteData = {
  // '10': '/procurement/procurementDesktop', // 采购员(内)
  // '20': '/procurement/procurementDesktop', // 采购员(代理)
  // '11': '/procurement/procurementDesktop', // 项目经理
  // '21': '/procurement/procurementDesktop', // 项目经理(代理)
  // '12': '/procurement/procurementDesktopSupplier', // 供应商
  // 'OFF_EXPERT': '/procurement/evaluationLobby-list', // 评标
  // 'order_auditor': '/procurement/procurementOrderAuditList', // 订单审核岗 角色编码
  // 'bidding_auditor': '/procurement/procurementAuditList', // 中选审核岗 bidding_auditor
  // 'divisionManager': '/procurement/procurementOrderAuditList', // 部门经理默认跳转中选审核岗
  // 'group_inspector': '/procurement/procurementPlanDetailList', // 集团督察员
  // 'depart_inspector': '/procurement/procurementPlanDetailList', // 部门督察员
  // 'company_inspector': '/procurement/procurementPlanDetailList', // 公司督察员
  // 'admin': '/systemManagement/organization' // 超级管理员
  '19': '/shop/shopHome', // 电商采购人
  'orgCollectionRole': '/personalCenter/accountInfo', // 电商汇总人
  'shopSupplier': '/shop/shopHome', // 电商供应商
  'shopPlatAdmin': '/shop/shopHome', // 电商管理员
  'shopBill': '/shop/shopHome', // 电商对账人
  'shopAdmin': '/shop/shopHome', // 电商采购部门负责人
  'TEMP_PURCHASING': '/systemManagement/orgRegisterInfo', // 临时采购人
  'TEMP_AGENCY': '/systemManagement/signOrgRegisterInfo' // 临时代理机构
}
const user = {
  state: {
    sidebarIsCollapse: false, // 用户侧边栏菜单列表展示与否
    menu: [], // 用户侧边栏菜单列表
    info: {}, // 用户信息
    userButtonAuthority: { }, // 用户按钮权限
    token: '' // 暂时用不到
  },

  mutations: {
    // token
    SET_TOKEN: (state, token) => {
      state.token = token
    },
    // 用户信息
    SET_INFO: (state, info) => {
      if (info) {
        state.info = info
      } else {
        state.info = {}
        // alert('getUserInfo eorrs info=null')
      }
    },
    // 用户按钮权限
    SET_USERBUTTON: (state, userButtonAuthority) => {
      if (userButtonAuthority) {
        state.userButtonAuthority = userButtonAuthority
      } else {
        alert('getUserInfo eorrs buttonData=null')
      }
    },
    // 用户侧边栏菜单列表
    SET_MENU: (state, menu) => {
      state.menu = menu
    },
    // 驱动菜单展示与否
    SET_SIDEBARISCOLLAPSE: (state, sidebarIsCollapse) => {
      state.sidebarIsCollapse = sidebarIsCollapse
    },
    // 登出
    SET_LOGOUTTRST: (state) => {
      window.localStorage.clear()
      window.sessionStorage.clear()
      if (website.loginUrl(state.info.currentRol && state.info.currentRol.roleCode)) {
        window.location.href = website.loginUrl(state.info.currentRol && state.info.currentRol.roleCode)// 返回路径
      } else {
        router.push('/login')
      }
    }
  },

  actions: {
  /* =====================查询-个人基本信息-start===================== */
    // 校验用户个人信息
    findUserRule({ dispatch, commit }) {
      return new Promise((resolve, reject) => {
      // 获取用户个人信息
        dispatch('getFindUser').then(data => {
          if (!malRex.test(data.idCard) || !regphone.test(data.mobilePhone)) {
            // 请先完善个人信息，再进行操作!<br/>请到右上角个人信息中完善。
            MessageBox.alert('个人信息身份证号码或手机号码有误！<br/>请到右上角个人信息中完善。', '提示', {
              type: 'warning',
              dangerouslyUseHTMLString: true,
              confirmButtonText: '确定'
            })
            reject('store user.js 请完善个人信息!')
          } else {
            resolve()
          }
        })
      })
    },
    // 获取用户个人信息
    getFindUser({ state, commit }) {
      return new Promise((resolve, reject) => {
        findUserByUserId({ id: state.info.id }).then(response => {
          resolve(response.data)
        }).catch(error => {
          reject(error)
        })
      })
    },
    /* =====================查询-个人基本信息-end===================== */
    // 用户登录
    setUserToken({ commit }, userInfo) {
      return new Promise((resolve, reject) => {
        getUserToken(userInfo.userName.trim(), Base64.encode(userInfo.password)).then(response => {
          commit('SET_TOKEN', response.data)
          setToken(response.data)
          resolve()
        }).catch(error => {
          reject(error)
        })
      })
    },
    setToken({ dispatch, commit }, token) {
      return new Promise((resolve, reject) => {
        commit('SET_TOKEN', token)
        setToken(token)
        dispatch('setUserInfo')// 获取用户信息
        resolve()
      })
    },
    // 获取用户信息
    setUserInfo({ dispatch, commit }) {
      return new Promise((resolve, reject) => {
        getUserInfo().then(response => {
          commit('SET_INFO', response.data)
          resolve(response.data)
        }).catch(error => {
          reject(error)
        })
      }).then((userInfo) => {
        dispatch('setHome')// 判断角色工作台
      }).then(() => {
        dispatch('setUserButton')// 获取用户按钮权限
        dispatch('setMenu')// 用户侧边栏菜单列表
      }).catch(() => {
        dispatch('logoutRest')// 登出
      })
    },
    // TODO: 暂时写这个 判断角色工作台
    setHome({ state }) {
      const roleCode = state.info.currentRol && state.info.currentRol.roleCode // 获取角色编码
      const path = procurementWhiteData[roleCode] // router
      if (path) {
        router.push(path)
      } else {
        router.push('/')
      }
    },
    // TODO:获取用户按钮权限
    setUserButton({ commit }) {
      queryProcurementButtonInitInfo().then(response => {
        commit('SET_USERBUTTON', response.data)
      }).catch(() => {
        commit('SET_USERBUTTON', {})
      })
    },
    // TODO:用户侧边栏菜单列表
    setMenu({ commit }) {
      return new Promise((resolve, reject) => {
        getUserMenu().then(response => {
          commit('SET_MENU', response.data)
          resolve()
        }).catch(error => {
          reject(error)
        })
      })
    },
    // 用户侧边栏菜单列表展示与否
    setSidebarIsCollapse({ commit }, sidebarIsCollapse) {
      commit('SET_SIDEBARISCOLLAPSE', sidebarIsCollapse)
    },
    // 登出
    logoutRest({ dispatch, commit }) {
      return new Promise((resolve, reject) => {
        userlogout().then(response => {
          // 登出
          dispatch('logout')
          resolve()
        }).catch(error => {
          reject(error)
          // 登出
          dispatch('logout')
        })
      })
    },
    // 登出
    logout({ commit }) {
      return new Promise(resolve => {
        removeToken()
        commit('SET_TOKEN', '')
        commit('SET_LOGOUTTRST')
        resolve()
      })
    },
    // 返回第三方首页
    backHomepage({ commit }) {
      return new Promise(resolve => {
        commit('SET_LOGOUTTRST')
        resolve()
      })
    }
  }
}

export default user
