From 83ee9f0c5e1db1f45e3e1737a016d77ba9108d14 Mon Sep 17 00:00:00 2001 From: BTMuli Date: Wed, 15 Mar 2023 15:50:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(TGIndex):=20=E5=B0=9D=E8=AF=95=20indexedDb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/TGIndex.ts | 190 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/utils/TGIndex.ts diff --git a/src/utils/TGIndex.ts b/src/utils/TGIndex.ts new file mode 100644 index 00000000..7dc50790 --- /dev/null +++ b/src/utils/TGIndex.ts @@ -0,0 +1,190 @@ +/** + * @file utils TGIndex.ts + * @description IndexedDB utils + * @author BTMuli + * @since Alpha + */ + +// 一些常量 +const DB_NAME = "TGData"; +const DB_VERSION = 1; +// 创建数据库 +export const TGDatabases = window.indexedDB.open(DB_NAME, DB_VERSION); + +/** + * @description 创建数据表 + * @param {string} name 表名 + * @param {string} keyPath 主键 + * @param {Array} indexs 索引 + * @param {boolean} autoIncrement 是否自增 + * @returns {Promise} 返回数据表 + */ +export const createTable = ( + name: string, + keyPath: string, + indexs: Array, + autoIncrement: boolean +): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.createObjectStore(name, { + keyPath: keyPath, + autoIncrement: autoIncrement, + }); + indexs.forEach(index => { + store.createIndex(index, index, { unique: false }); + }); + resolve(store); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 删除数据表 + * @param {string} name 表名 + * @returns {Promise} 返回空 + */ +export const deleteTable = (name: string): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + db.deleteObjectStore(name); + resolve(); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 添加数据 + * @param {string} name 表名 + * @param {any} data 数据 + * @returns {Promise} 返回空 + */ +export const addData = (name: string, data: any): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + store.add(data); + resolve(); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 删除数据 + * @param {string} name 表名 + * @param {any} data 数据 + * @returns {Promise} 返回空 + */ +export const deleteData = (name: string, data: any): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + store.delete(data); + resolve(); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 修改数据 + * @param {string} name 表名 + * @param {any} data 数据 + * @returns {Promise} 返回空 + */ +export const updateData = (name: string, data: any): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + store.put(data); + resolve(); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 查询数据 + * @param {string} name 表名 + * @param {any} data 数据 + * @returns {Promise} 返回数据 + */ +export const getData = (name: string, data: any): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + const request = store.get(data); + request.onsuccess = () => { + resolve(request.result); + }; + request.onerror = () => { + reject(request.error); + }; + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 查询所有数据 + * @param {string} name 表名 + * @returns {Promise>} 返回数据 + */ +export const getAllData = (name: string): Promise> => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + const request = store.getAll(); + request.onsuccess = () => { + resolve(request.result); + }; + request.onerror = () => { + reject(request.error); + }; + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +}; + +/** + * @description 清空数据表 + * @param {string} name 表名 + * @returns {Promise} 返回空 + */ +export const clearTable = (name: string): Promise => { + return new Promise((resolve, reject) => { + TGDatabases.onsuccess = () => { + const db = TGDatabases.result; + const store = db.transaction(name, "readwrite").objectStore(name); + store.clear(); + resolve(); + }; + TGDatabases.onerror = () => { + reject(TGDatabases.error); + }; + }); +};