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, TENANT_ID, CACHE_INCLUDED_ROUTES } from '@/store/mutation-types' import store from '@/store' import { isMobile, welcome } from '@/utils/util' import { queryPermissionsByUser } from '@/api/api' import { getAction } from '@/api/manage' const user = { state: { token: '', username: '', realname: '', tenantid: '', welcome: '', avatar: '', permissionList: [], info: {} }, 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 } }, 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 => { let menuData = response.result.menu // 移动端只显示移动端页面菜单,PC端不显示移动端页面菜单 if (isMobile()) { menuData = [menuData.find(item => item.path === '/mobile')] } else { menuData = menuData.filter(item => item.path !== '/mobile') } const authData = response.result.auth const allAuthData = response.result.allAuth // 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) { // update--begin--autor:qinfeng-----date:20200109------for: 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------ menuData.forEach((item) => { if (item.children) { const 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: 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------ commit('SET_PERMISSIONLIST', menuData) } else { Vue.prototype.$Jmodal.error({ title: '无权限', content: '该用户无权限,请联系管理员!', okText: '确认', mask: false, onOk: () => { store.dispatch('Logout') } }) reject('getPermissionList: permissions must be a non-null array !') } resolve(response) }).catch(error => { reject(error) }) }) }, // 登出 Logout ({ commit, state }) { return new Promise((resolve) => { const 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(CACHE_INCLUDED_ROUTES) Vue.ls.remove(TENANT_ID) // console.log('logoutToken: '+ logoutToken) logout(logoutToken).then(() => { if (process.env.VUE_APP_SSO + '' === 'true') { const sevice = 'http://' + window.location.host + '/' const serviceUrl = encodeURIComponent(sevice) window.location.href = process.env.VUE_APP_CAS_BASE_URL + '/logout?service=' + serviceUrl } resolve() window.location.replace('/user/login') }).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