260 lines
6.6 KiB
JavaScript

import { login, logout, getInfo } from '@/api/user'
import fileApi from '@/api/file-api'
import menuApi from '@/api/menu'
import {
getToken,
setToken,
getConsumerId,
setConsumerId,
removeToken,
removeConsumerId,
setRememberName,
removeRememberName,
setShareToken,
getShareToken, removeShareToken
} from '@/utils/auth'
import { setLogo } from '@/utils/logo'
import { resetRouter } from '@/router'
import router from '@/router'
import Layout from '@/layout'
import ParentView from '@/components/ParentView'
import api from "@/api/file-api";
const getDefaultState = () => {
return {
token: getToken(),
shareToken: getShareToken(),
name: '',
showName: '',
userInfo: {},
avatar: '',
userId: getConsumerId(),
menuList: [],
netdiskName: '',
netdiskLogo: '',
}
}
const state = getDefaultState()
const mutations = {
RESET_STATE: (state) => {
Object.assign(state, getDefaultState())
},
SET_TOKEN: (state, token) => {
state.token = token
},
SET_SHARE_TOKEN: (state, token) => {
state.shareToken = token
},
SET_NAME: (state, name) => {
state.name = name
},
SET_SHOW_NAME: (state, showName) => {
state.showName = showName
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_USERID: (state, userId) => {
state.userId = userId
},
SET_MENU_LIST:(state,menuList) => {
state.menuList = menuList;
},
SET_USER_INFO:(state,userInfo) => {
state.userInfo = userInfo;
},
SET_NETDISK_NAME:(state,netdiskName) => {
state.netdiskName = netdiskName;
},
SET_NETDISK_LOGO:(state,netdiskLogo) => {
state.netdiskLogo = netdiskLogo;
}
}
const actions = {
async setMenuList({ commit, state }) {
return new Promise( (resolve,reject) => {
menuApi.menuTree({userId: state.userId}).then((res) => {
state.menuList = getMenuTree(res.data);
commit('SET_MENU_LIST', state.menuList);
resetRouter(state.menuList)
router.options.routes = router.options.routes.concat(state.menuList);
resolve(res)
}).catch(error => {
reject(error)
});
} )
},
// user login
login({ commit }, userInfo) {
const { username, password, rememberMe } = userInfo
return new Promise((resolve, reject) => {
login({ username: username.trim(), password: password }).then(response => {
const { data } = response
commit('SET_TOKEN', data.token)
setToken(data.token)
commit('SET_USERID', data.userId)
setConsumerId(data.userId)
if(rememberMe){
setRememberName(username)
} else {
removeRememberName()
}
resolve()
}).catch(error => {
reject(error)
})
})
},
// 验证提取码
validShareCode({commit}, {shareId, shareCode}) {
return new Promise((resolve, reject) => {
fileApi.validShareCode({ shareId: shareId, shareCode: shareCode }).then(response => {
const { data } = response
commit('SET_SHARE_TOKEN', data)
setShareToken(data)
resolve()
}).catch(error => {
reject(error)
})
})
},
// set logo
setLogo({ commit }, logoInfo) {
const { netdiskName, netdiskLogo } = logoInfo
commit('SET_NETDISK_NAME', netdiskName)
commit('SET_NETDISK_LOGO', netdiskLogo)
setLogo(netdiskName, netdiskLogo)
},
// get user info
getInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo({
id: state.userId,
token: state.token
}).then(response => {
const { data } = response
if (!data) {
// reject('Verification failed, please Login again.')
}
const { id, username, showName, avatar, netdiskName, netdiskLogo} = data
commit('SET_NAME', username)
commit('SET_SHOW_NAME', showName)
commit('SET_AVATAR', avatar)
commit('SET_USERID', id)
commit('SET_USER_INFO', data)
commit('SET_NETDISK_NAME', netdiskName)
commit('SET_NETDISK_LOGO', netdiskLogo)
setLogo(netdiskName, netdiskLogo)
sessionStorage.setItem('store', JSON.stringify(state))
resolve(data)
}).catch(error => {
reject(error)
})
})
},
// user logout
logout({ commit, state }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
removeToken() // must remove token first
removeConsumerId()
resetRouter()
commit('RESET_STATE')
resolve()
}).catch(error => {
reject(error)
})
})
},
// remove token
resetToken({ commit }) {
return new Promise(resolve => {
removeToken() // must remove token first
removeConsumerId()
commit('RESET_STATE')
resolve()
})
},
// remove share token
resetShareToken({ commit }) {
return new Promise(resolve => {
removeShareToken()
commit('SET_SHARE_TOKEN', undefined)
resolve()
})
}
}
function getMenuTree(menuList) {
menuList = menuList.filter(menu => menu.menuType !== 1)
return menuList.map(menu => {
let router = {}
if(menu.children && menu.children.length){
router.meta = {title: menu.name, icon: menu.icon, menuType: menu.menuType}
router.hidden = menu.hide
router.children = findChildren(menu.children)
router.menuType = menu.menuType
}
if(menu.component && menu.component.length > 0) {
router.children = [
{
path: '',
name: menu.name,
component: loadView(menu.component),
meta: {title: menu.name, icon: menu.icon, menuType: menu.menuType},
hidden: menu.hide
}
]
}
router.path = menu.path
router.component = Layout
router.menuType = menu.menuType
return router
})
}
function findChildren(childrenMenu){
let children = []
childrenMenu = childrenMenu.filter(menu => menu.menuType !== 1)
childrenMenu.forEach(menu => {
let router = {
path: menu.path,
name: menu.name,
component: !menu.component || menu.component.length === 0 ? ParentView : loadView(menu.component),
meta: {title: menu.name, icon: menu.icon, menuType: menu.menuType},
hidden: menu.hide,
menuType: menu.menuType
}
if(menu.children && menu.children.length){
if(!menu.component || menu.component.length === 0){
router.children = findChildren(menu.children)
}
}
children = children.concat(router)
})
return children
}
export const loadView = (view) => {
return (resolve) => require([`@/views${view}`], resolve)
}
export default {
namespaced: true,
state,
mutations,
actions
}