indexedBD.ts 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import { AllEnums, ErrorInfos } from '@/services/http/system/interface';
  2. // 数据库表名 所有枚举信息 | 数据库错误信息
  3. type ObjectStoreName = 'AllEnums' | 'ErrorInfos';
  4. // 读取操作类型
  5. type ReadType = 'readwrite' | 'readonly';
  6. // 错误枚举 索引名
  7. const ErrorEnumIndexName = 'autoid';
  8. const AllEnumIndexName = 'enumdicid';
  9. const DBReqest = indexedDB.open('_IndexDB_');
  10. let db: IDBDatabase;
  11. DBReqest.onerror = (err) => {
  12. console.error(`数据库打开报错: ${err}`);
  13. };
  14. DBReqest.onsuccess = () => {
  15. console.log(`数据库打开成功`);
  16. db = DBReqest.result;
  17. };
  18. // 新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。
  19. // 不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。
  20. DBReqest.onupgradeneeded = (event: any) => {
  21. db = event.target.reesult;
  22. console.log(`数据库更新成功`);
  23. if (!hasDB('AllEnums')) {
  24. // 所有枚举信息
  25. const allEnusm = db.createObjectStore('AllEnums', { keyPath: 'autoid' });
  26. // 建立索引
  27. allEnusm.createIndex('errorid', AllEnumIndexName);
  28. }
  29. if (!hasDB('ErrorInfos')) {
  30. // 数据库错误信息
  31. const allEnusm = db.createObjectStore('ErrorInfos', { keyPath: 'rowNumber' });
  32. // 建立索引
  33. allEnusm.createIndex('errorid', ErrorEnumIndexName);
  34. }
  35. };
  36. /**
  37. * 是否存在某张表
  38. * @param stroeName ObjectStoreName
  39. * @returns boolean
  40. */
  41. function hasDB(stroeName: ObjectStoreName): boolean {
  42. return db.objectStoreNames.contains(stroeName);
  43. }
  44. /**
  45. * 获取 某张表
  46. * @param stroeName 数据库表名 ObjectStoreName
  47. * @returns IDBObjectStore
  48. */
  49. function getObjectStore(stroeName: ObjectStoreName, readType: ReadType): IDBObjectStore {
  50. const temp = db.transaction([stroeName], readType);
  51. return temp.objectStore(stroeName);
  52. }
  53. /**
  54. * 添加数据
  55. * @param stroeName 数据库表名 ObjectStoreName
  56. * @param list 添加的数据
  57. */
  58. function add(stroeName: ObjectStoreName, list: AllEnums[] | ErrorInfos[]) {
  59. const request = getObjectStore(stroeName, 'readwrite');
  60. // 批量添加
  61. for (let i = 0; i < list.length; i++) {
  62. const item = list[i];
  63. request.add(item);
  64. }
  65. }
  66. /**
  67. * 删除数据
  68. * @param stroeName 数据库表名 ObjectStoreName
  69. */
  70. function remove(stroeName: ObjectStoreName) {
  71. const request = getObjectStore(stroeName, 'readwrite');
  72. const result = request.delete(1);
  73. result.onsuccess = (event) => {
  74. console.log('数据删除成功');
  75. };
  76. result.onerror = (event) => {
  77. console.log('数据删除失败');
  78. };
  79. }
  80. function get(stroeName: ObjectStoreName, id: number) {
  81. const request = getObjectStore(stroeName, 'readonly');
  82. const indexName = stroeName === 'ErrorInfos' ? ErrorEnumIndexName : AllEnumIndexName;
  83. const index = request.index(indexName);
  84. const result = index.get(id);
  85. result.onsuccess = (event: any) => {
  86. console.log('数据读取成功', event.target.result);
  87. };
  88. result.onerror = () => {
  89. console.log('数据读取失败');
  90. };
  91. return result;
  92. }
  93. // class IndexDB {
  94. // private name: string;
  95. // private db: IDBDatabase;
  96. // constructor(name: string) {
  97. // const request = indexedDB.open(name);
  98. // // this.db = request.result;
  99. // request.onerror = err => {
  100. // console.error(`${name}数据库打开报错: ${err}`);
  101. // }
  102. // request.onsuccess = () => {
  103. // console.log(`${name}数据库打开成功`);
  104. // this.db = request.result;
  105. // }
  106. // // 新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。
  107. // // 不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。
  108. // request.onupgradeneeded = (event: any) => {
  109. // this.db = event.target.reesult;
  110. // console.log(`${name}数据库更新成功`);
  111. // if (!this.hasDB('AllEnums')) { // 所有枚举信息
  112. // const allEnusm = this.db.createObjectStore('AllEnums', {keyPath: 'autoid'})
  113. // // 建立索引
  114. // allEnusm.createIndex('errorid', AllEnumIndexName)
  115. // }
  116. // if (!this.hasDB('ErrorInfos')) { // 数据库错误信息
  117. // const allEnusm = this.db.createObjectStore('ErrorInfos', {keyPath: 'rowNumber'})
  118. // // 建立索引
  119. // allEnusm.createIndex('errorid', ErrorEnumIndexName)
  120. // }
  121. // }
  122. // this.name = name;
  123. // }
  124. // /**
  125. // * 添加数据
  126. // * @param stroeName 数据库表名 ObjectStoreName
  127. // * @param list 添加的数据
  128. // */
  129. // add(stroeName: ObjectStoreName, list: AllEnums[] | ErrorInfos[]) {
  130. // const request = this.getObjectStore(stroeName, 'readwrite')
  131. // // 批量添加
  132. // for(let i = 0; i < list.length; i++) {
  133. // const item = list[i];
  134. // request.add(item)
  135. // }
  136. // }
  137. // /**
  138. // * 删除数据
  139. // * @param stroeName 数据库表名 ObjectStoreName
  140. // */
  141. // remove(stroeName: ObjectStoreName) {
  142. // const request = this.getObjectStore(stroeName, 'readwrite')
  143. // const result = request.delete(1);
  144. // result.onsuccess = (event) => {
  145. // console.log('数据删除成功');
  146. // };
  147. // result.onerror = (event) => {
  148. // console.log('数据删除失败');
  149. // }
  150. // }
  151. // get(stroeName: ObjectStoreName, id: number) {
  152. // const request = this.getObjectStore(stroeName, 'readonly')
  153. // const indexName = stroeName === 'ErrorInfos' ? ErrorEnumIndexName : AllEnumIndexName;
  154. // const index = request.index(indexName)
  155. // const result = index.get(id);
  156. // result.onsuccess = (event: any) => {
  157. // console.log('数据读取成功',event.target.result);
  158. // }
  159. // result.onerror = () => {
  160. // console.log('数据读取失败');
  161. // }
  162. // return result;
  163. // }
  164. // /**
  165. // * 是否存在某张表
  166. // * @param stroeName ObjectStoreName
  167. // * @returns boolean
  168. // */
  169. // private hasDB(stroeName: ObjectStoreName): boolean {
  170. // return this.db.objectStoreNames.contains(stroeName)
  171. // }
  172. // /**
  173. // * 获取 某张表
  174. // * @param stroeName 数据库表名 ObjectStoreName
  175. // * @returns IDBObjectStore
  176. // */
  177. // private getObjectStore(stroeName: ObjectStoreName, readType: ReadType): IDBObjectStore {
  178. // return this.db.transaction([stroeName], readType).objectStore(stroeName)
  179. // }
  180. // }
  181. // const IndexedDB = new IndexDB('_IndexDB_')
  182. // export default IndexedDB;
  183. const DB = { add, get, remove };
  184. export default DB;