From 9057e04efad1b7d61c77a72e5c37a504d0aee935 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 26 九月 2025 09:24:03 +0800
Subject: [PATCH] H5静态化

---
 admin/src/plugins/cache.js |  191 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 132 insertions(+), 59 deletions(-)

diff --git a/admin/src/plugins/cache.js b/admin/src/plugins/cache.js
index 82d800e..64a8812 100644
--- a/admin/src/plugins/cache.js
+++ b/admin/src/plugins/cache.js
@@ -1,71 +1,144 @@
-const sessionCache = {
-  set (key, value) {
-    if (!sessionStorage) {
-      return
-    }
-    if (key != null && value != null) {
-      sessionStorage.setItem(key, value)
-    }
-  },
-  get (key) {
-    if (!sessionStorage) {
-      return null
-    }
-    if (key == null) {
-      return null
-    }
-    return sessionStorage.getItem(key)
-  },
-  setJSON (key, jsonValue) {
-    if (jsonValue != null) {
-      this.set(key, JSON.stringify(jsonValue))
-    }
-  },
-  getJSON (key) {
-    const value = this.get(key)
-    if (value != null) {
-      return JSON.parse(value)
-    }
-  }
-}
-const localCache = {
-  set (key, value) {
-    if (!localStorage) {
-      return
-    }
-    if (key != null && value != null) {
-      localStorage.setItem(key, value)
-    }
-  },
-  get (key) {
-    if (!localStorage) {
-      return null
-    }
-    if (key == null) {
-      return null
-    }
-    return localStorage.getItem(key)
-  },
-  setJSON (key, jsonValue) {
-    if (jsonValue != null) {
-      this.set(key, JSON.stringify(jsonValue))
-    }
-  },
-  getJSON (key) {
-    const value = this.get(key)
-    if (value != null) {
-      return JSON.parse(value)
+import md5 from 'js-md5'
+const buildCacheImpl = impl => {
+  return {
+    __check () {
+      if (!impl) {
+        throw new Error('missing cache impl')
+      }
+    },
+    __get (key) {
+      this.__check(key)
+      if (key == null) {
+        return null
+      }
+      const value = impl.getItem(key)
+      if (value == null) {
+        return null
+      }
+      try {
+        const valueObj = JSON.parse(value)
+        // 宸茶繃鏈熷鐞�
+        if (valueObj.expiredTime != null && new Date().getTime() > valueObj.expiredTime) {
+          this.remove(key)
+          return null
+        }
+        return valueObj
+      } catch (e) {
+        return { value }
+      }
+    },
+    /**
+     * 鍐欏叆缂撳瓨
+     *
+     * @param key 閿�
+     * @param value 鍊�
+     * @param timeout 瓒呮椂鏃堕棿锛屽崟浣嶆绉掞紝-1琛ㄧず涓嶈秴鏃�
+     */
+    set (key, value, timeout = -1) {
+      if (key == null) {
+        return
+      }
+      if (value == null) {
+        return
+      }
+      let type = typeof value
+      if (value instanceof Date) {
+        type = 'date'
+      }
+      let actualValue = value
+      if (type === 'object') {
+        actualValue = JSON.stringify(value)
+      }
+      if (type === 'date') {
+        actualValue = value.getTime()
+      }
+      const birthtime = new Date().getTime()
+      const valueObj = {
+        type,
+        value: actualValue,
+        birthtime,
+        expiredTime: timeout === -1 ? null : birthtime + timeout
+      }
+      impl.setItem(key, JSON.stringify(valueObj))
+    },
+    /**
+     * 鑾峰彇缂撳瓨鍊�
+     *
+     * @param key 閿�
+     * @returns {SVGPoint | SVGNumber | string | SVGTransform | SVGLength | SVGPathSeg | T|*|any|{value}|null|any}
+     */
+    get (key) {
+      const valueObj = this.__get(key)
+      if (valueObj == null) {
+        return null
+      }
+      if (typeof valueObj !== 'object') {
+        return valueObj
+      }
+      if (valueObj.value == null) {
+        return null
+      }
+      if (valueObj.type === 'date') {
+        return new Date(valueObj.value)
+      }
+      if (valueObj.type === 'object') {
+        return JSON.parse(valueObj.value)
+      }
+      return valueObj.value
+    },
+    /**
+     * 鍒犻櫎缂撳瓨鍊�
+     *
+     * @param key 閿�
+     */
+    remove (key) {
+      impl.removeItem(key)
     }
   }
 }
 
 export default {
   /**
+   * 榛樿浣跨敤localStorage鏉ヨ褰曠紦瀛�
+   */
+  ...buildCacheImpl(window.localStorage),
+  /**
    * 浼氳瘽绾х紦瀛�
    */
-  session: sessionCache,
+  session: buildCacheImpl(window.sessionStorage),
   /**
    * 鏈湴缂撳瓨
    */
-  local: localCache
+  local: buildCacheImpl(window.localStorage),
+  /**
+   * 2FA缂撳瓨
+   */
+  twoFA: {
+    ...buildCacheImpl(window.sessionStorage),
+    /**
+     * 璁剧疆璁よ瘉瀵嗙爜
+     *
+     * @param value 瀵嗙爜
+     * @param rememberPwd 鏄惁璁颁綇瀵嗙爜
+     */
+    setPassword (value, rememberPwd = false) {
+      value = md5(value)
+      // 璁颁綇瀵嗙爜鏃讹紝榛樿璁颁綇5鍒嗛挓
+      const timeout = 5 * 60 * 1000
+      this.set('eva-2fa-password', value, rememberPwd ? timeout : -1)
+    },
+    /**
+     * 鑾峰彇璁よ瘉瀵嗙爜
+     * @returns {*}
+     */
+    getPassword () {
+      return this.get('eva-2fa-password')
+    },
+    /**
+     * 鍒犻櫎璁よ瘉瀵嗙爜
+     */
+    removePassword () {
+      this.remove('eva-2fa-password')
+    }
+  }
 }

--
Gitblit v1.9.3