2020-08-04 21:50:59 +08:00
|
|
|
|
import { isServer } from '~/environment'
|
|
|
|
|
|
2020-11-30 23:56:08 +08:00
|
|
|
|
const cookieParser = isServer ? require('cookieparser') : undefined
|
2020-07-03 11:04:25 +08:00
|
|
|
|
|
2020-07-02 23:45:27 +08:00
|
|
|
|
export const state = () => {
|
|
|
|
|
return {
|
2020-07-03 11:04:25 +08:00
|
|
|
|
activeMenu: 'index',
|
2020-07-31 16:17:12 +08:00
|
|
|
|
oauth: null,
|
2020-08-06 15:44:29 +08:00
|
|
|
|
userInfo: null,
|
2020-08-02 19:25:40 +08:00
|
|
|
|
locale: 'zh_CN',
|
2022-01-14 10:38:55 +08:00
|
|
|
|
uploadHeaders: '',
|
|
|
|
|
fingerprint: ''
|
2020-07-02 23:45:27 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-03 11:04:25 +08:00
|
|
|
|
|
|
|
|
|
export const mutations = {
|
|
|
|
|
setAuth (state, auth) {
|
|
|
|
|
state.oauth = auth
|
|
|
|
|
},
|
2020-08-06 15:44:29 +08:00
|
|
|
|
setUser (state, data) {
|
|
|
|
|
state.userInfo = data
|
|
|
|
|
},
|
2020-07-03 11:04:25 +08:00
|
|
|
|
setActiveMenu (state, activeMenu) {
|
|
|
|
|
state.activeMenu = activeMenu
|
2020-08-02 19:25:40 +08:00
|
|
|
|
},
|
|
|
|
|
setUploadHeaders(state, data){
|
|
|
|
|
state.uploadHeaders = data
|
2020-08-02 19:40:28 +08:00
|
|
|
|
},
|
|
|
|
|
setUserInfo(state, data) {
|
2020-08-06 15:44:29 +08:00
|
|
|
|
state.userInfo.avatarURL = data.avatarUrl;
|
|
|
|
|
state.userInfo.nickname = data.nickname;
|
2020-11-11 21:39:33 +08:00
|
|
|
|
let user = {
|
|
|
|
|
nickname: data.nickname,
|
2021-04-24 22:25:28 +08:00
|
|
|
|
avatarURL: data.avatarUrl,
|
|
|
|
|
account: this.state.userInfo.account
|
2020-11-11 21:39:33 +08:00
|
|
|
|
}
|
|
|
|
|
localStorage.setItem('user', JSON.stringify(user))
|
2022-01-14 10:38:55 +08:00
|
|
|
|
},
|
|
|
|
|
setFingerprint (state, fingerprint) {
|
|
|
|
|
state.fingerprint = fingerprint
|
2020-07-03 11:04:25 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-22 17:13:42 +08:00
|
|
|
|
export const actions = {
|
2020-06-21 21:56:34 +08:00
|
|
|
|
nuxtServerInit(store, {req}) {
|
|
|
|
|
// 初始化时的全局任务
|
2020-08-04 21:50:59 +08:00
|
|
|
|
const userAgent = isServer ? req.headers['user-agent'] : navigator.userAgent
|
|
|
|
|
const browser = {
|
|
|
|
|
versions: function() {
|
|
|
|
|
return { //移动终端浏览器版本信息
|
|
|
|
|
trident: userAgent.indexOf('Trident') > -1, //IE内核
|
|
|
|
|
presto: userAgent.indexOf('Presto') > -1, //opera内核
|
|
|
|
|
webKit: userAgent.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
|
|
|
|
|
gecko: userAgent.indexOf('Gecko') > -1 && userAgent.indexOf('KHTML') == -1, //火狐内核
|
|
|
|
|
mobile: !!userAgent.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
|
|
|
|
|
ios: !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
|
|
|
|
|
android: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Linux') > -1, //android终端或uc浏览器
|
|
|
|
|
iPhone: userAgent.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
|
|
|
|
|
iPad: userAgent.indexOf('iPad') > -1, //是否iPad
|
2020-11-30 23:56:08 +08:00
|
|
|
|
webApp: userAgent.indexOf('Safari') == -1 //是否web应用程序,没有头部与底部
|
2020-08-04 21:50:59 +08:00
|
|
|
|
};
|
|
|
|
|
} ()
|
|
|
|
|
}
|
|
|
|
|
if (browser.versions.mobile) {
|
|
|
|
|
// 移动端
|
|
|
|
|
store.commit('global/updateMobileState', true)
|
|
|
|
|
}
|
2020-07-03 11:04:25 +08:00
|
|
|
|
let auth = null
|
|
|
|
|
if (req.headers.cookie) {
|
2020-11-30 23:56:08 +08:00
|
|
|
|
const parsed = cookieParser.parse(req.headers.cookie)
|
2020-07-03 11:04:25 +08:00
|
|
|
|
try {
|
|
|
|
|
auth = JSON.parse(parsed.auth)
|
|
|
|
|
} catch (err) {
|
|
|
|
|
// No valid cookie found
|
2020-08-02 00:25:44 +08:00
|
|
|
|
console.log(err);
|
2020-07-03 11:04:25 +08:00
|
|
|
|
}
|
|
|
|
|
store.commit('setAuth', auth)
|
|
|
|
|
}
|
2020-08-02 00:25:44 +08:00
|
|
|
|
|
2020-06-21 21:56:34 +08:00
|
|
|
|
const initFetchAppData = [
|
|
|
|
|
// 内容数据
|
2020-08-11 22:39:59 +08:00
|
|
|
|
store.dispatch('topic/fetchNavList'),
|
2021-05-20 22:02:49 +08:00
|
|
|
|
store.dispatch('article/fetchList')
|
2020-06-21 21:56:34 +08:00
|
|
|
|
]
|
2020-08-02 00:25:44 +08:00
|
|
|
|
|
2020-06-21 21:56:34 +08:00
|
|
|
|
return Promise.all(initFetchAppData)
|
2020-06-19 17:10:44 +08:00
|
|
|
|
}
|
2020-06-22 17:13:42 +08:00
|
|
|
|
}
|
2020-07-03 11:04:25 +08:00
|
|
|
|
|
|
|
|
|
export const getters = {
|
|
|
|
|
hasPermissions: (state) => (scenes) => {
|
|
|
|
|
let hasPermissions = false;
|
|
|
|
|
const role = state.oauth?.role
|
|
|
|
|
if (role) {
|
|
|
|
|
switch (scenes) {
|
|
|
|
|
case 'user':
|
|
|
|
|
hasPermissions = role < 5;
|
|
|
|
|
break;
|
|
|
|
|
case 'role':
|
|
|
|
|
hasPermissions = role < 2;
|
|
|
|
|
break;
|
|
|
|
|
case 'topic':
|
|
|
|
|
hasPermissions = role < 3;
|
|
|
|
|
break;
|
|
|
|
|
case 'tag':
|
|
|
|
|
hasPermissions = role < 3;
|
|
|
|
|
break;
|
|
|
|
|
case 'admin':
|
|
|
|
|
hasPermissions = role < 2;
|
|
|
|
|
break;
|
|
|
|
|
case 'blog_admin':
|
|
|
|
|
hasPermissions = role < 3;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
hasPermissions = false;
|
|
|
|
|
this.commit('logout');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return hasPermissions;
|
|
|
|
|
}
|
|
|
|
|
}
|