Browse Source

优化缓存问题

ZaiZai 1 year ago
parent
commit
1e59d646b8
6 changed files with 97 additions and 55 deletions
  1. 41 0
      src/api/auth.js
  2. 1 1
      src/router/index.js
  3. 2 2
      src/router/routers.js
  4. 45 46
      src/store/index.js
  5. 3 3
      src/store/modules/app.js
  6. 5 3
      src/store/modules/user.js

+ 41 - 0
src/api/auth.js

@@ -0,0 +1,41 @@
+import { calcDate, delStoreData, getStoreData, setStoreData } from 'js-fast-way'
+import website from '~src/config/index'
+
+//处理token
+export const getToken = () => {
+    getTokenTime(website?.tokenKey)
+    return getStoreData(website?.tokenKey)
+}
+
+export const setToken = (token) => {
+    setStoreData(website?.tokenKey, token)
+}
+
+export const getRefreshToken = () => {
+    getTokenTime(website?.refreshTokenKey)
+    return getStoreData(website?.refreshTokenKey)
+}
+
+export const setRefreshToken = (token) => {
+    setStoreData(website?.refreshTokenKey, token)
+}
+
+export const removeToken = () => {
+    delStoreData(website?.tokenKey)
+}
+
+export const removeRefreshToken = () => {
+    delStoreData(website?.refreshTokenKey)
+}
+
+//计算token是否过期
+const getTokenTime = (tokenKey) => {
+    const token = getStoreData(tokenKey, true)
+    if (token) {
+        const date = calcDate(token.datetime, new Date().getTime())
+        if (date.seconds > 2000) {
+            removeToken()
+            removeRefreshToken()
+        }
+    }
+}

+ 1 - 1
src/router/index.js

@@ -1,6 +1,6 @@
 import * as vueRouter from 'vue-router'
 import baseData from './modules/base'
-import { getToken } from 'hc-vue3-ui'
+import { getToken } from '~src/api/auth'
 import { getRouterData } from './routers'
 import NProgress from 'nprogress'
 import '~src/styles/app/nprogress.scss'

+ 2 - 2
src/router/routers.js

@@ -1,8 +1,8 @@
-import { getStore } from 'hc-vue3-ui'
 import { getArrValue } from 'js-fast-way'
+import { getStoreValue } from '~src/utils/storage'
 
 //获取路由菜单
 export const getRouterData = async (toName) => {
-    const routes = getArrValue(getStore('routes'))
+    const routes = getArrValue(getStoreValue('routes'))
     return routes.indexOf(toName) !== -1
 }

+ 45 - 46
src/store/index.js

@@ -3,42 +3,41 @@ import pinia from '~src/store/init'
 import appConfig from '~src/config/app'
 import logoIcon from '~src/assets/logo/icon.png'
 import logoName from '~src/assets/logo/name.png'
