cache.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { onActivated, ref } from 'vue'
  2. import type { LoginState } from '@/api'
  3. const cacheKey = '__loginState__'
  4. export const useCacheState = () => {
  5. const getInitial = () => {
  6. return import.meta.env.DEV
  7. ? { phone: '13138102395', password: 'Aa111111', remember: true }
  8. : { phone: '', password: '', remember: false }
  9. }
  10. const state = ref<LoginState & { remember: boolean }>(getInitial())
  11. const updateCacheState = () => {
  12. try {
  13. const stateStr = localStorage.getItem(cacheKey)
  14. if (stateStr) {
  15. const value = JSON.parse(stateStr)
  16. if (value.remember) {
  17. state.value = value
  18. } else {
  19. state.value = getInitial()
  20. }
  21. } else {
  22. state.value = getInitial()
  23. }
  24. console.error(state.value)
  25. } catch {}
  26. }
  27. updateCacheState()
  28. onActivated(updateCacheState)
  29. return [
  30. state,
  31. () => {
  32. if (state.value.remember) {
  33. localStorage.setItem(cacheKey, JSON.stringify(state.value))
  34. } else {
  35. localStorage.removeItem(cacheKey)
  36. }
  37. }
  38. ] as const
  39. }