91 lines
2.7 KiB
JavaScript
91 lines
2.7 KiB
JavaScript
|
|
// BaseDBStore.js
|
||
|
|
import IndexedDBHelper from '@/common/IndexedDBHelper.js'
|
||
|
|
// import UniStorageHelper from '../common/UniStorageHelper'
|
||
|
|
import useChatGroupDBStore from '@/stores/userChatGroupStore'
|
||
|
|
import config from '@/config'
|
||
|
|
|
||
|
|
class BaseStore {
|
||
|
|
db = null
|
||
|
|
isDBReady = false
|
||
|
|
dbName = 'BrowsingHistory' // 'AppMainDB'
|
||
|
|
initPromise = null
|
||
|
|
|
||
|
|
constructor() {
|
||
|
|
this.initPromise = this.checkAndInitDB()
|
||
|
|
}
|
||
|
|
|
||
|
|
async getDB() {
|
||
|
|
if (!this.initPromise) {
|
||
|
|
this.initPromise = this.checkAndInitDB();
|
||
|
|
}
|
||
|
|
await this.initPromise; // 等待初始化完成
|
||
|
|
return this.db;
|
||
|
|
}
|
||
|
|
|
||
|
|
async checkAndInitDB() {
|
||
|
|
if (config.OnlyUseCachedDB) {
|
||
|
|
return this.initDB()
|
||
|
|
}
|
||
|
|
const localVersion = uni.getStorageSync('indexedDBVersion') || 1
|
||
|
|
console.log('DBVersion: ', localVersion, config.DBversion)
|
||
|
|
if (localVersion === config.DBversion) {
|
||
|
|
return this.initDB() // 🟢 记得加 return
|
||
|
|
} else {
|
||
|
|
console.log('清空本地数据库')
|
||
|
|
await this.clearDB() // 🟢 建议用 await
|
||
|
|
uni.setStorageSync('indexedDBVersion', config.DBversion);
|
||
|
|
return this.initDB(); // 🟢 记得加 return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
initDB() {
|
||
|
|
// // #ifdef H5
|
||
|
|
this.db = new IndexedDBHelper(this.dbName, config.DBversion);
|
||
|
|
// // #endif
|
||
|
|
|
||
|
|
return this.db.openDB([{
|
||
|
|
name: 'record',
|
||
|
|
keyPath: "id",
|
||
|
|
autoIncrement: true,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'messageGroup',
|
||
|
|
keyPath: "id",
|
||
|
|
autoIncrement: true,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'messages',
|
||
|
|
keyPath: "id",
|
||
|
|
autoIncrement: true,
|
||
|
|
indexes: [{
|
||
|
|
name: 'parentGroupId',
|
||
|
|
key: 'parentGroupId',
|
||
|
|
unique: false
|
||
|
|
}]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'api_cache',
|
||
|
|
keyPath: "cacheKey", // 使用 URL+参数 作为主键
|
||
|
|
indexes: []
|
||
|
|
}
|
||
|
|
]).then(async () => {
|
||
|
|
// 这里原来的逻辑保留
|
||
|
|
if (useChatGroupDBStore) {
|
||
|
|
useChatGroupDBStore().init()
|
||
|
|
}
|
||
|
|
this.isDBReady = true
|
||
|
|
return this.db;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
async clearDB() {
|
||
|
|
return new Promise((resolve, rejetc) => {
|
||
|
|
new IndexedDBHelper().deleteDB(this.dbName).then(() => {
|
||
|
|
resolve()
|
||
|
|
})
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const baseDB = new BaseStore()
|
||
|
|
export default baseDB
|