Initial commit: freedom-web frontend project
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
import user from './module/user'
|
||||
import app from './module/app'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
//
|
||||
},
|
||||
mutations: {
|
||||
//
|
||||
},
|
||||
actions: {
|
||||
//
|
||||
},
|
||||
modules: {
|
||||
user,
|
||||
app
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,125 @@
|
||||
import {
|
||||
getBreadCrumbList,
|
||||
setTagNavListInLocalstorage,
|
||||
getMenuByRouter,
|
||||
getTagNavListFromLocalstorage,
|
||||
getHomeRoute,
|
||||
getNextRoute,
|
||||
routeHasExist,
|
||||
routeEqual,
|
||||
getRouteTitleHandled,
|
||||
localSave,
|
||||
localRead
|
||||
} from '@/libs/util'
|
||||
import beforeClose from '@/router/before-close'
|
||||
import { saveErrorLogger } from '@/api/data'
|
||||
import router from '@/router'
|
||||
import routers from '@/router/routers'
|
||||
import config from '@/config'
|
||||
// ①引入路由数据读取方法
|
||||
import { loadMenuList, createRouter } from '@/libs/router-util'
|
||||
|
||||
const { homeName } = config
|
||||
|
||||
const closePage = (state, route) => {
|
||||
const nextRoute = getNextRoute(state.tagNavList, route)
|
||||
state.tagNavList = state.tagNavList.filter(item => {
|
||||
return !routeEqual(item, route)
|
||||
})
|
||||
router.push(nextRoute)
|
||||
}
|
||||
|
||||
export default {
|
||||
state: {
|
||||
breadCrumbList: [],
|
||||
tagNavList: [],
|
||||
homeRoute: getHomeRoute(routers, homeName),
|
||||
local: localRead('local'),
|
||||
errorList: [],
|
||||
hasReadErrorPage: false,
|
||||
menuList: loadMenuList(),
|
||||
},
|
||||
getters: {
|
||||
//menuList: (state, getters, rootState) => getMenuByRouter(routers, rootState.user.access),
|
||||
// ②通过路由列表得到菜单列表
|
||||
// menuList: (state, getters, rootState) => getMenuByRouter(loadMenuList(), rootState.user.access),
|
||||
menuList: (state, getters, rootState) => getMenuByRouter(state.menuList, rootState.user.access),
|
||||
errorCount: state => state.errorList.length
|
||||
},
|
||||
mutations: {
|
||||
setBreadCrumb (state, route) {
|
||||
state.breadCrumbList = getBreadCrumbList(route, state.homeRoute)
|
||||
},
|
||||
setTagNavList (state, list) {
|
||||
let tagList = []
|
||||
if (list) {
|
||||
tagList = [...list]
|
||||
} else tagList = getTagNavListFromLocalstorage() || []
|
||||
if (tagList[0] && tagList[0].name !== homeName) tagList.shift()
|
||||
let homeTagIndex = tagList.findIndex(item => item.name === homeName)
|
||||
if (homeTagIndex > 0) {
|
||||
let homeTag = tagList.splice(homeTagIndex, 1)[0]
|
||||
tagList.unshift(homeTag)
|
||||
}
|
||||
state.tagNavList = tagList
|
||||
setTagNavListInLocalstorage([...tagList])
|
||||
},
|
||||
closeTag (state, route) {
|
||||
let tag = state.tagNavList.filter(item => routeEqual(item, route))
|
||||
route = tag[0] ? tag[0] : null
|
||||
if (!route) return
|
||||
if (route.meta && route.meta.beforeCloseName && route.meta.beforeCloseName in beforeClose) {
|
||||
new Promise(beforeClose[route.meta.beforeCloseName]).then(close => {
|
||||
if (close) {
|
||||
closePage(state, route)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
closePage(state, route)
|
||||
}
|
||||
},
|
||||
addTag (state, { route, type = 'unshift' }) {
|
||||
let router = getRouteTitleHandled(route)
|
||||
if (!routeHasExist(state.tagNavList, router)) {
|
||||
if (type === 'push') state.tagNavList.push(router)
|
||||
else {
|
||||
if (router.name === homeName) state.tagNavList.unshift(router)
|
||||
else state.tagNavList.splice(1, 0, router)
|
||||
}
|
||||
setTagNavListInLocalstorage([...state.tagNavList])
|
||||
}
|
||||
},
|
||||
setLocal (state, lang) {
|
||||
localSave('local', lang)
|
||||
state.local = lang
|
||||
},
|
||||
addError (state, error) {
|
||||
state.errorList.push(error)
|
||||
},
|
||||
setHasReadErrorLoggerStatus (state, status = true) {
|
||||
state.hasReadErrorPage = status
|
||||
},
|
||||
updateMenuList(state, routes) {
|
||||
// ③接受前台数组,刷新菜单
|
||||
router.matcher = createRouter(routers).matcher
|
||||
router.addRoutes(routes)
|
||||
state.menuList = routes
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
addErrorLog ({ commit, rootState }, info) {
|
||||
if (!window.location.href.includes('error_logger_page')) commit('setHasReadErrorLoggerStatus', false)
|
||||
const { user: { token, userId, username } } = rootState
|
||||
let data = {
|
||||
...info,
|
||||
time: Date.parse(new Date()),
|
||||
token,
|
||||
userId,
|
||||
username
|
||||
}
|
||||
saveErrorLogger(info).then(() => {
|
||||
commit('addError', data)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
import { login, logout, getUserInfo } from '@/api/sys/sys-user'
|
||||
import { setToken, getToken, setExpireTime, getExpireTime, localDelete } from '@/libs/util'
|
||||
|
||||
export default {
|
||||
state: {
|
||||
username: '',
|
||||
userId: '',
|
||||
avatorImgPath: '',
|
||||
nickname: '',
|
||||
token: getToken(),
|
||||
expireTime: getExpireTime(), //增加的token过期时间
|
||||
access: '',
|
||||
hasGetInfo: false
|
||||
},
|
||||
mutations: {
|
||||
setAvator (state, avatorPath) {
|
||||
state.avatorImgPath = avatorPath
|
||||
},
|
||||
setUserId (state, id) {
|
||||
state.userId = id
|
||||
},
|
||||
setUsername (state, username) {
|
||||
state.username = username
|
||||
},
|
||||
setNickname (state, nickname) {
|
||||
state.nickname = nickname
|
||||
},
|
||||
setAccess (state, access) {
|
||||
state.access = access
|
||||
},
|
||||
setToken (state, token) {
|
||||
state.token = token
|
||||
setToken(token)
|
||||
},
|
||||
setExpireTime (state, expireTime) {
|
||||
state.expireTime = expireTime
|
||||
setExpireTime(expireTime)
|
||||
},
|
||||
setHasGetInfo (state, status) {
|
||||
state.hasGetInfo = status
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
// 登录
|
||||
handleLogin ({ commit }, {username, password ,ip}) {
|
||||
username = username.trim()
|
||||
return new Promise((resolve, reject) => {
|
||||
login({
|
||||
username,
|
||||
password,
|
||||
ip
|
||||
}).then(res => {
|
||||
let data = res.data
|
||||
console.log("data:", data)
|
||||
if (data.code === 200) {
|
||||
let token = data.token
|
||||
console.log("token:", token)
|
||||
commit('setToken', token)
|
||||
let curDate = new Date()
|
||||
let expireTime = curDate.getTime() +24*60*60*1000 // 假设过期时间为后一天24*60*60*1000
|
||||
commit('setExpireTime',expireTime)
|
||||
}
|
||||
resolve(data)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 退出登录
|
||||
handleLogOut ({ state, commit }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.token).then(() => {
|
||||
commit('setToken', '')
|
||||
commit('setAccess', [])
|
||||
// 退出时清空缓存路由
|
||||
localDelete('route')
|
||||
resolve()
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
// 如果你的退出登录无需请求接口,则可以直接使用下面三行代码而无需使用logout调用接口
|
||||
// commit('setToken', '')
|
||||
// commit('setAccess', [])
|
||||
// resolve()
|
||||
})
|
||||
},
|
||||
// 获取用户相关信息
|
||||
getUserInfo ({ state, commit }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
getUserInfo(state.token).then(res => {
|
||||
const data = res.data.data;
|
||||
commit('setAvator', data.avatar)
|
||||
commit('setUsername', data.username) // 登录账号
|
||||
commit('setNickname', data.nickname) // 昵称
|
||||
commit('setUserId', data.id) //用户ID
|
||||
commit('setAccess', ['admin']) //用户权限
|
||||
commit('setHasGetInfo', true)
|
||||
resolve(data)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
} catch (error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user