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

323 lines
11 KiB

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 = '<div class="box">' +
'<div class="boxTitle">'+locale_splitText.splitDelimiters+'</div>' +
'<div class="boxMain">' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_01" type="checkbox"/>' +
'<label for="splitColumn_type_01">'+ locale_punctuation.tab +'</label>' +
'</div>' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_02" type="checkbox"/>' +
'<label for="splitColumn_type_02">'+ locale_punctuation.semicolon +'</label>' +
'</div>' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_03" type="checkbox"/>' +
'<label for="splitColumn_type_03">'+ locale_punctuation.comma +'</label>' +
'</div>' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_04" type="checkbox"/>' +
'<label for="splitColumn_type_04">'+ locale_punctuation.space +'</label>' +
'</div>' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_05" type="checkbox"/>' +
'<label for="splitColumn_type_05">'+ locale_splitText.splitOther +'</label>' +
'<input type="text" class="formulaInputFocus" maxlength="1"/>' +
'</div>' +
'</div>' +
'<div style="height: 22px;line-height: 22px;">' +
'<input id="splitColumn_type_06" type="checkbox"/>' +
'<label for="splitColumn_type_06">'+ locale_splitText.splitContinueSymbol +'</label>' +
'</div>' +
'<div class="boxTitle" style="margin-top: 10px;">'+ locale_splitText.splitDataPreview +'</div>' +
'<div class="boxMain" id="splitColumnData">' +
'</div>' +
'</div>';
$("body").first().append(replaceHtml(modelHTML, {
"id": "luckysheet-splitColumn-dialog",
"addclass": "luckysheet-splitColumn-dialog",
"title": locale_splitText.splitTextTitle,
"content": content,
"botton": '<button id="luckysheet-splitColumn-dialog-confirm" class="btn btn-primary">'+ locale_button.confirm +'</button><button class="btn btn-default luckysheet-model-close-btn">'+ locale_button.cancel +'</button>',
"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 += '<td>' + dataArr[i][j] + '</td>';
}
trHtml += '<tr>' + tdHtml + '</tr>';
}
let tableHtml = '<table>' + trHtml + '</table>';
$("#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);
}
if(value == null){
value = "";
}
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);
}
if(value == null){
value = "";
}
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;