From df2a8398142b7a5176552e254422300b5a014ece Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 18 十月 2024 15:01:41 +0800
Subject: [PATCH] 2024-10-18
---
src/api/cacheutils.js | 422 ++++++++++++++++++----------------------------------
1 files changed, 148 insertions(+), 274 deletions(-)
diff --git a/src/api/cacheutils.js b/src/api/cacheutils.js
index 2aa5642..b20d3f6 100644
--- a/src/api/cacheutils.js
+++ b/src/api/cacheutils.js
@@ -3,189 +3,11 @@
*/
export default class CacheUtils {
/**
- * @description 鎵撳紑websql
- */
- static openWebSql () {
- let service = window.GLOB.service ? '-' + window.GLOB.service.replace('/', '') : ''
- try {
- window.GLOB.WebSql = openDatabase(`mkdb${service}`, '1', 'mk-pc-database', 50 * 1024 * 1024)
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql('CREATE TABLE IF NOT EXISTS VERSIONS (version varchar(50), createDate varchar(50), CDefine1 varchar(50), CDefine2 varchar(50), CDefine3 varchar(50))', [], () => {
-
- }, () => {
- // eslint-disable-next-line
- throw 'CREATE TABLE ERROR'
- })
- tx.executeSql('CREATE TABLE IF NOT EXISTS CONFIGS (menuid varchar(50), userid varchar(50), openEdition varchar(50), webEdition varchar(50), LongParam text, LongParamUser text, CDefine1 varchar(50), CDefine2 varchar(50), CDefine3 varchar(50), CDefine4 varchar(50), CDefine5 varchar(50))', [], () => {
-
- }, () => {
- // eslint-disable-next-line
- throw 'CREATE TABLE ERROR'
- })
- })
- // window.GLOB.WebSql.transaction(tx => {
- // tx.executeSql('DROP TABLE VERSIONS')
- // tx.executeSql('DROP TABLE CONFIGS')
- // })
- } catch (e) {
- console.warn('WebSql 鍒濆鍖栧け璐ワ紒')
- window.GLOB.WebSql = null
- }
- }
-
- /**
- * @description 鑾峰彇websql涓繚瀛樹俊鎭増鏈�
- */
- static getWebSqlVersion () {
- if (!window.GLOB.WebSql) {
- return Promise.reject()
- }
- return new Promise((resolve, reject) => {
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql('SELECT * FROM VERSIONS', [], (tx, results) => {
- if (results.rows.length === 0) {
- tx.executeSql('DELETE FROM CONFIGS')
- resolve({version: '', createDate: ''})
- } else if (results.rows.length === 1) {
- resolve(results.rows[0])
- } else if (results.rows.length > 1) {
- tx.executeSql('DELETE FROM VERSIONS')
- tx.executeSql('DELETE FROM CONFIGS')
- resolve({version: '', createDate: ''})
- }
- }, (tx, results) => {
- window.GLOB.WebSql = null
- reject()
- console.warn(results)
- })
- })
- })
- }
-
- /**
- * @description 娓呯┖websql涓繚瀛樼殑閰嶇疆淇℃伅
- */
- static clearWebSqlConfig () {
- if (!window.GLOB.WebSql) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`DELETE FROM CONFIGS`, [], () => {}, () => { window.GLOB.WebSql = null })
- })
- }
-
- /**
- * @description 鍒犻櫎websql涓繚瀛樼殑閰嶇疆淇℃伅
- */
- static delWebSqlConfig (keys) {
- if (!window.GLOB.WebSql || !keys) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`DELETE FROM CONFIGS where menuid in (${keys})`, [], () => {}, () => {
- window.GLOB.WebSql = null
- })
- })
- }
-
- /**
- * @description 鍒犻櫎websql涓繚瀛樼殑閰嶇疆淇℃伅
- */
- static delMenuWebSqlConfig (menuId) {
- if (!window.GLOB.WebSql || !menuId) return Promise.resolve()
- return new Promise(resolve => {
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`DELETE FROM CONFIGS where menuid='${menuId}'`, [], () => {
- resolve()
- }, () => {
- window.GLOB.WebSql = null
- resolve()
- })
- })
- })
- }
-
- /**
- * @description 鏇存柊websql涓厤缃俊鎭殑淇濆瓨鏃堕棿
- */
- static updateWebSqlTime (curTime) {
- if (!window.GLOB.WebSql || !curTime) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`UPDATE VERSIONS SET createDate='${curTime}'`, [], () => {}, () => {
- window.GLOB.WebSql = null
- })
- })
- }
-
- /**
- * @description 鏇存柊websql涓厤缃俊鎭殑鐗堟湰
- */
- static updateWebSqlversion (version, curTime) {
- if (!window.GLOB.WebSql || !curTime || !version) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`UPDATE VERSIONS SET version='${version}', createDate='${curTime}'`, [], () => {}, () => {
- window.GLOB.WebSql = null
- })
- })
- }
-
- /**
- * @description 鍒涘缓websql涓厤缃俊鎭殑鐗堟湰
- */
- static createWebSqlversion (version, curTime) {
- if (!window.GLOB.WebSql || !curTime || !version) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql('INSERT INTO VERSIONS (version, createDate) VALUES (?, ?)', [version, curTime], () => {}, () => {
- window.GLOB.WebSql = null
- })
- })
- }
-
- /**
- * @description 鑾峰彇websql涓殑閰嶇疆淇℃伅
- */
- static getWebSqlMenuConfig (MenuID, userid) {
- if (!window.GLOB.WebSql || !MenuID || !userid) return Promise.reject()
- return new Promise((resolve, reject) => {
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql(`SELECT * FROM CONFIGS WHERE menuid='${MenuID}' and userid='${userid}'`, [], (tx, results) => {
- let paramItem = results.rows[0]
- if (paramItem) {
- resolve({
- ErrCode: 'S',
- ErrMesg: '',
- LongParam: paramItem.LongParam,
- LongParamUser: paramItem.LongParamUser,
- message: '',
- open_edition: paramItem.openEdition,
- status: true,
- web_edition: paramItem.webEdition
- })
- } else {
- reject()
- }
- }, (tx, results) => {
- window.GLOB.WebSql = null
- console.warn(results)
- reject()
- })
- })
- })
- }
-
- /**
- * @description 灏嗘暟鎹啓鍏ebsql
- */
- static writeInWebSql (data) {
- if (!window.GLOB.WebSql || !data) return
- window.GLOB.WebSql.transaction(tx => {
- tx.executeSql('INSERT INTO CONFIGS (menuid, userid, openEdition, webEdition, LongParam, LongParamUser) VALUES (?, ?, ?, ?, ?, ?)', data)
- })
- }
-
- /**
* @description 鎵撳紑IndexedDB
*/
- static openIndexDB () {
- let service = window.GLOB.service ? '-' + window.GLOB.service.replace('/', '') : ''
+ static openIndexDB (db) {
try {
- let request = window.indexedDB.open(`mkdb${service}`, 1)
+ let request = window.indexedDB.open(db, 3)
request.onerror = () => {
console.warn('IndexedDB 鍒濆鍖栧け璐ワ紒')
}
@@ -202,6 +24,12 @@
objectStore.createIndex('menuid', 'menuid', { unique: false })
objectStore.createIndex('userid', 'userid', { unique: false })
}
+ if (!window.GLOB.IndexDB.objectStoreNames.contains('caches')) {
+ window.GLOB.IndexDB.createObjectStore('caches', { keyPath: 'menuid' })
+ }
+ // if (!window.GLOB.IndexDB.objectStoreNames.contains('funcs')) {
+ // window.GLOB.IndexDB.createObjectStore('funcs', { keyPath: 'id' })
+ // }
}
} catch (e) {
console.warn('IndexedDB 鍒濆鍖栧け璐ワ紒')
@@ -216,38 +44,68 @@
if (!window.GLOB.IndexDB) {
return Promise.reject()
}
- return new Promise((resolve, reject) => {
- let request = window.GLOB.IndexDB.transaction(['version'])
- .objectStore('version')
- .get('mksoft')
- request.onerror = (event) => {
- window.GLOB.IndexDB = null
- console.warn(event)
- reject()
- }
+ let deffers = []
- request.onsuccess = () => {
- if (request.result) {
- resolve(request.result)
- } else {
- this.clearIndexDBConfig()
+ deffers.push(
+ new Promise((resolve) => {
+ let request = window.GLOB.IndexDB.transaction(['version'])
+ .objectStore('version')
+ .get('mksoft')
+
+ request.onerror = (event) => {
+ console.warn(event)
resolve({version: '', createDate: ''})
}
- }
+
+ request.onsuccess = () => {
+ if (request.result) {
+ resolve(request.result)
+ } else {
+ resolve({version: '', createDate: ''})
+ }
+ }
+ })
+ )
+
+ deffers.push(
+ new Promise((resolve) => {
+ let request = window.GLOB.IndexDB.transaction(['configs']).objectStore('configs').openCursor()
+ let menus = []
+ let ids = []
+
+ request.onerror = () => {
+ resolve(menus)
+ }
+
+ request.onsuccess = (e) => {
+ let cursor = e.target.result
+ if (cursor) {
+ if (cursor.value.menuid && !ids.includes(cursor.value.menuid)) {
+ menus.push(`'${cursor.value.menuid}','${cursor.value.open_edition || 'mk'}'`)
+ ids.push(cursor.value.menuid)
+ }
+ cursor.continue()
+ } else {
+ resolve(menus)
+ }
+ }
+ })
+ )
+
+ return new Promise((resolve) => {
+ Promise.all(deffers).then(res => {
+ let result = res[0]
+
+ if (result.createDate && !/^\d{4}-\d{2}-\d{2}/.test(result.createDate)) {
+ result.createDate = ''
+ }
+
+ result.menuids = res[1].join(';')
+
+ resolve(result)
+ })
})
- }
-
- /**
- * @description 娓呯┖IndexedDB涓繚瀛樼殑閰嶇疆淇℃伅
- */
- static clearIndexDBConfig () {
- if (!window.GLOB.IndexDB) return
- let request = window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').clear()
-
- request.onerror = () => {
- window.GLOB.IndexDB = null
- }
}
/**
@@ -256,76 +114,43 @@
static updateIndexDBversion (version) {
if (!window.GLOB.IndexDB || !version) return
- version.id = 'mksoft'
+ if (!version) {
+ window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').delete('mksoft')
+ } else {
+ version.id = 'mksoft'
- let objectStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
- let request = objectStore.get('mksoft')
-
- request.onerror = () => {
- window.GLOB.IndexDB = null
- }
-
- request.onsuccess = () => {
- if (request.result) {
- let put = objectStore.put(version)
-
- put.onerror = () => {
- window.GLOB.IndexDB = null
- }
- } else {
- this.clearIndexDBConfig()
-
- let add = objectStore.add(version)
-
- add.onerror = () => {
- window.GLOB.IndexDB = null
- }
- }
- }
- }
-
- /**
- * @description 鍒犻櫎IndexedDB涓繚瀛樼殑閰嶇疆淇℃伅
- */
- static delMenuIndexDBConfig (key) {
- if (!window.GLOB.IndexDB || !key) return Promise.resolve()
-
- return new Promise(resolve => {
- let request = window.GLOB.IndexDB.transaction(['configs'], 'readwrite')
- .objectStore('configs')
- .delete(key)
-
+ let objectStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
+ let request = objectStore.get('mksoft')
+
request.onsuccess = () => {
- resolve()
+ if (request.result) {
+ objectStore.put(version)
+ } else {
+ objectStore.add(version)
+ }
}
- request.onerror = () => {
- window.GLOB.IndexDB = null
- resolve()
- }
- })
+ }
}
/**
* @description 鍒犻櫎IndexedDB涓繚瀛樼殑閰嶇疆淇℃伅-鎵归噺
*/
- static delIndexDBConfig (keys) {
- if (!window.GLOB.IndexDB || !keys) return
+ static delIndexDBConfig (menuids) {
+ if (!window.GLOB.IndexDB) return
- let objectStore = window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs')
+ if (!menuids) {
+ window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').clear()
+ } else {
+ let request = window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').openCursor()
- objectStore.openCursor().onsuccess = (event) => {
- let cursor = event.target.result
-
- if (cursor) {
- if (cursor.value && keys.includes(cursor.value.menuid)) {
- let request = objectStore.delete(cursor.key)
-
- request.onerror = () => {
- window.GLOB.IndexDB = null
+ request.onsuccess = (e) => {
+ let cursor = e.target.result
+ if (cursor) {
+ if (menuids.includes(cursor.value.menuid)) {
+ cursor.delete()
}
+ cursor.continue()
}
-
- cursor.continue()
}
}
}
@@ -333,14 +158,13 @@
/**
* @description 鑾峰彇IndexedDB涓殑閰嶇疆淇℃伅
*/
- static getIndexDBMenuConfig (MenuID, userid) {
- if (!window.GLOB.IndexDB || !MenuID || !userid) return Promise.reject()
- let key = MenuID + userid
+ static getIndexDBMenuConfig (key) {
+ if (!window.GLOB.IndexDB || !key) return Promise.reject()
+
return new Promise((resolve, reject) => {
let request = window.GLOB.IndexDB.transaction(['configs']).objectStore('configs').get(key)
request.onerror = () => {
- window.GLOB.IndexDB = null
reject()
}
@@ -360,12 +184,62 @@
static writeInIndexDB (data) {
if (!window.GLOB.IndexDB || !data) return
- let request = window.GLOB.IndexDB.transaction(['configs'], 'readwrite')
- .objectStore('configs')
- .add(data)
+ window.GLOB.IndexDB.transaction(['configs'], 'readwrite').objectStore('configs').add(data)
+ }
- request.onerror = () => {
- window.GLOB.IndexDB = null
+ /**
+ * @description 灏嗘暟鎹啓鍏ndexedDB
+ */
+ static writeCacheInIndexDB (data) {
+ if (!window.GLOB.IndexDB) return
+
+ let objectStore = window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches')
+ objectStore.delete(data.menuid)
+
+ if (data.LongParam) {
+ objectStore.add(data)
+ }
+ }
+
+ /**
+ * @description 鑾峰彇IndexedDB涓殑閰嶇疆淇℃伅
+ */
+ static getIndexDBCacheConfig (MenuID) {
+ if (!window.GLOB.IndexDB) return Promise.resolve()
+
+ return new Promise((resolve, reject) => {
+ let request = window.GLOB.IndexDB.transaction(['caches']).objectStore('caches').get(MenuID)
+
+ request.onerror = () => {
+ resolve()
+ }
+
+ request.onsuccess = () => {
+ resolve(request.result)
+ }
+ })
+ }
+
+ /**
+ * @description 鍒犻櫎IndexedDB涓秴杩�7澶╃殑缂撳瓨淇℃伅
+ */
+ static delIndexDBCacheConfig (date, type) {
+ if (!window.GLOB.IndexDB) return
+
+ if (type === 'all') {
+ window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches').clear()
+ } else {
+ let request = window.GLOB.IndexDB.transaction(['caches'], 'readwrite').objectStore('caches').openCursor()
+
+ request.onsuccess = (e) => {
+ let cursor = e.target.result
+ if (cursor) {
+ if (cursor.value.CreateDate < date || cursor.value.CreateDate.length === 10) {
+ cursor.delete()
+ }
+ cursor.continue()
+ }
+ }
}
}
}
\ No newline at end of file
--
Gitblit v1.8.0