import Dexie from "dexie";/**** @param dbName 数据库名称* @param storeName 对象存储区域* @param keyPath 主键* @param indexConfig 索引配置* @returns {Dexie}*/
export function createDB(dbName, storeName, keyPath, indexConfig) {const db = new Dexie(dbName)// 定义对象存储区域db.version(1).stores({[storeName]: keyPath})// 添加索引或其他配置if (indexConfig) {Object.keys(indexConfig).forEach(indexName => {const indexProperties = indexConfig[indexName];db[storeName].createIndex(indexName, indexProperties.keyPath, {unique: indexProperties.unique});})}return db
}/*** 添加数据* @param db 数据库实例* @param storeName 对象存储区域* @param data 添加的数据*/
export function addData(db, storeName, data) {db.open().then(() => {db.transaction('rw', db[storeName], async () => {await db[storeName].add(data);}).then(() => {console.log('Data added successfully.');}).catch(error => {console.error('Error adding data:', error)})}).catch(error => {console.error('Error opening database:', error)})
}/*** 获取数据* @param db 数据库* @param storeName 对象存储区对象* @param keyValue 主键值*/
export function getData(db, storeName, keyValue) {return new Promise((resolve, reject) => {db.open().then(() => {db.transaction('rw', db[storeName], async () => {const matched = await db[storeName].get(keyValue)resolve(matched)}).catch(error => {console.error('Error getting data:', error)})}).catch(error => {console.error('Error opening database:', error)})})
}/*** 更新数据* @param db 数据库* @param storeName 对象存储区对象* @param keyValue 主键值* @param data 更新值*/
export function updateData(db, storeName, keyValue, data) {db.open().then(() => {db[storeName].get(keyValue).then(matched => {if (matched) {db.transaction('rw', db[storeName], async () => {await db[storeName].update(keyValue, data)}).then(() => {console.log('Data updated successfully.');}).catch(error => {console.error('Error updating data:', error)})} else {addData(db, storeName, data)}}).catch(error => {console.error('Error getting data:', error)})}).catch(error => {console.error('Error opening database:', error)})
}/*** 删除数据* @param db* @param storeName* @param keyValue*/
export function deleteData(db, storeName, keyValue) {db.open().then(() => {db.transaction('rw', db[storeName], async () => {await db[storeName].delete(keyValue)}).then(() => {console.log('Data deleted successfully.');}).catch(error => {console.error('Error deleting data:', error)})}).catch(error => {console.error('Error opening database:', error)})
}/*** 删除数据库* @param dbName*/
export function deleteDb(dbName) {Dexie.exists(dbName).then(exists => {// console.log(exists)if (exists) {Dexie.delete(dbName).then(() => {console.log('Database deleted successfully.')}).catch(error => {console.error('Error deleting database', error)})} else {console.log(`Database 【${dbName}】 not exist.`)}}).catch(error => {console.error('Error checking database', error)})
}