refactor(store): 重构应用状态管理
- 将 app 和 user 模块的状态持久化从 sessionStorage 改为 localStorage - 移除 auth.js 中的 Cookie 操作,改为使用 Vuex store - 更新 getters、actions 和 mutations 以适应新的状态管理方式 -调整 logo、path 等工具类中的数据存储逻辑 - 修改请求拦截器中的 token 设置方式
This commit is contained in:
parent
def713b195
commit
3dd67a1e1c
@ -143,6 +143,9 @@ export default {
|
||||
})
|
||||
},
|
||||
loadHistoryPathList(pathname) {
|
||||
if (!this.$store.getters.token) {
|
||||
return
|
||||
}
|
||||
historyApi.fileHistoryPathList({path: encodeURI(pathname), username: this.$store.state.user.name, pageIndex: this.historyPageIndex, pageSize: this.historyPageSize}).then((res) => {
|
||||
this.fileHistoryList = res.data
|
||||
this.$emit('loadHistoryPathListSuccess', {res: res, pathname: pathname})
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
<script>
|
||||
import { Navbar, Sidebar, AppMain } from './components'
|
||||
import ResizeMixin from './mixin/ResizeHandler'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import AudioPreview from "@/components/preview/AudioPreview";
|
||||
import globalUploader from '@/components/SimpleUploader/globalUploader.vue'
|
||||
import { initiateSSE } from '@/sse/SSEClient'
|
||||
@ -59,7 +58,7 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
window.pc = !/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);
|
||||
if(getToken()){
|
||||
if(this.$store.getters.token){
|
||||
this.isShow = window.pc;
|
||||
// 与服务器建立sse连接
|
||||
initiateSSE(this.$store.state.user.name)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import 'normalize.css/normalize.css' // A modern alternative to CSS resets
|
||||
|
||||
import { setFavicon } from '@/utils/logo'
|
||||
import '@/utils/common'
|
||||
import '@/utils/web'
|
||||
|
||||
@ -13,6 +13,8 @@ import router from './router'
|
||||
import VueI18n from 'vue-i18n';
|
||||
import { loadLocaleMessages, getBrowserLocale } from '@/utils/loadLocaleMessages';
|
||||
|
||||
setFavicon()
|
||||
|
||||
// ant-design-vue
|
||||
import { Affix } from 'ant-design-vue';
|
||||
Vue.use(Affix)
|
||||
|
||||
@ -2,7 +2,6 @@ import router from './router'
|
||||
import store from './store'
|
||||
import NProgress from 'nprogress' // 进度条
|
||||
import 'nprogress/nprogress.css' // 进度条样式
|
||||
import { getToken } from '@/utils/auth' // 认证获取token
|
||||
import getPageTitle from '@/utils/get-page-title'
|
||||
|
||||
NProgress.configure({ showSpinner: false }) // NProgress配置
|
||||
@ -16,7 +15,7 @@ router.beforeEach(async(to, from, next) => {
|
||||
document.title = getPageTitle(to.meta.title)
|
||||
|
||||
// 确认用户是否已登录
|
||||
const hasToken = getToken()
|
||||
const hasToken = store.getters.token
|
||||
|
||||
if (hasToken) {
|
||||
// 已登录的情况
|
||||
|
||||
@ -4,6 +4,7 @@ const getters = {
|
||||
lang: state => state.app.lang,
|
||||
token: state => state.user.token,
|
||||
shareToken: state => state.user.shareToken,
|
||||
shareId: state => state.user.shareId,
|
||||
avatar: state => state.user.avatar,
|
||||
name: state => state.user.name,
|
||||
showName: state => state.user.showName,
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
import { getConsumerId, getShareToken, getToken, getUsername } from '@/utils/auth'
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
|
||||
const getDefaultState = () => {
|
||||
const app = sessionStorage.getItem('app') && JSON.parse(sessionStorage.getItem('app'))
|
||||
const app = localStorage.getItem('app') && JSON.parse(localStorage.getItem('app'))
|
||||
return {
|
||||
sidebar: {
|
||||
opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
|
||||
@ -40,7 +39,7 @@ const mutations = {
|
||||
}
|
||||
|
||||
function setStorage() {
|
||||
sessionStorage.setItem('app', JSON.stringify(state))
|
||||
localStorage.setItem('app', JSON.stringify(state))
|
||||
}
|
||||
|
||||
const actions = {
|
||||
|
||||
@ -1,17 +1,6 @@
|
||||
import { login, logout, getInfo } from '@/api/user'
|
||||
import fileApi from '@/api/file-api'
|
||||
import menuApi from '@/api/menu'
|
||||
import {
|
||||
getToken,
|
||||
getConsumerId,
|
||||
removeToken,
|
||||
removeConsumerId,
|
||||
removeRememberName,
|
||||
setShareToken,
|
||||
getShareToken,
|
||||
removeShareToken,
|
||||
getUsername,
|
||||
} from '@/utils/auth'
|
||||
import { setLogo } from '@/utils/logo'
|
||||
import { resetRouter } from '@/router'
|
||||
import router from '@/router'
|
||||
@ -19,15 +8,16 @@ import Layout from '@/layout'
|
||||
import ParentView from '@/components/ParentView'
|
||||
|
||||
const getDefaultState = () => {
|
||||
const store = sessionStorage.getItem('store') && JSON.parse(sessionStorage.getItem('store'))
|
||||
const store = localStorage.getItem('store') && JSON.parse(localStorage.getItem('store'))
|
||||
return {
|
||||
token: getToken(),
|
||||
shareToken: getShareToken(),
|
||||
name: getUsername(),
|
||||
token: store ? store.token : '',
|
||||
shareToken: store ? store.shareToken : '',
|
||||
shareId: store ? store.shareId : '',
|
||||
name: store ? store.name : '',
|
||||
showName: store ? store.showName : '',
|
||||
userInfo: {},
|
||||
avatar: store ? store.avatar : '',
|
||||
userId: getConsumerId(),
|
||||
userId: store ? store.userId : '',
|
||||
menuList: [],
|
||||
netdiskName: store ? store.netdiskName : '',
|
||||
netdiskLogo: store ? store.netdiskLogo : '',
|
||||
@ -48,6 +38,9 @@ const mutations = {
|
||||
SET_SHARE_TOKEN: (state, token) => {
|
||||
state.shareToken = token
|
||||
},
|
||||
SET_SHARE_ID: (state, shareId) => {
|
||||
state.shareId = shareId
|
||||
},
|
||||
SET_NAME: (state, name) => {
|
||||
state.name = name
|
||||
},
|
||||
@ -93,8 +86,7 @@ const actions = {
|
||||
localStorage.removeItem('taskProgressRole')
|
||||
}
|
||||
|
||||
state.menuList = getMenuTree(res.data);
|
||||
commit('SET_MENU_LIST', state.menuList);
|
||||
commit('SET_MENU_LIST', getMenuTree(res.data));
|
||||
resetRouter(state.menuList)
|
||||
router.options.routes = router.options.routes.concat(state.menuList);
|
||||
resolve(res)
|
||||
@ -110,12 +102,9 @@ const actions = {
|
||||
return new Promise((resolve, reject) => {
|
||||
login({ username: username.trim(), password: password, rememberMe: rememberMe }).then(response => {
|
||||
const { data } = response
|
||||
commit('SET_TOKEN', data.jmalToken)
|
||||
commit('SET_TOKEN', data['jmal-token'])
|
||||
commit('SET_NAME', username.trim())
|
||||
commit('SET_USERID', data.userId)
|
||||
if(!rememberMe){
|
||||
removeRememberName()
|
||||
}
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
@ -128,7 +117,7 @@ const actions = {
|
||||
fileApi.validShareCode({ shareId: shareId, shareCode: shareCode }).then(response => {
|
||||
const { data } = response
|
||||
commit('SET_SHARE_TOKEN', data)
|
||||
setShareToken(data, shareId)
|
||||
commit('SET_SHARE_ID', shareId)
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
@ -141,7 +130,7 @@ const actions = {
|
||||
commit('SET_NETDISK_NAME', netdiskName)
|
||||
commit('SET_NETDISK_LOGO', netdiskLogo)
|
||||
setLogo(netdiskName, netdiskLogo)
|
||||
sessionStorage.setItem('store', JSON.stringify(state))
|
||||
localStorage.setItem('store', JSON.stringify(state))
|
||||
},
|
||||
|
||||
// get user info
|
||||
@ -173,7 +162,7 @@ const actions = {
|
||||
commit('SET_NEW_VERSION', '')
|
||||
}
|
||||
setLogo(netdiskName, netdiskLogo)
|
||||
sessionStorage.setItem('store', JSON.stringify(state))
|
||||
localStorage.setItem('store', JSON.stringify(state))
|
||||
resolve(data)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
@ -186,9 +175,6 @@ const actions = {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.token).then(() => {
|
||||
localStorage.clear()
|
||||
removeToken()
|
||||
removeConsumerId()
|
||||
removeRememberName()
|
||||
resetRouter()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
@ -201,8 +187,7 @@ const actions = {
|
||||
// remove token
|
||||
resetToken({ commit }) {
|
||||
return new Promise(resolve => {
|
||||
removeToken() // must remove token first
|
||||
removeConsumerId()
|
||||
localStorage.clear()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
})
|
||||
@ -216,8 +201,8 @@ const actions = {
|
||||
// remove share token
|
||||
resetShareToken({ commit }) {
|
||||
return new Promise(resolve => {
|
||||
removeShareToken()
|
||||
commit('SET_SHARE_TOKEN', undefined)
|
||||
commit('SET_SHARE_ID', undefined)
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const tokenKey = 'jmal-token'
|
||||
const usernameKey = 'username'
|
||||
const shareTokenKey = 'share-token'
|
||||
const shareIdKey = 'shareId'
|
||||
const consumerId = 'consumerId'
|
||||
const rememberName = 'rememberName'
|
||||
|
||||
export function getRememberName() {
|
||||
return Cookies.get(rememberName)
|
||||
}
|
||||
|
||||
export function removeRememberName() {
|
||||
return Cookies.remove(rememberName)
|
||||
}
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(tokenKey)
|
||||
}
|
||||
|
||||
export function getUsername() {
|
||||
return Cookies.get(usernameKey)
|
||||
}
|
||||
|
||||
export function getShareToken() {
|
||||
return Cookies.get(shareTokenKey)
|
||||
}
|
||||
|
||||
export function getShareId() {
|
||||
return Cookies.get(shareIdKey)
|
||||
}
|
||||
|
||||
export function setShareToken(token, shareId) {
|
||||
Cookies.set(shareTokenKey, token)
|
||||
Cookies.set(shareIdKey, shareId)
|
||||
}
|
||||
|
||||
export function removeToken() {
|
||||
Cookies.remove(tokenKey)
|
||||
Cookies.remove(usernameKey)
|
||||
}
|
||||
|
||||
export function removeShareToken() {
|
||||
Cookies.remove(shareTokenKey)
|
||||
Cookies.remove(shareIdKey)
|
||||
}
|
||||
|
||||
export function getConsumerId() {
|
||||
return Cookies.get(consumerId)
|
||||
}
|
||||
|
||||
export function removeConsumerId() {
|
||||
return Cookies.remove(consumerId)
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
import Cookies from 'js-cookie'
|
||||
import fileConfig from "@/utils/file-config";
|
||||
|
||||
const titleKey = 'netdisk-name'
|
||||
@ -6,22 +5,22 @@ const titleKey = 'netdisk-name'
|
||||
const logoKey = 'netdisk-logo'
|
||||
|
||||
export function getLogoName() {
|
||||
return Cookies.get(titleKey)
|
||||
return localStorage.getItem(titleKey)
|
||||
}
|
||||
|
||||
export function getLogo() {
|
||||
return Cookies.get(logoKey)
|
||||
return localStorage.getItem(logoKey)
|
||||
}
|
||||
|
||||
export function setLogo(logoName, logo) {
|
||||
Cookies.set(titleKey, logoName)
|
||||
Cookies.set(logoKey, logo)
|
||||
localStorage.setItem(titleKey, logoName)
|
||||
localStorage.setItem(logoKey, logo)
|
||||
setFavicon()
|
||||
}
|
||||
|
||||
export function removeLogo() {
|
||||
Cookies.remove(titleKey)
|
||||
return Cookies.remove(logoKey)
|
||||
localStorage.removeItem(titleKey)
|
||||
localStorage.removeItem(logoKey)
|
||||
}
|
||||
|
||||
export function setFavicon() {
|
||||
|
||||
@ -1,32 +1,3 @@
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const pathKey = 'user-select-path'
|
||||
|
||||
const pathListKey = 'user-select-path-list'
|
||||
|
||||
export function getPath() {
|
||||
const res = Cookies.get(pathKey)
|
||||
if (!res || res === 'undefined') {
|
||||
return ''
|
||||
} else {
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
export function getPathList() {
|
||||
return Cookies.get(pathListKey)
|
||||
}
|
||||
|
||||
export function setPath(path, pathList) {
|
||||
Cookies.set(pathListKey, pathList)
|
||||
return Cookies.set(pathKey, path)
|
||||
}
|
||||
|
||||
export function removePath() {
|
||||
Cookies.remove(pathListKey)
|
||||
return Cookies.remove(pathKey)
|
||||
}
|
||||
|
||||
function isEncoded(str) {
|
||||
return /%[0-9A-Fa-f]{2}/.test(str);
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
// import { MessageBox, Message } from 'element-ui'
|
||||
import store from '@/store'
|
||||
import _ from "lodash";
|
||||
import {getShareId, getShareToken, getToken, getUsername} from '@/utils/auth'
|
||||
import { getBrowserLanguage } from '@/utils/loadLocaleMessages';
|
||||
|
||||
// create an axios instance
|
||||
@ -16,14 +15,14 @@ service.interceptors.request.use(
|
||||
config => {
|
||||
// do something before request is sent
|
||||
if (store.getters.token) {
|
||||
config.headers['jmal-token'] = getToken()
|
||||
config.headers['jmal-token'] = store.getters.token
|
||||
}
|
||||
if (store.getters.name) {
|
||||
config.headers['name'] = getUsername()
|
||||
config.headers['name'] = store.getters.name
|
||||
}
|
||||
if (store.getters.shareToken) {
|
||||
config.headers['share-token'] = getShareToken()
|
||||
config.headers['shareId'] = getShareId()
|
||||
config.headers['share-token'] = store.getters.shareToken
|
||||
config.headers['shareId'] = store.getters.shareToken
|
||||
}
|
||||
// add i18n
|
||||
config.headers['lang'] = store.getters.lang || getBrowserLanguage()
|
||||
@ -71,7 +70,7 @@ service.interceptors.response.use(
|
||||
} else if (res.code === 5) {
|
||||
// to re-login
|
||||
setTimeout(function () {
|
||||
const hasToken = getToken()
|
||||
const hasToken = store.getters.token
|
||||
if (hasToken) {
|
||||
Vue.prototype.$confirm('登录已失效,请重新登录', '确认登出', {
|
||||
confirmButtonText: '重新登录',
|
||||
|
||||
@ -100,7 +100,6 @@
|
||||
<script>
|
||||
import { getWebstieRecord } from "@/api/setting-api";
|
||||
import { hasUser, initialization } from '@/api/user'
|
||||
import { getRememberName } from '@/utils/auth'
|
||||
import Logo from "@/components/Logo";
|
||||
|
||||
export default {
|
||||
@ -180,11 +179,6 @@ export default {
|
||||
}
|
||||
})
|
||||
|
||||
let rememberName = getRememberName()
|
||||
if(rememberName){
|
||||
this.loginForm.username = rememberName
|
||||
this.loginForm.rememberMe = true
|
||||
}
|
||||
getWebstieRecord().then((res) => {
|
||||
this.webstieRecord = res.data
|
||||
if (this.webstieRecord.netdiskName || this.webstieRecord.netdiskLogo) {
|
||||
|
||||
@ -1088,7 +1088,6 @@ export default {
|
||||
this.accessShareOpenDir(row.id)
|
||||
} else {
|
||||
const fileHandler = fileConfig.hasIframePreview(row.suffix, this.iframePreviewConfig)
|
||||
console.log(fileHandler, this.iframePreviewConfig)
|
||||
if (fileHandler !== null) {
|
||||
// iframe 预览
|
||||
this.iframePreviewVisible = true
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user