当前位置:Gxlcms > 数据库问题 > vue中indexDB的应用

vue中indexDB的应用

时间:2021-07-01 10:21:17 帮助过:6人阅读

indexedDB.js,浏览器本地数据库操作 export default { // indexedDB兼容 indexedDB: window.indexedDB || window.webkitindexedDB || window.msIndexedDB || mozIndexedDB, // 打开数据库 // 新对象储存空间newStore参数:newStore.name、newStore.key // 新增对象存储空间要更改数据库版本 openDB: function (dbname, version, db, newStore, callback) { var version = version || 1; var request = this.indexedDB.open(dbname, version); request.onerror = function (event) { console.log(IndexedDB数据库打开错误); }; request.onsuccess = function (event) { db = event.target.result; if (callback && (typeof callback === function)) { callback(db); } }; // onupgradeneeded,调用创建新的储存空间 request.onupgradeneeded = function (event) { var db = event.target.result; if (newStore) { if (!db.objectStoreNames.contains(newStore.name)) { var objectStore = db.createObjectStore(newStore.name, { keyPath: newStore.key, }); objectStore.createIndex(counter_index, counter, { unique: false }); objectStore.createIndex(barcode_index, barcode, { unique: false }); objectStore.createIndex(qty_index, qty, { unique: false }); objectStore.createIndex(counter_code, [counter, barcode], { unique: false }); } } }; }, // 删除数据库 deleteDB: function (dbname, callback) { var deleteQuest = this.indexedDB.deleteDatabase(dbname); deleteQuest.onerror = function () { console.log(删除数据库出错); }; deleteQuest.onsuccess = function () { if (callback && (typeof callback === function)) { callback(); } } }, // 关闭数据库 closeDB: function (dbname) { dbname.close(); console.log(数据库已关闭); }, // 更新旧值,针对输入数量 putData: function (db, storename, dataArr, callback) { let mybarcode = ""; let QTY = ""; let key = ""; let counter = ""; let barcode = ""; let addtime = ""; dataArr.forEach(item => { mybarcode = item.barcode; QTY = item.qty; barcode = item.barcode; counter = item.counter; key = item.counterCode; addtime = item.addtime; }); this.getdatabycursor(db, storename).then(arr => { if (arr.length == 0) { //console.log("添加") var store = db.transaction(storename, readwrite).objectStore(storename), request; for (var i = 0, len = dataArr.length; i < len; i++) { request = store.put(dataArr[i]); request.onerror = function () { console.error(PUT添加数据报错); }; request.onsuccess = function (result) { if (callback && (typeof callback === function)) { callback(); } }; } } else { this.read(db, storename, counter, barcode).then(x => { if (x) { //console.log("最新的值是" + QTY) this.updateDataByKey(db, storename, key, QTY, addtime).then(x => { if (callback && (typeof callback === function)) { callback(); } }); } else { //console.log("再次添加") var store = db.transaction(storename, readwrite).objectStore(storename), request; for (var i = 0, len = dataArr.length; i < len; i++) { request = store.put(dataArr[i]); request.onerror = function () { console.error(PUT添加数据报错); }; request.onsuccess = function (result) { if (callback && (typeof callback === function)) { callback(); } }; } } }) } }) }, // 更新旧值 putDatas: function (db, storename, dataArr, callback) { let mybarcode = ""; let QTY = ""; let key = ""; let counter = ""; let barcode = ""; let addtime = ""; dataArr.forEach(item => { mybarcode = item.barcode; QTY = item.qty; key = item.counterCode; counter = item.counter; barcode = item.barcode; addtime = item.addtime; }); this.getdatabycursor(db, storename).then(arr => { if (arr.length == 0) { //console.log("添加") var store = db.transaction(storename, readwrite).objectStore(storename), request; for (var i = 0, len = dataArr.length; i < len; i++) { request = store.add(dataArr[i]); request.onerror = function () { console.error(PUT添加数据报错); }; request.onsuccess = function (result) { if (callback && (typeof callback === function)) { callback(); } }; } } else { this.read(db, storename, counter, barcode).then(x => { if (x) { this.updateDataByKeys(db, storename, key, addtime).then(x => { this.getdata(db, storename).then(result => { if (callback && (typeof callback === function)) { callback(); } }); }); } else { //console.log("再次添加") //console.log("当前的值是"+barcode) var store = db.transaction(storename, readwrite).objectStore(storename), request; for (var i = 0, len = dataArr.length; i < len; i++) { request = store.add(dataArr[i]); request.onerror = function () { console.error(PUT添加数据报错); }; request.onsuccess = function (result) { if (callback && (typeof callback === function)) { callback(); } }; } } }) } }) }, //根据key修改数量 updateDataByKey: function (db, storeName, value, QTY, addtime) { var transaction = db.transaction(storeName, readwrite); var store = transaction.objectStore(storeName); var request = store.get(value); return new Promise((resolve, reject) => { request.onsuccess = function (e) { var stocktable = e.target.result; if (stocktable) { stocktable.qty = QTY; stocktable.addtime = addtime; resolve(store.put(stocktable)); } else { reject(false); } }; }) }, updateDataBycode: function (db, storeName, value, QTY) { var transaction = db.transaction(storeName, readwrite); var store = transaction.objectStore(storeName); var request = store.get(value); return new Promise((resolve, reject) => { request.onsuccess = function (e) { var stocktable = e.target.result; if (stocktable) { stocktable.qty = QTY; resolve(store.put(stocktable)); } else { reject(false); } }; }) }, //根据key修改数量 updateDataByKeys: function (db, storeName, value, addtime, callback) { var transaction = db.transaction(storeName, readwrite); var store = transaction.objectStore(storeName); var request = store.get(value); return new Promise((resolve, reject) => { //console.log(addtime) request.onsuccess = function (e) { var stocktable = e.target.result; if (stocktable) { stocktable.qty += 1; stocktable.addtime = addtime; resolve(store.put(stocktable)); } else { reject(false); } }; }) }, // 删除数据 deleteData: function (db, storename, key, callback) { var store = db.transaction(storename, readwrite).objectStore(storename); store.delete(key); if (callback && (typeof callback === function)) { callback(); } }, // 清空数据 clearData: function (db, storename, callback) { var store = db.transaction(storename, readwrite).objectStore(storename); store.clear(); if (callback && (typeof callback === function)) { callback(); } }, // 通过key获取数据 read: function (db, storeName, counter, barcode) { var transaction = db.transaction(storeName); var objectStore = transaction.objectStore(storeName); var currentdata = [counter, barcode]; var indexs = objectStore.index(counter_code); var request = indexs.openCursor(IDBKeyRange.only(currentdata)); return new Promise((resolve, reject) => { request.onsuccess = function (e) { var cursor = e.target.result; if (cursor) { resolve(true); } else { resolve(false); } } }) }, // 通过barcode获取数据 reads: function (db, storeName, values) { var transaction = db.transaction(storeName); var objectStore = transaction.objectStore(storeName); var indexs = objectStore.index(barcode_index); var data = []; var request = indexs.openCursor(IDBKeyRange.only(values)); return new Promise((resolve, reject) => { request.onsuccess = function (e) { var cursor = e.target.result; if (cursor) { data.push(cursor.value); // resolve(data); cursor.continue(); } else { resolve(data) } }; }) }, //根据counter索引查询数据 getdatabyCounter: function (db, storeName, values) { var transaction = db.transaction(storeName); var store = transaction.objectStore(storeName); var indexs = store.index(counter_index); var datas = []; var request = indexs.openCursor(IDBKeyRange.only(values)) return new Promise((resolve, reject) => { request.onsuccess = function (e) { var cursor = e.target.result; if (cursor) { datas.push(cursor.value); cursor.continue(); } else { resolve(datas) } } }) }, //根据主键和索引查询 getAll: function (db, storeName, counter, barcode) { var transaction = db.transaction(storeName); var objectStore = transaction.objectStore(storeName); var counterCode = [counter, barcode]; var indexs = objectStore.index(counter_code); var request = indexs.openCursor(IDBKeyRange.only(counterCode)); var data = []; return new Promise((resolve, reject) => { request.onsuccess = function (e) { var cursor = e.target.result; if (cursor) { data.push(cursor.value); //resolve(data); cursor.continue(); } else { resolve(data) } } }) }, //根据key查询数量是否存在 getqtyBykey: function (db, storeName, key) { var transaction = db.transaction(storeName); var objectStore = transaction.objectStore(storeName); var request = objectStore.get(key); request.onerror = function (event) { console.log(事务失败); }; return new Promise((resolve, reject) => { request.onsuccess = function (event) { if (request.result) { //console.log(request.result.qty) resolve(request.result); } else { resolve(false); } }; }) }, // //通过游标遍历数据 getdatabycursor: function (db, storename) { var objectStore = db.transaction(storename).objectStore(storename); var dataList = []; var i = 0; return new Promise((resolve, reject) => { objectStore.openCursor().onsuccess = function (event) { var cursor = event.target.result; if (cursor) { dataList.push(cursor.value) cursor.continue(); } else { resolve(dataList); } }; }) }, //查询所有的柜台 getAllCounter: function (db, storename) { var transaction = db.transaction(storename); var store = transaction.objectStore(storename); var indexs = store.index(counter_index); var data = []; return new Promise((resolve, reject) => { indexs.openCursor().onsuccess = function (e) { var cursor = e.target.result; if (cursor) { // console.log(cursor.value.counter); data.push(cursor.value.counter); resolve(data); cursor.continue(); } } }) }, getdata: function (db, storename) { var objectStore = db.transaction(storename).objectStore(storename); var data = []; return new Promise((resolve, reject) => { objectStore.openCursor().onsuccess = function (event) { var cursor = event.target.result; if (cursor) { data.push(cursor.value) resolve(data) } else { reject(false) } }; }) }, getqtybyqtyindex: function (db, storename) { var transaction = db.transaction(storename); var store = transaction.objectStore(storename); var indexs = store.index(qty_index); var sum = 0; return new Promise((resolve, reject) => { indexs.openCursor().onsuccess = function (e) { var cursor = e.target.result; if (cursor) { sum += cursor.value.qty cursor.continue(); } else { resolve(sum) } } }) } }
 handSumit() {
      if (this.barcode == "") {
        this.$createDialog({
          type: "alert",
          content: "條碼為空",
          confirmBtn: "確定",
          icon: "cubeic-alert"
        }).show();
      } else {
        let that = this;
        let Counter = localStorage.getItem("counter");
        let barcodes = this.barcode;
        let shopDB = null;
        let QTY = parseInt(this.qty);
        let CounterCode = Counter + "-" + barcodes;
        var now = new Date();
        this.addtime = now;
        IndexedDB.openDB(
          "shopDB",
          1,
          shopDB,
          {
            name: "stockTable",
            key: "counterCode"
          },
          function(db) {
            let newQty = "";
            IndexedDB.getqtyBykey(db, "stockTable", CounterCode).then(x => {
              if (x == false) {
                let shopDB = db;
                IndexedDB.putDatas(
                  shopDB,
                  "stockTable",
                  [
                    {
                      counterCode: CounterCode,
                      counter: Counter,
                      barcode: barcodes,
                      qty: QTY,
                      addtime: that.addtime
                    }
                  ],
                  function() {
                    that.flag = true;
                    that.getdata();
                    that.serchbyArecode();
                  }
                );
              } else {
                let newCounter = x.counter;
                if (newCounter == Counter) {
                  let oldqty = parseInt(x.qty);
                  let newQty = QTY + oldqty;

                  IndexedDB.putDatas(
                    db,
                    "stockTable",
                    [
                      {
                        counterCode: CounterCode,
                        counter: Counter,
                        barcode: barcodes,
                        qty: newQty,
                        addtime: that.addtime
                      }
                    ],
                    function() {
                      that.flag = true;
                      that.getdata();
                      that.serchbyArecode();
                    }
                  );
                }
              }
            });
          }
        );
        this.barcode = "";
      }
    },

 

vue中indexDB的应用

标签:存储空间   查询   DBName   export   target   length   ble   参数   conf   

人气教程排行