import menuButton from './menuButton'; import formula from '../global/formula'; import { dynamicArrayHightShow } from '../global/dynamicArray'; import { rowLocationByIndex, colLocationByIndex } from '../global/location'; import browser from '../global/browser'; import dataVerificationCtrl from './dataVerificationCtrl'; import { getSheetIndex, getRangetxt } from '../methods/get'; import Store from '../store'; import locale from '../locale/locale'; //公式函数 选区实体框 function seletedHighlistByindex(id, r1, r2, c1, c2) { let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; let col = Store.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1]; $('#' + id).css({ "left": col_pre, "width": col - col_pre - 1, "top": row_pre, "height": row - row_pre - 1 }); } //Set selection highlight function selectHightlightShow(isRestore=false) { $("#luckysheet-cell-selected-boxs").show(); $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").siblings(".luckysheet-cell-selected").remove(); if(Store.luckysheet_select_save.length > 0){ for(let i = 0; i < Store.luckysheet_select_save.length; i++){ let r1 = Store.luckysheet_select_save[i].row[0], r2 = Store.luckysheet_select_save[i].row[1]; let c1 = Store.luckysheet_select_save[i].column[0], c2 = Store.luckysheet_select_save[i].column[1]; let rf, cf; if(Store.luckysheet_select_save[i].row_focus == null){ rf = r1; } else{ rf = Store.luckysheet_select_save[i].row_focus; } if(Store.luckysheet_select_save[i].column_focus == null){ cf = c1; } else{ cf = Store.luckysheet_select_save[i].column_focus; } let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; let col = Store.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1]; let row_f = Store.visibledatarow[rf], row_pre_f = rf - 1 == -1 ? 0 : Store.visibledatarow[rf - 1]; let col_f = Store.visibledatacolumn[cf], col_pre_f = cf - 1 == -1 ? 0 : Store.visibledatacolumn[cf - 1]; let margeset = menuButton.mergeborer(Store.flowdata, rf, cf); if(!!margeset){ row_f = margeset.row[1]; row_pre_f = margeset.row[0]; col_f = margeset.column[1]; col_pre_f = margeset.column[0]; } Store.luckysheet_select_save[i]["row"] = [r1, r2]; Store.luckysheet_select_save[i]["column"] = [c1, c2]; Store.luckysheet_select_save[i]["row_focus"] = rf; Store.luckysheet_select_save[i]["column_focus"] = cf; Store.luckysheet_select_save[i]["left"] = col_pre_f; Store.luckysheet_select_save[i]["width"] = col_f - col_pre_f - 1; Store.luckysheet_select_save[i]["top"] = row_pre_f; Store.luckysheet_select_save[i]["height"] = row_f - row_pre_f - 1; if(isRestore){ Store.luckysheet_select_save[i]["left_move"] = col_pre_f; Store.luckysheet_select_save[i]["width_move"] = col_f - col_pre_f - 1; Store.luckysheet_select_save[i]["top_move"] = row_pre_f; Store.luckysheet_select_save[i]["height_move"] = row_f - row_pre_f - 1; } else{ Store.luckysheet_select_save[i]["left_move"] = col_pre; Store.luckysheet_select_save[i]["width_move"] = col - col_pre - 1; Store.luckysheet_select_save[i]["top_move"] = row_pre; Store.luckysheet_select_save[i]["height_move"] = row - row_pre - 1; } if(i == 0){ if(Store.luckysheet_select_save.length == 1){ if(browser.mobilecheck()){//移动端 $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({ "left": Store.luckysheet_select_save[i]["left_move"], "width": Store.luckysheet_select_save[i]["width_move"], "top": Store.luckysheet_select_save[i]["top_move"], "height": Store.luckysheet_select_save[i]["height_move"], "display": "block", "border": "1px solid #0188fb" }) .find(".luckysheet-cs-draghandle") .css("display", "block") .end() .find(".luckysheet-cs-fillhandle") .css("display", "none") .end() .find(".luckysheet-cs-touchhandle") .css("display", "block"); } else{ $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({ "left": Store.luckysheet_select_save[i]["left_move"], "width": Store.luckysheet_select_save[i]["width_move"], "top": Store.luckysheet_select_save[i]["top_move"], "height": Store.luckysheet_select_save[i]["height_move"], "display": "block", "border": "1px solid #0188fb" }) .find(".luckysheet-cs-draghandle") .css("display", "block") .end() .find(".luckysheet-cs-fillhandle") .css("display", "block") .end() .find(".luckysheet-cs-touchhandle") .css("display", "none"); } } else{ $("#luckysheet-cell-selected-boxs #luckysheet-cell-selected").css({ "left": Store.luckysheet_select_save[i]["left_move"], "width": Store.luckysheet_select_save[i]["width_move"], "top": Store.luckysheet_select_save[i]["top_move"], "height": Store.luckysheet_select_save[i]["height_move"], "display": "block", "border": "1px solid rgba(1, 136, 251, 0.15)" }) .find(".luckysheet-cs-draghandle") .css("display", "none") .end() .find(".luckysheet-cs-fillhandle") .css("display", "none"); } } else{ $("#luckysheet-cell-selected-boxs").append('
'); } if(i == Store.luckysheet_select_save.length - 1){ //focus 取选区数组最后一个 $("#luckysheet-cell-selected-focus").css({ "left": Store.luckysheet_select_save[i]["left"], "width": Store.luckysheet_select_save[i]["width"], "top": Store.luckysheet_select_save[i]["top"], "height": Store.luckysheet_select_save[i]["height"], "display": "block" }); //行列数 luckysheet_count_show( Store.luckysheet_select_save[i]["left_move"], Store.luckysheet_select_save[i]["top_move"], Store.luckysheet_select_save[i]["width_move"], Store.luckysheet_select_save[i]["height_move"], [r1, r2], [c1, c2] ); //左上角选择区域框 formula.fucntionboxshow(rf, cf); //focus单元格数据验证 dataVerificationCtrl.cellFocus(rf, cf); } } //行列标题栏 selectTitlesShow(Store.luckysheet_select_save,isRestore); //左上角范围显示 selectHelpboxFill(); //动态数组显示 if(Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1]){ dynamicArrayHightShow(Store.luckysheet_select_save[0].row[0], Store.luckysheet_select_save[0].column[0]); } } Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].luckysheet_select_save = Store.luckysheet_select_save; } //选区标题栏 function selectTitlesShow(rangeArr,isRestore=false) { let s = $.extend(true, [], rangeArr); let rowTitleMap = {}, columnTitleMap = {}; for(let i = 0; i < s.length; i++){ let r1 = s[i]["row"][0], r2 = s[i]["row"][1], c1 = s[i]["column"][0], c2 = s[i]["column"][1]; if(isRestore){ let margeset = menuButton.mergeborer(Store.flowdata, r1, c1); if(!!margeset){ r1 = margeset.row[2]; r2 = margeset.row[3]; c1 = margeset.column[2]; c2 = margeset.column[3]; } } //行、列标题栏 rowTitleMap = selectTitlesMap(rowTitleMap, r1, r2); columnTitleMap = selectTitlesMap(columnTitleMap, c1, c2); } //行标题 $("#luckysheet-rows-h-selected").empty(); let rowTitleRange = selectTitlesRange(rowTitleMap); for(let i = 0; i < rowTitleRange.length; i++){ let r1 = rowTitleRange[i][0], r2 = rowTitleRange[i][rowTitleRange[i].length - 1]; let row = rowLocationByIndex(r2)[1], row_pre = rowLocationByIndex(r1)[0]; $("#luckysheet-rows-h-selected").append(''); } //列标题 $("#luckysheet-cols-h-selected").empty(); let columnTitleRange = selectTitlesRange(columnTitleMap); for(let j = 0; j < columnTitleRange.length; j++){ let c1 = columnTitleRange[j][0], c2 = columnTitleRange[j][columnTitleRange[j].length - 1]; let col = colLocationByIndex(c2)[1], col_pre = colLocationByIndex(c1)[0]; $("#luckysheet-cols-h-selected").append(''); } } function selectTitlesMap(rangeMap, range1, range2) { let map = $.extend(true, {}, rangeMap); for(let i = range1; i <= range2; i++){ if(i in map){ continue; } map[i] = 0; } return map; } function selectTitlesRange(map) { let mapArr = []; for(let i in map){ mapArr.push(i); } mapArr.sort(function(a, b){ return a - b; }); let rangeArr = []; let item = []; if(mapArr.length > 1){ for(let j = 1; j < mapArr.length; j++){ if(mapArr[j] - mapArr[j - 1] == 1){ item.push(mapArr[j - 1]); if(j == mapArr.length - 1){ item.push(mapArr[j]); rangeArr.push(item); } } else{ if(j == 1){ if(j == mapArr.length - 1){ item.push(mapArr[j - 1]); rangeArr.push(item); rangeArr.push([mapArr[j]]); } else{ rangeArr.push(mapArr[0]); } } else if(j == mapArr.length - 1){ item.push(mapArr[j - 1]); rangeArr.push(item); rangeArr.push([mapArr[j]]); } else{ item.push(mapArr[j - 1]); rangeArr.push(item); item = []; } } } } else{ rangeArr.push([mapArr[0]]); } return rangeArr; } //选区是否重叠 function selectIsOverlap(range) { if(range == null){ range = Store.luckysheet_select_save; } let overlap = false; let map = {}; for(let s = 0; s < range.length; s++){ let str_r = range[s].row[0], end_r = range[s].row[1]; let str_c = range[s].column[0], end_c = range[s].column[1]; for(let r = str_r; r <= end_r; r++){ for(let c = str_c; c <= end_c; c++){ if((r + "_" + c) in map){ overlap = true; break; } else{ map[r + "_" + c] = 0; } } } } return overlap; } //复制选区虚线框 function selectionCopyShow(range) { $("#luckysheet-selection-copy").empty(); if(range == null){ range = Store.luckysheet_selection_range; } if(range.length > 0){ for(let s = 0; s < range.length; s++){ let r1 = range[s].row[0], r2 = range[s].row[1]; let c1 = range[s].column[0], c2 = range[s].column[1]; let row = Store.visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : Store.visibledatarow[r1 - 1]; let col = Store.visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : Store.visibledatacolumn[c1 - 1]; let copyDomHtml = '