persistent.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const exclude = ['actions', 'getters', 'mutations', 'namespaced']
  2. export default function Presistent({ key, modules, modulesKeys }) {
  3. return (store) => {
  4. const localOldState = JSON.parse(localStorage.getItem(key) || '{}')
  5. const sessionOldState = JSON.parse(sessionStorage.getItem(key) || '{}')
  6. let oldState = {}
  7. Object.assign(oldState, localOldState, sessionOldState)
  8. if (Object.keys(oldState).length > 0) {
  9. for (const oldKey in oldState) {
  10. modules[oldKey] = oldState[oldKey]
  11. }
  12. store.replaceState(modules)
  13. }
  14. store.subscribe((mutation, state) => {
  15. // 判断是否需要缓存数据至localStorage
  16. if (modulesKeys.local.length > 0) {
  17. const localData = setData(store.state, modulesKeys.local)
  18. localStorage.setItem(key, JSON.stringify(localData))
  19. } else {
  20. localStorage.removeItem(key)
  21. }
  22. // 判断是否需要缓存数据至sessionStorage
  23. if (modulesKeys.session.length > 0) {
  24. const sessionData = setData(store.state, modulesKeys.session)
  25. sessionStorage.setItem(key, JSON.stringify(sessionData))
  26. } else {
  27. sessionStorage.removeItem(key)
  28. }
  29. })
  30. }
  31. }
  32. function setData(state, module) {
  33. let data = {}
  34. for (const i of module) {
  35. data[i] = state[i]
  36. }
  37. return data
  38. }