diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 947d7a5da15b1e000075ea6e4c49cf26978b19f9..8bc6f9b24a9e5615428837c1ed1655bdc9a9991d 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -629,14 +629,24 @@ struct Index { .backgroundColor('#70949292') .fontColor(Color.Black) .onClick(() => { - this.vTableController.setDiagonal(this.mergeCellParams[0], this.mergeCellParams[1]) + this.vTableController.setDiagonal( + Math.min(this.mergeCellParams[0], this.mergeCellParams[2]), + Math.min(this.mergeCellParams[1], this.mergeCellParams[3]), + Math.max(this.mergeCellParams[0], this.mergeCellParams[2]), + Math.max(this.mergeCellParams[1], this.mergeCellParams[3]) + ) }) Button('bbb') .borderRadius(0) .backgroundColor('#70949292') .fontColor(Color.Black) .onClick(() => { - this.vTableController.deleteDiagonal(this.mergeCellParams[0], this.mergeCellParams[1]) + this.vTableController.deleteDiagonal( + Math.min(this.mergeCellParams[0], this.mergeCellParams[2]), + Math.min(this.mergeCellParams[1], this.mergeCellParams[3]), + Math.max(this.mergeCellParams[0], this.mergeCellParams[2]), + Math.max(this.mergeCellParams[1], this.mergeCellParams[3]) + ) }) } } diff --git a/library/src/main/ets/util/VTableController.ets b/library/src/main/ets/util/VTableController.ets index 7c0aa1a9aaca9499b08c0bb103fe0d650eaac7d4..3122966f858800593e875c8bd6d69b7b086b0534 100644 --- a/library/src/main/ets/util/VTableController.ets +++ b/library/src/main/ets/util/VTableController.ets @@ -262,21 +262,21 @@ export class VTableController { }) } - setDiagonal(row: number, col: number) { + setDiagonal(startCol: number, startRow: number, endCol: number, endRow: number) { if (!this.checkInitialized()) { return; } - this.controller!.runJavaScript(`setDiagonal(${row},${col})`) + this.controller!.runJavaScript(`setDiagonal(${startCol},${startRow},${endCol},${endRow})`) .catch((error: Error) => { console.error("Error setDiagonal:", error); }) } - deleteDiagonal(row: number, col: number) { + deleteDiagonal(startCol: number, startRow: number, endCol: number, endRow: number) { if (!this.checkInitialized()) { return; } - this.controller!.runJavaScript(`deleteDiagonal(${row},${col})`) + this.controller!.runJavaScript(`deleteDiagonal(${startCol},${startRow},${endCol},${endRow})`) .catch((error: Error) => { console.error("Error deleteDiagonal:", error); }) diff --git a/library/src/main/resources/rawfile/vtable_util.js b/library/src/main/resources/rawfile/vtable_util.js index 8ab74340e9d9065a59410703bf81b9bcf2bcf735..d0d92f8bfbfd98871f69154dd6683d0b86c3495b 100644 --- a/library/src/main/resources/rawfile/vtable_util.js +++ b/library/src/main/resources/rawfile/vtable_util.js @@ -392,44 +392,56 @@ function zoomOut() { var arr = [] -function setDiagonal(col_, row_) { +function setDiagonal(startCol, startRow, endCol, endRow) { const newColumns = window.tableInstance.options.columns; - arr.push({ col: col_, row: row_ }) - - newColumns.map((item, index) => { - if (index == col_) { - item.customRender = (args) => { - colRow_ = { col: args.col, row: args.row } - - const exactExists = arr.some(item => - item.col === colRow_.col && item.row === colRow_.row - ); - - if (exactExists) { - return { - elements: [ - { - type: 'line', - elementKey: 'diagonal-line', - x: 0, - y: 0, - points: [ - { x: 0, y: 0 }, - { x: args.rect.width, y: args.rect.height } - ], - stroke: '#ff0000', - lineWidth: 2, - pickable: false, - cursor: 'default' - } - ], - renderDefault: true - } - } else { - return { - renderDefault: true - } + const keySet = new Set(arr.map(item => `${item.col},${item.row}`)); + + for (let i = startCol; i <= endCol; i++) { + for (let j = startRow; j <= endRow; j++) { + const key = `${i},${j}`; + if (!keySet.has(key)) { + keySet.add(key); + arr.push({ col: i, row: j }); + } + } + } + + + console.log("=====> setDiagonal", arr) + + + newColumns.map((item) => { + item.customRender = (args) => { + colRow_ = { col: args.col, row: args.row } + + const exactExists = arr.some(item => + item.col === colRow_.col && item.row === colRow_.row + ); + + if (exactExists) { + return { + elements: [ + { + type: 'line', + elementKey: 'diagonal-line', + x: 0, + y: 0, + points: [ + { x: 0, y: 0 }, + { x: args.rect.width, y: args.rect.height } + ], + stroke: '#ff0000', + lineWidth: 2, + pickable: false, + cursor: 'default' + } + ], + renderDefault: true + } + } else { + return { + renderDefault: true } } } @@ -438,10 +450,12 @@ function setDiagonal(col_, row_) { window.tableInstance.updateColumns(newColumns, { clearColWidthCache: true }); } -function deleteDiagonal(col_, row_) { - const index = arr.findIndex(item => item.col === col_ && item.row === row_); - if (index !== -1) { - arr.splice(index, 1); - } +function deleteDiagonal(startCol, startRow, endCol, endRow) { + arr = arr.filter(item => { + const inRange = item.col >= startCol && item.col <= endCol && + item.row >= startRow && item.row <= endRow; + return !inRange; + }); + renderWithRecreateCells(); } \ No newline at end of file