import { replaceHtml } from '../utils/util'; import { modelHTML } from './constant'; import { selectHightlightShow } from './select'; import tooltip from '../global/tooltip'; import editor from '../global/editor'; import { setcellvalue } from '../global/setdata'; import { getcellvalue } from '../global/getdata'; import { jfrefreshgrid } from '../global/refresh'; import Store from '../store'; import locale from '../locale/locale'; //分列 const luckysheetSplitColumn = { createDialog: function(){ let _this = this; const _locale = locale(); const locale_splitText = _locale.splitText; const locale_punctuation = _locale.punctuation; const locale_button = _locale.button; $("#luckysheet-modal-dialog-mask").show(); $("#luckysheet-splitColumn-dialog").remove(); let content = '
' + '
'+locale_splitText.splitDelimiters+'
' + '
' + '
' + '' + '' + '
' + '
' + '' + '' + '
' + '
' + '' + '' + '
' + '
' + '' + '' + '
' + '
' + '' + '' + '' + '
' + '
' + '
' + '' + '' + '
' + '
'+ locale_splitText.splitDataPreview +'
' + '
' + '
' + '
'; $("body").append(replaceHtml(modelHTML, { "id": "luckysheet-splitColumn-dialog", "addclass": "luckysheet-splitColumn-dialog", "title": locale_splitText.splitTextTitle, "content": content, "botton": '', "style": "z-index:100003" })); let $t = $("#luckysheet-splitColumn-dialog").find(".luckysheet-modal-dialog-content").css("min-width", 400).end(), myh = $t.outerHeight(), myw = $t.outerWidth(); let winw = $(window).width(), winh = $(window).height(); let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop(); $("#luckysheet-splitColumn-dialog").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3 }).show(); let dataArr = _this.getDataArr(); _this.dataPreview(dataArr); }, init: function(){ let _this = this; const _locale = locale(); const locale_splitText = _locale.splitText; //数据预览 $(document).off("change.SPCinpcheckbox").on("change.SPCcheckbox", "#luckysheet-splitColumn-dialog .box input[type='checkbox']", function(){ let regStr = _this.getRegStr(); let dataArr = _this.getDataArr(regStr); _this.dataPreview(dataArr); }); $(document).off("keyup.SPCinptext").on("keyup.SPCinptext", "#luckysheet-splitColumn-dialog .box input[type='text']", function(){ if($(this).siblings("input[type='checkbox']").is(":checked")){ let regStr = _this.getRegStr(); let dataArr = _this.getDataArr(regStr); _this.dataPreview(dataArr); } }) //确定按钮 $(document).off("click.SPCconfirm").on("click.SPCconfirm", "#luckysheet-splitColumn-dialog #luckysheet-splitColumn-dialog-confirm", function(){ $("#luckysheet-modal-dialog-mask").hide(); $("#luckysheet-splitColumn-dialog").hide(); let regStr = _this.getRegStr(); let dataArr = _this.getDataArr(regStr); let r = Store.luckysheet_select_save[0].row[0]; let c = Store.luckysheet_select_save[0].column[0]; if(dataArr[0].length == 1){ return; } let dataCover = false; for(let i = 0; i < dataArr.length; i++){ for(let j = 1; j < dataArr[0].length; j++){ let cell = Store.flowdata[r + i][c + j]; if(cell != null && cell.v != null){ dataCover = true; break; } } } if(dataCover){ let func1 = function(){ _this.update(r, c, dataArr); } tooltip.confirm("", locale_splitText.splitConfirmToExe, func1); } else{ _this.update(r, c, dataArr); } }); }, update: function(r, c, dataArr){ let d = editor.deepCopyFlowData(Store.flowdata); for(let i = 0; i < dataArr.length; i++){ for(let j = 0; j < dataArr[0].length; j++){ let v = dataArr[i][j]; setcellvalue(r + i, c + j, d, v); } } let st_r = Store.luckysheet_select_save[0].row[0], st_c = Store.luckysheet_select_save[0].column[0]; let range = [{ "row": [st_r, st_r + dataArr.length - 1], "column": [st_c, st_c + dataArr[0].length - 1] }] jfrefreshgrid(d, range); selectHightlightShow(); }, dataPreview: function(dataArr){ $("#luckysheet-splitColumn-dialog #splitColumnData").empty(); let trHtml = ''; for(let i = 0; i < dataArr.length; i++){ let tdHtml = ''; for(let j = 0; j < dataArr[0].length; j++){ tdHtml += '' + dataArr[i][j] + ''; } trHtml += '' + tdHtml + ''; } let tableHtml = '' + trHtml + '
'; $("#luckysheet-splitColumn-dialog #splitColumnData").append(tableHtml); }, getRegStr: function(){ let regStr = '', mark = 0; $("#luckysheet-splitColumn-dialog .box input[type='checkbox']:checked").each(function(i, e){ let $id = $(e).attr("id"); if($id == "splitColumn_type_01"){ //Tab键 regStr += "\\t"; mark++; } else if($id == "splitColumn_type_02"){ //分号 if(mark > 0){ regStr += "|"; } regStr += ";"; mark++; } else if($id == "splitColumn_type_03"){ //逗号 if(mark > 0){ regStr += "|"; } regStr += ","; mark++; } else if($id == "splitColumn_type_04"){ //空格 if(mark > 0){ regStr += "|"; } regStr += "\\s"; mark++; } else if($id == "splitColumn_type_05"){ //其它 let txt = $(e).siblings("input[type='text']").val().trim(); if(txt != ""){ if(mark > 0){ regStr += "|"; } regStr += txt; } } else if($id == "splitColumn_type_06"){ //连续分隔符号视为单个处理 regStr = "[" + regStr + "]+"; } }) return regStr; }, getDataArr: function(regStr){ let _this = this; let arr = []; let r1 = Store.luckysheet_select_save[0].row[0]; let r2 = Store.luckysheet_select_save[0].row[1]; let c = Store.luckysheet_select_save[0].column[0]; if(regStr != null && regStr != ""){ let reg = new RegExp(regStr, "g"); let dataArr = []; for(let r = r1; r <= r2; r++){ let rowArr = []; let cell = Store.flowdata[r][c]; let value; if(cell != null && cell["m"] != null){ value = cell["m"]; } else{ value = getcellvalue(r, c, Store.flowdata); } rowArr = value.toString().split(reg); dataArr.push(rowArr); } let rlen = dataArr.length; let clen = 0; for(let i = 0; i < rlen; i++){ if(dataArr[i].length > clen){ clen = dataArr[i].length; } } arr = _this.getNullData(rlen, clen); for(let i = 0; i < arr.length; i++){ for(let j = 0; j < arr[0].length; j++){ if(dataArr[i][j] != null){ arr[i][j] = dataArr[i][j]; } } } } else{ for(let r = r1; r <= r2; r++){ let rowArr = []; let cell = Store.flowdata[r][c]; let value; if(cell != null && cell["m"] != null){ value = cell["m"]; } else{ value = getcellvalue(r, c, Store.flowdata); } rowArr.push(value); arr.push(rowArr); } } return arr; }, getNullData: function(rlen, clen){ let arr = []; for(let r = 0; r < rlen; r++){ let rowArr = []; for(let c = 0; c < clen; c++){ rowArr.push(""); } arr.push(rowArr); } return arr; } } export default luckysheetSplitColumn;