-import {
-    clearStoreAll, getStore, removeRefreshToken, removeToken,
-    setRefreshToken, setStore, setToken,
-} from 'hc-vue3-ui'
+import { clearStoreAll } from 'hc-vue3-ui'
+import { getStoreValue, setStoreValue } from '~src/utils/storage'
+import { removeRefreshToken, removeToken, setRefreshToken, setToken } from '~src/api/auth'
 
 export const useAppStore = defineStore('main', {
     state: () => ({
         //系统信息
-        title: getStore('title') || appConfig.title,
-        logoIcon: getStore('logoIcon') || logoIcon,
-        logoName: getStore('logoName') || logoName,
+        title: getStoreValue('title') || appConfig.title,
+        logoIcon: getStoreValue('logoIcon') || logoIcon,
+        logoName: getStoreValue('logoName') || logoName,
         //主题信息
-        theme: getStore('theme') || appConfig.theme, //用户可选择类型:auto,light, dark
-        themeVal: getStore('themeVal') || '', //实际主题:light, dark
-        color: getStore('color') || appConfig.color,
+        theme: getStoreValue('theme') || appConfig.theme, //用户可选择类型:auto,light, dark
+        themeVal: getStoreValue('themeVal') || '', //实际主题:light, dark
+        color: getStoreValue('color') || appConfig.color,
         //用户信息
-        token: getStore('token') || '',
-        refreshToken: getStore('refreshToken') || '',
-        tenantId: getStore('tenantId') || '',
-        userInfo: getStore('userInfo') || {},
+        token: getStoreValue('token') || '',
+        refreshToken: getStoreValue('refreshToken') || '',
+        tenantId: getStoreValue('tenantId') || '',
+        userInfo: getStoreValue('userInfo') || {},
         //菜单信息
-        menus: getStore('menus') || [],
-        buttons: getStore('buttons') || {},
-        homeUrl: getStore('homeUrl'), //首页路由
+        menus: getStoreValue('menus') || [],
+        buttons: getStoreValue('buttons') || {},
+        homeUrl: getStoreValue('homeUrl'), //首页路由
         //项目合同段数据
-        projectContract: getStore('projectContract') || [],
-        projectInfo: getStore('projectInfo') || {},
-        contractInfo: getStore('contractInfo') || {},
-        projectId: getStore('projectId') || '',
-        contractId: getStore('contractId') || '',
+        projectContract: getStoreValue('projectContract') || [],
+        projectInfo: getStoreValue('projectInfo') || {},
+        contractInfo: getStoreValue('contractInfo') || {},
+        projectId: getStoreValue('projectId') || '',
+        contractId: getStoreValue('contractId') || '',
         //其他配置信息
-        bubble: getStore('bubble') || false,
-        isCollapse: getStore('isCollapse') || false, //菜单折叠
+        bubble: getStoreValue('bubble') || false,
+        isCollapse: getStoreValue('isCollapse') || false, //菜单折叠
         dragModalSortTop: [], //拖拽弹窗排序
         barMenuName: '',
-        isSource: getStore('isSource') || '', //来源
+        isSource: getStoreValue('isSource') || '', //来源
     }),
     getters: {
         //系统信息
@@ -74,100 +73,100 @@ export const useAppStore = defineStore('main', {
         //系统信息
         setTitle(value) {
             this.title = value
-            setStore('title', value)
+            setStoreValue('title', value)
         },
         setLogoIcon(value) {
             this.logoIcon = value
-            setStore('logoIcon', value)
+            setStoreValue('logoIcon', value)
         },
         setLogoName(value) {
             this.logoName = value
-            setStore('logoName', value)
+            setStoreValue('logoName', value)
         },
         //主题信息
         setTheme(value) {
             this.theme = value
-            setStore('theme', value)
+            setStoreValue('theme', value)
         },
         setThemeVal(value) {
             this.themeVal = value
-            setStore('themeVal', value)
+            setStoreValue('themeVal', value)
         },
         setColor(value) {
             this.color = value
-            setStore('color', value)
+            setStoreValue('color', value)
         },
         //用户信息
         setTokenVal(value) {
             this.token = value
             setToken(value)
-            setStore('token', value)
+            setStoreValue('token', value)
         },
         setRefreshTokenVal(value) {
             this.refreshToken = value
             setRefreshToken(value)
-            setStore('refreshToken', value)
+            setStoreValue('refreshToken', value)
         },
         setTenantId(value) {
             this.tenantId = value
-            setStore('tenantId', value)
+            setStoreValue('tenantId', value)
         },
         setUserInfo(value) {
             this.userInfo = value
-            setStore('userInfo', value)
+            setStoreValue('userInfo', value)
         },
         //菜单信息
         setMenus(value) {
             this.menus = value
-            setStore('menus', value)
+            setStoreValue('menus', value)
         },
         setButtons(value) {
             this.buttons = value
-            setStore('buttons', value)
+            setStoreValue('buttons', value)
         },
         getButtonsVal(value) {
             return this.buttons[value] || false
         },
         setHomeUrl(value) {
             this.homeUrl = value
-            setStore('homeUrl', value)
+            setStoreValue('homeUrl', value)
         },
         //项目合同段数据
         setProjectContract(value) {
             this.projectContract = value
-            setStore('projectContract', value)
+            setStoreValue('projectContract', value)
         },
         setProjectInfo(value) {
             this.projectInfo = value
-            setStore('projectInfo', value)
+            setStoreValue('projectInfo', value)
         },
         setContractInfo(value) {
             this.contractInfo = value
-            setStore('contractInfo', value)
+            setStoreValue('contractInfo', value)
         },
         setProjectId(value) {
             this.projectId = value
-            setStore('projectId', value)
+            setStoreValue('projectId', value)
         },
         setContractId(value) {
             this.contractId = value
-            setStore('contractId', value)
+            setStoreValue('contractId', value)
         },
         //其他配置信息
         setBubble(value) {
             this.bubble = value
-            setStore('bubble', value)
+            setStoreValue('bubble', value)
         },
         setCollapse(value) { //菜单折叠
             this.isCollapse = value
-            setStore('isCollapse', value)
+            setStoreValue('isCollapse', value)
         },
         setDragModalSortTop(value) {
             this.dragModalSortTop = value
         },
         setIsSource(value) {
             this.isSource = value
-            setStore('isSource', value)
+            setStoreValue('isSource', value)
         },
         //清除缓存和token
         clearStoreData() {

+ 3 - 3
src/store/modules/app.js

@@ -3,13 +3,13 @@ import { useAppStore } from '~src/store'
 import { getButtons } from '~api/menu'
 import { getProjectAndContract } from '~api/user'
 import { ArrToOneObj, getArrValue } from 'js-fast-way'
-import { getStore } from 'hc-vue3-ui'
+import { getStoreValue } from '~src/utils/storage'
 
 const store = useAppStore(pinia)
 
 //项目合同段初始化
 export const initProjectContract = async () => {
-    const value = getStore('projectContract')
+    const value = getStoreValue('projectContract')
     if (!value) {
         const { error, data } = await getProjectAndContract()
         if (error) return Promise.reject('error')
@@ -23,7 +23,7 @@ export const initProjectContract = async () => {
 
 //按钮初始化
 export const initButtons = async () => {
-    const value = getStore('buttons')
+    const value = getStoreValue('buttons')
     if (!value) {
         const { error, data } = await getButtons()
         if (error) return Promise.reject('error')

+ 5 - 3
src/store/modules/user.js

@@ -6,8 +6,10 @@ import themeData from '~src/config/theme'
 import tokenData from '~src/router/modules/token'
 import { logout, refreshToken, userLogin } from '~api/user'
 import { userConfigInfo, userConfigSave } from '~api/other'
+import { setStoreValue } from '~src/utils/storage'
 import { ArrToOneObj, arrIndex, getArrValue, getObjValue, isNullES } from 'js-fast-way'
-import { setStore, useOsTheme } from 'hc-vue3-ui'
+import { useOsTheme } from 'hc-vue3-ui'
+
 
 //初始变量
 const store = useAppStore(pinia)
@@ -107,8 +109,8 @@ export const setRouterData = async () => {
     const routes = [...tokenData, ...routesArr] //合并
     //数据缓存
     store.setMenus(resData)
-    setStore('route', routesObj)
-    setStore('routes', routes)
+    setStoreValue('route', routesObj)
+    setStoreValue('routes', routes)
     return resData
 }