diff --git a/src/controllers/handler.js b/src/controllers/handler.js index 770df04..c6bb6b6 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -45,7 +45,7 @@ import { mouseposition } from '../global/location'; import { rowlenByRange } from '../global/getRowlen'; -import { isRealNull, hasPartMC, isEditMode } from '../global/validate'; +import { isRealNull, hasPartMC, isEditMode, checkIsAllowEdit } from '../global/validate'; import { countfunc } from '../global/count'; import browser from '../global/browser'; import formula from '../global/formula'; @@ -4863,6 +4863,11 @@ export default function luckysheetHandler() { //菜单栏 插入图片按钮 $("#luckysheet-insertImg-btn-title").click(function () { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } if(!checkProtectionAuthorityNormal(Store.currentSheetIndex, "editObjects")){ return; } @@ -4888,6 +4893,11 @@ export default function luckysheetHandler() { //菜单栏 插入链接按钮 $("#luckysheet-insertLink-btn-title").click(function () { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } if(!checkProtectionNotEnable(Store.currentSheetIndex)){ return; } diff --git a/src/controllers/hyperlinkCtrl.js b/src/controllers/hyperlinkCtrl.js index d02a29f..906d997 100644 --- a/src/controllers/hyperlinkCtrl.js +++ b/src/controllers/hyperlinkCtrl.js @@ -353,7 +353,7 @@ const hyperlinkCtrl = { //共享编辑模式 if(server.allowUpdate){ server.saveParam("all", sheetIndex, currentHyperlink, { "k": "hyperlink" }); - server.historyParam(Store.flowdata, sheetIndex, range); + server.historyParam(Store.flowdata, sheetIndex, range[0]); } setTimeout(function () { diff --git a/src/controllers/keyboard.js b/src/controllers/keyboard.js index ce2ac9d..496761a 100644 --- a/src/controllers/keyboard.js +++ b/src/controllers/keyboard.js @@ -587,7 +587,7 @@ export function keyboardInitial(){ $("#luckysheet-icon-italic").click(); } else if (kcode == 86) {//Ctrl + V 粘贴 - if(isEditMode()){//此模式下禁用粘贴 + if (isEditMode() || Store.allowEdit === false){//此模式下禁用粘贴 return; } diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js index 06566f3..7c8a089 100644 --- a/src/controllers/menuButton.js +++ b/src/controllers/menuButton.js @@ -16,7 +16,7 @@ import {luckysheetupdateCell} from './updateCell'; import insertFormula from './insertFormula'; import sheetmanage from './sheetmanage'; import luckysheetPostil from './postil'; -import { isRealNum, isRealNull, isEditMode, hasPartMC } from '../global/validate'; +import { isRealNum, isRealNull, isEditMode, hasPartMC, checkIsAllowEdit } from '../global/validate'; import tooltip from '../global/tooltip'; import editor from '../global/editor'; import { genarate, update, is_date } from '../global/format'; @@ -119,6 +119,11 @@ const menuButton = { //格式刷 $("#luckysheet-icon-paintformat").click(function(e){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } e.stopPropagation(); let _locale = locale(); let locale_paint = _locale.paint; @@ -174,6 +179,11 @@ const menuButton = { _this.luckysheetPaintSingle = true; }); $("#luckysheet-icon-paintformat").dblclick(function(){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } let _locale = locale(); let locale_paint = _locale.paint; if(Store.luckysheet_select_save == null || Store.luckysheet_select_save.length == 0){ @@ -779,6 +789,11 @@ const menuButton = { //交替颜色 $menuButton.find(".luckysheet-icon-alternateformat").click(function(){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } $menuButton.hide(); luckysheetContainerFocus(); @@ -927,7 +942,11 @@ const menuButton = { //边框设置 $("#luckysheet-icon-border-all").click(function(){ - + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } if(!checkProtectionFormatCells(Store.currentSheetIndex)){ return; } @@ -1085,6 +1104,11 @@ const menuButton = { // border choose menu $menuButton.find(".luckysheet-cols-menuitem").click(function(){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } $menuButton.hide(); luckysheetContainerFocus(); @@ -1226,7 +1250,6 @@ const menuButton = { //合并单元格 $("#luckysheet-icon-merge-button").click(function(){ - if(!checkProtectionNotEnable(Store.currentSheetIndex)){ return; } @@ -1292,7 +1315,7 @@ const menuButton = { let menu = replaceHtml(_this.menu, { "id": "merge-menu", "item": itemset, "subclass": "", "sub": "" }); $("body").append(menu); - $menuButton = $("#"+menuButtonId).width(110); + $menuButton = $("#"+menuButtonId); _this.focus($menuButton); $menuButton.find(".luckysheet-cols-menuitem").click(function(){ @@ -1739,9 +1762,14 @@ const menuButton = { if(row_st == -1){ row_st = 0; } - - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + let top,freezenhorizontaldata; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + } else { + top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + } luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); if (luckysheetFreezen.freezenverticaldata != null) { @@ -1783,9 +1811,14 @@ const menuButton = { 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]; + let left,freezenverticaldata; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + } else { + left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + } luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); if (luckysheetFreezen.freezenhorizontaldata != null) { @@ -1830,10 +1863,16 @@ const menuButton = { if(row_st == -1){ row_st = 0; } - - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); + let top,freezenhorizontaldata; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); + } else { + top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); + } luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); @@ -1849,9 +1888,14 @@ const menuButton = { 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]; + let left,freezenverticaldata; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + } else { + left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + } luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); @@ -3128,7 +3172,9 @@ const menuButton = { return; } - if(Store.allowEdit===false){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); return; } @@ -3175,6 +3221,11 @@ const menuButton = { jfrefreshgrid(d, Store.luckysheet_select_save, allParam, false); }, updateFormat_mc: function(d, foucsStatus){ + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } let cfg = $.extend(true, {}, Store.config); if(cfg["merge"] == null){ cfg["merge"] = {}; diff --git a/src/controllers/protection.js b/src/controllers/protection.js index f0b6779..b987e29 100644 --- a/src/controllers/protection.js +++ b/src/controllers/protection.js @@ -555,7 +555,7 @@ function initialProtectionRIghtBar(file){
- +
diff --git a/src/controllers/rowColumnOperation.js b/src/controllers/rowColumnOperation.js index d881ae4..59c4af5 100644 --- a/src/controllers/rowColumnOperation.js +++ b/src/controllers/rowColumnOperation.js @@ -21,7 +21,7 @@ import { colLocationByIndex, mouseposition } from '../global/location'; -import { isRealNull, isRealNum, hasPartMC, isEditMode } from '../global/validate'; +import { isRealNull, isRealNum, hasPartMC, isEditMode, checkIsAllowEdit } from '../global/validate'; import { countfunc } from '../global/count'; import formula from '../global/formula'; import { luckysheetextendtable, luckysheetdeletetable, luckysheetDeleteCell } from '../global/extend'; @@ -381,6 +381,10 @@ export function rowColumnOperationInitial(){ $("#luckysheet-rows-change-size").css("opacity", 0); }).mouseup(function (event) { if (event.which == 3) { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + return + } if(isEditMode()){ //非编辑模式下禁止右键功能框 return; } @@ -815,6 +819,10 @@ export function rowColumnOperationInitial(){ $("#luckysheet-cols-change-size").css("opacity", 0); }).mouseup(function (event) { if (event.which == 3) { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + return + } if(isEditMode()){ //非编辑模式下禁止右键功能框 return; } @@ -904,6 +912,10 @@ export function rowColumnOperationInitial(){ //表格行标题 改变行高按钮 $("#luckysheet-rows-change-size").mousedown(function (event) { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + return + } //有批注在编辑时 luckysheetPostil.removeActivePs(); @@ -948,6 +960,10 @@ export function rowColumnOperationInitial(){ //表格列标题 改变列宽按钮 $("#luckysheet-cols-change-size").mousedown(function (event) { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + return + } //有批注在编辑时 luckysheetPostil.removeActivePs(); @@ -996,6 +1012,11 @@ export function rowColumnOperationInitial(){ // 列标题的下拉箭头 $("#luckysheet-cols-menu-btn").click(function (event) { + // *如果禁止前台编辑,则中止下一步操作 + if (!checkIsAllowEdit()) { + tooltip.info("", locale().pivotTable.errorNotAllowEdit); + return + } let $menu = $("#luckysheet-rightclick-menu"); let offset = $(this).offset(); $("#luckysheet-cols-rows-shift").show(); diff --git a/src/controllers/server.js b/src/controllers/server.js index 29897e5..cf16ce9 100644 --- a/src/controllers/server.js +++ b/src/controllers/server.js @@ -255,7 +255,7 @@ const server = { if(flag) { Store.cooperativeEdit.changeCollaborationSize.forEach(val => { if(val.id == id) { - val.v = item.v[0] + val.v = item.v[0] || item.range[0] val.i = index } }) diff --git a/src/css/luckysheet-core.css b/src/css/luckysheet-core.css index de178ca..617ff50 100644 --- a/src/css/luckysheet-core.css +++ b/src/css/luckysheet-core.css @@ -7132,7 +7132,7 @@ fieldset[disabled] .btn-danger.focus { } #luckysheet-insertLink-dialog .box-item label{ display: inline-block; - width: 80px; + width: 90px; text-align: right; margin-right: 10px; } diff --git a/src/function/functionImplementation.js b/src/function/functionImplementation.js index f7b81f4..2ea9319 100644 --- a/src/function/functionImplementation.js +++ b/src/function/functionImplementation.js @@ -1,5 +1,5 @@ import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting'; -import { luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue } from './func'; +import { luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue, luckysheet_calcADPMM } from './func'; import { inverse } from './matrix_methods'; import { getSheetIndex, getluckysheetfile,getRangetxt } from '../methods/get'; import menuButton from '../controllers/menuButton'; diff --git a/src/global/extend.js b/src/global/extend.js index ad8f182..2a1ad12 100644 --- a/src/global/extend.js +++ b/src/global/extend.js @@ -55,7 +55,8 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { if(index < r){ merge_new[(r + value) + "_" + c] = { "r": r + value, "c": c, "rs": rs, "cs": cs }; } - else if(index == r){ + // *这里要判断一下rs是否等于1,因为如果这个合并单元格的行数只有一行时r = r+ rs-1,这种情况不应该进行单元格的加高 + else if (index == r && rs != 1) { if(direction == "lefttop"){ merge_new[(r + value) + "_" + c] = { "r": r + value, "c": c, "rs": rs, "cs": cs }; } @@ -68,7 +69,11 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { } else if(index == r + rs - 1){ if(direction == "lefttop"){ - merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs + value, "cs": cs }; + if(rs == 1){ + merge_new[(r + value) + "_" + c] = { "r": r + value, "c": c, "rs": rs, "cs": cs }; + } else { + merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs + value, "cs": cs }; + } } else{ merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs }; @@ -82,7 +87,7 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { if(index < c){ merge_new[r + "_" + (c + value)] = { "r": r, "c": c + value, "rs": rs, "cs": cs }; } - else if(index == c){ + else if(index == c && cs != 1){ if(direction == "lefttop"){ merge_new[r + "_" + (c + value)] = { "r": r, "c": c + value, "rs": rs, "cs": cs }; } @@ -95,7 +100,12 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { } else if(index == c + cs - 1){ if(direction == "lefttop"){ - merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs + value }; + // *这是要判断一下这个合并单元格的列宽是否=1,如果cs等于1的情况下,向左插入列,这个合并单元格会右移 + if(cs == 1){ + merge_new[r + "_" + (c + value)] = { "r": r, "c": c + value, "rs": rs, "cs": cs }; + } else { + merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs + value }; + } } else{ merge_new[r + "_" + c] = { "r": r, "c": c, "rs": rs, "cs": cs }; @@ -634,15 +644,12 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { cfg["rowhidden"] = rowhidden_new; } - //空行模板 - let row = [], - curRow = [...d][index] - for(let c = 0; c < d[0].length; c++){ - let cell = curRow[c], - templateCell = cell ? {...cell, v: '', m: ''} : Store.defaultCell; - delete templateCell.ps; - row.push(templateCell); + // *添加空行模板这里请保持为push null; + let row = []; + for (let c = 0; c < d[0].length; c++) { + row.push(null); } + var cellBorderConfig = []; //边框 if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){ @@ -808,15 +815,12 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { cfg["colhidden"] = colhidden_new; } - //空列模板 - let col = [], - curd= [...d]; - for(let r = 0; r < d.length; r++){ - let cell = curd[r][index], - templateCell = cell ? {...cell, v: '', m: ''} : Store.defaultCell; - delete templateCell.ps; - col.push(templateCell); + // *添加空列模板这里请保持为push null; + let col = []; + for (let r = 0; r < d.length; r++) { + col.push(null); } + var cellBorderConfig = []; //边框 if(cfg["borderInfo"] && cfg["borderInfo"].length > 0){ @@ -917,16 +921,18 @@ function luckysheetextendtable(type, index, value, direction, sheetIndex) { let row = d[r]; for(let i = 0; i < value; i++){ + // *这里不能是引用,不然添加多列时添加的都是同一个引用,修改一个cell会同步到多个 + const COLR = JSON.parse(JSON.stringify(col[r])) if(direction == "lefttop"){ if(index == 0){ - row.unshift(col[r]); + row.unshift(COLR); } else{ - row.splice(index, 0, col[r]); + row.splice(index, 0, COLR); } } else{ - row.splice((index + 1), 0, col[r]); + row.splice((index + 1), 0, COLR); } } } diff --git a/src/global/validate.js b/src/global/validate.js index ddcd559..adbb91f 100644 --- a/src/global/validate.js +++ b/src/global/validate.js @@ -76,6 +76,20 @@ function isEditMode() { } } +/** + * @description: 检查是否允许前台进行表格编辑 + * @param {*} + * @return {Boolean} true:允许编辑 fasle:不允许 + */ +function checkIsAllowEdit(){ + if (Store.allowEdit) { + return true; + } + else { + return false; + } +} + //范围是否只包含部分合并单元格 function hasPartMC(cfg, r1, r2, c1, c2) { let hasPartMC = false; @@ -200,6 +214,7 @@ export { valueIsError, hasChinaword, isEditMode, + checkIsAllowEdit, hasPartMC, checkWordByteLength } \ No newline at end of file