产品一张表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.
 
 
 

550 lines
24 KiB

import sheetmanage from './sheetmanage';
import server from './server';
import pivotTable from './pivotTable';
import conditionformat from './conditionformat';
import luckysheetPostil from './postil';
import { createFilter, createFilterOptions, labelFilterOptionState } from './filter';
import formula from '../global/formula';
import json from '../global/json';
import cleargridelement from '../global/cleargridelement';
import {
jfrefreshgrid,
jfrefreshgridall,
jfrefreshrange,
jfrefreshgrid_rhcw,
jfrefreshgrid_adRC,
jfrefreshgrid_pastcut,
luckysheetrefreshgrid
} from '../global/refresh';
import { getSheetIndex } from '../methods/get';
import Store from '../store';
const controlHistory = {
redo: function (e) {
if (Store.jfredo.length == 0) {
return;
}
let ctr = Store.jfredo.pop();
Store.jfundo.push(ctr);
Store.clearjfundo = false;
if (sheetmanage.hasSheet(ctr.sheetIndex) && Store.currentSheetIndex != ctr.sheetIndex) {
sheetmanage.changeSheetExec(ctr.sheetIndex);
}
if (ctr.type == "datachange") {
//如果有单元格为null,则对应公式应该删除
for(let s = 0; s < ctr.range.length; s++){
let st_r = ctr.range[s].row[0];
let ed_r = ctr.range[s].row[1];
let st_c = ctr.range[s].column[0];
let ed_c = ctr.range[s].column[1];
for(let r = st_r;r < ed_r + 1; r++){
for(let c = st_c; c < ed_c +1; c++){
if(r > ctr.data.length - 1){
break;
}
if(ctr.data[r][c] == null){
formula.delFunctionGroup(r,c);
}
}
}
}
formula.execFunctionGroup(null, null, null, null, ctr.data);//取之前的数据
jfrefreshgrid(ctr.data, ctr.range, ctr.config, ctr.cdformat, ctr.RowlChange);
}
else if (ctr.type == "pasteCut") {
let s = {
"sheetIndex": ctr.source["sheetIndex"],
"data": ctr.source["curData"],
"curData": ctr.source["data"],
"config": ctr.source["curConfig"],
"curConfig": ctr.source["config"],
"cdformat": ctr.source["curCdformat"],
"curCdformat": ctr.source["cdformat"],
"range": ctr.source["range"]
}
let t = {
"sheetIndex": ctr.target["sheetIndex"],
"data": ctr.target["curData"],
"curData": ctr.target["data"],
"config": ctr.target["curConfig"],
"curConfig": ctr.target["config"],
"cdformat": ctr.target["curCdformat"],
"curCdformat": ctr.target["cdformat"],
"range": ctr.target["range"]
}
jfrefreshgrid_pastcut(s, t, ctr.RowlChange);
}
else if (ctr.type == "rangechange") {
//如果有单元格为null,则对应公式应该删除
for(let s = 0; s < ctr.range.length; s++){
let st_r = ctr.range[s].row[0];
let ed_r = ctr.range[s].row[1];
let st_c = ctr.range[s].column[0];
let ed_c = ctr.range[s].column[1];
for(let r = st_r;r < ed_r + 1; r++){
for(let c = st_c; c < ed_c +1; c++){
if(ctr.data[r][c] == null){
formula.delFunctionGroup(r,c);
}
}
}
}
formula.execFunctionGroup(null, null, null, null, ctr.data);//取之前的数据
jfrefreshrange(ctr.data, ctr.range, ctr.cdformat);
}
else if (ctr.type == "resize") {
Store.config = ctr.config;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = Store.config;
if(ctr.ctrlType == "resizeR"){
server.saveParam("cg", ctr.sheetIndex, ctr.config["rowlen"], { "k": "rowlen" });
}
else if(ctr.ctrlType == "resizeC"){
server.saveParam("cg", ctr.sheetIndex, ctr.config["columlen"], { "k": "columlen" });
}
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
}
else if (ctr.type == "cellRowChange") {
jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, ctr.ctrlType, ctr.ctrlValue, ctr.cdformat);
}
else if (ctr.type == "extend") {
jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, "dele", ctr.ctrlValue);
}
else if (ctr.type == "dele") {
let ctrlValue1 = $.extend(true, {}, ctr.ctrlValue);
ctrlValue1.restore = true;
jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, ctr.config, ctr.range, "extend", ctrlValue1);
}
else if (ctr.type == "addRC") { //增加行列撤销操作
let ctrlValue = $.extend(true, {}, ctr.ctrlValue);
if(ctrlValue.direction == "rightbottom"){
ctrlValue.index = ctrlValue.index + 1;
}
jfrefreshgrid_adRC(ctr.data, ctr.config, "delRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen);
}
else if (ctr.type == "delRC") { //删除行列撤销操作
let ctrlValue = $.extend(true, {}, ctr.ctrlValue);
ctrlValue.restore = true;
ctrlValue.direction = "lefttop";
jfrefreshgrid_adRC(ctr.data, ctr.config, "addRC", ctrlValue, ctr.calc, ctr.filterObj, ctr.cf, ctr.af, ctr.freezen);
}
else if (ctr.type == "showHidRows") { // 隐藏、显示行 撤销操作
//config
Store.config = ctr.config;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config;
server.saveParam("cg", ctr.sheetIndex, ctr.config["rowhidden"], { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
}
else if (ctr.type == "datachangeAll") {
formula.execFunctionGroup();
jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, null, ctr.range, "datachangeAll", ctr.ctrlValue);
}
else if (ctr.type == "datachangeAll_filter_clear") {
createFilterOptions(ctr.filter_save);
$("#luckysheet-filter-options-sheet" + Store.currentSheetIndex + " .luckysheet-filter-options").each(function(i){
let $top = $(this);
let item = ctr.optiongroups[i];
labelFilterOptionState($top, item.optionstate, item.rowhidden, item.caljs, false, item.st_r, item.ed_r, item.cindex, item.st_c, item.ed_c);
});
server.saveParam("fsr", Store.currentSheetIndex, { "filter": ctr.optiongroups, "filter_select": ctr.filter_save });
//config
Store.config = ctr.config;
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
if(Store.config["rowhidden"] == null){
Store.config["rowhidden"] = {};
}
server.saveParam("cg", Store.currentSheetIndex, Store.config["rowhidden"], { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
$("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
}
else if (ctr.type == "datachangeAll_filter") {
let $top = $("#luckysheet-filter-options-sheet" + Store.currentSheetIndex + " .luckysheet-filter-options").eq(ctr["optionsindex"]);
let st_r = $top.data("str"),
ed_r = $top.data("edr"),
cindex = $top.data("cindex"),
st_c = $top.data("stc"),
ed_c = $top.data("edc");
labelFilterOptionState($top, json.hasKey(ctr.rowhidenPre), ctr.rowhidenPre, ctr.caljs, true, st_r, ed_r, cindex, st_c, ed_c);
//config
Store.config = ctr.config;
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
if(Store.config["rowhidden"] == null){
Store.config["rowhidden"] = {};
}
server.saveParam("cg", Store.currentSheetIndex, Store.config["rowhidden"], { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
$("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
}
else if (ctr.type == "filtershow") {
$('#luckysheet-filter-selected-sheet' + ctr.sheetIndex + ', #luckysheet-filter-options-sheet' + ctr.sheetIndex).remove();
if(server.allowUpdate){
server.saveParam("all", ctr.sheetIndex, null, { "k": "filter_select" });
}
}
else if(ctr.type == "pivotTable_change"){
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].pivotTable = ctr.pivotTable;
pivotTable.getCellData(ctr.sheetIndex);
pivotTable.initialPivotManage(true);
pivotTable.refreshPivotTable();
}
else if (ctr.type == "addSheet") {
sheetmanage.deleteSheet(ctr.index);
sheetmanage.changeSheetExec(ctr.currentSheetIndex);
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
}
else if (ctr.type == "copySheet") {
sheetmanage.deleteSheet(ctr.index);
sheetmanage.changeSheetExec(ctr.copyindex);
}
else if (ctr.type == "deleteSheet") {
let isDupName = false;
for(let i = 0; i < Store.luckysheetfile.length; i++){
if(Store.luckysheetfile[i].name == ctr.name){
isDupName = true;
}
}
if(!isDupName){
sheetmanage.createSheetbydata(ctr, "isrenew");
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
}
}
else if (ctr.type == "sheetName") {
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].name = ctr.oldtxt;
$("#luckysheet-sheets-item" + ctr.sheetIndex).find(".luckysheet-sheets-item-name").html(ctr.oldtxt);
server.saveParam("all", ctr.sheetIndex, ctr.oldtxt, { "k": "name" });
}
else if (ctr.type == "sheetColor") {
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].color = ctr.oldcolor;
let luckysheetcurrentSheetitem = $("#luckysheet-sheets-item" + ctr.sheetIndex);
luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
if(ctr.oldcolor != null){
luckysheetcurrentSheetitem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + ctr.oldcolor + ';"></div>');
}
server.saveParam("all", ctr.sheetIndex, ctr.oldcolor, { "k": "color" });
}
else if (ctr.type == "mergeChange") {
jfrefreshgrid(ctr.data, ctr.range, ctr.config);
}
else if (ctr.type == "updateCF"){
let historyRules = ctr["data"]["historyRules"];
for(let i = 0; i < historyRules.length; i++){
//条件规则
let sheetIndex = historyRules[i]["sheetIndex"];
Store.luckysheetfile[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"] = historyRules[i]["luckysheet_conditionformat_save"];
if(server.allowUpdate){
server.saveParam("all", sheetIndex, historyRules[i]["luckysheet_conditionformat_save"], { "k": "luckysheet_conditionformat_save" });
}
}
//刷新一次表格
conditionformat.ref();
}
else if (ctr.type == "updateAF"){
let historyRules = ctr["data"]["historyRules"];
let index = getSheetIndex(ctr["sheetIndex"]);
Store.luckysheetfile[index]["luckysheet_alternateformat_save"] = $.extend(true, [], historyRules);
setTimeout(function () {
luckysheetrefreshgrid();
}, 1);
}
else if (ctr.type == "borderChange"){
if(ctr.config["borderInfo"] == null){
server.saveParam("cg", ctr.sheetIndex, [], { "k": "borderInfo" });
}
else{
server.saveParam("cg", ctr.sheetIndex, ctr.config["borderInfo"], { "k": "borderInfo" });
}
Store.config = ctr.config;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = Store.config;
setTimeout(function () {
luckysheetrefreshgrid();
}, 1);
}
else if (ctr.type == "postil"){
luckysheetPostil.ref(ctr.data, ctr.rc);
for(let i = 0; i < ctr.rc.length; i++){
let r = ctr.rc[i].split("_")[0];
let c = ctr.rc[i].split("_")[1];
if(ctr.data[r][c] != null && ctr.data[r][c].ps != null){
luckysheetPostil.buildPs(r, c, ctr.data[r][c].ps);
}
else{
luckysheetPostil.buildPs(r, c, null);
}
}
}
cleargridelement(e);
Store.clearjfundo = true;
},
undo: function () {
if (Store.jfundo.length == 0) {
return;
}
let ctr = Store.jfundo.pop();
Store.jfredo.push(ctr);
Store.clearjfundo = false;
if (sheetmanage.hasSheet(ctr.sheetIndex) && Store.currentSheetIndex != ctr.sheetIndex) {
sheetmanage.changeSheetExec(ctr.sheetIndex);
}
if (ctr.type == "datachange") {
formula.execFunctionGroup();
jfrefreshgrid(ctr.curdata, ctr.range, ctr.curConfig, ctr.curCdformat, ctr.RowlChange);
}
else if (ctr.type == "pasteCut") {
jfrefreshgrid_pastcut(ctr.source, ctr.target, ctr.RowlChange);
}
else if (ctr.type == "rangechange") {
formula.execFunctionGroup();
jfrefreshrange(ctr.curdata, ctr.range, ctr.curCdformat);
}
else if (ctr.type == "resize") {
Store.config = ctr.curconfig;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = Store.config;
if(ctr.ctrlType == "resizeR"){
server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowlen"], { "k": "rowlen" });
}
else if(ctr.ctrlType == "resizeC"){
server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["columlen"], { "k": "columlen" });
}
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
}
else if (ctr.type == "cellRowChange") {
jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue, ctr.curCdformat);
}
else if (ctr.type == "extend") {
jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue);
}
else if (ctr.type == "dele") {
let ctrlValue1 = $.extend(true, {}, ctr.ctrlValue);
ctrlValue1.restore = true;
jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, ctr.curconfig, ctr.currange, ctr.ctrlType, ctr.ctrlValue);
}
else if (ctr.type == "addRC") { //增加行列重做操作
jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "addRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen);
}
else if (ctr.type == "delRC") { //删除行列重做操作
jfrefreshgrid_adRC(ctr.curData, ctr.curConfig, "delRC", ctr.ctrlValue, ctr.curCalc, ctr.curFilterObj, ctr.curCf, ctr.curAf, ctr.curFreezen);
}
else if (ctr.type == "showHidRows") { // 隐藏、显示行 重做操作
//config
Store.config = ctr.curconfig;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig;
server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["rowhidden"], { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
}
else if (ctr.type == "datachangeAll") {
formula.execFunctionGroup();
jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, null, ctr.currange, "datachangeAll", ctr.ctrlValue);
}
else if (ctr.type == "datachangeAll_filter_clear") {
server.saveParam("fsc", Store.currentSheetIndex, null);
//config
Store.config = ctr.curconfig;
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
server.saveParam("cg", Store.currentSheetIndex, {}, { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
$("#luckysheet-filter-menu .luckysheet-filter-selected-input").hide().find("input").val();
$("#luckysheet-filter-selected span").data("type", "0").data("type", null).text("无");
$('#luckysheet-filter-selected-sheet' + Store.currentSheetIndex + ', #luckysheet-filter-options-sheet' + Store.currentSheetIndex).remove();
$("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
}
else if (ctr.type == "datachangeAll_filter") {
let $top = $("#luckysheet-filter-options-sheet" + Store.currentSheetIndex + " .luckysheet-filter-options").eq(ctr["optionsindex"]);
let st_r = $top.data("str"),
ed_r = $top.data("edr"),
cindex = $top.data("cindex"),
st_c = $top.data("stc"),
ed_c = $top.data("edc");
labelFilterOptionState($top, json.hasKey(ctr.rowhidden), ctr.rowhidden, ctr.caljs, true, st_r, ed_r, cindex, st_c, ed_c);
//config
Store.config = ctr.curconfig;
Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config;
server.saveParam("cg", Store.currentSheetIndex, Store.config["rowhidden"], { "k": "rowhidden" });
//行高、列宽 刷新
jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length);
$("#luckysheet-filter-menu, #luckysheet-filter-submenu").hide();
}
else if (ctr.type == "filtershow") {
Store.luckysheet_select_save = [ctr.filter_save];
Store.filterchage = false;
createFilter();
Store.filterchage = true;
server.saveParam("all", ctr.sheetIndex, ctr.filter_save, { "k": "filter_select" });
}
else if (ctr.type == "pivotTable_change") {
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].pivotTable = ctr.pivotTablecur;
pivotTable.getCellData(ctr.sheetIndex);
pivotTable.initialPivotManage(true);
pivotTable.refreshPivotTable();
}
else if (ctr.type == "addSheet") {
sheetmanage.createSheetbydata(ctr.sheetconfig);
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
}
else if (ctr.type == "copySheet") {
sheetmanage.copySheet(ctr.copyindex);
}
else if (ctr.type == "deleteSheet") {
sheetmanage.deleteSheet(ctr.index);
if (ctr.order == 0) {
sheetmanage.changeSheetExec(Store.luckysheetfile[0].index);
}
else {
sheetmanage.changeSheetExec(Store.luckysheetfile[ctr.order - 1].index);
}
$("#luckysheet-input-box").removeAttr("style");
$("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide();
}
else if (ctr.type == "sheetName") {
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].name = ctr.txt;
$("#luckysheet-sheets-item" + ctr.sheetIndex).find(".luckysheet-sheets-item-name").html(ctr.txt);
server.saveParam("all", ctr.sheetIndex, ctr.txt, { "k": "name" });
}
else if (ctr.type == "sheetColor") {
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].color = ctr.color;
let luckysheetcurrentSheetitem = $("#luckysheet-sheets-item" + ctr.sheetIndex);
luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove();
if(ctr.color != null){
luckysheetcurrentSheetitem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + ctr.color + ';"></div>');
}
server.saveParam("all", ctr.sheetIndex, ctr.color, { "k": "color" });
}
else if (ctr.type == "mergeChange") {
jfrefreshgrid(ctr.curData, ctr.range, ctr.curConfig);
}
else if (ctr.type == "updateCF"){
let currentRules = ctr["data"]["currentRules"];
for(let i = 0; i < currentRules.length; i++){
//条件规则
let sheetIndex = currentRules[i]["sheetIndex"];
Store.luckysheetfile[getSheetIndex(sheetIndex)]["luckysheet_conditionformat_save"] = currentRules[i]["luckysheet_conditionformat_save"];
if(server.allowUpdate){
server.saveParam("all", sheetIndex, currentRules[i]["luckysheet_conditionformat_save"], { "k": "luckysheet_conditionformat_save" });
}
}
//刷新一次表格
conditionformat.ref();
}
else if (ctr.type == "updateAF"){
let currentRules = ctr["data"]["currentRules"];
let index = getSheetIndex(ctr["sheetIndex"]);
Store.luckysheetfile[index]["luckysheet_alternateformat_save"] = $.extend(true, [], currentRules);
setTimeout(function () {
luckysheetrefreshgrid();
}, 1);
}
else if (ctr.type == "borderChange"){
server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["borderInfo"], { "k": "borderInfo" });
Store.config = ctr.curconfig;
Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = Store.config;
setTimeout(function () {
luckysheetrefreshgrid();
}, 1);
}
else if (ctr.type == "postil"){
luckysheetPostil.ref(ctr.curdata, ctr.rc);
for(let i = 0; i < ctr.rc.length; i++){
let r = ctr.rc[i].split("_")[0];
let c = ctr.rc[i].split("_")[1];
if(ctr.curdata[r][c] != null && ctr.curdata[r][c].ps != null){
luckysheetPostil.buildPs(r, c, ctr.curdata[r][c].ps);
}
else{
luckysheetPostil.buildPs(r, c, null);
}
}
}
Store.clearjfundo = true;
}
};
export default controlHistory;