import { getUserInfo } from '@/api/user' import storage from '@/utils/storage' import constant from '@/utils/constant' import { passwordLogin, smsLogin, weixinMiniAppLogin, logout, dingLogin, getInfo } from '@/api/auth' import { listSimpleDictDatas } from '@/api/dict' const AccessTokenKey = 'ACCESS_TOKEN' const RefreshTokenKey = 'REFRESH_TOKEN' const user = { state: { accessToken: uni.getStorageSync(AccessTokenKey), // 访问令牌 refreshToken: uni.getStorageSync(RefreshTokenKey), // 刷新令牌 roleId: "", entity: "", entityName: "", userInfo: {}, name: storage.get(constant.name), avatar: storage.get(constant.avatar), roles: storage.get(constant.roles), permissions: storage.get(constant.permissions), deptPermissions: storage.get(constant.deptPermissions), }, mutations: { // 更新 state 的通用方法 SET_STATE_ATTR(state, param) { if (param instanceof Array) { for (let item of param) { state[item.key] = item.val } } else { state[param.key] = param.val } }, // 更新令牌 SET_TOKEN(state, data) { // 设置令牌 console.log(111, data); const { access_token, refresh_token } = data state.accessToken = access_token state.refreshToken = refresh_token const sysUser = data.sysUser; const ysEntities = sysUser.ysEntities || [] let roleIdString = sysUser.roles.map(role => role.roleId).join(',') || ""; let entityString = ysEntities.map(item => item.entity).join(',') || ""; let entityNameString = ysEntities.map(item => item.entityName).join(',') || ""; console.log(roleIdString, entityString, entityNameString); state.roleId = roleIdString; state.entity = entityString; state.entityName = entityNameString; uni.setStorageSync('nickName', sysUser.nickName) uni.setStorageSync('roleId', roleIdString) uni.setStorageSync('entity', entityString) uni.setStorageSync('entityName', entityNameString) uni.setStorageSync(AccessTokenKey, access_token) // uni.setStorageSync(RefreshTokenKey, refresh_token) // 加载用户信息 // this.dispatch('ObtainUserInfo') }, SET_NAME: (state, name) => { state.name = name storage.set(constant.name, name) }, SET_AVATAR: (state, avatar) => { state.avatar = avatar storage.set(constant.avatar, avatar) }, SET_ROLES: (state, roles) => { state.roles = roles storage.set(constant.roles, roles) }, SET_PERMISSIONS: (state, permissions) => { state.permissions = permissions storage.set(constant.permissions, permissions) }, SET_USER: (state, user) => { state.userInfo = user || {} }, SET_DEPT_PERMISSIONS: (state, deptPermissions) => { state.deptPermissions = deptPermissions || {} storage.set(constant.deptPermissions, deptPermissions) }, // 更新用户信息 SET_USER_INFO(state, data) { state.userInfo = data }, // 清空令牌 和 用户信息 CLEAR_LOGIN_INFO(state) { uni.removeStorageSync(AccessTokenKey) uni.removeStorageSync(RefreshTokenKey) uni.removeStorageSync('storage_data') uni.removeStorageSync('tabName') state.accessToken = '' state.refreshToken = '' state.userInfo = {} uni.reLaunch({ url: '/pages/login/mobile' }) } }, actions: { //账号登录 Login({ state, commit }, { type, data }) { if (type === 0) { return passwordLogin(data) .then(res => { commit('SET_TOKEN', res.data) return Promise.resolve(res) }) .catch(err => { return Promise.reject(err) }) } else if (type === 1) { return smsLogin(data) .then(res => { commit('SET_TOKEN', res.data) return Promise.resolve(res) }) .catch(err => { return Promise.reject(err) }) } else if (type === 2) { return dingLogin(data) .then(res => { commit('SET_TOKEN', res.data) return Promise.resolve(res) }) .catch(err => { return Promise.reject(err) }) } else { return weixinMiniAppLogin(data) .then(res => { commit('SET_TOKEN', res.data) return Promise.resolve(res) }) .catch(err => { return Promise.reject(err) }) } }, // 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user const avatar = (user == null || user.avatar == "" || user.avatar == null) ? '' : baseUrl + user .avatar const username = (user == null || user.userName == "" || user.userName == null) ? "" : user.userName if (res.roles && res.roles.length > 0) { commit('SET_ROLES', res.roles) commit('SET_PERMISSIONS', res.permissions) } else { commit('SET_ROLES', ['ROLE_DEFAULT']) } let deptPermissions = {} if (res.deptRoles) { res.deptRoles.forEach(item => { const key = item.dept.deptId let pers = deptPermissions[key]?.permissions || [] let roles = deptPermissions[key]?.roles || [] pers.push(...item.permissions) item.role && roles.push({ ...item.role, permissions: item.permissions }) deptPermissions[key] = { dept: item.dept, permissions: pers, roles: roles } }) } commit('SET_DEPT_PERMISSIONS', deptPermissions) commit('SET_NAME', username) commit('SET_AVATAR', avatar) commit('SET_USER', { ...res.user, deptRoles: res.deptRoles }) resolve(res) }).catch(error => { reject(error) }) }) }, // 退出登录 Logout({ state, commit }) { return logout() .then(res => { return Promise.resolve(res) }) .catch(err => { return Promise.reject(err) }) .finally(() => { commit('CLEAR_LOGIN_INFO') }) }, // 获得用户基本信息 async ObtainUserInfo({ state, commit }) { const res = await getUserInfo() commit('SET_USER_INFO', res.data) } } } export default user