import Vue from 'vue' import { getUserInfo, login, ssoLogin, logout, getDetailByAccountOrId, } from '@/api/user' import { getAccessToken, removeAccessToken, setAccessToken, } from '@/utils/accessToken' import { getUsername, removeUsername, setUsername } from '@/utils/username' import { resetRouter } from '@/router' import { title, tokenName } from '@/config' const state = () => ({ accessToken: getAccessToken(), username: getUsername(), avatar: '', userId: '', account: '', userInfo: {}, loginStatus: true, tenantId: '', tenantCode: '', nowTemplate: '', showCustomPage: false, templateLoading: false, calcRatio: undefined }) const getters = { userId: (state) => state.userId, accessToken: (state) => state.accessToken, username: (state) => state.username, account: (state) => state.account, avatar: (state) => state.avatar, tenantId: (state) => state.tenantId, tenantCode: (state) => state.tenantCode, } const mutations = { setAccessToken(state, accessToken) { state.accessToken = accessToken setAccessToken(accessToken) }, setUsername(state, username) { state.username = username setUsername(username) }, setAvatar(state, avatar) { state.avatar = avatar }, setUserId(state, data) { state.userId = data }, setAccount(state, account) { state.account = account }, setUserInfo(state, userInfo) { state.userInfo = userInfo }, setLoginStatus(state, loginStatus) { state.loginStatus = loginStatus }, setTenantId(state, tenantId) { state.tenantId = tenantId }, setTenantCode(state, tenantCode) { state.tenantCode = tenantCode }, } const actions = { // 账号密码登录 async login({ commit, dispatch }, loginInfo) { const userInfo = await login(loginInfo) commit('setLoginStatus', userInfo.loginStatus) dispatch('authentication', userInfo) const hour = new Date().getHours() const thisTime = hour < 8 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 18 ? '下午好' : '晚上好' if (userInfo.loginStatus) { Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`) } }, //钉钉免登进入传参 async getDingUserByCodeFun({ commit, dispatch }, user) { commit('setLoginStatus', user.loginStatus) dispatch('authentication', user) const hour = new Date().getHours() const thisTime = hour < 8 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 18 ? '下午好' : '晚上好' if (user.loginStatus) { Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}!`) } }, // 单点登录 async ssoLogin({ dispatch }, loginInfo) { const userInfo = await ssoLogin(loginInfo) dispatch('authentication', userInfo) }, // 鉴权 async authentication({ commit }, userInfo) { const { username, userId } = userInfo if (username) { commit('setUsername', username) commit('setAccount', username) } if (userId) { commit('setUserId', userId) } const accessToken = userInfo[tokenName] if (accessToken) { commit('setAccessToken', accessToken) } else { Vue.prototype.$baseMessage( `登录接口异常,未正确返回${tokenName}...`, 'error' ) } }, async getUserInfo({ commit, dispatch }) { const info = await getUserInfo() if (!info) { Vue.prototype.$baseMessage('验证失败,请重新登录...', 'error') return false } let { id, fullname, username, photo, account, tenantId, tenantCode } = info dispatch('getUserDetail', account) if (fullname) { commit('setUserId', id) commit('setUsername', fullname) commit('setAvatar', photo) commit('setAccount', username) commit('setTenantId', tenantId) commit('setTenantCode', tenantCode) Vue.prototype.$baseUserAccount = username } else { Vue.prototype.$baseMessage('用户信息接口异常', 'error') return false } }, getUserDetail({ commit }, account) { getDetailByAccountOrId(account).then((res) => { commit('setUserInfo', res) }) }, async logout({ dispatch }) { sessionStorage.removeItem('currentPostId') sessionStorage.removeItem('currentOrgId') await logout(state.accessToken) await dispatch('resetAccessToken') await resetRouter() }, resetAccessToken({ commit }) { commit('setAccessToken', '') removeAccessToken() removeUsername() }, saveTenatId({ commit }, tenantId) { commit('setTenantId', tenantId) }, saveTenantCode({ commit }, tenantCode) { commit('setTenantCode', tenantCode) }, } export default { state, getters, mutations, actions }