import { loginByUsername, logout, getUserInfo, refreshToken } from '@/api/login' import { getToken, setToken, removeToken } from '@/utils/auth' import Cookies from 'js-cookie' import { initRouter } from '@/utils/router' const user = { state: { user: '', status: '', code: '', userType: '', instituteId: '', instituteName: '', fullname: '', printBar:'', token: getToken(), name: '', avatar: '', introduction: '', roles: [], setting: { articlePlatform: [] }, classifyOne:'', }, mutations: { SET_CODE: (state, code) => { state.code = code }, SET_TOKEN: (state, token) => { state.token = token }, SET_INTRODUCTION: (state, introduction) => { state.introduction = introduction }, SET_SETTING: (state, setting) => { state.setting = setting }, SET_STATUS: (state, status) => { state.status = status }, SET_NAME: (state, name) => { state.name = name }, SET_AVATAR: (state, avatar) => { state.avatar = avatar }, SET_ROLES: (state, roles) => { state.roles = roles }, SET_USER_TYPE: (state, userType) => { state.userType = userType }, SET_INSTITUTE_ID: (state, instituteID) => { state.instituteId = instituteID }, SET_INSTITUTE_NAME: (state, instituteName) => { state.instituteName = instituteName }, SET_INSTITUTE_FULLNAME: (state, fullname) => { state.fullname = fullname }, SET_PRINT: (state, printBar) => { state.printBar = printBar }, SET_ONE : (state , name) =>{ state.classifyOne = name } }, actions: { getClassifyOne({ commit }, listQuery){ commit('SET_ONE', listQuery) }, // 用户名登录 LoginByUsername({ commit }, userInfo) { const username = userInfo.username.trim() return new Promise((resolve, reject) => { loginByUsername(username, userInfo.password).then(response => { const data = response.data commit('SET_TOKEN', data.token) setToken(response.data.token) resolve() }).catch(error => { reject(error) }) }) }, // 获取用户信息 GetUserInfo({ commit, state }) { return new Promise((resolve, reject) => { getUserInfo(state.token).then(response => { // 由于mockjs 不支持自定义状态码只能这样hack if (!response.data) { reject('Verification failed, please login again.') } const res = response.data if (res.code == 200) { const data = res.result if (data.type != 1 && data.type != 2) { if (!data.roles || data.roles.length == 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', []) reject('用户未分配角色,没有权限登录') } } commit('SET_ROLES', data.roles) Cookies.set('roleType',data.roleType) Cookies.set('isSupervision',data.companyid) Cookies.set('company',data.company) Cookies.set('roles', JSON.stringify(data.roles)) Cookies.set('userName', data.username) Cookies.set('name', data.username) Cookies.set('userId', data.id) commit('SET_NAME', data.username) commit('SET_AVATAR', data.avatar) commit('SET_INTRODUCTION', data.introduction) commit('SET_USER_TYPE', data.type) commit('SET_INSTITUTE_ID', data.instituteId) commit('SET_INSTITUTE_NAME', data.instituteName) commit('SET_INSTITUTE_FULLNAME', data.fullname) // 加载菜单 initRouter(window.vueInstance) resolve(response) } else { reject('getInfo: ' + res.message) } }).catch(error => { reject(error) }) }) }, // 第三方验证登录 // LoginByThirdparty({ commit, state }, code) { // return new Promise((resolve, reject) => { // commit('SET_CODE', code) // loginByThirdparty(state.status, state.email, state.code).then(response => { // commit('SET_TOKEN', response.data.token) // setToken(response.data.token) // resolve() // }).catch(error => { // reject(error) // }) // }) // }, // 登出 LogOut({ commit, state }) { return new Promise((resolve, reject) => { logout(state.token).then(() => { commit('SET_TOKEN', '') commit('SET_ROLES', []) Cookies.remove('userName') Cookies.remove('name') Cookies.remove('userId') removeToken() resolve() }).catch(error => { reject(error) }) }) }, // 前端 登出 FedLogOut({ commit }) { return new Promise(resolve => { commit('SET_TOKEN', '') commit('SET_ROLES', []) Cookies.remove('userName') Cookies.remove('name') Cookies.remove('userId') removeToken() resolve() }) }, // 动态修改权限 ChangeRoles({ commit, dispatch }, role) { return new Promise(resolve => { commit('SET_TOKEN', role) setToken(role) getUserInfo(role).then(response => { const data = response.data commit('SET_ROLES', data.roles) commit('SET_NAME', data.username) commit('SET_AVATAR', data.avatar) commit('SET_INTRODUCTION', data.introduction) dispatch('GenerateRoutes', data) // 动态修改权限后 重绘侧边菜单 resolve() }) }) }, RefreshToken({ commit, state }) { return new Promise((resolve, reject) => { refreshToken(state.token).then((response) => { const res = response.data if (res.code == 200) { const token = res.result.token commit('SET_TOKEN', token) setToken(token) Cookies.set('token_expired_at', res.result.token_expired_at) resolve(response) } else { reject(res.message) } }).catch(error => { reject(error) }) }) } } } export default user