123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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;
|