mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-13 09:28:14 +08:00
feat(TGIndex): 尝试 indexedDb
This commit is contained in:
190
src/utils/TGIndex.ts
Normal file
190
src/utils/TGIndex.ts
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
/**
|
||||||
|
* @file utils TGIndex.ts
|
||||||
|
* @description IndexedDB utils
|
||||||
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
|
* @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<string>} indexs 索引
|
||||||
|
* @param {boolean} autoIncrement 是否自增
|
||||||
|
* @returns {Promise<IDBObjectStore>} 返回数据表
|
||||||
|
*/
|
||||||
|
export const createTable = (
|
||||||
|
name: string,
|
||||||
|
keyPath: string,
|
||||||
|
indexs: Array<string>,
|
||||||
|
autoIncrement: boolean
|
||||||
|
): Promise<IDBObjectStore> => {
|
||||||
|
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<void>} 返回空
|
||||||
|
*/
|
||||||
|
export const deleteTable = (name: string): Promise<void> => {
|
||||||
|
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<void>} 返回空
|
||||||
|
*/
|
||||||
|
export const addData = (name: string, data: any): Promise<void> => {
|
||||||
|
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<void>} 返回空
|
||||||
|
*/
|
||||||
|
export const deleteData = (name: string, data: any): Promise<void> => {
|
||||||
|
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<void>} 返回空
|
||||||
|
*/
|
||||||
|
export const updateData = (name: string, data: any): Promise<void> => {
|
||||||
|
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<any>} 返回数据
|
||||||
|
*/
|
||||||
|
export const getData = (name: string, data: any): Promise<any> => {
|
||||||
|
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<Array<any>>} 返回数据
|
||||||
|
*/
|
||||||
|
export const getAllData = (name: string): Promise<Array<any>> => {
|
||||||
|
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<void>} 返回空
|
||||||
|
*/
|
||||||
|
export const clearTable = (name: string): Promise<void> => {
|
||||||
|
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);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user