/** * Created by Tony on 2021/11/5. * 实现本地indexDb的业务操作 */ const indexDbOprObj = { currentDb: null, iniDb: function (dbName, version) { let rst = window.indexedDB.open(dbName, version); rst.onsuccess = function (event) { indexDbOprObj.currentDb = event.target.result;; console.log('数据库打开成功!'); }; rst.onupgradeneeded = function (event) { let db = event.target.result; indexDbOprObj.currentDb = db; console.log('数据库升级及初始化!'); indexDbOprObj._iniTable(db); } }, _iniTable: function(db) { if (db) { //本地表,主要是用来储存报表结果对象,主要是为PDF多表导出用,当然,其他方式也是可以用的(如打印),看实际需要 if (!db.objectStoreNames.contains('tb_ReportPages')) { db.createObjectStore('tb_ReportPages', { keyPath: 'id' }); } if (!db.objectStoreNames.contains('tb_ReportRequests')) { db.createObjectStore('tb_ReportRequests', { keyPath: 'id' }); } } }, batchAdd: function (tbName, datas, cb) { let db = indexDbOprObj.currentDb; let ttlAmt = datas.length; console.log(`已选报表数量:${ttlAmt}`); let cnt = 0; let request = db.transaction([tbName], 'readwrite').objectStore(tbName); request.onsuccess = function (event) { cnt++; console.log(`已选加数量:${cnt}`); if (cnt === ttlAmt && cb) { cb(datas); } }; for (let data of datas) { request.add(data); } }, _addDummy: function() { let db = indexDbOprObj.currentDb; // let request = db.transaction(['tb_ReportRequests'], 'readwrite') db.transaction(['tb_ReportRequests'], 'readwrite') .objectStore('tb_ReportRequests') .add({ id: '_2830_1725', name: '多人协同2', pageSize: 'A4', CFG: null, prj_ids: [123,456,789] }); // request.onsuccess = function (event) { // console.log('数据写入成功'); // }; // // request.onerror = function (event) { // console.log('数据写入失败'); // } db.transaction(['tb_ReportRequests'], 'readwrite') .objectStore('tb_ReportRequests') .add({ id: '_2830_1728', name: '多人协同3', pageSize: 'A3', CFG: null, prj_ids: [668] }); }, _updateDummy: function () { let db = indexDbOprObj.currentDb; let request = db.transaction(['tb_ReportRequests'], 'readwrite') .objectStore('tb_ReportRequests') .put({ id: '_2830_1725', name: '多人协同2', pageSize: 'A4', CFG: 'CFG', prj_ids: [1,2,3] }); request.onsuccess = function (event) { console.log('数据写入成功'); }; request.onerror = function (event) { console.log('数据写入失败'); } }, _getDummy: function () { let db = indexDbOprObj.currentDb; let transaction = db.transaction(['tb_ReportRequests']); let objectStore = transaction.objectStore('tb_ReportRequests'); let request = objectStore.get('_2830_1725'); request.onerror = function(event) { console.log('事务失败'); }; request.onsuccess = function(event) { if (request.result) { console.log('Name: ' + request.result.name); console.log('PageSize: ' + request.result.pageSize); console.log('CFG: ' + request.result.CFG); console.log('ProjectIds: ' + request.result.prj_ids); } else { console.log('未获得数据记录'); } }; }, _getDummyAll: function (idRst, cb) { let db = indexDbOprObj.currentDb; let objectStore = db.transaction('tb_ReportRequests').objectStore('tb_ReportRequests'); objectStore.openCursor().onsuccess = function (event) { let cursor = event.target.result; if (cursor) { console.log('Id: ' + cursor.key); console.log('Name: ' + cursor.value.name); console.log('PageSize: ' + cursor.value.pageSize); console.log('gather_select: ' + cursor.value.gather_select); console.log('stage_select: ' + cursor.value.stage_select); console.log('CFG: '); console.log(cursor.value.CFG); if (idRst) { idRst.push(cursor.key); } cursor.continue(); } else { console.log('没有更多数据了!'); if (cb) { cb(idRst); } } }; }, _removeDummy: function () { let db = indexDbOprObj.currentDb; let request = db.transaction(['tb_ReportRequests'], 'readwrite') .objectStore('tb_ReportRequests') .delete('_2830_1725'); request.onsuccess = function (event) { console.log('数据删除成功'); }; request.onerror = function (event) { console.log('数据删除失败'); } }, _test: function () { // indexDbOprObj._addDummy(); // indexDbOprObj._getDummy(); let idRst = []; indexDbOprObj._getDummyAll(idRst, (ids)=>{ console.log(ids); // indexDbOprObj.removeAll(ids); }); // indexDbOprObj._updateDummy(); // indexDbOprObj._removeDummy(); }, storeReportRequest: function (stage_id, rptNodes) { if (rptNodes && rptNodes.length > 0) { let datas = []; for (let node of rptNodes) { let keyStr = `_${stage_id}_${node.refId}`; const gather_select = customSelects.gather_select.find(function (x) { return x.id === node.refId; }); const stage_select = customSelects.stage_select.find(function (x) { return x.id === node.refId; }); let data = {id: keyStr, name: node.name, gather_select, stage_select, pageSize: rptControlObj.getCurrentPageSize(), CFG: CUST_CFG}; datas.push(data); } indexDbOprObj.batchAdd('tb_ReportRequests', datas, (rstArr)=>{ console.log('batch add succeeded!'); console.log(rstArr); //其他操作 }); } }, storeReportPages: function (rptPages, stage_id, rptNode) { // }, removeAll: function(idArr) { if (idArr && idArr.length > 0) { let db = indexDbOprObj.currentDb; let request = db.transaction(['tb_ReportRequests'], 'readwrite').objectStore('tb_ReportRequests'); for (let id of idArr) { request.delete(id); request.onsuccess = function (event) { console.log(`数据('${id}')删除成功`); }; } } }, getReportPages: function (rpt_id, stage_id) { // } };