class IndexDBCache { constructor(dbName: string, version = 1, storeName = 'defaultStore') { this.dbName = dbName this.version = version this.storeName = storeName this.db = null } // 初始化数据库 async init() { return new Promise((resolve, reject) => { const request = indexedDB.open(this.dbName, this.version) request.onerror = (event) => { reject(new Error('Database open error: ' + event.target.errorCode)) } request.onsuccess = (event) => { this.db = event.target.result resolve() } request.onupgradeneeded = (event) => { const db = event.target.result if (!db.objectStoreNames.contains(this.storeName)) { db.createObjectStore(this.storeName, { keyPath: 'id', autoIncrement: true }); } } }) } // 添加数据 async add(data) { return new Promise((resolve, reject) => { const transaction = this.db.transaction([this.storeName], 'readwrite') const store = transaction.objectStore(this.storeName) const request = store.add(data) request.onsuccess = (event) => { resolve(event.target.result) } request.onerror = (event) => { reject(new Error('Add operation failed: ' + event.target.error.message)) } }) } // 更新数据 async update(data) { return new Promise((resolve, reject) => { const transaction = this.db.transaction([this.storeName], 'readwrite') const store = transaction.objectStore(this.storeName) const request = store.put(data) request.onsuccess = (event) => { resolve(event.target.result) }; request.onerror = (event) => { reject(new Error('Update operation failed: ' + event.target.error.message)) } }) } // 删除数据 async delete(id) { return new Promise((resolve, reject) => { const transaction = this.db.transaction([this.storeName], 'readwrite') const store = transaction.objectStore(this.storeName) const request = store.delete(id) request.onsuccess = (event) => { resolve() } request.onerror = (event) => { reject(new Error('Delete operation failed: ' + event.target.error.message)); } }) } // 删除所有数据 deleteAll() { this.getAll((allData) => { allData.forEach(element => { this.delete(item.id) }) }) } // 查询数据(根据 id) async get(id) { return new Promise((resolve, reject) => { const transaction = this.db.transaction([this.storeName], 'readonly') const store = transaction.objectStore(this.storeName) const request = store.get(id) request.onsuccess = (event) => { resolve(event.target.result) } request.onerror = (event) => { reject(new Error('Get operation failed: ' + event.target.error.message)) } }) } // 查询所有数据 async getAll() { return new Promise((resolve, reject) => { const results = [] as any[] const transaction = this.db.transaction([this.storeName], 'readonly') const store = transaction.objectStore(this.storeName) const request = store.openCursor() request.onsuccess = (event) => { const cursor = event.target.result if (cursor) { results.push(cursor.value) cursor.continue() } else { resolve(results) } } request.onerror = (event) => { reject(new Error('Get all operation failed: ' + event.target.error.message)) } }) } // 关闭数据库连接 close() { if (this.db) { this.db.close() this.db = null } } // 获取初始化状态 getStatus() { return Boolean(this.db) } } const indexDB = new IndexDBCache('myDatabase') export default indexDB