产品一张表luckysheet前端代码库
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

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;