| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- import { AllEnums, ErrorInfos } from '@/services/http/system/interface';
- // 数据库表名 所有枚举信息 | 数据库错误信息
- type ObjectStoreName = 'AllEnums' | 'ErrorInfos';
- // 读取操作类型
- type ReadType = 'readwrite' | 'readonly';
- // 错误枚举 索引名
- const ErrorEnumIndexName = 'autoid';
- const AllEnumIndexName = 'enumdicid';
- const DBReqest = indexedDB.open('_IndexDB_');
- let db: IDBDatabase;
- DBReqest.onerror = (err) => {
- console.error(`数据库打开报错: ${err}`);
- };
- DBReqest.onsuccess = () => {
- console.log(`数据库打开成功`);
- db = DBReqest.result;
- };
- // 新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。
- // 不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。
- DBReqest.onupgradeneeded = (event: any) => {
- db = event.target.reesult;
- console.log(`数据库更新成功`);
- if (!hasDB('AllEnums')) {
- // 所有枚举信息
- const allEnusm = db.createObjectStore('AllEnums', { keyPath: 'autoid' });
- // 建立索引
- allEnusm.createIndex('errorid', AllEnumIndexName);
- }
- if (!hasDB('ErrorInfos')) {
- // 数据库错误信息
- const allEnusm = db.createObjectStore('ErrorInfos', { keyPath: 'rowNumber' });
- // 建立索引
- allEnusm.createIndex('errorid', ErrorEnumIndexName);
- }
- };
- /**
- * 是否存在某张表
- * @param stroeName ObjectStoreName
- * @returns boolean
- */
- function hasDB(stroeName: ObjectStoreName): boolean {
- return db.objectStoreNames.contains(stroeName);
- }
- /**
- * 获取 某张表
- * @param stroeName 数据库表名 ObjectStoreName
- * @returns IDBObjectStore
- */
- function getObjectStore(stroeName: ObjectStoreName, readType: ReadType): IDBObjectStore {
- const temp = db.transaction([stroeName], readType);
- return temp.objectStore(stroeName);
- }
- /**
- * 添加数据
- * @param stroeName 数据库表名 ObjectStoreName
- * @param list 添加的数据
- */
- function add(stroeName: ObjectStoreName, list: AllEnums[] | ErrorInfos[]) {
- const request = getObjectStore(stroeName, 'readwrite');
- // 批量添加
- for (let i = 0; i < list.length; i++) {
- const item = list[i];
- request.add(item);
- }
- }
- /**
- * 删除数据
- * @param stroeName 数据库表名 ObjectStoreName
- */
- function remove(stroeName: ObjectStoreName) {
- const request = getObjectStore(stroeName, 'readwrite');
- const result = request.delete(1);
- result.onsuccess = (event) => {
- console.log('数据删除成功');
- };
- result.onerror = (event) => {
- console.log('数据删除失败');
- };
- }
- function get(stroeName: ObjectStoreName, id: number) {
- const request = getObjectStore(stroeName, 'readonly');
- const indexName = stroeName === 'ErrorInfos' ? ErrorEnumIndexName : AllEnumIndexName;
- const index = request.index(indexName);
- const result = index.get(id);
- result.onsuccess = (event: any) => {
- console.log('数据读取成功', event.target.result);
- };
- result.onerror = () => {
- console.log('数据读取失败');
- };
- return result;
- }
- // class IndexDB {
- // private name: string;
- // private db: IDBDatabase;
- // constructor(name: string) {
- // const request = indexedDB.open(name);
- // // this.db = request.result;
- // request.onerror = err => {
- // console.error(`${name}数据库打开报错: ${err}`);
- // }
- // request.onsuccess = () => {
- // console.log(`${name}数据库打开成功`);
- // this.db = request.result;
- // }
- // // 新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。
- // // 不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。
- // request.onupgradeneeded = (event: any) => {
- // this.db = event.target.reesult;
- // console.log(`${name}数据库更新成功`);
- // if (!this.hasDB('AllEnums')) { // 所有枚举信息
- // const allEnusm = this.db.createObjectStore('AllEnums', {keyPath: 'autoid'})
- // // 建立索引
- // allEnusm.createIndex('errorid', AllEnumIndexName)
- // }
- // if (!this.hasDB('ErrorInfos')) { // 数据库错误信息
- // const allEnusm = this.db.createObjectStore('ErrorInfos', {keyPath: 'rowNumber'})
- // // 建立索引
- // allEnusm.createIndex('errorid', ErrorEnumIndexName)
- // }
- // }
- // this.name = name;
- // }
- // /**
- // * 添加数据
- // * @param stroeName 数据库表名 ObjectStoreName
- // * @param list 添加的数据
- // */
- // add(stroeName: ObjectStoreName, list: AllEnums[] | ErrorInfos[]) {
- // const request = this.getObjectStore(stroeName, 'readwrite')
- // // 批量添加
- // for(let i = 0; i < list.length; i++) {
- // const item = list[i];
- // request.add(item)
- // }
- // }
- // /**
- // * 删除数据
- // * @param stroeName 数据库表名 ObjectStoreName
- // */
- // remove(stroeName: ObjectStoreName) {
- // const request = this.getObjectStore(stroeName, 'readwrite')
- // const result = request.delete(1);
- // result.onsuccess = (event) => {
- // console.log('数据删除成功');
- // };
- // result.onerror = (event) => {
- // console.log('数据删除失败');
- // }
- // }
- // get(stroeName: ObjectStoreName, id: number) {
- // const request = this.getObjectStore(stroeName, 'readonly')
- // const indexName = stroeName === 'ErrorInfos' ? ErrorEnumIndexName : AllEnumIndexName;
- // const index = request.index(indexName)
- // const result = index.get(id);
- // result.onsuccess = (event: any) => {
- // console.log('数据读取成功',event.target.result);
- // }
- // result.onerror = () => {
- // console.log('数据读取失败');
- // }
- // return result;
- // }
- // /**
- // * 是否存在某张表
- // * @param stroeName ObjectStoreName
- // * @returns boolean
- // */
- // private hasDB(stroeName: ObjectStoreName): boolean {
- // return this.db.objectStoreNames.contains(stroeName)
- // }
- // /**
- // * 获取 某张表
- // * @param stroeName 数据库表名 ObjectStoreName
- // * @returns IDBObjectStore
- // */
- // private getObjectStore(stroeName: ObjectStoreName, readType: ReadType): IDBObjectStore {
- // return this.db.transaction([stroeName], readType).objectStore(stroeName)
- // }
- // }
- // const IndexedDB = new IndexDB('_IndexDB_')
- // export default IndexedDB;
- const DB = { add, get, remove };
- export default DB;
|