import browser from './browser'; import formula from './formula'; import { datagridgrowth } from './getdata'; import { jfrefreshgrid, jfrefreshgridall, jfrefreshrange } from './refresh'; import { getSheetIndex } from '../methods/get'; import Store from '../store'; const editor = { //worker+blob实现深拷贝替换extend deepCopyFlowDataState:false, deepCopyFlowDataCache:"", deepCopyFlowDataWorker:null, deepCopyFlowData:function(flowData){ let _this = this; if(_this.deepCopyFlowDataState){ if(_this.deepCopyFlowDataWorker != null){ _this.deepCopyFlowDataWorker.terminate(); } return _this.deepCopyFlowDataCache; } else{ if(flowData == null){ flowData = Store.flowdata; } return $.extend(true, [], flowData); } }, webWorkerFlowDataCache:function(flowData){ let _this = this; try{ if(_this.deepCopyFlowDataWorker != null){//存新的webwork前先销毁以前的 _this.deepCopyFlowDataWorker.terminate(); } let funcTxt = 'data:text/javascript;chartset=US-ASCII,onmessage = function (e) { postMessage(e.data); };'; _this.deepCopyFlowDataState = false; //适配IE let worker; if(browser.isIE() == 1){ let response = "self.onmessage=function(e){postMessage(e.data);}"; worker = new Worker('./plugins/Worker-helper.js'); worker.postMessage(response); } else{ worker = new Worker(funcTxt); } _this.deepCopyFlowDataWorker = worker; worker.postMessage(flowData); worker.onmessage = function(e) { _this.deepCopyFlowDataCache = e.data; _this.deepCopyFlowDataState = true; }; } catch(e){ _this.deepCopyFlowDataCache = $.extend(true, [], flowData); } }, /** * @param {Array} dataChe * @param {Object} range 是否指定选区,默认为当前选区 * @since Add range parameter. Update by siwei@2020-09-10. */ controlHandler: function (dataChe, range) { let _this = this; let d = _this.deepCopyFlowData(Store.flowdata);//取数据 // let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; let last = range || Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; let curR = last["row"] == null ? 0 : last["row"][0]; let curC = last["column"] == null ? 0 : last["column"][0]; let rlen = dataChe.length, clen = dataChe[0].length; let addr = curR + rlen - d.length, addc = curC + clen - d[0].length; if(addr > 0 || addc > 0){ d = datagridgrowth([].concat(d), addr, addc, true); } for (let r = 0; r < rlen; r++) { let x = [].concat(d[r + curR]); for (let c = 0; c < clen; c++) { let value = ""; if (dataChe[r] != null && dataChe[r][c] != null) { value = dataChe[r][c]; } x[c + curC] = value; } d[r + curR] = x; } if (addr > 0 || addc > 0) { jfrefreshgridall(d[0].length, d.length, d, null, Store.luckysheet_select_save, "datachangeAll"); } else { jfrefreshrange(d, Store.luckysheet_select_save); } }, clearRangeByindex: function (st_r, ed_r, st_c, ed_c, sheetIndex) { let index = getSheetIndex(sheetIndex); let d = $.extend(true, [], Store.luckysheetfile[index]["data"]); for (let r = st_r; r <= ed_r; r++) { let x = [].concat(d[r]); for (let c = st_c; c <= ed_c; c++) { formula.delFunctionGroup(r, c); formula.execFunctionGroup(r, c, ""); x[c] = null; } d[r] = x; } if(sheetIndex == Store.currentSheetIndex){ let rlen = ed_r - st_r + 1, clen = ed_c - st_c + 1; if (rlen > 5000) { jfrefreshgrid(d, [{ "row": [st_r, ed_r], "column": [st_c, ed_c] }]); } else { jfrefreshrange(d, { "row": [st_r, ed_r], "column": [st_c, ed_c] }); } } else{ Store.luckysheetfile[index]["data"] = d; } }, controlHandlerD: function (dataChe) { let _this = this; let d = _this.deepCopyFlowData(Store.flowdata);//取数据 let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1]; let r1 = last["row"][0], r2 = last["row"][1]; let c1 = last["column"][0], c2 = last["column"][1]; let rlen = dataChe.length, clen = dataChe[0].length; let addr = r1 + rlen - d.length, addc = c1 + clen - d[0].length; if(addr >0 || addc > 0){ d = datagridgrowth([].concat(d), addr, addc, true); } for(let r = r1; r <= r2; r++){ for(let c = c1; c <= c2; c++){ d[r][c] = null; } } for(let i = 0; i < rlen; i++){ for(let j = 0; j < clen; j++){ d[r1 + i][c1 + j] = dataChe[i][j]; } } let range = [ { "row": [r1, r2], "column": [c1, c2] }, { "row": [r1, r1 + rlen - 1], "column": [c1, c1 + clen - 1] } ]; jfrefreshgrid(d, range); } }; export default editor;