You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.2 KiB
162 lines
5.2 KiB
|
5 years ago
|
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);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
controlHandler: function (dataChe) {
|
||
|
|
let _this = this;
|
||
|
|
|
||
|
|
let d = _this.deepCopyFlowData(Store.flowdata);//取数据
|
||
|
|
|
||
|
|
let last = 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, st_r, ed_r, 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;
|