user.js 8.6 KB
import { login,Pislogin, logout, getInfo, unlock } from '@/api/user'
import { setLock, getLock, removeLock, getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
import qs from 'qs'
import md5 from 'js-md5';
const define = require('@/utils/define')

const state = {
  token: getToken(),
  isLock: getLock() || 0,
  menuList: [],
  leftMenuList: [],
  userInfo: {},
  permissionList: [],
  loginLoading: false,
  socket: ''
}

const mutations = {
  SET_SOCKET: (state, socket) => {
    state.socket = socket
  },
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_MENULIST: (state, menuList) => {
    state.menuList = menuList
  },
  SET_LEFTMENULIST: (state, leftMenuList) => {
    state.leftMenuList = leftMenuList
  },
  SET_USERINFO: (state, userInfo) => {
    state.userInfo = userInfo
  },
  SET_USERINFO_HEADICON: (state, headIcon) => {
    state.userInfo.headIcon = headIcon
  },
  SET_USERINFO_USERNAME: (state, userName) => {
    state.userInfo.userName = userName
  },
  SET_USERINFO_PORTALID: (state, portalId) => {
    state.userInfo.portalId = portalId
  },
  SET_PERMISSION_LIST: (state, permissionList) => {
    state.permissionList = permissionList
  },
  SET_LOCK: (state, isLock) => {
    state.isLock = isLock
  },
  SET_LOGIN_LOADING: (state, loginLoading) => {
    state.loginLoading = loginLoading
  }
}

const actions = {
  // 锁屏
  setLock({ commit }) {
    commit('SET_LOCK', 1)
    setLock(1)
  },
  clearLock({ commit }) {
    commit('SET_LOCK', '')
    removeLock()
  },
  unlock({ dispatch }, userInfo) {
    const { account, password } = userInfo
    return new Promise((resolve, reject) => {
      unlock({ account: account.trim(), password: md5(password) }).then(response => {
        dispatch('clearLock')
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },
  // user login
  login({ commit }, userInfo) {
    const { account, password } = userInfo
    return new Promise((resolve, reject) => {
      login(qs.stringify({
        account: account.trim(),
        password: md5(password),
        client_id: 'admin',
        client_secret: '123456',
        scope: 'all',
        grant_type: 'password'
      })).then(response => {
        const { data } = response
        const layoutList = ['classic', 'functional', 'plain', 'blend']
        let layoutType = data.theme && layoutList.indexOf(data.theme) > -1 ? data.theme : 'classic'
        commit('SET_TOKEN', data.token)
        commit('settings/CHANGE_SETTING', { key: "layoutType", value: layoutType }, { root: true })
        setToken(data.token)
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },
  pislogin({ commit }, userInfo) {
    const { account, password,hospitalname } = userInfo
    console.log("userInfo:"+userInfo.hospitalname);
    return new Promise((resolve, reject) => {
      console.log("调用pislogin");
      Pislogin(qs.stringify({
        account: account.trim(),
        password: md5(password),
        hospitalname:hospitalname,
        client_id: account,
        client_secret:  md5(password),
        scope: 'all',
        grant_type: 'password'
      })).then(response => {
        const { data } = response
        const layoutList = ['classic', 'functional', 'plain', 'blend']
        let layoutType = data.theme && layoutList.indexOf(data.theme) > -1 ? data.theme : 'classic'
        commit('SET_TOKEN', data.token)
        commit('settings/CHANGE_SETTING', { key: "layoutType", value: layoutType }, { root: true })
        setToken(data.token)
        resolve()
      }).catch(error => {
        console.log("catch:"+error);
        reject(error)
      })
    })
  },
  // 获取用户信息
  getInfo({ commit }) {
    return new Promise((resolve, reject) => {
      getInfo().then(response => {
        const { data } = response
        if (!data) reject('验证失败,请重新登录。')
        let { menuList, userInfo, permissionList } = data
        if (!menuList.length) {
          reject('您的权限不足,请联系管理员')
          return false;
        }
        let routerList = []

        function setData(list) {
          for (let i = 0; i < list.length; i++) {
            const e = list[i]
            let name = e.enCode.replace(/\./g, '-')
            e.vueName = name
            if (e.type == 1) {
              e.path = '/' + e.enCode
              if (e.hasChildren && e.children.length) {
                setData(e.children)
              }
            }
            if (e.type == 2) {
              let path = e.urlAddress
              if (path.indexOf("?") > -1) path = path.split("?")[0]
              e.path = '/' + e.urlAddress
              let newObj = {
                path: '/' + path,
                component: (resolve) => require([`@/views/${path}`], resolve),
                name: name,
                meta: {
                  title: name,
                  icon: e.icon,
                  zhTitle: e.fullName,
                  modelId: e.id
                }
              }
              routerList.push(newObj)
            }
            // 功能、字典、报表、门户
            if ([3, 4, 5, 8].indexOf(e.type) > -1) {
              let propertyJson = e.propertyJson ? JSON.parse(e.propertyJson) : null,
                relationId = '',
                isTree = 0,
                componentUrl = ''
              if (propertyJson) {
                relationId = propertyJson.moduleId || ''
                isTree = propertyJson.isTree || 0
              }
              if (e.type == 3) {
                componentUrl = 'dynamicModel'
              } else if (e.type == 4) {
                componentUrl = 'dynamicDictionary'
              } else if (e.type == 5) {
                componentUrl = 'dynamicDataReport'
              } else {
                componentUrl = 'dynamicPortal'
              }
              e.path = '/' + e.urlAddress
              let newObj = {
                path: '/' + e.urlAddress,
                component: (resolve) => require([`@/views/basic/${componentUrl}`], resolve),
                name: e.enCode,
                meta: {
                  title: name,
                  icon: e.icon,
                  zhTitle: e.fullName,
                  modelId: e.id,
                  relationId,
                  isTree
                }
              }
              routerList.push(newObj)
            }
            // 大屏
            if (e.type == 6) {
              let propertyJson = e.propertyJson ? JSON.parse(e.propertyJson) : null,
                moduleId = '';
              if (propertyJson) moduleId = propertyJson.moduleId || ''
              e.path = `${define.dataV}/view/${moduleId}?token=${getToken()}`
            }
            // 外链
            if (e.type == 7) {
              if (e.linkTarget === "_self") {
                e.path = '/' + e.enCode
                let newObj = {
                  path: '/' + e.enCode,
                  component: (resolve) => require([`@/views/basic/externalLink`], resolve),
                  name: e.enCode,
                  meta: {
                    title: name,
                    icon: e.icon,
                    zhTitle: e.fullName,
                    modelId: e.id,
                    urlAddress: e.urlAddress
                  }
                }
                routerList.push(newObj)
              } else {
                const path = e.urlAddress.replace(/\${dataV}/g, define.dataV).replace(/\${nccToken}/g, getToken())
                e.path = path
              }
            }
          }
        }
        setData(menuList)
        commit('SET_MENULIST', menuList)
        commit('SET_USERINFO', userInfo)
        commit('SET_PERMISSION_LIST', permissionList)
        resolve(routerList)
      }).catch(error => {
        reject(error)
      })
    })
  },

  // user logout
  logout({ commit, state, dispatch }) {
    return new Promise((resolve, reject) => {
      logout(state.token).then(() => {
        commit('SET_TOKEN', '')
        commit('SET_MENULIST', [])
        commit('SET_USERINFO', {})
        commit('SET_PERMISSION_LIST', [])
        removeToken()
        resetRouter()

        // reset visited views and cached views
        dispatch('tagsView/delAllViews', null, { root: true })
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },
  // remove token
  resetToken({ commit }) {
    return new Promise(resolve => {
      commit('SET_TOKEN', '')
      commit('SET_MENULIST', [])
      commit('SET_USERINFO', {})
      commit('SET_PERMISSION_LIST', [])
      commit('SET_LOGIN_LOADING', false)
      removeToken()
      resolve()
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}