import sheetmanage from './sheetmanage'; import server from './server'; import { sheetselectlistitemHTML, sheetselectlistHTML, keycode } from './constant'; import { replaceHtml, mouseclickposition, } from '../utils/util'; import { getSheetIndex } from '../methods/get'; import { isEditMode } from '../global/validate'; import formula from '../global/formula'; import cleargridelement from '../global/cleargridelement'; import tooltip from '../global/tooltip'; selectTextDom import {selectTextDom} from '../global/cursorPos'; import locale from '../locale/locale'; import Store from '../store'; import luckysheetConfigsetting from './luckysheetConfigsetting'; import {pagerInit} from '../global/api' import method from '../global/method'; //表格底部名称栏区域 相关事件(增、删、改、隐藏显示、颜色等等) let isInitialSheetConfig = false, luckysheetcurrentSheetitem = null, jfdbclicklagTimeout = null,oldSheetFileName = ""; function showsheetconfigmenu() { if (!isInitialSheetConfig) { isInitialSheetConfig = true; const _locale = locale(); let locale_toolbar = _locale.toolbar; $("#luckysheetsheetconfigcolorur").spectrum({ showPalette: true, preferredFormat: "hex", clickoutFiresChange: false, showInitial: true, showInput: true, flat: true, hideAfterPaletteSelect: false, showSelectionPalette: true, maxPaletteSize: 10, cancelText: _locale.sheetconfig.cancelText, chooseText: _locale.sheetconfig.chooseText, togglePaletteMoreText: locale_toolbar.toolMore, togglePaletteLessText: locale_toolbar.toolLess, clearText: locale_toolbar.clearText, noColorSelectedText: locale_toolbar.noColorSelectedText, palette: [["rgb(0, 0, 0)", "rgb(67, 67, 67)", "rgb(102, 102, 102)", "rgb(204, 204, 204)", "rgb(217, 217, 217)", "rgb(255, 255, 255)"], ["rgb(152, 0, 0)", "rgb(255, 0, 0)", "rgb(255, 153, 0)", "rgb(255, 255, 0)", "rgb(0, 255, 0)", "rgb(0, 255, 255)", "rgb(74, 134, 232)", "rgb(0, 0, 255)", "rgb(153, 0, 255)", "rgb(255, 0, 255)"], ["rgb(230, 184, 175)", "rgb(244, 204, 204)", "rgb(252, 229, 205)", "rgb(255, 242, 204)", "rgb(217, 234, 211)", "rgb(208, 224, 227)", "rgb(201, 218, 248)", "rgb(207, 226, 243)", "rgb(217, 210, 233)", "rgb(234, 209, 220)"], ["rgb(221, 126, 107)", "rgb(234, 153, 153)", "rgb(249, 203, 156)", "rgb(255, 229, 153)", "rgb(182, 215, 168)", "rgb(162, 196, 201)", "rgb(164, 194, 244)", "rgb(159, 197, 232)", "rgb(180, 167, 214)", "rgb(213, 166, 189)"], ["rgb(204, 65, 37)", "rgb(224, 102, 102)", "rgb(246, 178, 107)", "rgb(255, 217, 102)", "rgb(147, 196, 125)", "rgb(118, 165, 175)", "rgb(109, 158, 235)", "rgb(111, 168, 220)", "rgb(142, 124, 195)", "rgb(194, 123, 160)"], ["rgb(166, 28, 0)", "rgb(204, 0, 0)", "rgb(230, 145, 56)", "rgb(241, 194, 50)", "rgb(106, 168, 79)", "rgb(69, 129, 142)", "rgb(60, 120, 216)", "rgb(61, 133, 198)", "rgb(103, 78, 167)", "rgb(166, 77, 121)"], ["rgb(91, 15, 0)", "rgb(102, 0, 0)", "rgb(120, 63, 4)", "rgb(127, 96, 0)", "rgb(39, 78, 19)", "rgb(12, 52, 61)", "rgb(28, 69, 135)", "rgb(7, 55, 99)", "rgb(32, 18, 77)", "rgb(76, 17, 48)"], ["#c1232b", "#27727b", "#fcce10", "#e87c25", "#b5c334", "#fe8463", "#9bca63", "#fad860", "#f3a43b", "#60c0dd", "#d7504b", "#c6e579", "#f4e001", "#f0805a", "#26c0c0", "#c12e34", "#e6b600", "#0098d9", "#2b821d", "#005eaa", "#339ca8", "#cda819", "#32a487", "#3fb1e3", "#6be6c1", "#626c91", "#a0a7e6", "#c4ebad", "#96dee8"]], change: function (color) { let $input = $(this); if (color != null) { color = color.toHexString(); } else { color = "rgb(0, 0, 0)"; } let oldcolor = null; if(luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length>0){ oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color"); } luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove(); luckysheetcurrentSheetitem.append('<div class="luckysheet-sheets-item-color" style=" position: absolute; width: 100%; height: 3px; bottom: 0px; left: 0px; background-color: ' + color + ';"></div>'); let index = getSheetIndex(Store.currentSheetIndex); Store.luckysheetfile[index].color = color; server.saveParam("all", Store.currentSheetIndex, color, { "k": "color" }); if (Store.clearjfundo) { let redo = {}; redo["type"] = "sheetColor"; redo["sheetIndex"] = Store.currentSheetIndex; redo["oldcolor"] = oldcolor; redo["color"] = color; Store.jfundo.length = 0; Store.jfredo.push(redo); } } }); $("#luckysheetsheetconfigcolorreset").click(function () { let oldcolor = null; if(luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").length>0){ oldcolor = luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").css("background-color"); } luckysheetcurrentSheetitem.find(".luckysheet-sheets-item-color").remove(); let index = getSheetIndex(Store.currentSheetIndex); Store.luckysheetfile[index].color = null; server.saveParam("all", Store.currentSheetIndex, null, { "k": "color" } ); if (Store.clearjfundo) { let redo = {}; redo["type"] = "sheetColor"; redo["sheetIndex"] = Store.currentSheetIndex; redo["oldcolor"] = oldcolor; redo["color"] = null; Store.jfundo.length = 0; Store.jfredo.push(redo); } }); } let index = getSheetIndex(Store.currentSheetIndex); if (Store.luckysheetfile[index].color != null && Store.luckysheetfile[index].color.length > 0) { $("#luckysheetsheetconfigcolorur").spectrum("set", Store.luckysheetfile[index].color); } $("#luckysheetsheetconfigcolorur").parent().find("span, div, button, input, a").addClass("luckysheet-mousedown-cancel"); // 如果全部按钮设置了隐藏,则不显示 const config = luckysheetConfigsetting.sheetRightClickConfig; // if(!config.delete && !config.copy && !config.rename && !config.color && !config.hide && !config.move){ if(Object.values(config).every(ele=> !ele)){ return; } setTimeout(function(){ mouseclickposition($("#luckysheet-rightclick-sheet-menu"), luckysheetcurrentSheetitem.offset().left + luckysheetcurrentSheetitem.width(), luckysheetcurrentSheetitem.offset().top - 18, "leftbottom"); },1); } let luckysheetsheetrightclick = function ($t, $cur, e) { clearTimeout(jfdbclicklagTimeout); if ($cur.hasClass("luckysheet-sheets-item-name") && $cur.attr("contenteditable") == "true") { return; } if (formula.rangestart || formula.rangedrag_column_start || formula.rangedrag_row_start || formula.israngeseleciton()) { setTimeout(function () { formula.setCaretPosition(formula.rangeSetValueTo.get(0), 0, formula.rangeSetValueTo.text().length); formula.createRangeHightlight(); $("#luckysheet-input-box-index").find(".luckysheet-input-box-index-sheettxt").remove().end().prepend("<span class='luckysheet-input-box-index-sheettxt'>" + sheetmanage.getSheetName(formula.rangetosheet) + "!</span>").show(); $("#luckysheet-input-box-index").css({"left": $("#luckysheet-input-box").css("left"), "top": (parseInt($("#luckysheet-input-box").css("top")) - 20) + "px", "z-index": $("#luckysheet-input-box").css("z-index")}); }, 1); } else { //保存正在编辑的单元格内容 if (parseInt($("#luckysheet-input-box").css("top")) > 0) { formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); } $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-formula-functionrange .luckysheet-formula-functionrange-highlight").remove(); } $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active"); $t.addClass("luckysheet-sheets-item-active"); cleargridelement(e); sheetmanage.changeSheet($t.data("index")); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); if ($cur.hasClass("luckysheet-sheets-item-menu") || $cur.hasClass("fa-sort-desc") || e.which == "3") { luckysheetcurrentSheetitem = $cur.closest(".luckysheet-sheets-item"); showsheetconfigmenu(); } } export function initialSheetBar(){ const _locale = locale(); const locale_sheetconfig = _locale.sheetconfig; isInitialSheetConfig = false $("#luckysheet-sheet-area").on("mousedown", "div.luckysheet-sheets-item", function (e) { if(isEditMode()){ // alert("非编辑模式下不允许该操作!"); return; } let $t = $(this), $cur = $(e.target), $item = $cur.closest(".luckysheet-sheets-item"); if (e.which == "3") { setTimeout(() => { luckysheetsheetrightclick($t, $cur, e); luckysheetcurrentSheetitem = $item; showsheetconfigmenu(); return; }, 0); } if ($item.hasClass("luckysheet-sheets-item-active") && $item.find(".luckysheet-sheets-item-name").attr("contenteditable") == "false") { jfdbclicklagTimeout = setTimeout(function () { Store.luckysheet_sheet_move_status = true; Store.luckysheet_sheet_move_data = {}; Store.luckysheet_sheet_move_data.widthlist = []; $("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").each(function (i) { if (i == 0) { Store.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth())); } else { Store.luckysheet_sheet_move_data.widthlist.push(parseInt($(this).outerWidth()) + Store.luckysheet_sheet_move_data.widthlist[i - 1]); } }); Store.luckysheet_sheet_move_data.curindex = $("#luckysheet-sheet-area div.luckysheet-sheets-item").index($item); let x = e.pageX; Store.luckysheet_sheet_move_data.curleft = x - $item.offset().left; Store.luckysheet_sheet_move_data.pageX = x; Store.luckysheet_sheet_move_data.activeobject = $item; Store.luckysheet_sheet_move_data.cursorobject = $cur; let $itemclone = $item.clone().css("visibility", "hidden").attr("id", "luckysheet-sheets-item-clone"); $item.after($itemclone); $item.css({ "position": "absolute", "opacity": 0.8, "cursor": "move", "transition": "initial", "z-index": 10 }); }, 200); } }).on("click", "div.luckysheet-sheets-item", function (e) { if(isEditMode()){ // alert("非编辑模式下不允许该操作!"); return; } let $t = $(this), $cur = $(e.target); luckysheetsheetrightclick($t, $cur, e); server.keepHighLightBox() }); let luckysheetsheetnameeditor = function ($t) { if(Store.allowEdit===false){ return; } $t.attr("contenteditable", "true").addClass("luckysheet-mousedown-cancel").data("oldtxt", $t.text()); setTimeout(function () { selectTextDom($t.get(0)); }, 1); } $("#luckysheet-sheet-area").on("dblclick", "span.luckysheet-sheets-item-name", function (e) { luckysheetsheetnameeditor($(this)); }); let compositionFlag = true; $("#luckysheet-sheet-area").on("compositionstart", "span.luckysheet-sheets-item-name", ()=> compositionFlag = false); $("#luckysheet-sheet-area").on("compositionend", "span.luckysheet-sheets-item-name", ()=> compositionFlag = true); $("#luckysheet-sheet-area").on("input", "span.luckysheet-sheets-item-name", function () { if(Store.allowEdit===false){ return; } if(Store.limitSheetNameLength === false){ return } let maxLength = Store.defaultSheetNameMaxLength; if(maxLength === 0){ return } setTimeout( ()=> { if (compositionFlag) { if ($(this).text().length >= maxLength) { /* 检查:值是否越界 */ setTimeout(() => { $(this).text($(this).text().substring(0, maxLength)); let range = window.getSelection(); range.selectAllChildren(this); range.collapseToEnd(); }, 0); } } }, 0); }); $("#luckysheet-sheet-area").on("blur", "span.luckysheet-sheets-item-name", function (e) { if(Store.allowEdit===false){ return; } let $t = $(this); let txt = $t.text(), oldtxt = $t.data("oldtxt"); if(0 === $(this).text().length){ tooltip.info("", locale_sheetconfig.sheetNamecannotIsEmptyError); $t.text(oldtxt).attr("contenteditable", "false"); return; } if(txt.length>31 || txt.charAt(0)=="'" || txt.charAt(txt.length-1)=="'" || /[:\:\\\/?\?\*\[\]]+/.test(txt)){ tooltip.info("", locale_sheetconfig.sheetNameSpecCharError); $t.text(oldtxt).attr("contenteditable", "false"); return; } let index = getSheetIndex(Store.currentSheetIndex); for (let i = 0; i < Store.luckysheetfile.length; i++) { if (index != i && Store.luckysheetfile[i].name == txt) { if(isEditMode()){ alert(locale_sheetconfig.tipNameRepeat); } else{ tooltip.info("", locale_sheetconfig.tipNameRepeat); } $t.text(oldtxt).attr("contenteditable", "false"); return; } } sheetmanage.sheetArrowShowAndHide(); Store.luckysheetfile[index].name = txt; server.saveParam("all", Store.currentSheetIndex, txt, { "k": "name" }); $t.attr("contenteditable", "false").removeClass("luckysheet-mousedown-cancel"); if (Store.clearjfundo) { let redo = {}; redo["type"] = "sheetName"; redo["sheetIndex"] = Store.currentSheetIndex; redo["oldtxt"] = oldtxt; redo["txt"] = txt; Store.jfundo.length = 0; Store.jfredo.push(redo); } // 钩子: sheetEditNameAfter method.createHookFunction('sheetEditNameAfter', { i: Store.luckysheetfile[index].index, oldName: oldtxt, newName: txt }); }); $("#luckysheet-sheet-area").on("keydown", "span.luckysheet-sheets-item-name", function (e) { if(Store.allowEdit===false){ return; } let kcode = e.keyCode; let $t = $(this); if (kcode == keycode.ENTER) { let index = getSheetIndex(Store.currentSheetIndex); oldSheetFileName = Store.luckysheetfile[index].name || oldSheetFileName; Store.luckysheetfile[index].name = $t.text(); $t.attr("contenteditable", "false"); } }); $("#luckysheetsheetconfigrename").click(function () { var $name = luckysheetcurrentSheetitem.find("span.luckysheet-sheets-item-name") // 钩子 sheetEditNameBefore if (!method.createHookFunction('sheetEditNameBefore', { i: luckysheetcurrentSheetitem.data('index') , name: $name.text() })){ return; } luckysheetsheetnameeditor(luckysheetcurrentSheetitem.find("span.luckysheet-sheets-item-name")); $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheetsheetconfigshow").click(function () { $("#luckysheet-sheets-m").click(); $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheetsheetconfigmoveleft").click(function () { if (luckysheetcurrentSheetitem.prevAll(":visible").length > 0) { luckysheetcurrentSheetitem.insertBefore(luckysheetcurrentSheetitem.prevAll(":visible").eq(0)); sheetmanage.reOrderAllSheet(); } $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheetsheetconfigmoveright").click(function () { if (luckysheetcurrentSheetitem.nextAll(":visible").length > 0) { luckysheetcurrentSheetitem.insertAfter(luckysheetcurrentSheetitem.nextAll(":visible").eq(0)); sheetmanage.reOrderAllSheet(); } $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheetsheetconfigdelete").click(function (e) { $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); if($("#luckysheet-sheet-container-c .luckysheet-sheets-item:visible").length <= 1){ if(isEditMode()){ alert(locale_sheetconfig.noMoreSheet); } else{ tooltip.info(locale_sheetconfig.noMoreSheet, ""); } return; } let index = getSheetIndex(Store.currentSheetIndex); tooltip.confirm(locale_sheetconfig.confirmDelete+"【" + Store.luckysheetfile[index].name + "】?", "<span style='color:#9e9e9e;font-size:12px;'>"+locale_sheetconfig.redoDelete+"</span>", function () { sheetmanage.deleteSheet(luckysheetcurrentSheetitem.data("index")); }, null); $("#luckysheet-input-box").removeAttr("style"); }); $("#luckysheetsheetconfigcopy").click(function (e) { sheetmanage.copySheet(luckysheetcurrentSheetitem.data("index"), e); $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheetsheetconfighide").click(function () { if ($("#luckysheet-sheet-area div.luckysheet-sheets-item:visible").length == 1) { if(isEditMode()){ alert(locale_sheetconfig.noHide); } else{ tooltip.info("", locale_sheetconfig.noHide); } return; } sheetmanage.setSheetHide(luckysheetcurrentSheetitem.data("index")); $("#luckysheet-input-box").removeAttr("style"); $("#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu").hide(); }); $("#luckysheet-sheets-add").click(function (e) { //保存正在编辑的单元格内容 if (parseInt($("#luckysheet-input-box").css("top")) > 0) { formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); } sheetmanage.addNewSheet(e); sheetmanage.locationSheet(); $("#luckysheet-input-box").removeAttr("style"); }); let sheetscrollani = null, sheetscrollstart = 0, sheetscrollend = 0, sheetscrollstep = 150; $("#luckysheet-sheets-leftscroll").click(function () { let $c = $("#luckysheet-sheet-container-c"); sheetscrollstart = $c.scrollLeft(); sheetscrollend = $c.scrollLeft() - sheetscrollstep; if (sheetscrollend <= 0) { $("#luckysheet-sheet-container .docs-sheet-fade-left").hide(); } $("#luckysheet-sheet-container .docs-sheet-fade-right").show(); clearInterval(sheetscrollani); sheetscrollani = setInterval(function () { sheetscrollstart -= 4; $c.scrollLeft(sheetscrollstart); if (sheetscrollstart <= sheetscrollend) { clearInterval(sheetscrollani); } }, 1); }); $("#luckysheet-sheets-rightscroll").click(function () { let $c = $("#luckysheet-sheet-container-c"); sheetscrollstart = $c.scrollLeft(); sheetscrollend = $c.scrollLeft() + sheetscrollstep; if (sheetscrollstart > 0) { $("#luckysheet-sheet-container .docs-sheet-fade-right").hide(); } $("#luckysheet-sheet-container .docs-sheet-fade-left").show(); clearInterval(sheetscrollani); sheetscrollani = setInterval(function () { sheetscrollstart += 4; $c.scrollLeft(sheetscrollstart); if (sheetscrollstart >= sheetscrollend) { clearInterval(sheetscrollani); } }, 1); }); let initialOpenSheet = true; $("#luckysheet-sheets-m").click(function (e) { //保存正在编辑的单元格内容 if (parseInt($("#luckysheet-input-box").css("top")) > 0) { formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); } $("#luckysheet-sheet-list").html(""); let item = ""; for (let i = 0; i < Store.luckysheetfile.length; i++) { let f = Store.luckysheetfile[i], icon = '', style = ""; if (f["status"] == 1) { icon = '<i class="fa fa-check" aria-hidden="true"></i>'; } if (f["hide"] == 1) { icon = '<i class="fa fa-low-vision" aria-hidden="true"></i>'; style += "color:#BBBBBB;"; } if (f["color"] != null && f["color"].length > 0) { style += "border-right:4px solid " + f["color"] + ";"; } item += replaceHtml(sheetselectlistitemHTML, { "index": f["index"], "name": f["name"], "icon": icon, "style": style }); } if (initialOpenSheet) { $("#" + Store.container).append(replaceHtml(sheetselectlistHTML, { "item": item })); $("#luckysheet-sheet-list").on("click", ".luckysheet-cols-menuitem", function (e) { if(isEditMode()){ // tooltip.info("提示", "图表编辑模式下不允许该操作!"); alert(locale_sheetconfig.chartEditNoOpt); return; } let $item = $(this), index = $item.data("index"); if ($item.data("index") != Store.currentSheetIndex) { sheetmanage.setSheetShow(index); sheetmanage.locationSheet(); } server.keepHighLightBox() }); initialOpenSheet = false; } else { $("#luckysheet-sheet-list").html(item); } let $t = $("#luckysheet-sheet-list"); let left = $(this).offset().left - $('#' + Store.container).offset().left; let bottom = $(this).height() + $('#luckysheet-sta-content').height() + 12; $t.css({left: left + 'px', bottom: bottom + 'px'}).show(); $("#luckysheet-input-box").removeAttr("style"); }); // 初始化分页器 if (luckysheetConfigsetting.pager) { pagerInit(luckysheetConfigsetting.pager) } }