|
@@ -0,0 +1,117 @@
|
|
|
+interface DataInfo {
|
|
|
+ id: number | string; // 主键
|
|
|
+ xmlString: string;
|
|
|
+ xmlDoc: Document;
|
|
|
+}
|
|
|
+
|
|
|
+export default class IndexedDBService<T> {
|
|
|
+ private dbName: string;
|
|
|
+ private storeName: string;
|
|
|
+ private version: number;
|
|
|
+
|
|
|
+ constructor(dbName: string, storeName: string, version: number = 1) {
|
|
|
+ this.dbName = dbName;
|
|
|
+ this.storeName = storeName;
|
|
|
+ this.version = version;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 初始化数据库
|
|
|
+ private async init(): Promise<IDBDatabase> {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const request = indexedDB.open(this.dbName, this.version);
|
|
|
+
|
|
|
+ // 数据库第一次创建或版本号升级时触发
|
|
|
+ request.onupgradeneeded = () => {
|
|
|
+ const db = request.result;
|
|
|
+ // 创建对象存储(类似于表)
|
|
|
+ if (!db.objectStoreNames.contains(this.storeName)) {
|
|
|
+ db.createObjectStore(this.storeName, { keyPath: "id" });
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 返回数据库实例
|
|
|
+ request.onsuccess = () => resolve(request.result);
|
|
|
+ // 捕获错误
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加或者更新数据
|
|
|
+ async save(data: T): Promise<void> {
|
|
|
+ const db = await this.init();
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const transaction = db.transaction(this.storeName, "readwrite");
|
|
|
+ const store = transaction.objectStore(this.storeName);
|
|
|
+ const request = store.put(data);
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve();
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取某条数据
|
|
|
+ async get(id: number | string): Promise<T | undefined> {
|
|
|
+ const db = await this.init();
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const transaction = db.transaction(this.storeName, "readonly");
|
|
|
+ const store = transaction.objectStore(this.storeName);
|
|
|
+ const request = store.get(id);
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve(request.result as T);
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除数据
|
|
|
+ async delete(id: number | string): Promise<void> {
|
|
|
+ const db = await this.init();
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const transaction = db.transaction(this.storeName, "readwrite");
|
|
|
+ const store = transaction.objectStore(this.storeName);
|
|
|
+ const request = store.delete(id);
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve();
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询所有数据
|
|
|
+ async getAll(): Promise<T[]> {
|
|
|
+ const db = await this.init();
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const transaction = db.transaction(this.storeName, "readonly");
|
|
|
+ const store = transaction.objectStore(this.storeName);
|
|
|
+ const request = store.getAll();
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve(request.result as T[]);
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清空某个 Object Store 中的所有数据
|
|
|
+ async clearAllData(): Promise<void> {
|
|
|
+ const db = await this.init();
|
|
|
+
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const transaction = db.transaction(this.storeName, "readwrite");
|
|
|
+ const store = transaction.objectStore(this.storeName);
|
|
|
+
|
|
|
+ const request = store.clear(); // 清空数据
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve();
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除整个数据库
|
|
|
+ async deleteDatabase(): Promise<void> {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const request = indexedDB.deleteDatabase(this.dbName); // 删除整个数据库
|
|
|
+
|
|
|
+ request.onsuccess = () => resolve();
|
|
|
+ request.onerror = () => reject(request.error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|