user.js 8.67 KB
import Vue from 'vue'
import { login, logout, phoneLogin, thirdLogin } from "@/api/login"
import {
  ACCESS_TOKEN,
  USER_NAME,
  USER_INFO,
  USER_AUTH,
  SYS_BUTTON_AUTH,
  UI_CACHE_DB_DICT_DATA,
  UI_CACHE_TRANSLATE_DATA,
  TENANT_ID,
  CACHE_INCLUDED_ROUTES
} from "@/store/mutation-types"
import { welcome } from "@/utils/util"
import { queryPermissionsByUser, getTranslateItemsFromCache } from '@/api/api'
import { getAction } from '@/api/manage'

const user = {
    state: {
      token: '',
      username: '',
      realname: '',
      tenantid: '',
      welcome: '',
      avatar: '',
      permissionList: [],
      info: {},
      // 系统安全模式
      sysSafeMode: null,
    },

    mutations: {
      SET_TOKEN: (state, token) => {
      state.token = token
  },
  SET_NAME: (state, { username, realname, welcome }) => {
  state.username = username
  state.realname = realname
  state.welcome = welcome
},
SET_AVATAR: (state, avatar) => {
  state.avatar = avatar
},
SET_PERMISSIONLIST: (state, permissionList) => {
  state.permissionList = permissionList
},
SET_INFO: (state, info) => {
  state.info = info
},
SET_TENANT: (state, id) => {
  state.tenantid = id
},
SET_SYS_SAFE_MODE: (state, sysSafeMode) => {
  if (typeof sysSafeMode === 'boolean') {
    state.sysSafeMode = sysSafeMode
  } else {
    state.sysSafeMode = false
  }
},
},

actions: {
  // CAS验证登录
  ValidateLogin({ commit }, userInfo) {
    return new Promise((resolve, reject) => {
      getAction("/sys/cas/client/validateLogin", userInfo).then(response => {
      console.log("----cas 登录--------", response);
    if (response.success) {
      const result = response.result
      const userInfo = result.userInfo
      Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
      commit('SET_TOKEN', result.token)
      commit('SET_INFO', userInfo)
      commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
      commit('SET_AVATAR', userInfo.avatar)
      resolve(response)
    } else {
      resolve(response)
    }
  }).catch(error => {
      reject(error)
    })
  })
  },
  // 登录
  Login({ commit }, userInfo) {
    return new Promise((resolve, reject) => {
      login(userInfo).then(response => {
      if (response.code == '200') {
      const result = response.result
      const userInfo = result.userInfo
      Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
      commit('SET_TOKEN', result.token)
      commit('SET_INFO', userInfo)
      commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
      commit('SET_AVATAR', userInfo.avatar)
      resolve(response)
    } else {
      reject(response)
    }
  }).catch(error => {
      reject(error)
    })
  })
  },
  //手机号登录
  PhoneLogin({ commit }, userInfo) {
    return new Promise((resolve, reject) => {
      phoneLogin(userInfo).then(response => {
      if (response.code == '200') {
      const result = response.result
      const userInfo = result.userInfo
      Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
      commit('SET_TOKEN', result.token)
      commit('SET_INFO', userInfo)
      commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
      commit('SET_AVATAR', userInfo.avatar)
      resolve(response)
    } else {
      reject(response)
    }
  }).catch(error => {
      reject(error)
    })
  })
  },
  // 获取用户信息
  GetPermissionList({ commit }) {
    return new Promise((resolve, reject) => {
      queryPermissionsByUser().then(response => {
      const menuData = response.result.menu;
    const authData = response.result.auth;
    const allAuthData = response.result.allAuth;
    // 设置国际化缓存
    Vue.ls.set(UI_CACHE_TRANSLATE_DATA, response.result.sysTranslateItems, 7 * 24 * 60 * 60 * 1000)
    //Vue.ls.set(USER_AUTH,authData);
    sessionStorage.setItem(USER_AUTH, JSON.stringify(authData));
    sessionStorage.setItem(SYS_BUTTON_AUTH, JSON.stringify(allAuthData));
    if (menuData && menuData.length > 0) {

      // 获取缓存语种
      let language = Vue.ls.get("language");
      if (language == null) {
        language = 'en-US';
      }
      menuData.forEach((item) => {
        let temp = getTranslateItemsFromCache('sys_permission', item["id"], language, '')
        // console.log(item + "" + item["id"] + " " + temp + " " + item)
        if (temp != null) {
        item["meta"].title = temp;
      }
      if (item["children"]) {
        let hasChildrenMenu = item["children"].filter((i) => {
          let temp1 = getTranslateItemsFromCache('sys_permission', i["id"], language, '')
          // console.log("    " + i + "" + i["id"] + " " + temp1 + " " + i)
          if (temp1 != null) {
          i["meta"].title = temp1;
        }

        if (i["children"]){
            let hasSubChildrenMenu = i["children"].filter((j)=>{
              let temp2 = getTranslateItemsFromCache('sys_permission', j["id"], language, '')
              // console.log("          " + j + "" + j["id"] + " " + temp2 + " " + j)
              if (temp2 != null) {
                j["meta"].title = temp2;
            }})
        }
        return !i.hidden || i.hidden == false
      })
        if (hasChildrenMenu == null || hasChildrenMenu.length == 0) {
          item["hidden"] = true
        }
      }
    })
      // //update--begin--autor:qinfeng-----date:20200109------for:JEECG-63 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------
      // menuData.forEach((item, index) => {
      //   if (item["children"]) {
      //     let hasChildrenMenu = item["children"].filter((i) => {
      //       return !i.hidden || i.hidden == false
      //     })
      //     if (hasChildrenMenu == null || hasChildrenMenu.length == 0) {
      //       item["hidden"] = true
      //     }
      //   }
      // })
      // //console.log(" menu show json ", menuData)
      // //update--end--autor:qinfeng-----date:20200109------for:JEECG-63 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------
      commit('SET_PERMISSIONLIST', menuData)
      // 设置系统安全模式
      commit('SET_SYS_SAFE_MODE', response.result.sysSafeMode)
    } else {
      reject('getPermissionList: permissions must be a non-null array !')
    }
    resolve(response)
  }).catch(error => {
      reject(error)
    })
  })
  },

  // 登出
  Logout({ commit, state }) {
    return new Promise((resolve) => {
      let logoutToken = state.token;
    commit('SET_TOKEN', '')
    commit('SET_PERMISSIONLIST', [])
    Vue.ls.remove(ACCESS_TOKEN)
    Vue.ls.remove(USER_INFO)
    Vue.ls.remove(USER_NAME)
    Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
    Vue.ls.remove(UI_CACHE_TRANSLATE_DATA)
    Vue.ls.remove(CACHE_INCLUDED_ROUTES)
    Vue.ls.remove(TENANT_ID)
    //console.log('logoutToken: '+ logoutToken)
    logout(logoutToken).then(() => {
      if (process.env.VUE_APP_SSO == 'true') {
      let sevice = 'http://' + window.location.host + '/wcs/'
      let serviceUrl = encodeURIComponent(sevice)
      window.location.href = process.env.VUE_APP_CAS_BASE_URL + '/logout?service=' + serviceUrl
    }
    resolve()
  }).catch(() => {
      resolve()
    })
  })
  },
  // 第三方登录
  ThirdLogin({ commit }, param) {
    return new Promise((resolve, reject) => {
      thirdLogin(param.token, param.thirdType).then(response => {
      if (response.code == '200') {
      const result = response.result
      const userInfo = result.userInfo
      Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
      Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
      commit('SET_TOKEN', result.token)
      commit('SET_INFO', userInfo)
      commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
      commit('SET_AVATAR', userInfo.avatar)
      resolve(response)
    } else {
      reject(response)
    }
  }).catch(error => {
      reject(error)
    })
  })
  },
  saveTenant({ commit }, id) {
    Vue.ls.set(TENANT_ID, id, 7 * 24 * 60 * 60 * 1000)
    commit('SET_TENANT', id)
  },
}
}

export default user