From 0cb1ec23c26e2393a14475d982349a310587e7a7 Mon Sep 17 00:00:00 2001 From: wpxp123456 <2677556700@qq.com> Date: Wed, 23 Sep 2020 17:31:06 +0800 Subject: [PATCH] fix(bug): bug bug --- src/controllers/freezen.js | 277 +++++++++++++++---------------- src/controllers/searchReplace.js | 10 ++ src/global/api.js | 150 +++++++++++++++-- src/locale/en.js | 1 + src/locale/zh.js | 1 + 5 files changed, 281 insertions(+), 158 deletions(-) diff --git a/src/controllers/freezen.js b/src/controllers/freezen.js index 155dd85..c5427a7 100644 --- a/src/controllers/freezen.js +++ b/src/controllers/freezen.js @@ -1563,186 +1563,183 @@ const luckysheetFreezen = { Store.luckysheetfile[order]["frozen"] = frozen[operate]; }, frozenTofreezen: function() { - // get frozen type - const frozen = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["frozen"]; + let file = Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]; + const frozen = file["frozen"]; if(frozen == null){ return; } - - let freezen = null; - // transform to freezen - if(frozen.type === 'row'){ - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if(row_st == -1){ - row_st = 0; - } - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - - freezen = { - horizontal:{ - freezenhorizontaldata: freezenhorizontaldata, - top: top - } - } - - } - else if(frozen.type === 'column'){ - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + if(file["freezen"] == null){ + let freezen = null; - freezen = { - vertical:{ - freezenverticaldata: freezenverticaldata, - left: left + // transform to freezen + if(frozen.type === 'row'){ + let scrollTop = 0; + let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if(row_st == -1){ + row_st = 0; + } + let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + + freezen = { + horizontal:{ + freezenhorizontaldata: freezenhorizontaldata, + top: top + } } - } - } - else if(frozen.type === 'both'){ - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if(row_st == -1){ - row_st = 0; - } - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - - freezen = { } - - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; - - freezen = { - horizontal:{ - freezenhorizontaldata: freezenhorizontaldata, - top: top - }, - vertical:{ - freezenverticaldata: freezenverticaldata, - left: left + else if(frozen.type === 'column'){ + let scrollLeft = 0; + let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(col_st == -1){ + col_st = 0; + } + let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + + freezen = { + vertical:{ + freezenverticaldata: freezenverticaldata, + left: left + } } } + else if(frozen.type === 'both'){ + let scrollTop = 0; + let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if(row_st == -1){ + row_st = 0; + } + let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + + let scrollLeft = 0; + let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(col_st == -1){ + col_st = 0; + } + let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + + freezen = { + horizontal:{ + freezenhorizontaldata: freezenhorizontaldata, + top: top + }, + vertical:{ + freezenverticaldata: freezenverticaldata, + left: left + } + } - } - else if(frozen.type === 'rangeRow'){ - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - - let row_focus = frozen.range["row_focus"]; - - if(row_focus > row_st){ - row_st = row_focus; - } - - if(row_st == -1){ - row_st = 0; } + else if(frozen.type === 'rangeRow'){ + let scrollTop = 0; + let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + let row_focus = frozen.range["row_focus"]; - freezen = { - horizontal:{ - freezenhorizontaldata: freezenhorizontaldata, - top: top + if(row_focus > row_st){ + row_st = row_focus; + } + + if(row_st == -1){ + row_st = 0; } - } - } - else if(frozen.type === 'rangeColumn'){ - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - let column_focus = frozen.range["column_focus"]; + freezen = { + horizontal:{ + freezenhorizontaldata: freezenhorizontaldata, + top: top + } + } - if(column_focus > col_st){ - col_st = column_focus; } + else if(frozen.type === 'rangeColumn'){ + let scrollLeft = 0; + let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } + let column_focus = frozen.range["column_focus"]; - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + if(column_focus > col_st){ + col_st = column_focus; + } - freezen = { - vertical:{ - freezenverticaldata: freezenverticaldata, - left: left + if(col_st == -1){ + col_st = 0; } - } - } - else if(frozen.type === 'rangeBoth'){ - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; - let row_focus = frozen.range["row_focus"]; + freezen = { + vertical:{ + freezenverticaldata: freezenverticaldata, + left: left + } + } - if(row_focus > row_st){ - row_st = row_focus; - } - - if(row_st == -1){ - row_st = 0; } + else if(frozen.type === 'rangeBoth'){ + let scrollTop = 0; + let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + let row_focus = frozen.range["row_focus"]; - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(row_focus > row_st){ + row_st = row_focus; + } + + if(row_st == -1){ + row_st = 0; + } - let column_focus = frozen.range["column_focus"]; + let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columeHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - if(column_focus > col_st){ - col_st = column_focus; - } + let scrollLeft = 0; + let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } + let column_focus = frozen.range["column_focus"]; + + if(column_focus > col_st){ + col_st = column_focus; + } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + if(col_st == -1){ + col_st = 0; + } + + let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; - freezen = { - horizontal:{ - freezenhorizontaldata: freezenhorizontaldata, - top: top - }, - vertical:{ - freezenverticaldata: freezenverticaldata, - left: left + freezen = { + horizontal:{ + freezenhorizontaldata: freezenhorizontaldata, + top: top + }, + vertical:{ + freezenverticaldata: freezenverticaldata, + left: left + } } } - } - else if(frozen.type === 'cancel'){ - freezen = { - horizontal: null, - vertical: null + else if(frozen.type === 'cancel'){ + freezen = { + horizontal: null, + vertical: null + } } - } - - Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)]["freezen"] = freezen; + file["freezen"] = freezen; + } } } diff --git a/src/controllers/searchReplace.js b/src/controllers/searchReplace.js index 9d64f11..666d43e 100644 --- a/src/controllers/searchReplace.js +++ b/src/controllers/searchReplace.js @@ -476,6 +476,11 @@ const luckysheetSearchReplace = { const _locale = locale(); const locale_findAndReplace = _locale.findAndReplace; + if(!Store.allowEdit){ + tooltip.info(locale_findAndReplace.modeTip, ""); + return; + } + let searchText = $("#luckysheet-search-replace #searchInput input").val(); if(searchText == "" || searchText == null){ if(isEditMode()){ @@ -628,6 +633,11 @@ const luckysheetSearchReplace = { const _locale = locale(); const locale_findAndReplace = _locale.findAndReplace; + if(!Store.allowEdit){ + tooltip.info(locale_findAndReplace.modeTip, ""); + return; + } + let searchText = $("#luckysheet-search-replace #searchInput input").val(); if(searchText == "" || searchText == null){ if(isEditMode()){ diff --git a/src/global/api.js b/src/global/api.js index 516eb48..894b849 100644 --- a/src/global/api.js +++ b/src/global/api.js @@ -1,32 +1,36 @@ import Store from "../store"; -import { getObjType, chatatABC } from "../utils/util"; -import formula from './formula'; +import { replaceHtml, getObjType, chatatABC } from "../utils/util"; import { getSheetIndex, getluckysheet_select_save } from "../methods/get"; -import { isRealNull, valueIsError, isRealNum, isEditMode, hasPartMC } from "./validate"; -import { genarate, update } from './format'; -import server from "../controllers/server"; -import luckysheetConfigsetting from "../controllers/luckysheetConfigsetting"; -import { setAccuracy } from "./setdata"; -import func_methods from "./func_methods"; -import luckysheetFreezen from "../controllers/freezen"; -import { luckysheetrefreshgrid, jfrefreshgrid, jfrefreshgrid_rhcw } from "./refresh"; import locale from "../locale/locale"; + +import formula from './formula'; +import func_methods from "./func_methods"; import tooltip from "./tooltip"; -import { luckysheet_searcharray } from "../controllers/sheetSearch"; -import { selectIsOverlap } from '../controllers/select'; -import { luckysheetDeleteCell, luckysheetextendtable, luckysheetdeletetable } from "./extend"; -import { getdatabyselection, getcellvalue } from "./getdata"; -import selection from "../controllers/selection"; import json from "./json"; -import { orderbydata } from "./sort"; import editor from "./editor"; -import { rowlenByRange } from "./getRowlen"; import luckysheetformula from './formula'; +import cleargridelement from './cleargridelement'; +import { genarate, update } from './format'; +import { setAccuracy } from "./setdata"; +import { orderbydata } from "./sort"; +import { rowlenByRange } from "./getRowlen"; +import { getdatabyselection, getcellvalue } from "./getdata"; +import { luckysheetrefreshgrid, jfrefreshgrid, jfrefreshgrid_rhcw } from "./refresh"; +import { luckysheetDeleteCell, luckysheetextendtable, luckysheetdeletetable } from "./extend"; +import { isRealNull, valueIsError, isRealNum, isEditMode, hasPartMC } from "./validate"; + +import server from "../controllers/server"; +import selection from "../controllers/selection"; +import luckysheetConfigsetting from "../controllers/luckysheetConfigsetting"; +import luckysheetFreezen from "../controllers/freezen"; import luckysheetsizeauto from '../controllers/resize'; +import sheetmanage from '../controllers/sheetmanage'; +import { luckysheet_searcharray } from "../controllers/sheetSearch"; +import { selectIsOverlap } from '../controllers/select'; +import { sheetHTML } from '../controllers/constant'; const IDCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i; - /** * 获取单元格的值 * @param {Number} row 单元格所在行数;从0开始的整数,0表示第一行 @@ -2691,6 +2695,116 @@ export function matrixCalculation(type, number, options = {}) { } +/** + * 新增一个sheet,返回新增的工作表对象 + * @param {Object} options 可选参数 + * @param {Object} options.sheetObject 新增的工作表的数据;默认值为空对象 + * @param {Number} options.order 新增的工作表索引;默认值为最后一个索引位置 + * @param {Function} options.success 操作结束的回调函数 + */ +export function setSheetAdd(options = {}) { + let lastOrder = Store.luckysheetfile.length - 1; + let { + sheetObject = {}, + order = lastOrder, + success + } = {...options} + + if(!isRealNum(order)){ + return tooltip.info("Parameter is not a table index", ""); + } + + order = Number(order); + + let index = sheetmanage.generateRandomSheetIndex(); + + let sheetname = sheetmanage.generateRandomSheetName(Store.luckysheetfile, false); + if(!!sheetObject.name){ + let sameName = false; + + for(let i = 0; i < Store.luckysheetfile.length; i++){ + if(Store.luckysheetfile[i].name == sheetObject.name){ + sameName = true; + break; + } + } + + if(!sameName){ + sheetname = sheetObject.name; + } + } + + $("#luckysheet-sheet-container-c").append(replaceHtml(sheetHTML, { + "index": index, + "active": "", + "name": sheetname, + "style": "", + "colorset": "" + })); + + let sheetconfig = { + "name": "", + "color": "", + "status": "0", + "order": "", + "index": "", + "celldata": [], + "row": Store.defaultrowNum, + "column": Store.defaultcolumnNum, + "config": {}, + "pivotTable": null, + "isPivotTable": false + }; + sheetconfig = $.extend(true, sheetconfig, sheetObject); + + sheetconfig.index = index; + sheetconfig.name = sheetname; + sheetconfig.order = order; + + if(order <= 0){ + let beforeIndex = Store.luckysheetfile[0].index; + let beforeObj = $("#luckysheet-sheets-item" + beforeIndex); + $("#luckysheet-sheets-item" + index).insertBefore(beforeObj); + + Store.luckysheetfile.splice(0, 0, sheetconfig); + } + else{ + if(order > Store.luckysheetfile.length){ + order = Store.luckysheetfile.length; + } + + let afterIndex = Store.luckysheetfile[order - 1].index; + let afterObj = $("#luckysheet-sheets-item" + afterIndex); + $("#luckysheet-sheets-item" + index).insertAfter(afterObj); + + Store.luckysheetfile.splice(order, 0, sheetconfig); + } + + Store.luckysheetfile.forEach((item, i, arr) => { + arr[i].order = i; + }) + + $("#luckysheet-sheet-area div.luckysheet-sheets-item").removeClass("luckysheet-sheets-item-active"); + $("#luckysheet-sheets-item" + index).addClass("luckysheet-sheets-item-active"); + $("#luckysheet-cell-main").append('
'); + cleargridelement(true); + + server.saveParam("sha", null, $.extend(true, {}, sheetconfig)); + + if (Store.clearjfundo) { + Store.jfundo = []; + let redo = {}; + redo["type"] = "addSheet"; + redo["sheetconfig"] = $.extend(true, {}, sheetconfig); + redo["index"] = index; + redo["currentSheetIndex"] = Store.currentSheetIndex; + Store.jfredo.push(redo); + } + + sheetmanage.changeSheetExec(index, false, true); +} + + /** * 根据窗口大小自动resize画布 * diff --git a/src/locale/en.js b/src/locale/en.js index fab45f9..4fedca6 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -639,6 +639,7 @@ export default { findBtn:"Find next", noFindTip:"The content was not found", + modeTip:"This operation is not available in this mode", searchTargetSheet:"Sheet", searchTargetCell:"Cell", diff --git a/src/locale/zh.js b/src/locale/zh.js index 0e1be53..ebf9a9b 100644 --- a/src/locale/zh.js +++ b/src/locale/zh.js @@ -655,6 +655,7 @@ export default { findBtn:"查找下一个", noFindTip:"没有查找到该内容", + modeTip:"该模式下不可进行此操作", searchTargetSheet:"工作表", searchTargetCell:"单元格",