import uc from '@/api/uc.js' import portal from '@/api/portal.js' import store from '@/store/user' const state = { currentUser: null, loginAccount: null, isRefreshToken: false, dictData: [] } const getters = {} const actions = { getDict({ commit, state }) { return new Promise((resolve, reject) => { portal.getSysDict().then(data => { if (data) { sessionStorage.setItem('dict_data', JSON.stringify(data)) commit('setDictData', data) resolve() } }) }) }, actionLoginAccount({ commit, state }, loginAccount) { commit('mutationLoginAccount', loginAccount) }, dingJump({ commit, state }, user) { commit('setCurrentUser', user) }, loginByPrincipal({ commit, state }, principal) { return new Promise((resolve, reject) => { uc.authentication( principal, user => { if (user) { sessionStorage.setItem('currentUser', JSON.stringify(user)) commit('setCurrentUser', user) resolve(user.loginStatus) } }, msg => { commit('clearCurrentUser') reject(msg) } ) }) }, loginByAccountCode({ commit, dispatch, state }, accountCode) { return new Promise((resolve, reject) => { uc.accountCodeLogin( accountCode, user => { if (user) { sessionStorage.setItem('currentUser', JSON.stringify(user)) commit('setCurrentUser', user) dispatch('user/loadCurrentUserDetail', {}, { root: true }) resolve(user.loginStatus) } }, msg => { commit('clearCurrentUser') reject(msg) } ) }) }, loginByAccount({ commit, dispatch, state }, account) { return new Promise((resolve, reject) => { uc.accountLogin( account, user => { if (user) { sessionStorage.setItem('currentUser', JSON.stringify(user)) commit('setCurrentUser', user) dispatch('user/loadCurrentUserDetail', {}, { root: true }) resolve(user.loginStatus) } }, msg => { commit('clearCurrentUser') reject(msg) } ) }) }, accountForLogin({ commit, dispatch, state }, account) { return new Promise((resolve, reject) => { uc.accountForLogin( account, user => { if (user) { sessionStorage.setItem('currentUser', JSON.stringify(user)) commit('setCurrentUser', user) dispatch('user/loadCurrentUserDetail', {}, { root: true }) resolve(user.loginStatus) } }, msg => { commit('clearCurrentUser') reject(msg) } ) }) }, validAndCompletedCurrent({ commit, state }, token) { return new Promise((resolve, reject) => { if (state.currentUser && !token) { resolve() } else { const user = sessionStorage.getItem('currentUser') if (user != 'null' && user != undefined && user != '' && !token) { commit('setCurrentUser', JSON.parse(user)) resolve() } else if (token) { uc.basicSso( token, user => { sessionStorage.setItem('currentUser', JSON.stringify(user)) commit('setCurrentUser', user) resolve() }, () => { reject() } ) } else { reject() } } }) }, refreshAndGetAuthenticationToken({ commit, state }) { if (state.isRefreshToken) { return } commit('isRefreshToken', true) return new Promise((resolve, reject) => { uc.refreshAndGetAuthenticationToken().then( user => { if (user) { sessionStorage.setItem( 'currentUser', JSON.stringify(state.currentUser) ) commit('refreshToken', user.token) setTimeout(() => { commit('isRefreshToken', false) }, 3000) resolve() } }, msg => { reject(msg) } ) }) }, logoutAndCleanUp({ commit, state }) { return new Promise((resolve, reject) => { uc.logout().finally(() => { sessionStorage.removeItem('currentUser') commit('clearCurrentUser') commit('user/setCurrentUserDetail', null, { root: true }) commit('user/setCurrentUserOrg', null, { root: true }) resolve() }) }) } } const mutations = { isRefreshToken(state, status) { state.isRefreshToken = status }, refreshToken(state, token) { state.currentUser.token = token state.currentUser.loginTime = new Date().getTime() }, setCurrentUser(state, current) { state.currentUser = current }, clearCurrentUser(state) { state.currentUser = null }, mutationLoginAccount(state, loginAccount) { state.loginAccount = loginAccount }, setDictData(state, dictData) { state.dictData = dictData } } export default { namespaced: true, state, getters, actions, mutations }