123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- import Vue from 'vue'
- import { login, getLoginUser, logout } from '@/api/modular/system/loginManage'
- import { sysDictTypeTree } from '@/api/modular/system/dictManage'
- import { sysMenuChange } from '@/api/modular/system/menuManage'
- import { ACCESS_TOKEN, ALL_APPS_MENU, DICT_TYPE_TREE_DATA } from '@/store/mutation-types'
- import { welcome } from '@/utils/util'
- import store from '../index'
- import router from '../../router'
- const user = {
- state: {
- token: '',
- name: '',
- welcome: '',
- avatar: '',
- buttons: [], // 按钮权限
- admintype: '', // 是否是超管
- roles: [],
- info: {}
- },
- mutations: {
- SET_TOKEN: (state, token) => {
- state.token = token
- },
- SET_NAME: (state, { name, welcome }) => {
- state.name = name
- state.welcome = welcome
- },
- SET_AVATAR: (state, avatar) => {
- state.avatar = avatar
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles
- },
- SET_INFO: (state, info) => {
- state.info = info
- },
- SET_BUTTONS: (state, buttons) => {
- state.buttons = buttons
- },
- SET_ADMINTYPE: (state, admintype) => {
- state.admintype = admintype
- }
- },
- actions: {
- // 登录
- Login ({ commit }, userInfo) {
- return new Promise((resolve, reject) => {
- login(userInfo).then(response => {
- if (!response.success) {
- reject(response.message)
- return
- }
- const result = response.data
- Vue.ls.set(ACCESS_TOKEN, result, 7 * 24 * 60 * 60 * 1000)
- commit('SET_TOKEN', result)
- resolve()
- // eslint-disable-next-line handle-callback-err
- }).catch(error => {
- // eslint-disable-next-line prefer-promise-reject-errors
- reject('后端未启动或代理错误')
- })
- })
- },
- // 获取用户信息
- GetInfo ({ commit }) {
- return new Promise((resolve, reject) => {
- getLoginUser().then(response => {
- if (response.success) {
- const data = response.data
- commit('SET_ADMINTYPE', data.adminType)
- commit('SET_ROLES', 1)
- commit('SET_BUTTONS', data.permissions)
- commit('SET_INFO', data)
- commit('SET_NAME', { name: data.name, welcome: welcome() })
- if (data.avatar != null) {
- commit('SET_AVATAR', process.env.VUE_APP_API_BASE_URL + '/sysFileInfo/preview?id=' + data.avatar)
- }
- resolve(data)
- } else {
- // eslint-disable-next-line no-undef
- reject(new Error(data.message))
- }
- }).catch(error => {
- reject(error)
- })
- })
- },
- // 登出
- Logout ({ commit, state }) {
- return new Promise((resolve) => {
- logout(state.token).then(() => {
- resolve()
- }).catch(() => {
- resolve()
- }).finally(() => {
- commit('SET_TOKEN', '')
- commit('SET_ROLES', [])
- commit('SET_BUTTONS', [])
- commit('SET_ADMINTYPE', '')
- Vue.ls.remove(ACCESS_TOKEN)
- Vue.ls.remove(ALL_APPS_MENU)
- Vue.ls.remove(DICT_TYPE_TREE_DATA)
- })
- })
- },
- // 加载所有字典数据
- dictTypeData () {
- return new Promise((resolve, reject) => {
- sysDictTypeTree().then((data) => {
- if (data.success) {
- const result = data.data
- Vue.ls.set(DICT_TYPE_TREE_DATA, result)
- resolve()
- } else {
- // eslint-disable-next-line no-undef
- reject(new Error(data.message))
- }
- }).catch(error => {
- reject(error)
- })
- })
- },
- // 切换应用菜单
- MenuChange ({ commit }, application) {
- return new Promise((resolve) => {
- sysMenuChange({ application: application.code }).then((res) => {
- const apps = { 'code': '', 'name': '', 'active': '', 'menu': '' }
- apps.active = true
- apps.menu = res.data
- // eslint-disable-next-line camelcase
- const all_app_menu = Vue.ls.get(ALL_APPS_MENU)
- // eslint-disable-next-line camelcase
- const new_false_all_app_menu = []
- // 先去除所有默认的,以为此时切换的即将成为前端缓存默认的应用
- all_app_menu.forEach(item => {
- if (item.active) {
- item.active = false
- }
- new_false_all_app_menu.push(item)
- })
- // 此时缓存中全部都是不默认的应用
- Vue.ls.set(ALL_APPS_MENU, new_false_all_app_menu)
- apps.name = application.name
- apps.code = application.code
- const applocationR = []
- applocationR.push(apps)
- Vue.ls.set(ALL_APPS_MENU, applocationR)
- resolve(res)
- const antDesignmenus = res.data
- store.dispatch('GenerateRoutes', { antDesignmenus }).then(() => {
- router.addRoutes(store.getters.addRouters)
- })
- // 切换应用刷新整体界面,暂且取消
- // window.location.reload()
- }).catch(() => {
- resolve()
- })
- })
- }
- }
- }
- export default user
|