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

282 lines
12 KiB

import menuButton from './menuButton';
import {luckysheetupdateCell} from './updateCell';
import { keycode } from './constant';
import {
luckysheetMoveHighlightCell,
} from './sheetMove';
import insertFormula from './insertFormula';
import {
rowLocation,
colLocation,
mouseposition
} from '../global/location';
import { isEditMode } from '../global/validate';
import formula from '../global/formula';
import tooltip from '../global/tooltip';
import locale from '../locale/locale';
import Store from '../store';
export function formulaBarInitial(){
//公式栏处理
const _locale = locale();
const locale_formula= _locale.formula;
$("#luckysheet-functionbox-cell").focus(function () {
if(isEditMode()){//此模式下禁用公式栏
return;
}
if(Store.luckysheet_select_save.length > 0){
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
// let $input = $("#luckysheet-rich-text-editor"),value = $input.text();
// if(value) {
// formula.updatecell(row_index, col_index);
// }
luckysheetupdateCell(row_index, col_index, Store.flowdata, null, true);
formula.rangeResizeTo = $("#luckysheet-functionbox-cell");
}
}).keydown(function (event) {
if(isEditMode()){//此模式下禁用公式栏
return;
}
let ctrlKey = event.ctrlKey;
let altKey = event.altKey;
let shiftKey = event.shiftKey;
let kcode = event.keyCode;
let $inputbox = $("#luckysheet-input-box");
if (kcode == keycode.ENTER && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible") && formula.searchFunctionCell != null) {
formula.searchFunctionEnter($("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active"));
}
else {
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
Store.luckysheet_select_save = [{ "row": [Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[0]], "column": [Store.luckysheetCellUpdate[1], Store.luckysheetCellUpdate[1]], "row_focus": Store.luckysheetCellUpdate[0], "column_focus": Store.luckysheetCellUpdate[1] }];
luckysheetMoveHighlightCell("down", 1, "rangeOfSelect");
//$("#luckysheet-functionbox-cell").blur();
$("#luckysheet-rich-text-editor").focus();
}
event.preventDefault();
}
else if (kcode == keycode.ESC && parseInt($inputbox.css("top")) > 0) {
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
//$("#luckysheet-functionbox-cell").blur();
$("#luckysheet-rich-text-editor").focus();
event.preventDefault();
}
else if (kcode == keycode.F4 && parseInt($inputbox.css("top")) > 0) {
formula.setfreezonFuc(event);
event.preventDefault();
}
else if (kcode == keycode.UP && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible")) {
let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").prev();
if ($up.length == 0) {
$up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").last();
}
$("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
$up.addClass("luckysheet-formula-search-item-active");
event.preventDefault();
}
}
else if (kcode == keycode.DOWN && parseInt($inputbox.css("top")) > 0) {
if ($("#luckysheet-formula-search-c").is(":visible")) {
let $up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item-active").next();
if ($up.length == 0) {
$up = $("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").first();
}
$("#luckysheet-formula-search-c").find(".luckysheet-formula-search-item").removeClass("luckysheet-formula-search-item-active");
$up.addClass("luckysheet-formula-search-item-active");
event.preventDefault();
}
}
else if (kcode == keycode.LEFT && parseInt($inputbox.css("top")) > 0) {
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
}
else if (kcode == keycode.RIGHT && parseInt($inputbox.css("top")) > 0) {
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
}
else if (!((kcode >= 112 && kcode <= 123) || kcode <= 46 || kcode == 144 || kcode == 108 || event.ctrlKey || event.altKey || (event.shiftKey && (kcode == 37 || kcode == 38 || kcode == 39 || kcode == 40))) || kcode == 8 || kcode == 32 || kcode == 46 || (event.ctrlKey && kcode == 86)) {
formula.functionInputHanddler($("#luckysheet-rich-text-editor"), $("#luckysheet-functionbox-cell"), kcode);
}
}).click(function () {
if(isEditMode()){//此模式下禁用公式栏
return;
}
formula.rangeHightlightselected($("#luckysheet-functionbox-cell"));
});
//公式栏 取消(X)按钮
$("#luckysheet-wa-functionbox-cancel").click(function () {
if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
return;
}
//若有参数弹出框,隐藏
if($("#luckysheet-search-formula-parm").is(":visible")){
$("#luckysheet-search-formula-parm").hide();
}
//若有参数选取范围弹出框,隐藏
if($("#luckysheet-search-formula-parm-select").is(":visible")){
$("#luckysheet-search-formula-parm-select").hide();
}
formula.dontupdate();
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
});
//公式栏 确认()按钮
$("#luckysheet-wa-functionbox-confirm").click(function () {
if (!$(this).hasClass("luckysheet-wa-calculate-active")) {
return;
}
//若有参数弹出框,隐藏
if($("#luckysheet-search-formula-parm").is(":visible")){
$("#luckysheet-search-formula-parm").hide();
}
//若有参数选取范围弹出框,隐藏
if($("#luckysheet-search-formula-parm-select").is(":visible")){
$("#luckysheet-search-formula-parm-select").hide();
}
formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]);
luckysheetMoveHighlightCell("down", 0, "rangeOfSelect");
});
//公式栏 fx按钮
$("#luckysheet-wa-functionbox-fx").click(function () {
//点击函数查找弹出框
if(Store.luckysheet_select_save.length == 0){
if(isEditMode()){
alert(locale_formula.tipSelectCell);
}
else{
tooltip.info(locale_formula.tipSelectCell,"");
}
return;
}
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
let row_index = last["row_focus"], col_index = last["column_focus"];
luckysheetupdateCell(row_index, col_index, Store.flowdata);
let cell = Store.flowdata[row_index][col_index];
if(cell != null && cell.f != null){
//单元格有计算
let functionStr = formula.getfunctionParam(cell.f);
if(functionStr.fn != null){
//有函数公式
insertFormula.formulaParmDialog(functionStr.fn, functionStr.param);
}
else{
//无函数公式
insertFormula.formulaListDialog();
}
}
else{
//单元格无计算
$("#luckysheet-rich-text-editor").html('<span dir="auto" class="luckysheet-formula-text-color">=</span>');
$("#luckysheet-functionbox-cell").html($("#luckysheet-rich-text-editor").html());
insertFormula.formulaListDialog();
}
insertFormula.init();
});
//公式选区操作
$("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-copy", function (event) {
formula.rangeMove = true;
Store.luckysheet_scroll_status = true;
formula.rangeMoveObj = $(this).parent();
formula.rangeMoveIndex = $(this).parent().attr("rangeindex");
let mouse = mouseposition(event.pageX, event.pageY);
let x = mouse[0] + $("#luckysheet-cell-main").scrollLeft();
let y = mouse[1] + $("#luckysheet-cell-main").scrollTop();
$("#luckysheet-formula-functionrange-highlight-" + formula.rangeMoveIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
let type = $(this).data("type");
if (type == "top") {
y += 3;
}
else if (type == "right") {
x -= 3;
}
else if (type == "bottom") {
y -= 3;
}
else if (type == "left") {
x += 3;
}
let row_index = rowLocation(y)[2];
let col_index = colLocation(x)[2];
formula.rangeMovexy = [row_index, col_index];
$("#luckysheet-sheettable").css("cursor", "move");
event.stopPropagation();
});
$("#luckysheet-formula-functionrange").on("mousedown", ".luckysheet-highlight", function (event) {
formula.rangeResize = $(this).data("type");//开始状态resize
formula.rangeResizeIndex = $(this).parent().attr("rangeindex");
let mouse = mouseposition(event.pageX, event.pageY),
scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
scrollTop = $("#luckysheet-cell-main").scrollTop();
let x = mouse[0] + scrollLeft;
let y = mouse[1] + scrollTop;
formula.rangeResizeObj = $(this).parent();
$("#luckysheet-formula-functionrange-highlight-" + formula.rangeResizeIndex).find(".luckysheet-selection-copy-hc").css("opacity", 0.13);
if (formula.rangeResize == "lt") {
x += 3;
y += 3;
}
else if (formula.rangeResize == "lb") {
x += 3;
y -= 3;
}
else if (formula.rangeResize == "rt") {
x -= 3;
y += 3;
}
else if (formula.rangeResize == "rb") {
x -= 3;
y -= 3;
}
let row_location = rowLocation(y),
row = row_location[1],
row_pre = row_location[0],
row_index = row_location[2];
let col_location = colLocation(x),
col = col_location[1],
col_pre = col_location[0],
col_index = col_location[2];
let position = formula.rangeResizeObj.position();
formula.rangeResizexy = [
col_pre,
row_pre,
formula.rangeResizeObj.width(),
formula.rangeResizeObj.height(),
position.left + scrollLeft,
position.top + scrollTop, col, row
];
formula.rangeResizeWinH = $("#luckysheet-cell-main")[0].scrollHeight;
formula.rangeResizeWinW = $("#luckysheet-cell-main")[0].scrollWidth;
Store.luckysheet_scroll_status = true;
event.stopPropagation();
});
}