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

531 lines
18 KiB

import server from '../controllers/server';
import { luckysheetlodingHTML, luckyColor } from '../controllers/constant';
import sheetmanage from '../controllers/sheetmanage';
import luckysheetformula from './formula';
import imageCtrl from '../controllers/imageCtrl';
import dataVerificationCtrl from '../controllers/dataVerificationCtrl';
import pivotTable from '../controllers/pivotTable';
import luckysheetFreezen from '../controllers/freezen';
import { getSheetIndex } from '../methods/get';
import { luckysheetextendData } from './extend';
import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';
import editor from './editor';
import luckysheetcreatesheet from './createsheet';
import Store from '../store';
const defaultConfig = {
defaultStore:{
container: null,
luckysheetfile: null,
defaultcolumnNum: 60,
defaultrowNum: 84,
fullscreenmode: true,
devicePixelRatio: 1,
currentSheetIndex: 0,
calculateSheetIndex: 0,
flowdata: [],
config: {},
visibledatarow: [],
visibledatacolumn: [],
ch_width: 0,
rh_height: 0,
cellmainWidth: 0,
cellmainHeight: 0,
toolbarHeight: 0,
infobarHeight: 0,
calculatebarHeight: 0,
rowHeaderWidth: 46,
columnHeaderHeight: 20,
cellMainSrollBarSize: 12,
sheetBarHeight: 31,
statisticBarHeight: 23,
luckysheetTableContentHW: [0, 0],
defaultcollen: 73,
defaultrowlen: 19,
jfcountfuncTimeout: null,
jfautoscrollTimeout: null,
luckysheet_select_status: false,
luckysheet_select_save: [{ "row": [0, 0], "column": [0, 0] }],
luckysheet_selection_range: [],
luckysheet_copy_save: {}, //复制粘贴
luckysheet_paste_iscut: false,
filterchage: true, //筛选
luckysheet_filter_save: { "row": [], "column": [] },
luckysheet_sheet_move_status: false,
luckysheet_sheet_move_data: [],
luckysheet_scroll_status: false,
luckysheetisrefreshdetail: true,
luckysheetisrefreshtheme: true,
luckysheetcurrentisPivotTable: false,
luckysheet_rows_selected_status: false, //行列标题相关参
luckysheet_cols_selected_status: false,
luckysheet_rows_change_size: false,
luckysheet_rows_change_size_start: [],
luckysheet_cols_change_size: false,
luckysheet_cols_change_size_start: [],
luckysheet_cols_dbclick_timeout: null,
luckysheet_cols_dbclick_times: 0,
luckysheetCellUpdate: [],
luckysheet_shiftpositon: null,
iscopyself: true,
orderbyindex: 0, //排序下标
luckysheet_model_move_state: false, //模态框拖动
luckysheet_model_xy: [0, 0],
luckysheet_model_move_obj: null,
luckysheet_cell_selected_move: false, //选区拖动替换
luckysheet_cell_selected_move_index: [],
luckysheet_cell_selected_extend: false, //选区下拉
luckysheet_cell_selected_extend_index: [],
luckysheet_cell_selected_extend_time: null,
clearjfundo: true,
jfredo: [],
jfundo: [],
lang: 'en', //language
createChart: '',
highlightChart: '',
zIndex: 15,
chartparam: {
luckysheetCurrentChart: null, //current chart_id
luckysheetCurrentChartActive: false,
luckysheetCurrentChartMove: null, // Debounce state
luckysheetCurrentChartMoveTimeout: null,//拖动图表框的节流定时器
luckysheetCurrentChartMoveObj: null, //chart DOM object
luckysheetCurrentChartMoveXy: null, //上一次操作结束的图表信息,x,y: chart框位置,scrollLeft1,scrollTop1: 滚动条位置
luckysheetCurrentChartMoveWinH: null, //左右滚动条滑动距离
luckysheetCurrentChartMoveWinW: null, //上下滚动条滑动距离
luckysheetCurrentChartResize: null,
luckysheetCurrentChartResizeObj: null,
luckysheetCurrentChartResizeXy: null,
luckysheetCurrentChartResizeWinH: null,
luckysheetCurrentChartResizeWinW: null,
luckysheetInsertChartTosheetChange: true, // 正在执行撤销
luckysheetCurrentChartZIndexRank : 100,
luckysheet_chart_redo_click:false, //撤销重做时标识
luckysheetCurrentChartMaxState: false, //图表全屏状态
jfrefreshchartall: '',
changeChartCellData: '',
renderChart: '',
getChartJson: ''
},
functionList:null, //function list explanation
luckysheet_function:null,
chart_selection: {},
currentChart: '',
scrollRefreshSwitch:true,
measureTextCache:{},
measureTextCellInfoCache:{},
measureTextCacheTimeOut:null,
cellOverflowMapCache:{},
zoomRatio:1,
visibledatacolumn_unique:null,
visibledatarow_unique:null,
showGridLines:true,
toobarObject: {}, //toolbar constant
inlineStringEditCache:null,
inlineStringEditRange:null,
fontList:[],
currentSheetView:"viewNormal",
},
defaultFormula:{
searchFunctionCell: null,
functionlistPosition: {},
rangechangeindex: null,
rangestart: false,
rangetosheet: null,
rangeSetValueTo: null,
func_selectedrange: {}, //函数选区范围
rangedrag_column_start: false,
rangedrag_row_start: false,
rangeResizeObj: null,
rangeResize: null,
rangeResizeIndex: null,
rangeResizexy: null,
rangeResizeWinH: null,
rangeResizeWinW: null,
rangeResizeTo: null,
rangeMovexy: null,
rangeMove: false,
rangeMoveObj: null,
rangeMoveIndex: null,
rangeMoveRangedata: null,
functionHTMLIndex: 0,
functionRangeIndex: null,
execvertex: {},
execFunctionGroupData: null,
execFunctionExist: null,
formulaContainSheetList:{},
cellTextToIndexList:{},
isFunctionRangeSave: false,
execvertex: {},
execFunctionGroupData: null,
execFunctionExist: null,
formulaContainSheetList:{},
formulaContainCellList:{},
cellTextToIndexList:{},
execFunctionGlobalData:{},
groupValuesRefreshData: [],
functionResizeData: {},
functionResizeStatus: false,
functionResizeTimeout: null,
data_parm_index: 0 //选择公式后参数索引标记
},
defaultSheet:{
sheetMaxIndex: 0,
nulldata: null,
mergeCalculationSheet:{},
checkLoadSheetIndexToDataIndex:{},
CacheNotLoadControll:[],
},
defaultPivotTable:{
pivotDatas: null,
pivotSheetIndex: 0,
pivotDataSheetIndex: 0,
celldata: null,
origindata: null,
pivot_data_type: {},
pivot_select_save: null,
column: null,
row: null,
values: null,
filter: null,
showType: null,
rowhidden: null,
selected: null,
caljs: null,
initial: true,
filterparm: null,
luckysheet_pivotTable_select_state: false,
jgridCurrentPivotInput: null,
movestate: false,
moveitemposition: [],
movesave: {},
drawPivotTable: true,
pivotTableBoundary: [12, 6],
},
defaultImage:{
imgItem: {
type: '3', //1移动并调整单元格大小 2移动并且不调整单元格的大小 3不要移动单元格并调整其大小
src: '', //图片url
originWidth: null, //图片原始宽度
originHeight: null, //图片原始高度
default: {
width: null, //图片 宽度
height: null, //图片 高度
left: null, //图片离表格左边的 位置
top: null, //图片离表格顶部的 位置
},
crop: {
width: null, //图片裁剪后 宽度
height: null, //图片裁剪后 高度
offsetLeft: 0, //图片裁剪后离未裁剪时 左边的位移
offsetTop: 0, //图片裁剪后离未裁剪时 顶部的位移
},
isFixedPos: false, //固定位置
fixedLeft: null, //固定位置 左位移
fixedTop: null, //固定位置 右位移
border: {
width: 0, //边框宽度
radius: 0, //边框半径
style: 'solid', //边框类型
color: '#000', //边框颜色
}
},
images: null,
currentImgId: null,
currentWinW: null,
currentWinH: null,
resize: null,
resizeXY: null,
move: false,
moveXY: null,
cropChange: null,
cropChangeXY: null,
cropChangeObj: null,
copyImgItemObj: null,
},
defaultDataVerification:{
defaultItem: {
type: 'dropdown', //类型
type2: null, //
value1: '', //
value2: '', //
checked: false,
remote: false, //自动远程获取选项
prohibitInput: false, //输入数据无效时禁止输入
hintShow: false, //选中单元格时显示提示语
hintText: '', //
},
curItem: null,
dataVerification: null,
selectRange: [],
selectStatus: false,
}
}
const method = {
//翻页
addDataAjax: function(param, index, url, func){
let _this = this;
if(index == null){
index = Store.currentSheetIndex;
}
if(url == null){
url = server.loadSheetUrl;
}
$("#luckysheet-grid-window-1").append(luckysheetlodingHTML());
param.currentPage++;
let dataType = 'application/json;charset=UTF-8';
let token = sessionStorage.getItem('x-auth-token');
$.ajax({
method: 'POST',
url: url,
headers: { "x-auth-token": token },
data: JSON.stringify(param),
contentType: dataType,
success: function(d) {
//d可能为json字符串
if(typeof d == "string"){
d = JSON.parse(d);
}
let dataset = d.data;
let newData = dataset.celldata;
luckysheetextendData(dataset["row"], newData);
setTimeout(function(){
$("#luckysheetloadingdata").fadeOut().remove();
}, 500);
if(func && typeof(func)=="function"){
func(dataset);
}
}
})
},
//重载
reload: function(param, index, url, func){
let _this = this;
if(index == null){
index = Store.currentSheetIndex;
}
if(url == null){
url = server.loadSheetUrl;
}
$("#luckysheet-grid-window-1").append(luckysheetlodingHTML());
let arg = {"gridKey" : server.gridKey, "index": index};
param = $.extend(true, param, arg);
let file = Store.luckysheetfile[getSheetIndex(index)];
$.post(url, param, function (d) {
let dataset = new Function("return " + d)();
file.celldata = dataset[index.toString()];
let data = sheetmanage.buildGridData(file);
setTimeout(function(){
$("#luckysheetloadingdata").fadeOut().remove();
}, 500);
file["data"] = data;
Store.flowdata = data;
editor.webWorkerFlowDataCache(data);//worker存数据
luckysheetcreatesheet(data[0].length, data.length, data, null, false);
file["load"] = "1";
Store.luckysheet_select_save.length = 0;
Store.luckysheet_selection_range = [];
server.saveParam("shs", null, Store.currentSheetIndex);
sheetmanage.changeSheet(index);
if(func && typeof(func)=="function"){
func();
}
});
},
clearSheetByIndex: function(i){
let index = getSheetIndex(i);
let sheetfile = Store.luckysheetfile[index];
if(!sheetfile.isPivotTable){
sheetfile.data = [];
sheetfile.row = Store.defaultrowNum;
sheetfile.column = Store.defaultcolumnNum;
sheetfile.chart = [];
sheetfile.config = null;
sheetfile.filter = null;
sheetfile.filter_select = null;
sheetfile.celldata = [];
sheetfile.pivotTable = {};
sheetfile.calcChain = [];
sheetfile.status = 0;
sheetfile.load = 0;
Store.flowdata = [];
editor.webWorkerFlowDataCache(Store.flowdata);//worker存数据
$("#"+ Store.container +" .luckysheet-data-visualization-chart").remove();
$("#"+ Store.container +" .luckysheet-datavisual-selection-set").remove();
$("#luckysheet-row-count-show, #luckysheet-formula-functionrange-select, #luckysheet-row-count-show, #luckysheet-column-count-show, #luckysheet-change-size-line, #luckysheet-cell-selected-focus, #luckysheet-selection-copy, #luckysheet-cell-selected-extend, #luckysheet-cell-selected-move, #luckysheet-cell-selected").hide();
delete sheetfile.load;
}
else {
delete Store.luckysheetfile[index];
}
},
clear: function(index){
let _this = this;
if(index == "all"){
for(let i = 0; i < Store.luckysheetfile.length; i++){
let sheetfile = Store.luckysheetfile[i];
_this.clearSheetByIndex(sheetfile.index);
}
}
else{
if(index == null){
index = Store.currentSheetIndex;
}
_this.clearSheetByIndex(index);
}
sheetmanage.changeSheet(Store.luckysheetfile[0].index);
},
destroy:function(){
$("#" + Store.container).empty();
$("body > .luckysheet-cols-menu").remove();
$("#luckysheet-modal-dialog-mask, #luckysheetTextSizeTest, #luckysheet-icon-morebtn-div").remove();
$("#luckysheet-input-box").parent().remove();
$("#luckysheet-formula-help-c").remove();
$(".chartSetting, .luckysheet-modal-dialog-slider").remove();
//document event release
$(document).off(".luckysheetEvent");
$(document).off(".luckysheetProtection");
//参数重置
luckysheetFreezen.initialHorizontal = true;
luckysheetFreezen.initialVertical = true;
let defaultStore = $.extend(true, {}, defaultConfig.defaultStore);
for(let key in defaultStore){
if(key in Store){
Store[key] = defaultStore[key];
}
}
let defaultFormula = $.extend(true, {}, defaultConfig.defaultFormula);
for(let key in defaultFormula){
if(key in luckysheetformula){
luckysheetformula[key] = defaultFormula[key];
}
}
let defaultSheet = $.extend(true, {}, defaultConfig.defaultSheet);
for(let key in defaultSheet){
if(key in sheetmanage){
sheetmanage[key] = defaultSheet[key];
}
}
let defaultPivotTable = $.extend(true, {}, defaultConfig.defaultPivotTable);
for(let key in defaultPivotTable){
if(key in pivotTable){
pivotTable[key] = defaultPivotTable[key];
}
}
let defaultImage = $.extend(true, {}, defaultConfig.defaultImage);
for(let key in defaultImage){
if(key in imageCtrl){
imageCtrl[key] = defaultImage[key];
}
}
let defaultDataVerification = $.extend(true, {}, defaultConfig.defaultDataVerification);
for(let key in defaultDataVerification){
if(key in dataVerificationCtrl){
dataVerificationCtrl[key] = defaultDataVerification[key];
}
}
},
editorChart:function(c){
let chart_selection_color = luckyColor[0];
let chart_id = "luckysheetEditMode-datav-chart";
let chart_selection_id = chart_id + "_selection";
c.chart_id = chart_id;
let chartTheme = c.chartTheme;
chartTheme = chartTheme == null ? "default0000" : chartTheme;
luckysheet.insertChartTosheet(c.sheetIndex, c.dataSheetIndex, c.option, c.chartType, c.selfOption, c.defaultOption, c.row, c.column, chart_selection_color, chart_id, chart_selection_id, c.chartStyle, c.rangeConfigCheck, c.rangeRowCheck, c.rangeColCheck, c.chartMarkConfig, c.chartTitleConfig, c.winWidth, c.winHeight, c.scrollLeft, c.scrollTop, chartTheme, c.myWidth, c.myHeight, c.myLeft!=null?parseFloat(c.myLeft):null, c.myTop!=null?parseFloat(c.myTop):null, c.myindexrank, true);
$("#"+chart_id).find(".luckysheet-modal-controll-update").click();
},
/**
* 获取单元格的值
* @param {name} 函数名称
* @param {arguments} 函数参数
*/
createHookFunction:function(){
let hookName = arguments[0];
if(luckysheetConfigsetting.hook && luckysheetConfigsetting.hook[hookName]!=null && (typeof luckysheetConfigsetting.hook[hookName] == "function")){
var args = Array.prototype.slice.apply(arguments);
args.shift();
let ret = luckysheetConfigsetting.hook[hookName].apply(this, args);
if(ret===false){
return false;
}
else{
return true;
}
}
return true;
}
}
export default method;