@visactor/vtable-plugins 1.22.0 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -83,7 +83,7 @@ class ContextMenuPlugin {
83
83
  break;
84
84
 
85
85
  case types_1.MenuKey.DELETE_ROW:
86
- this.menuHandler.handleDeleteRow(table, rowIndex);
86
+ this.menuHandler.handleDeleteRow(table);
87
87
  break;
88
88
 
89
89
  case types_1.MenuKey.DELETE_COLUMN:
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context-menu.ts"],"names":[],"mappings":"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","file":"context-menu.js","sourcesContent":["import type { ListTable, BaseTableAPI } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\nimport type { pluginsDefinition } from '@visactor/vtable';\nimport { MenuManager } from './contextmenu/menu-manager';\nimport { MenuHandler } from './contextmenu/handle-menu-helper';\nimport type { MenuItemOrSeparator, MenuClickEventArgs } from './contextmenu/types';\nimport {\n DEFAULT_BODY_MENU_ITEMS,\n DEFAULT_COLUMN_SERIES_MENU_ITEMS,\n DEFAULT_CORNER_SERIES_MENU_ITEMS,\n DEFAULT_HEADER_MENU_ITEMS,\n DEFAULT_ROW_SERIES_MENU_ITEMS,\n MenuKey\n} from './contextmenu/types';\n\n/**\n * 右键菜单插件选项\n */\nexport interface ContextMenuOptions {\n id?: string;\n cornerSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 列序号列菜单项 */\n columnSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 行序号列菜单项 */\n rowSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 表头菜单项 */\n headerCellMenuItems?: MenuItemOrSeparator[];\n /** 表体菜单项 */\n bodyCellMenuItems?: MenuItemOrSeparator[];\n /** 菜单点击回调。如果设置是函数,则忽略内部默认的菜单项处理逻辑。如果这里配置的是个对象(对象的key为menuKey),则有匹配的menuKey时忽略内部默认的菜单项处理逻辑,\n * 以这里配置的为准 ,没有匹配的menuKey时,则使用内部默认的菜单项处理逻辑。*/\n menuClickCallback?:\n | MenuClickCallback\n | ({\n [key in MenuKey]?: MenuClickCallback;\n } & {\n [key: string]: MenuClickCallback | undefined;\n });\n\n beforeShowAdjustMenuItems?: (\n menuItems: MenuItemOrSeparator[],\n table: ListTable,\n col: number,\n row: number\n ) => MenuItemOrSeparator[];\n}\n\nexport type MenuClickCallback = (args: MenuClickEventArgs, table: ListTable) => void;\n/**\n * 右键菜单插件\n */\nexport class ContextMenuPlugin implements pluginsDefinition.IVTablePlugin {\n id = `context-menu`;\n name = 'Context Menu';\n runTime = [TABLE_EVENT_TYPE.CONTEXTMENU_CELL, TABLE_EVENT_TYPE.PLUGIN_EVENT];\n pluginOptions: ContextMenuOptions;\n table: ListTable;\n /** 菜单管理器 */\n private menuManager: MenuManager;\n /** 菜单处理器 */\n private menuHandler: MenuHandler;\n\n constructor(pluginOptions: ContextMenuOptions = {}) {\n this.id = pluginOptions.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.menuManager = new MenuManager();\n this.menuHandler = new MenuHandler();\n this.initDefaultMenuItems();\n }\n\n /**\n * 初始化默认菜单项\n */\n private initDefaultMenuItems(): void {\n // 表头序号列菜单项\n if (!this.pluginOptions.columnSeriesNumberMenuItems) {\n this.pluginOptions.columnSeriesNumberMenuItems = DEFAULT_COLUMN_SERIES_MENU_ITEMS;\n }\n\n // 表头序号列菜单项\n if (!this.pluginOptions.rowSeriesNumberMenuItems) {\n this.pluginOptions.rowSeriesNumberMenuItems = DEFAULT_ROW_SERIES_MENU_ITEMS;\n }\n\n // 表头序号列菜单项\n if (!this.pluginOptions.cornerSeriesNumberMenuItems) {\n this.pluginOptions.cornerSeriesNumberMenuItems = DEFAULT_CORNER_SERIES_MENU_ITEMS;\n }\n // 表头菜单项\n if (!this.pluginOptions.headerCellMenuItems) {\n this.pluginOptions.headerCellMenuItems = DEFAULT_HEADER_MENU_ITEMS;\n }\n\n // 表体菜单项\n if (!this.pluginOptions.bodyCellMenuItems) {\n this.pluginOptions.bodyCellMenuItems = DEFAULT_BODY_MENU_ITEMS;\n }\n }\n\n /**\n * 处理单元格右键菜单事件\n */\n private handleContextMenuCell = (eventArgs: any, table: BaseTableAPI): void => {\n // 获取单元格信息\n const { col, row } = eventArgs;\n\n // 获取鼠标位置\n const mouseX = eventArgs.event.clientX;\n const mouseY = eventArgs.event.clientY;\n\n // 判断是否为序号列\n const isSeriesNumberCol = table.isSeriesNumber(col, row);\n\n // 根据不同位置显示不同的右键菜单\n let menuItems: MenuItemOrSeparator[] = [];\n\n if (table.isHeader(col, row)) {\n if (isSeriesNumberCol) {\n menuItems = this.pluginOptions.columnSeriesNumberMenuItems || [];\n } else {\n menuItems = this.pluginOptions.headerCellMenuItems || [];\n }\n } else {\n if (isSeriesNumberCol) {\n menuItems = this.pluginOptions.rowSeriesNumberMenuItems || [];\n } else {\n menuItems = this.pluginOptions.bodyCellMenuItems || [];\n }\n }\n\n if (menuItems.length > 0) {\n // 处理合并/取消合并菜单项\n const cellRange = table.getCellRange(col, row);\n if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {\n // 如果单元格被合并,则显示取消合并单元格选项\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'merge_cells');\n } else {\n // 如果单元格未被合并,则显示合并单元格选项\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'unmerge_cells');\n }\n\n // 调整菜单项\n if (this.pluginOptions.beforeShowAdjustMenuItems) {\n menuItems = this.pluginOptions.beforeShowAdjustMenuItems(menuItems, table as ListTable, col, row);\n }\n\n // 显示右键菜单\n this.showContextMenu(menuItems, mouseX, mouseY, col, row);\n }\n };\n\n /**\n * 处理插件事件\n */\n private handlePluginEvent = (eventArgs: any, table: BaseTableAPI): void => {\n const { eventType, rowIndex, colIndex, isCorner } = eventArgs.pluginEventInfo;\n const fireEventFromPlugin = eventArgs.plugin;\n\n // 获取鼠标位置\n const mouseX = eventArgs.event.clientX;\n const mouseY = eventArgs.event.clientY;\n\n if (fireEventFromPlugin.id === 'table-series-number' && eventType === 'rightclick') {\n let menuItems: MenuItemOrSeparator[] = [];\n\n if (isCorner) {\n menuItems = this.pluginOptions.cornerSeriesNumberMenuItems || [];\n } else if (rowIndex !== undefined) {\n menuItems = this.pluginOptions.rowSeriesNumberMenuItems || [];\n } else if (colIndex !== undefined) {\n menuItems = this.pluginOptions.columnSeriesNumberMenuItems || [];\n }\n\n // 调整菜单项\n if (this.pluginOptions.beforeShowAdjustMenuItems) {\n menuItems = this.pluginOptions.beforeShowAdjustMenuItems(menuItems, table as ListTable, colIndex, rowIndex);\n }\n\n // 显示右键菜单\n this.showContextMenu(menuItems, mouseX, mouseY, colIndex, rowIndex);\n }\n };\n\n /**\n * 运行插件\n */\n run(...args: any[]) {\n const eventArgs = args[0];\n const runTime = args[1];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n\n // 阻止默认右键菜单\n eventArgs.event.preventDefault();\n\n // 根据事件类型处理不同的右键菜单\n if (runTime === TABLE_EVENT_TYPE.CONTEXTMENU_CELL) {\n this.handleContextMenuCell(eventArgs, table);\n } else if (runTime === TABLE_EVENT_TYPE.PLUGIN_EVENT) {\n this.handlePluginEvent(eventArgs, table);\n }\n }\n\n /**\n * 显示右键菜单\n */\n private handleMenuClickCallback = (args: MenuClickEventArgs, table: ListTable) => {\n if (typeof this.pluginOptions.menuClickCallback === 'function') {\n this.pluginOptions.menuClickCallback(args, table);\n } else {\n // 菜单项处理逻辑\n this.handleMenuClick(args, table);\n }\n };\n\n private showContextMenu(menuItems: MenuItemOrSeparator[], x: number, y: number, col: number, row: number): void {\n // 显示菜单\n this.menuManager.showMenu(\n menuItems,\n x,\n y,\n {\n rowIndex: row,\n colIndex: col\n },\n this.table\n );\n\n // 设置菜单点击回调\n this.menuManager.setClickCallback(this.handleMenuClickCallback);\n }\n\n /**\n * 处理菜单点击事件\n */\n private handleMenuClick(args: MenuClickEventArgs, table: ListTable): void {\n const { menuKey, rowIndex, colIndex, inputValue = 1 } = args;\n if (\n typeof this.pluginOptions.menuClickCallback === 'object' &&\n this.pluginOptions.menuClickCallback[menuKey as MenuKey]\n ) {\n this.pluginOptions.menuClickCallback[menuKey as MenuKey](args, table);\n } else {\n // 根据菜单项key执行对应操作\n switch (menuKey) {\n case MenuKey.COPY:\n this.menuHandler.handleCopy(table);\n\n break;\n case MenuKey.CUT:\n this.menuHandler.handleCut(table);\n\n break;\n case MenuKey.PASTE:\n this.menuHandler.handlePaste(table);\n break;\n case MenuKey.INSERT_ROW_ABOVE:\n this.menuHandler.handleInsertRowAbove(table, rowIndex, inputValue as number);\n break;\n case MenuKey.INSERT_ROW_BELOW:\n this.menuHandler.handleInsertRowBelow(table, rowIndex, inputValue as number);\n break;\n case MenuKey.INSERT_COLUMN_LEFT:\n this.menuHandler.handleInsertColumnLeft(table, colIndex, inputValue as number);\n break;\n case MenuKey.INSERT_COLUMN_RIGHT:\n this.menuHandler.handleInsertColumnRight(table, colIndex, inputValue as number);\n break;\n case MenuKey.DELETE_ROW:\n this.menuHandler.handleDeleteRow(table, rowIndex);\n break;\n case MenuKey.DELETE_COLUMN:\n this.menuHandler.handleDeleteColumn(table, colIndex);\n break;\n case MenuKey.HIDE_COLUMN:\n this.menuHandler.handleHideColumn(table, colIndex);\n break;\n case MenuKey.SORT:\n this.menuHandler.handleSort(table, colIndex);\n break;\n case MenuKey.MERGE_CELLS:\n this.menuHandler.handleMergeCells(table);\n break;\n case MenuKey.UNMERGE_CELLS:\n this.menuHandler.handleUnmergeCells(table);\n break;\n // case MenuKey.SET_PROTECTION:\n // this.menuHandler.handleSetProtection(table);\n // break;\n case MenuKey.FREEZE_TO_THIS_ROW:\n this.menuHandler.handleFreezeToRow(table, rowIndex);\n break;\n case MenuKey.FREEZE_TO_THIS_COLUMN:\n this.menuHandler.handleFreezeToColumn(table, colIndex);\n break;\n case MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN:\n this.menuHandler.handleFreezeToRowAndColumn(table, rowIndex, colIndex);\n break;\n case MenuKey.UNFREEZE:\n this.menuHandler.handleUnfreeze(table);\n break;\n default:\n console.log('未处理的菜单点击:', args);\n }\n }\n }\n\n /**\n * 释放资源\n */\n release(): void {\n if (this.menuManager) {\n this.menuManager.release();\n this.menuManager = null;\n }\n\n if (this.menuHandler) {\n this.menuHandler.release();\n this.menuHandler = null;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/context-menu.ts"],"names":[],"mappings":"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","file":"context-menu.js","sourcesContent":["import type { ListTable, BaseTableAPI } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\nimport type { pluginsDefinition } from '@visactor/vtable';\nimport { MenuManager } from './contextmenu/menu-manager';\nimport { MenuHandler } from './contextmenu/handle-menu-helper';\nimport type { MenuItemOrSeparator, MenuClickEventArgs } from './contextmenu/types';\nimport {\n DEFAULT_BODY_MENU_ITEMS,\n DEFAULT_COLUMN_SERIES_MENU_ITEMS,\n DEFAULT_CORNER_SERIES_MENU_ITEMS,\n DEFAULT_HEADER_MENU_ITEMS,\n DEFAULT_ROW_SERIES_MENU_ITEMS,\n MenuKey\n} from './contextmenu/types';\n\n/**\n * 右键菜单插件选项\n */\nexport interface ContextMenuOptions {\n id?: string;\n cornerSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 列序号列菜单项 */\n columnSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 行序号列菜单项 */\n rowSeriesNumberMenuItems?: MenuItemOrSeparator[];\n /** 表头菜单项 */\n headerCellMenuItems?: MenuItemOrSeparator[];\n /** 表体菜单项 */\n bodyCellMenuItems?: MenuItemOrSeparator[];\n /** 菜单点击回调。如果设置是函数,则忽略内部默认的菜单项处理逻辑。如果这里配置的是个对象(对象的key为menuKey),则有匹配的menuKey时忽略内部默认的菜单项处理逻辑,\n * 以这里配置的为准 ,没有匹配的menuKey时,则使用内部默认的菜单项处理逻辑。*/\n menuClickCallback?:\n | MenuClickCallback\n | ({\n [key in MenuKey]?: MenuClickCallback;\n } & {\n [key: string]: MenuClickCallback | undefined;\n });\n\n beforeShowAdjustMenuItems?: (\n menuItems: MenuItemOrSeparator[],\n table: ListTable,\n col: number,\n row: number\n ) => MenuItemOrSeparator[];\n}\n\nexport type MenuClickCallback = (args: MenuClickEventArgs, table: ListTable) => void;\n/**\n * 右键菜单插件\n */\nexport class ContextMenuPlugin implements pluginsDefinition.IVTablePlugin {\n id = `context-menu`;\n name = 'Context Menu';\n runTime = [TABLE_EVENT_TYPE.CONTEXTMENU_CELL, TABLE_EVENT_TYPE.PLUGIN_EVENT];\n pluginOptions: ContextMenuOptions;\n table: ListTable;\n /** 菜单管理器 */\n private menuManager: MenuManager;\n /** 菜单处理器 */\n private menuHandler: MenuHandler;\n\n constructor(pluginOptions: ContextMenuOptions = {}) {\n this.id = pluginOptions.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.menuManager = new MenuManager();\n this.menuHandler = new MenuHandler();\n this.initDefaultMenuItems();\n }\n\n /**\n * 初始化默认菜单项\n */\n private initDefaultMenuItems(): void {\n // 表头序号列菜单项\n if (!this.pluginOptions.columnSeriesNumberMenuItems) {\n this.pluginOptions.columnSeriesNumberMenuItems = DEFAULT_COLUMN_SERIES_MENU_ITEMS;\n }\n\n // 表头序号列菜单项\n if (!this.pluginOptions.rowSeriesNumberMenuItems) {\n this.pluginOptions.rowSeriesNumberMenuItems = DEFAULT_ROW_SERIES_MENU_ITEMS;\n }\n\n // 表头序号列菜单项\n if (!this.pluginOptions.cornerSeriesNumberMenuItems) {\n this.pluginOptions.cornerSeriesNumberMenuItems = DEFAULT_CORNER_SERIES_MENU_ITEMS;\n }\n // 表头菜单项\n if (!this.pluginOptions.headerCellMenuItems) {\n this.pluginOptions.headerCellMenuItems = DEFAULT_HEADER_MENU_ITEMS;\n }\n\n // 表体菜单项\n if (!this.pluginOptions.bodyCellMenuItems) {\n this.pluginOptions.bodyCellMenuItems = DEFAULT_BODY_MENU_ITEMS;\n }\n }\n\n /**\n * 处理单元格右键菜单事件\n */\n private handleContextMenuCell = (eventArgs: any, table: BaseTableAPI): void => {\n // 获取单元格信息\n const { col, row } = eventArgs;\n\n // 获取鼠标位置\n const mouseX = eventArgs.event.clientX;\n const mouseY = eventArgs.event.clientY;\n\n // 判断是否为序号列\n const isSeriesNumberCol = table.isSeriesNumber(col, row);\n\n // 根据不同位置显示不同的右键菜单\n let menuItems: MenuItemOrSeparator[] = [];\n\n if (table.isHeader(col, row)) {\n if (isSeriesNumberCol) {\n menuItems = this.pluginOptions.columnSeriesNumberMenuItems || [];\n } else {\n menuItems = this.pluginOptions.headerCellMenuItems || [];\n }\n } else {\n if (isSeriesNumberCol) {\n menuItems = this.pluginOptions.rowSeriesNumberMenuItems || [];\n } else {\n menuItems = this.pluginOptions.bodyCellMenuItems || [];\n }\n }\n\n if (menuItems.length > 0) {\n // 处理合并/取消合并菜单项\n const cellRange = table.getCellRange(col, row);\n if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {\n // 如果单元格被合并,则显示取消合并单元格选项\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'merge_cells');\n } else {\n // 如果单元格未被合并,则显示合并单元格选项\n menuItems = menuItems.filter(item => typeof item === 'string' || item.menuKey !== 'unmerge_cells');\n }\n\n // 调整菜单项\n if (this.pluginOptions.beforeShowAdjustMenuItems) {\n menuItems = this.pluginOptions.beforeShowAdjustMenuItems(menuItems, table as ListTable, col, row);\n }\n\n // 显示右键菜单\n this.showContextMenu(menuItems, mouseX, mouseY, col, row);\n }\n };\n\n /**\n * 处理插件事件\n */\n private handlePluginEvent = (eventArgs: any, table: BaseTableAPI): void => {\n const { eventType, rowIndex, colIndex, isCorner } = eventArgs.pluginEventInfo;\n const fireEventFromPlugin = eventArgs.plugin;\n\n // 获取鼠标位置\n const mouseX = eventArgs.event.clientX;\n const mouseY = eventArgs.event.clientY;\n\n if (fireEventFromPlugin.id === 'table-series-number' && eventType === 'rightclick') {\n let menuItems: MenuItemOrSeparator[] = [];\n\n if (isCorner) {\n menuItems = this.pluginOptions.cornerSeriesNumberMenuItems || [];\n } else if (rowIndex !== undefined) {\n menuItems = this.pluginOptions.rowSeriesNumberMenuItems || [];\n } else if (colIndex !== undefined) {\n menuItems = this.pluginOptions.columnSeriesNumberMenuItems || [];\n }\n\n // 调整菜单项\n if (this.pluginOptions.beforeShowAdjustMenuItems) {\n menuItems = this.pluginOptions.beforeShowAdjustMenuItems(menuItems, table as ListTable, colIndex, rowIndex);\n }\n\n // 显示右键菜单\n this.showContextMenu(menuItems, mouseX, mouseY, colIndex, rowIndex);\n }\n };\n\n /**\n * 运行插件\n */\n run(...args: any[]) {\n const eventArgs = args[0];\n const runTime = args[1];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n\n // 阻止默认右键菜单\n eventArgs.event.preventDefault();\n\n // 根据事件类型处理不同的右键菜单\n if (runTime === TABLE_EVENT_TYPE.CONTEXTMENU_CELL) {\n this.handleContextMenuCell(eventArgs, table);\n } else if (runTime === TABLE_EVENT_TYPE.PLUGIN_EVENT) {\n this.handlePluginEvent(eventArgs, table);\n }\n }\n\n /**\n * 显示右键菜单\n */\n private handleMenuClickCallback = (args: MenuClickEventArgs, table: ListTable) => {\n if (typeof this.pluginOptions.menuClickCallback === 'function') {\n this.pluginOptions.menuClickCallback(args, table);\n } else {\n // 菜单项处理逻辑\n this.handleMenuClick(args, table);\n }\n };\n\n private showContextMenu(menuItems: MenuItemOrSeparator[], x: number, y: number, col: number, row: number): void {\n // 显示菜单\n this.menuManager.showMenu(\n menuItems,\n x,\n y,\n {\n rowIndex: row,\n colIndex: col\n },\n this.table\n );\n\n // 设置菜单点击回调\n this.menuManager.setClickCallback(this.handleMenuClickCallback);\n }\n\n /**\n * 处理菜单点击事件\n */\n private handleMenuClick(args: MenuClickEventArgs, table: ListTable): void {\n const { menuKey, rowIndex, colIndex, inputValue = 1 } = args;\n if (\n typeof this.pluginOptions.menuClickCallback === 'object' &&\n this.pluginOptions.menuClickCallback[menuKey as MenuKey]\n ) {\n this.pluginOptions.menuClickCallback[menuKey as MenuKey](args, table);\n } else {\n // 根据菜单项key执行对应操作\n switch (menuKey) {\n case MenuKey.COPY:\n this.menuHandler.handleCopy(table);\n\n break;\n case MenuKey.CUT:\n this.menuHandler.handleCut(table);\n\n break;\n case MenuKey.PASTE:\n this.menuHandler.handlePaste(table);\n break;\n case MenuKey.INSERT_ROW_ABOVE:\n this.menuHandler.handleInsertRowAbove(table, rowIndex, inputValue as number);\n break;\n case MenuKey.INSERT_ROW_BELOW:\n this.menuHandler.handleInsertRowBelow(table, rowIndex, inputValue as number);\n break;\n case MenuKey.INSERT_COLUMN_LEFT:\n this.menuHandler.handleInsertColumnLeft(table, colIndex, inputValue as number);\n break;\n case MenuKey.INSERT_COLUMN_RIGHT:\n this.menuHandler.handleInsertColumnRight(table, colIndex, inputValue as number);\n break;\n case MenuKey.DELETE_ROW:\n this.menuHandler.handleDeleteRow(table);\n break;\n case MenuKey.DELETE_COLUMN:\n this.menuHandler.handleDeleteColumn(table, colIndex);\n break;\n case MenuKey.HIDE_COLUMN:\n this.menuHandler.handleHideColumn(table, colIndex);\n break;\n case MenuKey.SORT:\n this.menuHandler.handleSort(table, colIndex);\n break;\n case MenuKey.MERGE_CELLS:\n this.menuHandler.handleMergeCells(table);\n break;\n case MenuKey.UNMERGE_CELLS:\n this.menuHandler.handleUnmergeCells(table);\n break;\n // case MenuKey.SET_PROTECTION:\n // this.menuHandler.handleSetProtection(table);\n // break;\n case MenuKey.FREEZE_TO_THIS_ROW:\n this.menuHandler.handleFreezeToRow(table, rowIndex);\n break;\n case MenuKey.FREEZE_TO_THIS_COLUMN:\n this.menuHandler.handleFreezeToColumn(table, colIndex);\n break;\n case MenuKey.FREEZE_TO_THIS_ROW_AND_COLUMN:\n this.menuHandler.handleFreezeToRowAndColumn(table, rowIndex, colIndex);\n break;\n case MenuKey.UNFREEZE:\n this.menuHandler.handleUnfreeze(table);\n break;\n default:\n console.log('未处理的菜单点击:', args);\n }\n }\n }\n\n /**\n * 释放资源\n */\n release(): void {\n if (this.menuManager) {\n this.menuManager.release();\n this.menuManager = null;\n }\n\n if (this.menuHandler) {\n this.menuHandler.release();\n this.menuHandler = null;\n }\n }\n}\n"]}
@@ -8,7 +8,7 @@ export declare class MenuHandler {
8
8
  handleInsertRowBelow(table: ListTable, rowIndex?: number, count?: number): void;
9
9
  handleInsertColumnLeft(table: ListTable, colIndex?: number, count?: number): void;
10
10
  handleInsertColumnRight(table: ListTable, colIndex?: number, count?: number): void;
11
- handleDeleteRow(table: ListTable, rowIndex?: number): void;
11
+ handleDeleteRow(table: ListTable): void;
12
12
  handleDeleteColumn(table: ListTable, colIndex?: number): void;
13
13
  handleHideColumn(table: ListTable, colIndex?: number): void;
14
14
  handleSort(table: ListTable, colIndex?: number): void;
@@ -16,10 +16,20 @@ class MenuHandler {
16
16
  table.eventManager.handlePaste(new KeyboardEvent("paste"));
17
17
  }
18
18
  handleInsertRowAbove(table, rowIndex, count = 1) {
19
- if (void 0 !== rowIndex && "function" == typeof table.addRecord) for (let i = 0; i < count; i++) table.addRecord([], rowIndex - 1);
19
+ if (void 0 !== rowIndex && "function" == typeof table.addRecord) {
20
+ const records = Array.from({
21
+ length: count
22
+ }, ((_, i) => []));
23
+ table.addRecords(records, rowIndex - 1);
24
+ }
20
25
  }
21
26
  handleInsertRowBelow(table, rowIndex, count = 1) {
22
- if (void 0 !== rowIndex && "function" == typeof table.addRecord) for (let i = 0; i < count; i++) table.addRecord([], rowIndex + i);
27
+ if (void 0 !== rowIndex && "function" == typeof table.addRecord) {
28
+ const records = Array.from({
29
+ length: count
30
+ }, ((_, i) => []));
31
+ table.addRecords(records, rowIndex);
32
+ }
23
33
  }
24
34
  handleInsertColumnLeft(table, colIndex, count = 1) {
25
35
  if (void 0 !== colIndex && "function" == typeof table.addColumns) {
@@ -39,18 +49,20 @@ class MenuHandler {
39
49
  table.addColumns(toAddColumns, colIndex + 1, !0);
40
50
  }
41
51
  }
42
- handleDeleteRow(table, rowIndex) {
43
- if (void 0 !== rowIndex && "function" == typeof table.deleteRecords) {
52
+ handleDeleteRow(table) {
53
+ if ("function" == typeof table.deleteRecords) {
44
54
  const selectRanges = table.stateManager.select.ranges, deleteRowIndexs = [];
45
55
  for (let i = 0; i < selectRanges.length; i++) {
46
56
  const range = selectRanges[i];
47
57
  for (let j = range.start.row; j <= range.end.row; j++) deleteRowIndexs.includes(j) || deleteRowIndexs.push(j);
48
58
  }
49
59
  deleteRowIndexs.sort(((a, b) => b - a));
60
+ const delRecordIndexs = [];
50
61
  for (let i = 0; i < deleteRowIndexs.length; i++) {
51
62
  const recordIndex = table.getRecordIndexByCell(0, deleteRowIndexs[i]);
52
- table.deleteRecords([ recordIndex ]);
63
+ delRecordIndexs.push(recordIndex);
53
64
  }
65
+ table.deleteRecords(delRecordIndexs);
54
66
  }
55
67
  }
56
68
  handleDeleteColumn(table, colIndex) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contextmenu/handle-menu-helper.ts"],"names":[],"mappings":";;;AAMA,MAAa,WAAW;IACtB;IAIA,CAAC;IAKD,UAAU,CAAC,KAAgB;QACzB,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAKD,SAAS,CAAC,KAAgB;QACxB,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAKD,WAAW,CAAC,KAAgB;QAC1B,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QACzE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,OAAQ,KAAa,CAAC,SAAS,KAAK,UAAU,EAAE;YAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;aACnC;SACF;IACH,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QACzE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,SAAS,KAAK,UAAU,EAAE;YAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;aACnC;SACF;IACH,CAAC;IAKD,sBAAsB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QAC3E,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YACnD,MAAM,YAAY,GAAmB,EAAE,CAAC;YAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;SAChD;IACH,CAAC;IAKD,uBAAuB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QAC5E,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YACnD,MAAM,YAAY,GAAmB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;SACpD;IACH,CAAC;IAKD,eAAe,CAAC,KAAgB,EAAE,QAAiB;QACjD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,aAAa,KAAK,UAAU,EAAE;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAEtD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;wBAChC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACF;aACF;YACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAErE,KAAa,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;aAC7C;SACF;IAKH,CAAC;IAKD,kBAAkB,CAAC,KAAgB,EAAE,QAAiB;QACpD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,aAAa,KAAK,UAAU,EAAE;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAEtD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;wBAChC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACF;aACF;YAKD,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SAC5C;IACH,CAAC;IAKD,gBAAgB,CAAC,KAAgB,EAAE,QAAiB;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,OAAQ,KAAa,CAAC,WAAW,KAAK,UAAU,EAAE;YACnD,KAAa,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxC;IACH,CAAC;IAKD,UAAU,CAAC,KAAgB,EAAE,QAAiB;QAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU,EAAE;YAE7C,MAAM,gBAAgB,GAAI,KAAa,CAAC,YAAY,CAAC,CAAC,CAAE,KAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5F,IAAI,SAAS,GAA8B,KAAK,CAAC;YAEjD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3D,SAAS,GAAG,gBAAgB,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;aAClE;YAEA,KAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAKD,gBAAgB,CAAC,KAAgB;;QAE/B,IAAI,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YAC5G,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;gBAC9C,OAAO;aACR;YACD,KAAK,CAAC,UAAU,CACd,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC3B,CAAC;SACH;IACH,CAAC;IAID,kBAAkB,CAAC,KAAgB;;QACjC,IAAI,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAa,CAAC,YAAY,KAAK,UAAU,EAAE;YAC9G,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;gBAC9C,OAAO;aACR;YACD,KAAK,CAAC,YAAY,CAChB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC3B,CAAC;SACH;IACH,CAAC;IAKD,mBAAmB,CAAC,KAAgB;IAEpC,CAAC;IAKD,iBAAiB,CAAC,KAAgB,EAAE,QAAiB;QACnD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,0BAA0B,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAiB;QAC/E,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE;YACpD,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,cAAc,CAAC,KAAgB;QAC7B,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;IAC3B,CAAC;IAKD,OAAO;IAIP,CAAC;CACF;AA1RD,kCA0RC","file":"handle-menu-helper.js","sourcesContent":["import type { ColumnDefine, ListTable } from '@visactor/vtable';\n\n/**\n * 菜单辅助类\n * 处理右键菜单的各种操作逻辑\n */\nexport class MenuHandler {\n constructor() {\n // // 监听全局复制事件,用于重置剪切状态\n // document.addEventListener('copy', this.handleGlobalCopy);\n // document.addEventListener('cut', this.handleGlobalCut);\n }\n\n /**\n * 处理复制操作\n */\n handleCopy(table: ListTable): void {\n table.eventManager.handleCopy(new KeyboardEvent('copy'));\n }\n\n /**\n * 处理剪切操作\n */\n handleCut(table: ListTable): void {\n table.eventManager.handleCut(new KeyboardEvent('cut'));\n }\n\n /**\n * 处理粘贴操作\n */\n handlePaste(table: ListTable): void {\n table.eventManager.handlePaste(new KeyboardEvent('paste'));\n }\n\n /**\n * 处理向上插入行\n */\n handleInsertRowAbove(table: ListTable, rowIndex?: number, count: number = 1): void {\n if (rowIndex === undefined) {\n return;\n }\n\n if (typeof (table as any).addRecord === 'function') {\n // 使用表格API插入行\n for (let i = 0; i < count; i++) {\n table.addRecord([], rowIndex - 1);\n }\n }\n }\n\n /**\n * 处理向下插入行\n */\n handleInsertRowBelow(table: ListTable, rowIndex?: number, count: number = 1): void {\n if (rowIndex === undefined) {\n return;\n }\n if (typeof (table as any).addRecord === 'function') {\n // 使用表格API插入行\n for (let i = 0; i < count; i++) {\n table.addRecord([], rowIndex + i);\n }\n }\n }\n\n /**\n * 处理向左插入列\n */\n handleInsertColumnLeft(table: ListTable, colIndex?: number, count: number = 1): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).addColumns === 'function') {\n const toAddColumns: ColumnDefine[] = [];\n // 使用表格API插入列\n for (let i = 0; i < count; i++) {\n toAddColumns.push({ field: colIndex - i });\n }\n table.addColumns(toAddColumns, colIndex, true);\n }\n }\n\n /**\n * 处理向右插入列\n */\n handleInsertColumnRight(table: ListTable, colIndex?: number, count: number = 1): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).addColumns === 'function') {\n const toAddColumns: ColumnDefine[] = [];\n for (let i = 0; i < count; i++) {\n toAddColumns.push({ field: colIndex + 1 });\n }\n table.addColumns(toAddColumns, colIndex + 1, true);\n }\n }\n\n /**\n * 处理删除行\n */\n handleDeleteRow(table: ListTable, rowIndex?: number): void {\n if (rowIndex === undefined) {\n return;\n }\n if (typeof (table as any).deleteRecords === 'function') {\n const selectRanges = table.stateManager.select.ranges;\n //处理selectRanges中的每个选择区域,记录到deleteRowIndexs数组中,保证没给row值记录一次,且按倒序排序\n const deleteRowIndexs: number[] = [];\n for (let i = 0; i < selectRanges.length; i++) {\n const range = selectRanges[i];\n for (let j = range.start.row; j <= range.end.row; j++) {\n if (!deleteRowIndexs.includes(j)) {\n deleteRowIndexs.push(j);\n }\n }\n }\n deleteRowIndexs.sort((a, b) => b - a);\n for (let i = 0; i < deleteRowIndexs.length; i++) {\n const recordIndex = table.getRecordIndexByCell(0, deleteRowIndexs[i]);\n // 使用表格API删除行\n (table as any).deleteRecords([recordIndex]);\n }\n }\n\n // const recordIndex = table.getRecordIndexByCell(0, rowIndex);\n // // 使用表格API删除行\n // (table as any).deleteRecords([recordIndex]);\n }\n\n /**\n * 处理删除列\n */\n handleDeleteColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).deleteColumns === 'function') {\n const selectRanges = table.stateManager.select.ranges;\n //处理selectRanges中的每个选择区域,记录到deleteColIndexs数组中,保证没给col值记录一次,且按倒序排序\n const deleteColIndexs: number[] = [];\n for (let i = 0; i < selectRanges.length; i++) {\n const range = selectRanges[i];\n for (let j = range.start.col; j <= range.end.col; j++) {\n if (!deleteColIndexs.includes(j)) {\n deleteColIndexs.push(j);\n }\n }\n }\n // deleteColIndexs.sort((a, b) => b - a);\n // for (let i = 0; i < deleteColIndexs.length; i++) {\n // (table as any).deleteColumn(deleteColIndexs[i]); //TODO 性能考虑的话 这样做不好\n // }\n table.deleteColumns(deleteColIndexs, true);\n }\n }\n\n /**\n * 处理隐藏列\n */\n handleHideColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n // 检查表格是否支持隐藏列的API\n if (typeof (table as any).hideColumns === 'function') {\n (table as any).hideColumns([colIndex]);\n }\n }\n\n /**\n * 处理排序\n */\n handleSort(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n // 切换排序方向\n if (typeof (table as any).sort === 'function') {\n // 获取当前列的排序状态\n const currentSortState = (table as any).getSortState ? (table as any).getSortState() : null;\n let direction: 'asc' | 'desc' | 'normal' = 'asc';\n\n if (currentSortState && currentSortState.field === colIndex) {\n direction = currentSortState.order === 'asc' ? 'desc' : 'normal';\n }\n\n (table as any).sort({ field: colIndex, order: direction });\n }\n }\n\n /**\n * 处理合并单元格\n */\n handleMergeCells(table: ListTable): void {\n // 获取当前选中区域\n if ((table.stateManager.select.ranges?.length ?? 0) === 1 && typeof (table as any).mergeCells === 'function') {\n const { row: startRow, col: startCol } = table.stateManager.select.ranges[0].start;\n const { row: endRow, col: endCol } = table.stateManager.select.ranges[0].end;\n if (startCol === endCol && startRow === endRow) {\n return;\n }\n table.mergeCells(\n Math.min(startCol, endCol),\n Math.min(startRow, endRow),\n Math.max(startCol, endCol),\n Math.max(startRow, endRow)\n );\n }\n }\n /**\n * 处理取消合并单元格\n */\n handleUnmergeCells(table: ListTable): void {\n if ((table.stateManager.select.ranges?.length ?? 0) === 1 && typeof (table as any).unmergeCells === 'function') {\n const { row: startRow, col: startCol } = table.stateManager.select.ranges[0].start;\n const { row: endRow, col: endCol } = table.stateManager.select.ranges[0].end;\n if (startCol === endCol && startRow === endRow) {\n return;\n }\n table.unmergeCells(\n Math.min(startCol, endCol),\n Math.min(startRow, endRow),\n Math.max(startCol, endCol),\n Math.max(startRow, endRow)\n );\n }\n }\n\n /**\n * 处理设置保护范围\n */\n handleSetProtection(table: ListTable): void {\n // 需要表格API支持\n }\n\n /**\n * 处理冻结到本行\n */\n handleFreezeToRow(table: ListTable, rowIndex?: number): void {\n if (rowIndex === undefined) {\n return;\n }\n\n table.frozenRowCount = rowIndex + 1;\n }\n\n /**\n * 处理冻结到本列\n */\n handleFreezeToColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n table.frozenColCount = colIndex + 1;\n }\n\n /**\n * 处理冻结到本行本列\n */\n handleFreezeToRowAndColumn(table: ListTable, rowIndex?: number, colIndex?: number): void {\n if (rowIndex === undefined || colIndex === undefined) {\n return;\n }\n\n table.frozenRowCount = rowIndex + 1;\n table.frozenColCount = colIndex + 1;\n }\n\n /**\n * 处理取消冻结\n */\n handleUnfreeze(table: ListTable): void {\n table.frozenRowCount = 0;\n table.frozenColCount = 0;\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // // 移除全局事件监听\n // document.removeEventListener('copy', this.handleGlobalCopy);\n // document.removeEventListener('cut', this.handleGlobalCut);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/contextmenu/handle-menu-helper.ts"],"names":[],"mappings":";;;AAMA,MAAa,WAAW;IACtB;IAIA,CAAC;IAKD,UAAU,CAAC,KAAgB;QACzB,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAKD,SAAS,CAAC,KAAgB;QACxB,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAKD,WAAW,CAAC,KAAgB;QAC1B,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QACzE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,OAAQ,KAAa,CAAC,SAAS,KAAK,UAAU,EAAE;YAElD,MAAM,OAAO,GAAU,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;SACzC;IACH,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QACzE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,SAAS,KAAK,UAAU,EAAE;YAGlD,MAAM,OAAO,GAAU,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SACrC;IACH,CAAC;IAKD,sBAAsB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QAC3E,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YACnD,MAAM,YAAY,GAAmB,EAAE,CAAC;YAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;SAChD;IACH,CAAC;IAKD,uBAAuB,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAgB,CAAC;QAC5E,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YACnD,MAAM,YAAY,GAAmB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;aAC5C;YACD,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;SACpD;IACH,CAAC;IAKD,eAAe,CAAC,KAAgB;QAC9B,IAAI,OAAQ,KAAa,CAAC,aAAa,KAAK,UAAU,EAAE;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAEtD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;wBAChC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACF;aACF;YACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,eAAe,GAA0B,EAAE,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnC;YACA,KAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;SAC/C;IAKH,CAAC;IAKD,kBAAkB,CAAC,KAAgB,EAAE,QAAiB;QACpD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,OAAQ,KAAa,CAAC,aAAa,KAAK,UAAU,EAAE;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAEtD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;wBAChC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACF;aACF;YAKD,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SAC5C;IACH,CAAC;IAKD,gBAAgB,CAAC,KAAgB,EAAE,QAAiB;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,OAAQ,KAAa,CAAC,WAAW,KAAK,UAAU,EAAE;YACnD,KAAa,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxC;IACH,CAAC;IAKD,UAAU,CAAC,KAAgB,EAAE,QAAiB;QAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAGD,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU,EAAE;YAE7C,MAAM,gBAAgB,GAAI,KAAa,CAAC,YAAY,CAAC,CAAC,CAAE,KAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5F,IAAI,SAAS,GAA8B,KAAK,CAAC;YAEjD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3D,SAAS,GAAG,gBAAgB,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;aAClE;YAEA,KAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAKD,gBAAgB,CAAC,KAAgB;;QAE/B,IAAI,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAa,CAAC,UAAU,KAAK,UAAU,EAAE;YAC5G,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;gBAC9C,OAAO;aACR;YACD,KAAK,CAAC,UAAU,CACd,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC3B,CAAC;SACH;IACH,CAAC;IAID,kBAAkB,CAAC,KAAgB;;QACjC,IAAI,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC,KAAK,CAAC,IAAI,OAAQ,KAAa,CAAC,YAAY,KAAK,UAAU,EAAE;YAC9G,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;gBAC9C,OAAO;aACR;YACD,KAAK,CAAC,YAAY,CAChB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC3B,CAAC;SACH;IACH,CAAC;IAKD,mBAAmB,CAAC,KAAgB;IAEpC,CAAC;IAKD,iBAAiB,CAAC,KAAgB,EAAE,QAAiB;QACnD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,oBAAoB,CAAC,KAAgB,EAAE,QAAiB;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,0BAA0B,CAAC,KAAgB,EAAE,QAAiB,EAAE,QAAiB;QAC/E,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE;YACpD,OAAO;SACR;QAED,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC;IAKD,cAAc,CAAC,KAAgB;QAC7B,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;IAC3B,CAAC;IAKD,OAAO;IAIP,CAAC;CACF;AAvRD,kCAuRC","file":"handle-menu-helper.js","sourcesContent":["import type { ColumnDefine, ListTable } from '@visactor/vtable';\n\n/**\n * 菜单辅助类\n * 处理右键菜单的各种操作逻辑\n */\nexport class MenuHandler {\n constructor() {\n // // 监听全局复制事件,用于重置剪切状态\n // document.addEventListener('copy', this.handleGlobalCopy);\n // document.addEventListener('cut', this.handleGlobalCut);\n }\n\n /**\n * 处理复制操作\n */\n handleCopy(table: ListTable): void {\n table.eventManager.handleCopy(new KeyboardEvent('copy'));\n }\n\n /**\n * 处理剪切操作\n */\n handleCut(table: ListTable): void {\n table.eventManager.handleCut(new KeyboardEvent('cut'));\n }\n\n /**\n * 处理粘贴操作\n */\n handlePaste(table: ListTable): void {\n table.eventManager.handlePaste(new KeyboardEvent('paste'));\n }\n\n /**\n * 处理向上插入行\n */\n handleInsertRowAbove(table: ListTable, rowIndex?: number, count: number = 1): void {\n if (rowIndex === undefined) {\n return;\n }\n\n if (typeof (table as any).addRecord === 'function') {\n // 使用表格API插入行\n const records: any[] = Array.from({ length: count }, (_, i) => []);\n table.addRecords(records, rowIndex - 1);\n }\n }\n\n /**\n * 处理向下插入行\n */\n handleInsertRowBelow(table: ListTable, rowIndex?: number, count: number = 1): void {\n if (rowIndex === undefined) {\n return;\n }\n if (typeof (table as any).addRecord === 'function') {\n // 使用表格API插入行\n // 批量组织好数据,一次性插入\n const records: any[] = Array.from({ length: count }, (_, i) => []);\n table.addRecords(records, rowIndex);\n }\n }\n\n /**\n * 处理向左插入列\n */\n handleInsertColumnLeft(table: ListTable, colIndex?: number, count: number = 1): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).addColumns === 'function') {\n const toAddColumns: ColumnDefine[] = [];\n // 使用表格API插入列\n for (let i = 0; i < count; i++) {\n toAddColumns.push({ field: colIndex - i });\n }\n table.addColumns(toAddColumns, colIndex, true);\n }\n }\n\n /**\n * 处理向右插入列\n */\n handleInsertColumnRight(table: ListTable, colIndex?: number, count: number = 1): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).addColumns === 'function') {\n const toAddColumns: ColumnDefine[] = [];\n for (let i = 0; i < count; i++) {\n toAddColumns.push({ field: colIndex + 1 });\n }\n table.addColumns(toAddColumns, colIndex + 1, true);\n }\n }\n\n /**\n * 处理删除行\n */\n handleDeleteRow(table: ListTable): void {\n if (typeof (table as any).deleteRecords === 'function') {\n const selectRanges = table.stateManager.select.ranges;\n //处理selectRanges中的每个选择区域,记录到deleteRowIndexs数组中,保证没给row值记录一次,且按倒序排序\n const deleteRowIndexs: number[] = [];\n for (let i = 0; i < selectRanges.length; i++) {\n const range = selectRanges[i];\n for (let j = range.start.row; j <= range.end.row; j++) {\n if (!deleteRowIndexs.includes(j)) {\n deleteRowIndexs.push(j);\n }\n }\n }\n deleteRowIndexs.sort((a, b) => b - a);\n const delRecordIndexs: (number | number[])[] = [];\n for (let i = 0; i < deleteRowIndexs.length; i++) {\n const recordIndex = table.getRecordIndexByCell(0, deleteRowIndexs[i]);\n delRecordIndexs.push(recordIndex);\n }\n (table as any).deleteRecords(delRecordIndexs);\n }\n\n // const recordIndex = table.getRecordIndexByCell(0, rowIndex);\n // // 使用表格API删除行\n // (table as any).deleteRecords([recordIndex]);\n }\n\n /**\n * 处理删除列\n */\n handleDeleteColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n if (typeof (table as any).deleteColumns === 'function') {\n const selectRanges = table.stateManager.select.ranges;\n //处理selectRanges中的每个选择区域,记录到deleteColIndexs数组中,保证没给col值记录一次,且按倒序排序\n const deleteColIndexs: number[] = [];\n for (let i = 0; i < selectRanges.length; i++) {\n const range = selectRanges[i];\n for (let j = range.start.col; j <= range.end.col; j++) {\n if (!deleteColIndexs.includes(j)) {\n deleteColIndexs.push(j);\n }\n }\n }\n // deleteColIndexs.sort((a, b) => b - a);\n // for (let i = 0; i < deleteColIndexs.length; i++) {\n // (table as any).deleteColumn(deleteColIndexs[i]); //TODO 性能考虑的话 这样做不好\n // }\n table.deleteColumns(deleteColIndexs, true);\n }\n }\n\n /**\n * 处理隐藏列\n */\n handleHideColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n // 检查表格是否支持隐藏列的API\n if (typeof (table as any).hideColumns === 'function') {\n (table as any).hideColumns([colIndex]);\n }\n }\n\n /**\n * 处理排序\n */\n handleSort(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n // 切换排序方向\n if (typeof (table as any).sort === 'function') {\n // 获取当前列的排序状态\n const currentSortState = (table as any).getSortState ? (table as any).getSortState() : null;\n let direction: 'asc' | 'desc' | 'normal' = 'asc';\n\n if (currentSortState && currentSortState.field === colIndex) {\n direction = currentSortState.order === 'asc' ? 'desc' : 'normal';\n }\n\n (table as any).sort({ field: colIndex, order: direction });\n }\n }\n\n /**\n * 处理合并单元格\n */\n handleMergeCells(table: ListTable): void {\n // 获取当前选中区域\n if ((table.stateManager.select.ranges?.length ?? 0) === 1 && typeof (table as any).mergeCells === 'function') {\n const { row: startRow, col: startCol } = table.stateManager.select.ranges[0].start;\n const { row: endRow, col: endCol } = table.stateManager.select.ranges[0].end;\n if (startCol === endCol && startRow === endRow) {\n return;\n }\n table.mergeCells(\n Math.min(startCol, endCol),\n Math.min(startRow, endRow),\n Math.max(startCol, endCol),\n Math.max(startRow, endRow)\n );\n }\n }\n /**\n * 处理取消合并单元格\n */\n handleUnmergeCells(table: ListTable): void {\n if ((table.stateManager.select.ranges?.length ?? 0) === 1 && typeof (table as any).unmergeCells === 'function') {\n const { row: startRow, col: startCol } = table.stateManager.select.ranges[0].start;\n const { row: endRow, col: endCol } = table.stateManager.select.ranges[0].end;\n if (startCol === endCol && startRow === endRow) {\n return;\n }\n table.unmergeCells(\n Math.min(startCol, endCol),\n Math.min(startRow, endRow),\n Math.max(startCol, endCol),\n Math.max(startRow, endRow)\n );\n }\n }\n\n /**\n * 处理设置保护范围\n */\n handleSetProtection(table: ListTable): void {\n // 需要表格API支持\n }\n\n /**\n * 处理冻结到本行\n */\n handleFreezeToRow(table: ListTable, rowIndex?: number): void {\n if (rowIndex === undefined) {\n return;\n }\n\n table.frozenRowCount = rowIndex + 1;\n }\n\n /**\n * 处理冻结到本列\n */\n handleFreezeToColumn(table: ListTable, colIndex?: number): void {\n if (colIndex === undefined) {\n return;\n }\n\n table.frozenColCount = colIndex + 1;\n }\n\n /**\n * 处理冻结到本行本列\n */\n handleFreezeToRowAndColumn(table: ListTable, rowIndex?: number, colIndex?: number): void {\n if (rowIndex === undefined || colIndex === undefined) {\n return;\n }\n\n table.frozenRowCount = rowIndex + 1;\n table.frozenColCount = colIndex + 1;\n }\n\n /**\n * 处理取消冻结\n */\n handleUnfreeze(table: ListTable): void {\n table.frozenRowCount = 0;\n table.frozenColCount = 0;\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // // 移除全局事件监听\n // document.removeEventListener('copy', this.handleGlobalCopy);\n // document.removeEventListener('cut', this.handleGlobalCut);\n }\n}\n"]}
@@ -53,7 +53,7 @@ Object.defineProperty(exports, "__esModule", {
53
53
  value: !0
54
54
  }), exports.ExportGanttPlugin = void 0;
55
55
 
56
- const checkGanttDependency = () => {
56
+ const vrender_1 = require("@visactor/vtable/es/vrender"), checkGanttDependency = () => {
57
57
  try {
58
58
  return require.resolve("@visactor/vtable-gantt"), !0;
59
59
  } catch (e) {
@@ -79,7 +79,7 @@ class ExportGanttPlugin {
79
79
  try {
80
80
  const {tempContainer: tempContainer, clonedGantt: clonedGantt} = yield this.createFullSizeContainer(scale);
81
81
  try {
82
- yield new Promise((resolve => requestAnimationFrame(resolve)));
82
+ yield new Promise((resolve => vrender_1.vglobal.getRequestAnimationFrame()(resolve)));
83
83
  const totalWidth = (clonedGantt.taskListTableInstance.getAllColsWidth() + clonedGantt.getAllDateColsWidth()) * scale, totalHeight = clonedGantt.getAllRowsHeight() * scale, exportCanvas = document.createElement("canvas");
84
84
  exportCanvas.width = totalWidth, exportCanvas.height = totalHeight;
85
85
  const ctx = exportCanvas.getContext("2d");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gantt-export-image.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,IAAI;QAEF,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,CACV,4DAA4D;YAC1D,2CAA2C;YAC3C,uCAAuC,CAC1C,CAAC;QACF,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC;AAMF,MAAa,iBAAiB;IAK5B;QAJA,OAAE,GAAW,qBAAqB,CAAC;QACnC,SAAI,GAAG,qBAAqB,CAAC;QACrB,WAAM,GAAiB,IAAI,CAAC;QAIlC,oBAAoB,EAAE,CAAC;IACzB,CAAC;IAGD,GAAG,CAAC,GAAG,IAAW;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAU,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,OAAO;SACR;QACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;IAC9B,CAAC;IAQK,aAAa,CAAC,UAAyB,EAAE;;;YAE7C,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC3B,OAAO,SAAS,CAAC;aAClB;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAEhB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAClE,OAAO,SAAS,CAAC;aAClB;YAED,MAAM,EACJ,QAAQ,GAAG,cAAc,EACzB,IAAI,GAAG,KAAK,EACZ,OAAO,GAAG,CAAC,EACX,eAAe,GAAG,SAAS,EAC3B,KAAK,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,EACpC,QAAQ,GAAG,IAAI,EAChB,GAAG,OAAO,CAAC;YAEZ,IAAI;gBACF,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBAEjF,IAAI;oBACF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;oBAE7D,MAAM,UAAU,GACd,CAAC,WAAW,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,WAAW,CAAC,mBAAmB,EAAE,CAAC,GAAG,KAAK,CAAC;oBACpG,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,EAAE,GAAG,KAAK,CAAC;oBAE3D,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACtD,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;oBAChC,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;oBAClC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;oBAE3C,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC;oBAChC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;oBAE5C,IAAI,MAAA,WAAW,CAAC,qBAAqB,0CAAE,MAAM,EAAE;wBAC7C,GAAG,CAAC,SAAS,CACX,WAAW,CAAC,qBAAqB,CAAC,MAAM,EACxC,CAAC,EACD,CAAC,EACD,WAAW,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,KAAK,EAC3D,WAAW,CACZ,CAAC;qBACH;oBAED,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;oBACjC,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,KAAK,CAAC;oBAC/E,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;oBACrC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;oBAE9E,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC1B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;oBAEvD,IAAI,WAAW,CAAC,MAAM,EAAE;wBACtB,GAAG,CAAC,SAAS,CACX,WAAW,CAAC,MAAM,EAClB,OAAO,EACP,CAAC,EACD,WAAW,EACX,WAAW,CAAC,MAAM,CAAC,MAAM,EACzB,CAAC,WAAW,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,EACnE,CAAC,EACD,CAAC,WAAW,CAAC,mBAAmB,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,EACjD,WAAW,CACZ,CAAC;qBACH;oBAED,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;iBAC7E;wBAAS;oBACR,aAAa,CAAC,MAAM,EAAE,CAAC;oBAEvB,WAAW,CAAC,OAAO,EAAE,CAAC;iBACvB;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAChF;;KACF;IASK,cAAc,CAAC,UAA2C,EAAE;;YAEhE,OAAO,IAAI,CAAC,aAAa,iCACpB,OAAO,KACV,QAAQ,EAAE,KAAK,IACf,CAAC;QACL,CAAC;KAAA;IAEa,uBAAuB,CAAC,KAAa;;;YACjD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAEhB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;aACzF;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpD,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;YACvC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;YACrC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACxC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC;YAC3D,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC;YAC7D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAEzC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAEnD,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,UAAU,IAAI,CAAC;YAChD,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC;YAClD,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAE3C,IAAI;gBAEF,IAAI,UAAU,CAAC;gBACf,IAAI;oBACF,MAAM,MAAM,GAAG,wDAAa,wBAAwB,GAAC,CAAC;oBACtD,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC1B,IAAI,CAAC,UAAU,EAAE;wBACf,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;qBACpE;iBACF;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;oBACjC,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,yCAAyC,CACzF,CAAC;iBACH;gBAED,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,eAAe,kCAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,KACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAC5B,aAAa,kCACR,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,KACpC,UAAU,EAAE,SAA8B,EAC1C,aAAa,EAAE,SAA8B,EAC7C,aAAa,EAAE,SAA8B,KAE/C,OAAO,EAAE,EAAE,IACX,CAAC;gBAEH,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAGjC,IAAI,MAAC,WAAmB,CAAC,UAAU,0CAAE,UAAU,EAAE;oBAC9C,WAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBACxE;gBACD,IAAI,MAAA,MAAC,WAAW,CAAC,qBAA6B,0CAAE,UAAU,0CAAE,UAAU,EAAE;oBACrE,WAAW,CAAC,qBAA6B,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBAC9F;gBAED,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEtC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;aACvC;YAAC,OAAO,GAAG,EAAE;gBAEZ,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,EAAE;oBAC7C,aAAa,CAAC,MAAM,EAAE,CAAC;iBACxB;gBACD,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;;KACF;IACO,cAAc,CACpB,MAAyB,EACzB,QAAgB,EAChB,IAAY,EACZ,OAAe,EACf,WAAoB,IAAI;QAExB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAG1D,IAAI,QAAQ,EAAE;YACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF;AA9ND,8CA8NC","file":"gantt-export-image.js","sourcesContent":["/**\r\n * 这个文件提供了甘特图导出功能,但使用了懒加载方式避免强制依赖\r\n * 只有在实际使用时才会尝试加载 @visactor/vtable-gantt\r\n */\r\n\r\n// 使用类型声明而不是直接导入,避免静态依赖\r\ntype Gantt = any;\r\ninterface IGanttPlugin {\r\n id: string;\r\n name: string;\r\n run: (...args: any[]) => void;\r\n release?: () => void;\r\n}\r\n\r\n// 甘特图导出配置项接口\r\nexport interface ExportOptions {\r\n fileName?: string;\r\n type?: 'png' | 'jpeg';\r\n quality?: number;\r\n backgroundColor?: string;\r\n scale?: number;\r\n download?: boolean;\r\n}\r\n\r\n// 检查依赖是否可用\r\nconst checkGanttDependency = () => {\r\n try {\r\n // 不实际导入,只检查是否可用\r\n require.resolve('@visactor/vtable-gantt');\r\n return true;\r\n } catch (e) {\r\n console.warn(\r\n '警告: 使用 ExportGanttPlugin 需要安装 @visactor/vtable-gantt 依赖。\\n' +\r\n '请执行: npm install @visactor/vtable-gantt\\n' +\r\n '更多信息请参考文档: https://visactor.io/vtable'\r\n );\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 甘特图导出插件\r\n * @description 提供完整的甘特图导出功能,支持高分辨率输出和精准布局保留\r\n */\r\nexport class ExportGanttPlugin implements IGanttPlugin {\r\n id: string = `gantt-export-helper`;\r\n name = 'Gantt Export Helper';\r\n private _gantt: Gantt | null = null;\r\n\r\n constructor() {\r\n // 构造时提前检查依赖可用性,以便给开发者更早的反馈\r\n checkGanttDependency();\r\n }\r\n\r\n // run 方法,在插件初始化时由 PluginManager调用\r\n run(...args: any[]): void {\r\n const ganttInstance = args[0] as Gantt;\r\n if (!ganttInstance) {\r\n console.error('ExportGanttPlugin: Gantt instance not provided to run method.');\r\n return;\r\n }\r\n this._gantt = ganttInstance;\r\n }\r\n /**\r\n * 执行甘特图导出操作\r\n * @async\r\n * @param {ExportOptions} [options={}] 导出配置选项\r\n * @returns {Promise<string | undefined>} 返回Base64格式的图片数据,或在未初始化时返回 undefined\r\n * @throws {Error} 导出过程中发生错误时抛出异常\r\n */\r\n async exportToImage(options: ExportOptions = {}): Promise<string | undefined> {\r\n // 初始检查依赖是否存在\r\n if (!checkGanttDependency()) {\r\n return undefined;\r\n }\r\n\r\n if (!this._gantt) {\r\n // 保留这个 error\r\n console.error('ExportGanttPlugin: Gantt instance not available.');\r\n return undefined;\r\n }\r\n\r\n const {\r\n fileName = 'gantt-export',\r\n type = 'png',\r\n quality = 1,\r\n backgroundColor = '#ffffff',\r\n scale = window.devicePixelRatio || 1,\r\n download = true // 默认执行下载\r\n } = options;\r\n\r\n try {\r\n const { tempContainer, clonedGantt } = await this.createFullSizeContainer(scale);\r\n\r\n try {\r\n await new Promise(resolve => requestAnimationFrame(resolve));\r\n\r\n const totalWidth =\r\n (clonedGantt.taskListTableInstance.getAllColsWidth() + clonedGantt.getAllDateColsWidth()) * scale;\r\n const totalHeight = clonedGantt.getAllRowsHeight() * scale;\r\n\r\n const exportCanvas = document.createElement('canvas');\r\n exportCanvas.width = totalWidth;\r\n exportCanvas.height = totalHeight;\r\n const ctx = exportCanvas.getContext('2d')!;\r\n\r\n ctx.fillStyle = backgroundColor;\r\n ctx.fillRect(0, 0, totalWidth, totalHeight);\r\n\r\n if (clonedGantt.taskListTableInstance?.canvas) {\r\n ctx.drawImage(\r\n clonedGantt.taskListTableInstance.canvas,\r\n 0,\r\n 0,\r\n clonedGantt.taskListTableInstance.getAllColsWidth() * scale,\r\n totalHeight\r\n );\r\n }\r\n\r\n const splitLineWidth = 3 * scale;\r\n const splitLineX = clonedGantt.taskListTableInstance.getAllColsWidth() * scale;\r\n ctx.fillStyle = 'rgb(225, 228, 232)';\r\n ctx.fillRect(splitLineX - splitLineWidth / 2, 0, splitLineWidth, totalHeight);\r\n\r\n const sourceX = 4 * scale;\r\n const sourceWidth = clonedGantt.canvas.width - sourceX;\r\n\r\n if (clonedGantt.canvas) {\r\n ctx.drawImage(\r\n clonedGantt.canvas,\r\n sourceX,\r\n 0,\r\n sourceWidth,\r\n clonedGantt.canvas.height,\r\n (clonedGantt.taskListTableInstance.getAllColsWidth() + 1.5) * scale,\r\n 0,\r\n (clonedGantt.getAllDateColsWidth() - 1.5) * scale,\r\n totalHeight\r\n );\r\n }\r\n\r\n return this.finalizeExport(exportCanvas, fileName, type, quality, download);\r\n } finally {\r\n tempContainer.remove();\r\n // 确保克隆的甘特图实例被释放\r\n clonedGantt.release();\r\n }\r\n } catch (error) {\r\n console.error('[Gantt Export Plugin] Export failed:', error);\r\n throw new Error(`甘特图导出失败: ${error instanceof Error ? error.message : '未知错误'}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取甘特图的 Base64 图片数据,不触发下载\r\n * @async\r\n * @param {Omit<ExportOptions, 'download'>} [options={}] 导出配置选项(不包含 download 参数)\r\n * @returns {Promise<string | undefined>} 返回 Base64 格式的图片数据,或在未初始化时返回 undefined\r\n * @throws {Error} 导出过程中发生错误时抛出异常\r\n */\r\n async exportToBase64(options: Omit<ExportOptions, 'download'> = {}): Promise<string | undefined> {\r\n // 调用 exportToImage 方法,但设置 download 为 false\r\n return this.exportToImage({\r\n ...options,\r\n download: false\r\n });\r\n }\r\n\r\n private async createFullSizeContainer(scale: number) {\r\n if (!this._gantt) {\r\n // 保留这个 error\r\n throw new Error('ExportGanttPlugin: Gantt instance not available to create container.');\r\n }\r\n\r\n const tempContainer = document.createElement('div');\r\n tempContainer.style.position = 'fixed';\r\n tempContainer.style.left = '-9999px';\r\n tempContainer.style.overflow = 'hidden';\r\n tempContainer.style.width = `${window.innerWidth + 100}px`;\r\n tempContainer.style.height = `${window.innerHeight + 100}px`;\r\n document.body.appendChild(tempContainer);\r\n\r\n const clonedContainer = document.createElement('div');\r\n\r\n const totalWidth = this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.getAllDateColsWidth();\r\n const totalHeight = this._gantt.getAllRowsHeight();\r\n\r\n clonedContainer.style.width = `${totalWidth}px`;\r\n clonedContainer.style.height = `${totalHeight}px`;\r\n tempContainer.appendChild(clonedContainer);\r\n\r\n try {\r\n // 动态导入甘特图组件\r\n let GanttClass;\r\n try {\r\n const module = await import('@visactor/vtable-gantt');\r\n GanttClass = module.Gantt;\r\n if (!GanttClass) {\r\n throw new Error('Gantt class not found in @visactor/vtable-gantt');\r\n }\r\n } catch (err) {\r\n console.error('无法加载甘特图组件:', err);\r\n throw new Error(\r\n '导出甘特图需要安装并正确加载 @visactor/vtable-gantt 依赖\\n' + '请执行: npm install @visactor/vtable-gantt'\r\n );\r\n }\r\n\r\n const clonedGantt = new GanttClass(clonedContainer, {\r\n ...this._gantt.options,\r\n records: this._gantt.records,\r\n taskListTable: {\r\n ...this._gantt.options.taskListTable,\r\n tableWidth: undefined as unknown as number,\r\n minTableWidth: undefined as unknown as number,\r\n maxTableWidth: undefined as unknown as number\r\n },\r\n plugins: []\r\n });\r\n\r\n clonedGantt.setPixelRatio(scale);\r\n\r\n // 禁用裁剪\r\n if ((clonedGantt as any).scenegraph?.ganttGroup) {\r\n (clonedGantt as any).scenegraph.ganttGroup.setAttribute('clip', false);\r\n }\r\n if ((clonedGantt.taskListTableInstance as any)?.scenegraph?.tableGroup) {\r\n (clonedGantt.taskListTableInstance as any).scenegraph.tableGroup.setAttribute('clip', false);\r\n }\r\n\r\n clonedGantt.scenegraph.stage.render();\r\n\r\n return { tempContainer, clonedGantt };\r\n } catch (err) {\r\n // 清理创建的DOM元素\r\n if (tempContainer && tempContainer.parentNode) {\r\n tempContainer.remove();\r\n }\r\n console.error('无法导入甘特图组件,请确保已安装 @visactor/vtable-gantt 依赖', err);\r\n throw new Error('导出甘特图需要安装 @visactor/vtable-gantt 依赖');\r\n }\r\n }\r\n private finalizeExport(\r\n canvas: HTMLCanvasElement,\r\n fileName: string,\r\n type: string,\r\n quality: number,\r\n download: boolean = true\r\n ): string {\r\n const base64 = canvas.toDataURL(`image/${type}`, quality);\r\n\r\n // 如果需要下载,则创建下载链接\r\n if (download) {\r\n const link = document.createElement('a');\r\n link.download = `${fileName}.${type}`;\r\n link.href = base64;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n return base64;\r\n }\r\n\r\n release(): void {\r\n this._gantt = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/gantt-export-image.ts"],"names":[],"mappings":"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","file":"gantt-export-image.js","sourcesContent":["/**\r\n * 这个文件提供了甘特图导出功能,但使用了懒加载方式避免强制依赖\r\n * 只有在实际使用时才会尝试加载 @visactor/vtable-gantt\r\n */\r\nimport { vglobal } from '@visactor/vtable/es/vrender';\r\n// 使用类型声明而不是直接导入,避免静态依赖\r\ntype Gantt = any;\r\ninterface IGanttPlugin {\r\n id: string;\r\n name: string;\r\n run: (...args: any[]) => void;\r\n release?: () => void;\r\n}\r\n\r\n// 甘特图导出配置项接口\r\nexport interface ExportOptions {\r\n fileName?: string;\r\n type?: 'png' | 'jpeg';\r\n quality?: number;\r\n backgroundColor?: string;\r\n scale?: number;\r\n download?: boolean;\r\n}\r\n\r\n// 检查依赖是否可用\r\nconst checkGanttDependency = () => {\r\n try {\r\n // 不实际导入,只检查是否可用\r\n require.resolve('@visactor/vtable-gantt');\r\n return true;\r\n } catch (e) {\r\n console.warn(\r\n '警告: 使用 ExportGanttPlugin 需要安装 @visactor/vtable-gantt 依赖。\\n' +\r\n '请执行: npm install @visactor/vtable-gantt\\n' +\r\n '更多信息请参考文档: https://visactor.io/vtable'\r\n );\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 甘特图导出插件\r\n * @description 提供完整的甘特图导出功能,支持高分辨率输出和精准布局保留\r\n */\r\nexport class ExportGanttPlugin implements IGanttPlugin {\r\n id: string = `gantt-export-helper`;\r\n name = 'Gantt Export Helper';\r\n private _gantt: Gantt | null = null;\r\n\r\n constructor() {\r\n // 构造时提前检查依赖可用性,以便给开发者更早的反馈\r\n checkGanttDependency();\r\n }\r\n\r\n // run 方法,在插件初始化时由 PluginManager调用\r\n run(...args: any[]): void {\r\n const ganttInstance = args[0] as Gantt;\r\n if (!ganttInstance) {\r\n console.error('ExportGanttPlugin: Gantt instance not provided to run method.');\r\n return;\r\n }\r\n this._gantt = ganttInstance;\r\n }\r\n /**\r\n * 执行甘特图导出操作\r\n * @async\r\n * @param {ExportOptions} [options={}] 导出配置选项\r\n * @returns {Promise<string | undefined>} 返回Base64格式的图片数据,或在未初始化时返回 undefined\r\n * @throws {Error} 导出过程中发生错误时抛出异常\r\n */\r\n async exportToImage(options: ExportOptions = {}): Promise<string | undefined> {\r\n // 初始检查依赖是否存在\r\n if (!checkGanttDependency()) {\r\n return undefined;\r\n }\r\n\r\n if (!this._gantt) {\r\n // 保留这个 error\r\n console.error('ExportGanttPlugin: Gantt instance not available.');\r\n return undefined;\r\n }\r\n\r\n const {\r\n fileName = 'gantt-export',\r\n type = 'png',\r\n quality = 1,\r\n backgroundColor = '#ffffff',\r\n scale = window.devicePixelRatio || 1,\r\n download = true // 默认执行下载\r\n } = options;\r\n\r\n try {\r\n const { tempContainer, clonedGantt } = await this.createFullSizeContainer(scale);\r\n\r\n try {\r\n await new Promise(resolve => vglobal.getRequestAnimationFrame()(resolve));\r\n\r\n const totalWidth =\r\n (clonedGantt.taskListTableInstance.getAllColsWidth() + clonedGantt.getAllDateColsWidth()) * scale;\r\n const totalHeight = clonedGantt.getAllRowsHeight() * scale;\r\n\r\n const exportCanvas = document.createElement('canvas');\r\n exportCanvas.width = totalWidth;\r\n exportCanvas.height = totalHeight;\r\n const ctx = exportCanvas.getContext('2d')!;\r\n\r\n ctx.fillStyle = backgroundColor;\r\n ctx.fillRect(0, 0, totalWidth, totalHeight);\r\n\r\n if (clonedGantt.taskListTableInstance?.canvas) {\r\n ctx.drawImage(\r\n clonedGantt.taskListTableInstance.canvas,\r\n 0,\r\n 0,\r\n clonedGantt.taskListTableInstance.getAllColsWidth() * scale,\r\n totalHeight\r\n );\r\n }\r\n\r\n const splitLineWidth = 3 * scale;\r\n const splitLineX = clonedGantt.taskListTableInstance.getAllColsWidth() * scale;\r\n ctx.fillStyle = 'rgb(225, 228, 232)';\r\n ctx.fillRect(splitLineX - splitLineWidth / 2, 0, splitLineWidth, totalHeight);\r\n\r\n const sourceX = 4 * scale;\r\n const sourceWidth = clonedGantt.canvas.width - sourceX;\r\n\r\n if (clonedGantt.canvas) {\r\n ctx.drawImage(\r\n clonedGantt.canvas,\r\n sourceX,\r\n 0,\r\n sourceWidth,\r\n clonedGantt.canvas.height,\r\n (clonedGantt.taskListTableInstance.getAllColsWidth() + 1.5) * scale,\r\n 0,\r\n (clonedGantt.getAllDateColsWidth() - 1.5) * scale,\r\n totalHeight\r\n );\r\n }\r\n\r\n return this.finalizeExport(exportCanvas, fileName, type, quality, download);\r\n } finally {\r\n tempContainer.remove();\r\n // 确保克隆的甘特图实例被释放\r\n clonedGantt.release();\r\n }\r\n } catch (error) {\r\n console.error('[Gantt Export Plugin] Export failed:', error);\r\n throw new Error(`甘特图导出失败: ${error instanceof Error ? error.message : '未知错误'}`);\r\n }\r\n }\r\n\r\n /**\r\n * 获取甘特图的 Base64 图片数据,不触发下载\r\n * @async\r\n * @param {Omit<ExportOptions, 'download'>} [options={}] 导出配置选项(不包含 download 参数)\r\n * @returns {Promise<string | undefined>} 返回 Base64 格式的图片数据,或在未初始化时返回 undefined\r\n * @throws {Error} 导出过程中发生错误时抛出异常\r\n */\r\n async exportToBase64(options: Omit<ExportOptions, 'download'> = {}): Promise<string | undefined> {\r\n // 调用 exportToImage 方法,但设置 download 为 false\r\n return this.exportToImage({\r\n ...options,\r\n download: false\r\n });\r\n }\r\n\r\n private async createFullSizeContainer(scale: number) {\r\n if (!this._gantt) {\r\n // 保留这个 error\r\n throw new Error('ExportGanttPlugin: Gantt instance not available to create container.');\r\n }\r\n\r\n const tempContainer = document.createElement('div');\r\n tempContainer.style.position = 'fixed';\r\n tempContainer.style.left = '-9999px';\r\n tempContainer.style.overflow = 'hidden';\r\n tempContainer.style.width = `${window.innerWidth + 100}px`;\r\n tempContainer.style.height = `${window.innerHeight + 100}px`;\r\n document.body.appendChild(tempContainer);\r\n\r\n const clonedContainer = document.createElement('div');\r\n\r\n const totalWidth = this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.getAllDateColsWidth();\r\n const totalHeight = this._gantt.getAllRowsHeight();\r\n\r\n clonedContainer.style.width = `${totalWidth}px`;\r\n clonedContainer.style.height = `${totalHeight}px`;\r\n tempContainer.appendChild(clonedContainer);\r\n\r\n try {\r\n // 动态导入甘特图组件\r\n let GanttClass;\r\n try {\r\n const module = await import('@visactor/vtable-gantt');\r\n GanttClass = module.Gantt;\r\n if (!GanttClass) {\r\n throw new Error('Gantt class not found in @visactor/vtable-gantt');\r\n }\r\n } catch (err) {\r\n console.error('无法加载甘特图组件:', err);\r\n throw new Error(\r\n '导出甘特图需要安装并正确加载 @visactor/vtable-gantt 依赖\\n' + '请执行: npm install @visactor/vtable-gantt'\r\n );\r\n }\r\n\r\n const clonedGantt = new GanttClass(clonedContainer, {\r\n ...this._gantt.options,\r\n records: this._gantt.records,\r\n taskListTable: {\r\n ...this._gantt.options.taskListTable,\r\n tableWidth: undefined as unknown as number,\r\n minTableWidth: undefined as unknown as number,\r\n maxTableWidth: undefined as unknown as number\r\n },\r\n plugins: []\r\n });\r\n\r\n clonedGantt.setPixelRatio(scale);\r\n\r\n // 禁用裁剪\r\n if ((clonedGantt as any).scenegraph?.ganttGroup) {\r\n (clonedGantt as any).scenegraph.ganttGroup.setAttribute('clip', false);\r\n }\r\n if ((clonedGantt.taskListTableInstance as any)?.scenegraph?.tableGroup) {\r\n (clonedGantt.taskListTableInstance as any).scenegraph.tableGroup.setAttribute('clip', false);\r\n }\r\n\r\n clonedGantt.scenegraph.stage.render();\r\n\r\n return { tempContainer, clonedGantt };\r\n } catch (err) {\r\n // 清理创建的DOM元素\r\n if (tempContainer && tempContainer.parentNode) {\r\n tempContainer.remove();\r\n }\r\n console.error('无法导入甘特图组件,请确保已安装 @visactor/vtable-gantt 依赖', err);\r\n throw new Error('导出甘特图需要安装 @visactor/vtable-gantt 依赖');\r\n }\r\n }\r\n private finalizeExport(\r\n canvas: HTMLCanvasElement,\r\n fileName: string,\r\n type: string,\r\n quality: number,\r\n download: boolean = true\r\n ): string {\r\n const base64 = canvas.toDataURL(`image/${type}`, quality);\r\n\r\n // 如果需要下载,则创建下载链接\r\n if (download) {\r\n const link = document.createElement('a');\r\n link.download = `${fileName}.${type}`;\r\n link.href = base64;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n return base64;\r\n }\r\n\r\n release(): void {\r\n this._gantt = null;\r\n }\r\n}\r\n"]}
@@ -24,6 +24,7 @@ export declare class TableSeriesNumber implements pluginsDefinition.IVTablePlugi
24
24
  private handleSelectedChanged;
25
25
  private handleResizeColumnEnd;
26
26
  private handleResizeRowEnd;
27
+ private handleChangeHeaderPosition;
27
28
  listenTableEvents(): void;
28
29
  private handleSeriesNumberCellRightClick;
29
30
  private handleSeriesNumberCellHover;
@@ -33,6 +34,8 @@ export declare class TableSeriesNumber implements pluginsDefinition.IVTablePlugi
33
34
  private handleRowSeriesNumberWidthChange;
34
35
  private handleResizeColWidthStart;
35
36
  private handleResizeRowHeightStart;
37
+ private handleDragColumOrderStart;
38
+ private handleDragRowOrderStart;
36
39
  listenComponentEvents(): void;
37
40
  release(): void;
38
41
  syncRowHeightToComponent(): void;
@@ -35,6 +35,8 @@ class TableSeriesNumber {
35
35
  this.seriesNumberComponent.setAttribute("hover", !0);
36
36
  }, this.handleResizeRowEnd = e => {
37
37
  this.seriesNumberComponent.setAttribute("hover", !0);
38
+ }, this.handleChangeHeaderPosition = e => {
39
+ this.syncColWidthToComponent();
38
40
  }, this.handleSeriesNumberCellRightClick = e => {
39
41
  const {seriesNumberCell: seriesNumberCell, event: event, isDragSelect: isDragSelect} = e.detail, isRow = seriesNumberCell.name.includes("row"), isCol = seriesNumberCell.name.includes("col");
40
42
  if (isRow) {
@@ -123,6 +125,14 @@ class TableSeriesNumber {
123
125
  const {rowIndex: rowIndex, event: event} = e.detail;
124
126
  this.table.stateManager.updateInteractionState(vtable_1.TYPES.InteractionState.grabing),
125
127
  this.table.stateManager.startResizeRow(rowIndex, event.viewport.x, event.viewport.y);
128
+ }, this.handleDragColumOrderStart = e => {
129
+ const {colIndex: colIndex, event: event} = e.detail;
130
+ this.table.stateManager.updateInteractionState(vtable_1.TYPES.InteractionState.grabing),
131
+ this.table.stateManager.startMoveCol(colIndex, 0, event.viewport.x, event.viewport.y, event.nativeEvent, "column");
132
+ }, this.handleDragRowOrderStart = e => {
133
+ const {rowIndex: rowIndex, event: event} = e.detail;
134
+ this.table.stateManager.updateInteractionState(vtable_1.TYPES.InteractionState.grabing),
135
+ this.table.stateManager.startMoveCol(0, rowIndex, event.viewport.x, event.viewport.y, event.nativeEvent, "row");
126
136
  }, this.pluginOptions = pluginOptions, this.seriesNumberComponent = new vrender_1.TableSeriesNumber({
127
137
  rowCount: pluginOptions.rowCount,
128
138
  colCount: pluginOptions.colCount,
@@ -199,7 +209,9 @@ class TableSeriesNumber {
199
209
  opacity: 1
200
210
  }
201
211
  }
202
- }, pluginOptions.cornerCellStyle)
212
+ }, pluginOptions.cornerCellStyle),
213
+ checkMoveColumnOrder: colIndex => this.table.isColumnSelected(colIndex),
214
+ checkMoveRowOrder: rowIndex => this.table.isRowSelected(rowIndex)
203
215
  }), this.listenComponentEvents();
204
216
  }
205
217
  run(...args) {
@@ -242,7 +254,8 @@ class TableSeriesNumber {
242
254
  this.table.on(vtable_1.TABLE_EVENT_TYPE.SCROLL, this.handleScroll), this.table.on(vtable_1.TABLE_EVENT_TYPE.AFTER_SORT, this.handleAfterSort),
243
255
  this.table.on(vtable_1.TABLE_EVENT_TYPE.SELECTED_CHANGED, this.handleSelectedChanged),
244
256
  this.table.on(vtable_1.TABLE_EVENT_TYPE.RESIZE_COLUMN_END, this.handleResizeColumnEnd),
245
- this.table.on(vtable_1.TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd);
257
+ this.table.on(vtable_1.TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd),
258
+ this.table.on(vtable_1.TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, this.handleChangeHeaderPosition);
246
259
  }
247
260
  listenComponentEvents() {
248
261
  this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.seriesNumberCellRightClick, this.handleSeriesNumberCellRightClick),
@@ -252,7 +265,9 @@ class TableSeriesNumber {
252
265
  this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.seriesNumberCellClickUp, this.handleSeriesNumberCellClickUp),
253
266
  this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.rowSeriesNumberWidthChange, this.handleRowSeriesNumberWidthChange),
254
267
  this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.resizeColWidthStart, this.handleResizeColWidthStart),
255
- this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart);
268
+ this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart),
269
+ this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.dragColumnOrderStart, this.handleDragColumOrderStart),
270
+ this.seriesNumberComponent.on(vrender_1.SeriesNumberEvent.dragRowOrderStart, this.handleDragRowOrderStart);
256
271
  }
257
272
  release() {
258
273
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/table-series-number.ts"],"names":[],"mappings":"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","file":"table-series-number.js","sourcesContent":["import type { BaseTableAPI, ListTable, ListTableConstructorOptions, pluginsDefinition } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE, TYPES } from '@visactor/vtable';\nimport { TableSeriesNumber as VRenderTableSeriesNumber, SeriesNumberEvent } from '@visactor/vtable/es/vrender';\nimport type { ILayer, TableSeriesNumberAttributes } from '@visactor/vtable/es/vrender';\n\nexport type TableSeriesNumberOptions = {\n rowCount: number;\n colCount: number;\n // syncRowHeightFromTable?: boolean;\n // syncColWidthFromTable?: boolean;\n} & Partial<\n Pick<\n TableSeriesNumberAttributes,\n | 'rowSeriesNumberGenerate'\n | 'colSeriesNumberGenerate'\n | 'rowSeriesNumberCellStyle'\n | 'colSeriesNumberCellStyle'\n | 'cornerCellStyle'\n | 'colSeriesNumberHeight'\n | 'rowSeriesNumberWidth'\n >\n>;\nexport class TableSeriesNumber implements pluginsDefinition.IVTablePlugin {\n id = `table-series-number`;\n name = 'Table Series Number';\n runTime = [\n TABLE_EVENT_TYPE.INITIALIZED,\n TABLE_EVENT_TYPE.BEFORE_INIT,\n TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION,\n TABLE_EVENT_TYPE.UPDATED\n ];\n pluginOptions: TableSeriesNumberOptions;\n table: ListTable;\n seriesNumberComponent: VRenderTableSeriesNumber;\n componentLayoutLayer: ILayer;\n lastCurrentRow: number = 0;\n lastCurrentCol: number = 0;\n startRowIndex: number = 0;\n scrollTimer: any;\n constructor(pluginOptions: TableSeriesNumberOptions) {\n this.pluginOptions = pluginOptions;\n this.seriesNumberComponent = new VRenderTableSeriesNumber({\n rowCount: pluginOptions.rowCount,\n colCount: pluginOptions.colCount,\n rowSeriesNumberWidth: pluginOptions.rowSeriesNumberWidth,\n colSeriesNumberHeight: pluginOptions.colSeriesNumberHeight,\n rowSeriesNumberGenerate: pluginOptions.rowSeriesNumberGenerate,\n colSeriesNumberGenerate: pluginOptions.colSeriesNumberGenerate,\n rowSeriesNumberCellStyle: Object.assign(\n {\n text: {\n fontSize: 14,\n fill: '#7A7A7A',\n pickable: false,\n textAlign: 'left',\n textBaseline: 'middle',\n padding: [2, 4, 2, 4]\n },\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#c8daf6',\n opacity: 0.7\n },\n select: {\n fill: '#c8daf6',\n opacity: 1\n }\n }\n },\n pluginOptions.rowSeriesNumberCellStyle\n ),\n colSeriesNumberCellStyle: Object.assign(\n {\n text: {\n fontSize: 14,\n fill: '#7A7A7A',\n pickable: false,\n textAlign: 'left',\n textBaseline: 'middle',\n padding: [2, 4, 2, 4]\n },\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#c8daf6',\n opacity: 0.7\n },\n select: {\n fill: '#c8daf6',\n opacity: 1\n }\n }\n },\n pluginOptions.colSeriesNumberCellStyle\n ),\n cornerCellStyle: Object.assign(\n {\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#98C8A5',\n opacity: 0.7\n },\n select: {\n fill: '#98C8A5',\n opacity: 1\n }\n }\n },\n pluginOptions.cornerCellStyle\n )\n });\n this.listenComponentEvents();\n }\n\n run(...args: any[]) {\n // const eventArgs = args[0];\n const runTime = args[1];\n if (runTime === TABLE_EVENT_TYPE.BEFORE_INIT || runTime === TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION) {\n const eventArgs = args[0];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n const options: ListTableConstructorOptions = eventArgs.options;\n const records = options.records ?? [];\n // //用空数据将records填充到pluginOptions.rowCount\n // for (let i = records.length; i < this.pluginOptions.rowCount; i++) {\n // records.push({});\n // }\n // 直接设置数组长度,不填充任何内容\n if (records.length < this.pluginOptions.rowCount) {\n records.length = this.pluginOptions.rowCount;\n }\n options.records = records;\n if (!options.columns) {\n options.columns = [];\n }\n for (let i = options.columns.length; i < this.pluginOptions.colCount; i++) {\n const columnFields = {\n field: i,\n title: ``\n };\n options.columns.push(columnFields);\n }\n const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n options.contentOffsetX = rowSeriesNumberColWidth;\n options.contentOffsetY = colSeriesNumberRowHeight;\n // if (options.columns.length < this.pluginOptions.colCount) {\n // options.columns.length = this.pluginOptions.colCount;\n // }\n } else if (runTime === TABLE_EVENT_TYPE.INITIALIZED || runTime === TABLE_EVENT_TYPE.UPDATED) {\n this.table = args[2];\n if (!this.table.options.customConfig) {\n this.table.options.customConfig = {};\n }\n this.table.options.customConfig.cancelSelectCellHook = (e: any) => {\n const target = e.target;\n if (target.isDescendantsOf(this.seriesNumberComponent)) {\n return false;\n }\n return true;\n };\n\n // const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n // const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n // // this.table.scenegraph.stage.defaultLayer.setAttributes({\n // // x: rowSeriesNumberColWidth,\n // // y: colSeriesNumberRowHeight,\n // // width: 1700,\n // // height: 500,\n // // clip: true\n // // });\n // this.table.setTranslate(colSeriesNumberRowHeight, rowSeriesNumberColWidth);\n this.seriesNumberComponent.setAttributes({\n rowCount: this.table.rowCount,\n colCount: this.table.colCount,\n frozenRowCount: this.table.frozenRowCount,\n frozenColCount: this.table.frozenColCount,\n rightFrozenColCount: this.table.rightFrozenColCount,\n bottomFrozenRowCount: this.table.bottomFrozenRowCount\n });\n // add到layer上时会触发组件的render方法\n const newLayer = this.table.scenegraph.stage.createLayer();\n newLayer.appendChild(this.seriesNumberComponent);\n newLayer.setAttributes({ pickable: false });\n this.componentLayoutLayer = newLayer;\n\n // if (this.pluginOptions.syncRowHeightFromTable) {\n this.syncRowHeightToComponent();\n // }\n // if (this.pluginOptions.syncColWidthFromTable) {\n this.syncColWidthToComponent();\n // }\n\n this.listenTableEvents();\n }\n }\n private handleScroll = () => {\n //节流处理,避免滚动时频繁触发\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n this.scrollTimer = setTimeout(() => {\n this.scrollTimer = null;\n this.syncScrollToComponent();\n }, 10); // 优化: 由5ms改为10ms,减少频繁触发\n };\n\n private handleAfterSort = () => {\n this.syncScrollToComponent();\n };\n\n private handleSelectedChanged = (e: any) => {\n this.seriesNumberComponent.removeAllSelectedIndexs();\n const selectRange = this.table.stateManager.select.ranges;\n\n const rowSelectedIndexs = [];\n const colSelectedIndexs = [];\n for (const range of selectRange) {\n const { row: rowStart, col: colStart } = range.start;\n const { row: rowEnd, col: colEnd } = range.end;\n rowSelectedIndexs.push({ startIndex: Math.min(rowStart, rowEnd), endIndex: Math.max(rowStart, rowEnd) });\n colSelectedIndexs.push({ startIndex: Math.min(colStart, colEnd), endIndex: Math.max(colStart, colEnd) });\n }\n this.seriesNumberComponent.addRowSelectedRanges(rowSelectedIndexs);\n this.seriesNumberComponent.addColSelectedRanges(colSelectedIndexs);\n if (this.table.stateManager.select.isSelectAll) {\n this.seriesNumberComponent.addCornderSelected();\n }\n\n this.seriesNumberComponent.renderSelectedIndexsState();\n };\n\n private handleResizeColumnEnd = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', true);\n };\n\n private handleResizeRowEnd = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', true);\n };\n\n listenTableEvents() {\n this.table.on(TABLE_EVENT_TYPE.SCROLL, this.handleScroll);\n this.table.on(TABLE_EVENT_TYPE.AFTER_SORT, this.handleAfterSort);\n this.table.on(TABLE_EVENT_TYPE.SELECTED_CHANGED, this.handleSelectedChanged);\n this.table.on(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, this.handleResizeColumnEnd);\n this.table.on(TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd);\n }\n\n private handleSeriesNumberCellRightClick = (e: any) => {\n const { seriesNumberCell, event, isDragSelect } = e.detail;\n const isRow = seriesNumberCell.name.includes('row');\n const isCol = seriesNumberCell.name.includes('col');\n if (isRow) {\n const rowIndex = seriesNumberCell.id;\n //判断rowIndex整行是否被选中\n const isRowSelected = this.table.stateManager.select.ranges.some(range => {\n return (\n range.start.row <= rowIndex &&\n rowIndex <= range.end.row &&\n range.start.col === 0 &&\n range.end.col === this.table.colCount - 1\n );\n });\n //当前右键的行号 没有整行被选中,则进行选中\n if (!isRowSelected) {\n this.table.selectCells([\n { start: { row: rowIndex, col: 0 }, end: { row: rowIndex, col: this.table.colCount - 1 } }\n ]);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n rowIndex: rowIndex\n }\n });\n } else if (isCol) {\n const colIndex = seriesNumberCell.id;\n //判断colIndex整列是否被选中\n const isColSelected = this.table.stateManager.select.ranges.some(range => {\n return (\n range.start.col <= colIndex &&\n colIndex <= range.end.col &&\n range.start.row === 0 &&\n range.end.row === this.table.rowCount - 1\n );\n });\n //当前右键的列号 没有整列被选中,则进行选中\n if (!isColSelected) {\n this.table.selectCells([\n { start: { row: 0, col: colIndex }, end: { row: this.table.rowCount - 1, col: colIndex } }\n ]);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n colIndex: colIndex\n }\n });\n } else {\n //直接全选\n this.table.selectCells([\n { start: { row: 0, col: 0 }, end: { row: this.table.rowCount - 1, col: this.table.colCount - 1 } }\n ]);\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n isCorner: true\n }\n });\n }\n };\n\n private handleSeriesNumberCellHover = (e: any) => {\n this.table.scenegraph.renderSceneGraph();\n };\n\n private handleSeriesNumberCellUnHover = (e: any) => {\n this.table.scenegraph.renderSceneGraph();\n };\n\n private handleSeriesNumberCellClick = (e: any) => {\n const { seriesNumberCell, event, isDragSelect } = e.detail;\n const ctrlMultiSelect = this.table.options.keyboardOptions?.ctrlMultiSelect ?? true;\n const shiftMultiSelect = (this.table.options.keyboardOptions as any)?.shiftMultiSelect ?? true;\n const enableCtrlSelectMode = (event.nativeEvent.ctrlKey || event.nativeEvent.metaKey) && ctrlMultiSelect;\n const enableShiftSelectMode = event.nativeEvent.shiftKey && shiftMultiSelect;\n const isRow = seriesNumberCell.name.includes('row');\n const isCol = seriesNumberCell.name.includes('col');\n if (isRow) {\n this.table.stateManager.setSelectInline('row');\n const rowIndex = seriesNumberCell.id;\n\n if (isDragSelect) {\n this.table.dragSelectRow(rowIndex, enableCtrlSelectMode);\n } else {\n this.table.startDragSelectRow(rowIndex, enableCtrlSelectMode, enableShiftSelectMode);\n }\n } else if (isCol) {\n this.table.stateManager.setSelectInline('col');\n const colIndex = seriesNumberCell.id;\n if (isDragSelect) {\n this.table.dragSelectCol(colIndex, enableCtrlSelectMode);\n } else {\n this.table.startDragSelectCol(colIndex, enableCtrlSelectMode, enableShiftSelectMode);\n }\n } else {\n this.table.eventManager.deelTableSelectAll();\n }\n };\n\n private handleSeriesNumberCellClickUp = (e: any) => {\n this.table.stateManager.setSelectInline(false);\n this.table.endDragSelect();\n };\n\n private handleRowSeriesNumberWidthChange = (e: any) => {\n const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n this.table.setContentInsetXY(rowSeriesNumberColWidth, colSeriesNumberRowHeight);\n };\n\n private handleResizeColWidthStart = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', false);\n const { colIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startResizeCol(colIndex, event.viewport.x, event.viewport.y);\n };\n\n private handleResizeRowHeightStart = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', false);\n const { rowIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startResizeRow(rowIndex, event.viewport.x, event.viewport.y);\n };\n\n listenComponentEvents() {\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellRightClick, this.handleSeriesNumberCellRightClick);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellHover, this.handleSeriesNumberCellHover);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellUnHover, this.handleSeriesNumberCellUnHover);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellClick, this.handleSeriesNumberCellClick);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellClickUp, this.handleSeriesNumberCellClickUp);\n this.seriesNumberComponent.on(SeriesNumberEvent.rowSeriesNumberWidthChange, this.handleRowSeriesNumberWidthChange);\n this.seriesNumberComponent.on(SeriesNumberEvent.resizeColWidthStart, this.handleResizeColWidthStart);\n this.seriesNumberComponent.on(SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart);\n }\n release() {\n // 清除组件资源\n if (this.componentLayoutLayer) {\n this.table.scenegraph.stage.removeLayer(this.componentLayoutLayer._uid);\n this.componentLayoutLayer = null;\n }\n\n // 清除定时器\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n\n // 移除表格事件监听器\n if (this.table) {\n this.table.off(TABLE_EVENT_TYPE.SCROLL, this.handleScroll);\n this.table.off(TABLE_EVENT_TYPE.AFTER_SORT, this.handleAfterSort);\n this.table.off(TABLE_EVENT_TYPE.SELECTED_CHANGED, this.handleSelectedChanged);\n this.table.off(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, this.handleResizeColumnEnd);\n this.table.off(TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd);\n }\n // 移除组件事件监听器\n if (this.seriesNumberComponent) {\n this.seriesNumberComponent.off(\n SeriesNumberEvent.seriesNumberCellRightClick,\n this.handleSeriesNumberCellRightClick\n );\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellHover, this.handleSeriesNumberCellHover);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellUnHover, this.handleSeriesNumberCellUnHover);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellClick, this.handleSeriesNumberCellClick);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellClickUp, this.handleSeriesNumberCellClickUp);\n this.seriesNumberComponent.off(\n SeriesNumberEvent.rowSeriesNumberWidthChange,\n this.handleRowSeriesNumberWidthChange\n );\n this.seriesNumberComponent.off(SeriesNumberEvent.resizeColWidthStart, this.handleResizeColWidthStart);\n this.seriesNumberComponent.off(SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart);\n\n // 释放组件资源\n this.seriesNumberComponent.release?.();\n this.seriesNumberComponent = null;\n }\n }\n\n syncRowHeightToComponent() {\n // console.log('syncRowHeightToComponent adjust', adjustStartRowIndex, adjustEndRowIndex);\n const { rowStart, rowEnd } = this.table.getBodyVisibleRowRange();\n const adjustStartRowIndex = Math.max(rowStart - 2, this.table.frozenRowCount);\n const adjustEndRowIndex = Math.min(rowEnd + 2, this.table.rowCount - 1);\n //判断seriesNumberComponent的冻结行数是否变化\n if (this.table.frozenRowCount !== (this.seriesNumberComponent.getAttributes() as any).frozenRowCount) {\n this.seriesNumberComponent.setAttributes({ frozenRowCount: this.table.frozenRowCount } as any);\n }\n // 调用行序号重建接口\n this.seriesNumberComponent.recreateCellsToRowSeriesNumberGroup(adjustStartRowIndex, adjustEndRowIndex);\n // 更新冻结行序号单元格的y和height\n for (let i = 0; i < this.table.frozenRowCount; i++) {\n const cellGroup = this.table.scenegraph.getCell(0, i);\n const cell_attrs = cellGroup.getAttributes();\n this.seriesNumberComponent.setRowSeriesNumberCellAttributes(i, { y: cell_attrs.y, height: cell_attrs.height });\n }\n\n // 更新行序号单元格的y和height\n for (let i = adjustStartRowIndex; i <= adjustEndRowIndex; i++) {\n const cellGroup = this.table.scenegraph.getCell(0, i);\n const cell_attrs = cellGroup.getAttributes();\n this.seriesNumberComponent.setRowSeriesNumberCellAttributes(i, { y: cell_attrs.y, height: cell_attrs.height });\n }\n }\n syncColWidthToComponent() {\n const { colStart, colEnd } = this.table.getBodyVisibleColRange();\n const adjustStartColIndex = colStart;\n const adjustEndColIndex = Math.min(colEnd, this.table.scenegraph.proxy.colEnd);\n // console.log('syncColWidthToComponent adjust', adjustStartColIndex, adjustEndColIndex);\n\n //判断seriesNumberComponent的冻结列数是否变化\n if (this.table.frozenColCount !== (this.seriesNumberComponent.getAttributes() as any).frozenColCount) {\n this.seriesNumberComponent.setAttributes({ frozenColCount: this.table.frozenColCount } as any);\n }\n // 调用列序号重建接口\n this.seriesNumberComponent.recreateCellsToColSeriesNumberGroup(adjustStartColIndex, adjustEndColIndex);\n //更新冻结列序号单元格的x和width\n for (let i = 0; i < this.table.frozenColCount; i++) {\n const colGroup = this.table.scenegraph.getColGroup(i);\n const cell_attrs = colGroup.getAttributes();\n this.seriesNumberComponent.setColSeriesNumberCellAttributes(i, { x: cell_attrs.x, width: cell_attrs.width });\n }\n // 更新列序号单元格的x和width\n for (let i = adjustStartColIndex; i <= adjustEndColIndex; i++) {\n const colGroup = this.table.scenegraph.getColGroup(i);\n const col_attrs = colGroup.getAttributes();\n this.seriesNumberComponent.setColSeriesNumberCellAttributes(i, { x: col_attrs.x, width: col_attrs.width });\n }\n }\n\n syncScrollToComponent() {\n //TODO 根据滚动方向,同步对应的序号组件的滚动\n this.syncRowHeightToComponent();\n this.syncColWidthToComponent();\n const y = this.table.scenegraph.bodyGroup.getAttributes().y;\n const x = this.table.scenegraph.bodyGroup.getAttributes().x;\n this.seriesNumberComponent.setRowSeriesNumberGroupAttributes({\n y: y + this.seriesNumberComponent.colSeriesNumberHeight\n });\n this.seriesNumberComponent.setColSeriesNumberGroupAttributes({\n x: x + this.seriesNumberComponent.rowSeriesNumberWidth\n });\n }\n // syncFrozenToComponent() {\n // const frozenRowCount = this.table.frozenRowCount;\n // const frozenColCount = this.table.frozenColCount;\n // this.seriesNumberComponent.setFrozenTopRow(frozenRowCount);\n // this.seriesNumberComponent.setFrozenLeftCol(frozenColCount);\n // }\n}\n"]}
1
+ {"version":3,"sources":["../src/table-series-number.ts"],"names":[],"mappings":"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","file":"table-series-number.js","sourcesContent":["import type { BaseTableAPI, ListTable, ListTableConstructorOptions, pluginsDefinition } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE, TYPES } from '@visactor/vtable';\nimport { TableSeriesNumber as VRenderTableSeriesNumber, SeriesNumberEvent } from '@visactor/vtable/es/vrender';\nimport type { ILayer, TableSeriesNumberAttributes } from '@visactor/vtable/es/vrender';\n\nexport type TableSeriesNumberOptions = {\n rowCount: number;\n colCount: number;\n // syncRowHeightFromTable?: boolean;\n // syncColWidthFromTable?: boolean;\n} & Partial<\n Pick<\n TableSeriesNumberAttributes,\n | 'rowSeriesNumberGenerate'\n | 'colSeriesNumberGenerate'\n | 'rowSeriesNumberCellStyle'\n | 'colSeriesNumberCellStyle'\n | 'cornerCellStyle'\n | 'colSeriesNumberHeight'\n | 'rowSeriesNumberWidth'\n >\n>;\nexport class TableSeriesNumber implements pluginsDefinition.IVTablePlugin {\n id = `table-series-number`;\n name = 'Table Series Number';\n runTime = [\n TABLE_EVENT_TYPE.INITIALIZED,\n TABLE_EVENT_TYPE.BEFORE_INIT,\n TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION,\n TABLE_EVENT_TYPE.UPDATED\n ];\n pluginOptions: TableSeriesNumberOptions;\n table: ListTable;\n seriesNumberComponent: VRenderTableSeriesNumber;\n componentLayoutLayer: ILayer;\n lastCurrentRow: number = 0;\n lastCurrentCol: number = 0;\n startRowIndex: number = 0;\n scrollTimer: any;\n constructor(pluginOptions: TableSeriesNumberOptions) {\n this.pluginOptions = pluginOptions;\n this.seriesNumberComponent = new VRenderTableSeriesNumber({\n rowCount: pluginOptions.rowCount,\n colCount: pluginOptions.colCount,\n rowSeriesNumberWidth: pluginOptions.rowSeriesNumberWidth,\n colSeriesNumberHeight: pluginOptions.colSeriesNumberHeight,\n rowSeriesNumberGenerate: pluginOptions.rowSeriesNumberGenerate,\n colSeriesNumberGenerate: pluginOptions.colSeriesNumberGenerate,\n rowSeriesNumberCellStyle: Object.assign(\n {\n text: {\n fontSize: 14,\n fill: '#7A7A7A',\n pickable: false,\n textAlign: 'left',\n textBaseline: 'middle',\n padding: [2, 4, 2, 4]\n },\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#c8daf6',\n opacity: 0.7\n },\n select: {\n fill: '#c8daf6',\n opacity: 1\n }\n }\n },\n pluginOptions.rowSeriesNumberCellStyle\n ),\n colSeriesNumberCellStyle: Object.assign(\n {\n text: {\n fontSize: 14,\n fill: '#7A7A7A',\n pickable: false,\n textAlign: 'left',\n textBaseline: 'middle',\n padding: [2, 4, 2, 4]\n },\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#c8daf6',\n opacity: 0.7\n },\n select: {\n fill: '#c8daf6',\n opacity: 1\n }\n }\n },\n pluginOptions.colSeriesNumberCellStyle\n ),\n cornerCellStyle: Object.assign(\n {\n borderLine: {\n stroke: '#D9D9D9',\n lineWidth: 1,\n pickable: false\n },\n bgColor: '#F9F9F9',\n states: {\n hover: {\n fill: '#98C8A5',\n opacity: 0.7\n },\n select: {\n fill: '#98C8A5',\n opacity: 1\n }\n }\n },\n pluginOptions.cornerCellStyle\n ),\n checkMoveColumnOrder: (colIndex: number) => {\n return this.table.isColumnSelected(colIndex);\n },\n checkMoveRowOrder: (rowIndex: number) => {\n return this.table.isRowSelected(rowIndex);\n }\n });\n this.listenComponentEvents();\n }\n\n run(...args: any[]) {\n // const eventArgs = args[0];\n const runTime = args[1];\n if (runTime === TABLE_EVENT_TYPE.BEFORE_INIT || runTime === TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION) {\n const eventArgs = args[0];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n const options: ListTableConstructorOptions = eventArgs.options;\n const records = options.records ?? [];\n // //用空数据将records填充到pluginOptions.rowCount\n // for (let i = records.length; i < this.pluginOptions.rowCount; i++) {\n // records.push({});\n // }\n // 直接设置数组长度,不填充任何内容\n if (records.length < this.pluginOptions.rowCount) {\n records.length = this.pluginOptions.rowCount;\n }\n options.records = records;\n if (!options.columns) {\n options.columns = [];\n }\n for (let i = options.columns.length; i < this.pluginOptions.colCount; i++) {\n const columnFields = {\n field: i,\n title: ``\n };\n options.columns.push(columnFields);\n }\n const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n options.contentOffsetX = rowSeriesNumberColWidth;\n options.contentOffsetY = colSeriesNumberRowHeight;\n // if (options.columns.length < this.pluginOptions.colCount) {\n // options.columns.length = this.pluginOptions.colCount;\n // }\n } else if (runTime === TABLE_EVENT_TYPE.INITIALIZED || runTime === TABLE_EVENT_TYPE.UPDATED) {\n this.table = args[2];\n if (!this.table.options.customConfig) {\n this.table.options.customConfig = {};\n }\n this.table.options.customConfig.cancelSelectCellHook = (e: any) => {\n const target = e.target;\n if (target.isDescendantsOf(this.seriesNumberComponent)) {\n return false;\n }\n return true;\n };\n\n // const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n // const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n // // this.table.scenegraph.stage.defaultLayer.setAttributes({\n // // x: rowSeriesNumberColWidth,\n // // y: colSeriesNumberRowHeight,\n // // width: 1700,\n // // height: 500,\n // // clip: true\n // // });\n // this.table.setTranslate(colSeriesNumberRowHeight, rowSeriesNumberColWidth);\n this.seriesNumberComponent.setAttributes({\n rowCount: this.table.rowCount,\n colCount: this.table.colCount,\n frozenRowCount: this.table.frozenRowCount,\n frozenColCount: this.table.frozenColCount,\n rightFrozenColCount: this.table.rightFrozenColCount,\n bottomFrozenRowCount: this.table.bottomFrozenRowCount\n });\n // add到layer上时会触发组件的render方法\n const newLayer = this.table.scenegraph.stage.createLayer();\n newLayer.appendChild(this.seriesNumberComponent);\n newLayer.setAttributes({ pickable: false });\n this.componentLayoutLayer = newLayer;\n\n // if (this.pluginOptions.syncRowHeightFromTable) {\n this.syncRowHeightToComponent();\n // }\n // if (this.pluginOptions.syncColWidthFromTable) {\n this.syncColWidthToComponent();\n // }\n\n this.listenTableEvents();\n }\n }\n private handleScroll = () => {\n //节流处理,避免滚动时频繁触发\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n this.scrollTimer = setTimeout(() => {\n this.scrollTimer = null;\n this.syncScrollToComponent();\n }, 10); // 优化: 由5ms改为10ms,减少频繁触发\n };\n\n private handleAfterSort = () => {\n this.syncScrollToComponent();\n };\n\n private handleSelectedChanged = (e: any) => {\n this.seriesNumberComponent.removeAllSelectedIndexs();\n const selectRange = this.table.stateManager.select.ranges;\n\n const rowSelectedIndexs = [];\n const colSelectedIndexs = [];\n for (const range of selectRange) {\n const { row: rowStart, col: colStart } = range.start;\n const { row: rowEnd, col: colEnd } = range.end;\n rowSelectedIndexs.push({ startIndex: Math.min(rowStart, rowEnd), endIndex: Math.max(rowStart, rowEnd) });\n colSelectedIndexs.push({ startIndex: Math.min(colStart, colEnd), endIndex: Math.max(colStart, colEnd) });\n }\n this.seriesNumberComponent.addRowSelectedRanges(rowSelectedIndexs);\n this.seriesNumberComponent.addColSelectedRanges(colSelectedIndexs);\n if (this.table.stateManager.select.isSelectAll) {\n this.seriesNumberComponent.addCornderSelected();\n }\n\n this.seriesNumberComponent.renderSelectedIndexsState();\n };\n\n private handleResizeColumnEnd = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', true);\n };\n\n private handleResizeRowEnd = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', true);\n };\n\n private handleChangeHeaderPosition = (e: any) => {\n console.log('-----handleChangeHeaderPosition');\n // this.seriesNumberComponent.render();\n this.syncColWidthToComponent();\n };\n\n listenTableEvents() {\n this.table.on(TABLE_EVENT_TYPE.SCROLL, this.handleScroll);\n this.table.on(TABLE_EVENT_TYPE.AFTER_SORT, this.handleAfterSort);\n this.table.on(TABLE_EVENT_TYPE.SELECTED_CHANGED, this.handleSelectedChanged);\n this.table.on(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, this.handleResizeColumnEnd);\n this.table.on(TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd);\n this.table.on(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION, this.handleChangeHeaderPosition);\n }\n\n private handleSeriesNumberCellRightClick = (e: any) => {\n const { seriesNumberCell, event, isDragSelect } = e.detail;\n const isRow = seriesNumberCell.name.includes('row');\n const isCol = seriesNumberCell.name.includes('col');\n if (isRow) {\n const rowIndex = seriesNumberCell.id;\n //判断rowIndex整行是否被选中\n const isRowSelected = this.table.stateManager.select.ranges.some(range => {\n return (\n range.start.row <= rowIndex &&\n rowIndex <= range.end.row &&\n range.start.col === 0 &&\n range.end.col === this.table.colCount - 1\n );\n });\n //当前右键的行号 没有整行被选中,则进行选中\n if (!isRowSelected) {\n this.table.selectCells([\n { start: { row: rowIndex, col: 0 }, end: { row: rowIndex, col: this.table.colCount - 1 } }\n ]);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n rowIndex: rowIndex\n }\n });\n } else if (isCol) {\n const colIndex = seriesNumberCell.id;\n //判断colIndex整列是否被选中\n const isColSelected = this.table.stateManager.select.ranges.some(range => {\n return (\n range.start.col <= colIndex &&\n colIndex <= range.end.col &&\n range.start.row === 0 &&\n range.end.row === this.table.rowCount - 1\n );\n });\n //当前右键的列号 没有整列被选中,则进行选中\n if (!isColSelected) {\n this.table.selectCells([\n { start: { row: 0, col: colIndex }, end: { row: this.table.rowCount - 1, col: colIndex } }\n ]);\n }\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n colIndex: colIndex\n }\n });\n } else {\n //直接全选\n this.table.selectCells([\n { start: { row: 0, col: 0 }, end: { row: this.table.rowCount - 1, col: this.table.colCount - 1 } }\n ]);\n this.table.fireListeners(TABLE_EVENT_TYPE.PLUGIN_EVENT, {\n plugin: this,\n event: event,\n pluginEventInfo: {\n eventType: 'rightclick',\n isCorner: true\n }\n });\n }\n };\n\n private handleSeriesNumberCellHover = (e: any) => {\n this.table.scenegraph.renderSceneGraph();\n };\n\n private handleSeriesNumberCellUnHover = (e: any) => {\n this.table.scenegraph.renderSceneGraph();\n };\n\n private handleSeriesNumberCellClick = (e: any) => {\n const { seriesNumberCell, event, isDragSelect } = e.detail;\n const ctrlMultiSelect = this.table.options.keyboardOptions?.ctrlMultiSelect ?? true;\n const shiftMultiSelect = (this.table.options.keyboardOptions as any)?.shiftMultiSelect ?? true;\n const enableCtrlSelectMode = (event.nativeEvent.ctrlKey || event.nativeEvent.metaKey) && ctrlMultiSelect;\n const enableShiftSelectMode = event.nativeEvent.shiftKey && shiftMultiSelect;\n const isRow = seriesNumberCell.name.includes('row');\n const isCol = seriesNumberCell.name.includes('col');\n if (isRow) {\n this.table.stateManager.setSelectInline('row');\n const rowIndex = seriesNumberCell.id;\n\n if (isDragSelect) {\n this.table.dragSelectRow(rowIndex, enableCtrlSelectMode);\n } else {\n this.table.startDragSelectRow(rowIndex, enableCtrlSelectMode, enableShiftSelectMode);\n }\n } else if (isCol) {\n this.table.stateManager.setSelectInline('col');\n const colIndex = seriesNumberCell.id;\n if (isDragSelect) {\n this.table.dragSelectCol(colIndex, enableCtrlSelectMode);\n } else {\n this.table.startDragSelectCol(colIndex, enableCtrlSelectMode, enableShiftSelectMode);\n }\n } else {\n this.table.eventManager.deelTableSelectAll();\n }\n };\n\n private handleSeriesNumberCellClickUp = (e: any) => {\n this.table.stateManager.setSelectInline(false);\n this.table.endDragSelect();\n };\n\n private handleRowSeriesNumberWidthChange = (e: any) => {\n const rowSeriesNumberColWidth = this.seriesNumberComponent.rowSeriesNumberWidth;\n const colSeriesNumberRowHeight = this.seriesNumberComponent.colSeriesNumberHeight;\n this.table.setContentInsetXY(rowSeriesNumberColWidth, colSeriesNumberRowHeight);\n };\n\n private handleResizeColWidthStart = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', false);\n const { colIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startResizeCol(colIndex, event.viewport.x, event.viewport.y);\n };\n\n private handleResizeRowHeightStart = (e: any) => {\n this.seriesNumberComponent.setAttribute('hover', false);\n const { rowIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startResizeRow(rowIndex, event.viewport.x, event.viewport.y);\n };\n\n private handleDragColumOrderStart = (e: any) => {\n console.log('handleDragColumOrderStart', e.detail.event.viewport.x, e.detail.event.viewport.y);\n const { colIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startMoveCol(colIndex, 0, event.viewport.x, event.viewport.y, event.nativeEvent, 'column');\n };\n private handleDragRowOrderStart = (e: any) => {\n console.log('handleDragRowOrderStart', e.detail.event.viewport.x, e.detail.event.viewport.y);\n const { rowIndex, event } = e.detail;\n this.table.stateManager.updateInteractionState(TYPES.InteractionState.grabing);\n this.table.stateManager.startMoveCol(0, rowIndex, event.viewport.x, event.viewport.y, event.nativeEvent, 'row');\n };\n\n listenComponentEvents() {\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellRightClick, this.handleSeriesNumberCellRightClick);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellHover, this.handleSeriesNumberCellHover);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellUnHover, this.handleSeriesNumberCellUnHover);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellClick, this.handleSeriesNumberCellClick);\n this.seriesNumberComponent.on(SeriesNumberEvent.seriesNumberCellClickUp, this.handleSeriesNumberCellClickUp);\n this.seriesNumberComponent.on(SeriesNumberEvent.rowSeriesNumberWidthChange, this.handleRowSeriesNumberWidthChange);\n this.seriesNumberComponent.on(SeriesNumberEvent.resizeColWidthStart, this.handleResizeColWidthStart);\n this.seriesNumberComponent.on(SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart);\n this.seriesNumberComponent.on(SeriesNumberEvent.dragColumnOrderStart, this.handleDragColumOrderStart);\n this.seriesNumberComponent.on(SeriesNumberEvent.dragRowOrderStart, this.handleDragRowOrderStart);\n }\n release() {\n // 清除组件资源\n if (this.componentLayoutLayer) {\n this.table.scenegraph.stage.removeLayer(this.componentLayoutLayer._uid);\n this.componentLayoutLayer = null;\n }\n\n // 清除定时器\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n\n // 移除表格事件监听器\n if (this.table) {\n this.table.off(TABLE_EVENT_TYPE.SCROLL, this.handleScroll);\n this.table.off(TABLE_EVENT_TYPE.AFTER_SORT, this.handleAfterSort);\n this.table.off(TABLE_EVENT_TYPE.SELECTED_CHANGED, this.handleSelectedChanged);\n this.table.off(TABLE_EVENT_TYPE.RESIZE_COLUMN_END, this.handleResizeColumnEnd);\n this.table.off(TABLE_EVENT_TYPE.RESIZE_ROW_END, this.handleResizeRowEnd);\n }\n // 移除组件事件监听器\n if (this.seriesNumberComponent) {\n this.seriesNumberComponent.off(\n SeriesNumberEvent.seriesNumberCellRightClick,\n this.handleSeriesNumberCellRightClick\n );\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellHover, this.handleSeriesNumberCellHover);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellUnHover, this.handleSeriesNumberCellUnHover);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellClick, this.handleSeriesNumberCellClick);\n this.seriesNumberComponent.off(SeriesNumberEvent.seriesNumberCellClickUp, this.handleSeriesNumberCellClickUp);\n this.seriesNumberComponent.off(\n SeriesNumberEvent.rowSeriesNumberWidthChange,\n this.handleRowSeriesNumberWidthChange\n );\n this.seriesNumberComponent.off(SeriesNumberEvent.resizeColWidthStart, this.handleResizeColWidthStart);\n this.seriesNumberComponent.off(SeriesNumberEvent.resizeRowHeightStart, this.handleResizeRowHeightStart);\n\n // 释放组件资源\n this.seriesNumberComponent.release?.();\n this.seriesNumberComponent = null;\n }\n }\n\n syncRowHeightToComponent() {\n // console.log('syncRowHeightToComponent adjust', adjustStartRowIndex, adjustEndRowIndex);\n const { rowStart, rowEnd } = this.table.getBodyVisibleRowRange();\n const adjustStartRowIndex = Math.max(rowStart - 2, this.table.frozenRowCount);\n const adjustEndRowIndex = Math.min(rowEnd + 2, this.table.rowCount - 1);\n //判断seriesNumberComponent的冻结行数是否变化\n if (this.table.frozenRowCount !== (this.seriesNumberComponent.getAttributes() as any).frozenRowCount) {\n this.seriesNumberComponent.setAttributes({ frozenRowCount: this.table.frozenRowCount } as any);\n }\n // 调用行序号重建接口\n this.seriesNumberComponent.recreateCellsToRowSeriesNumberGroup(adjustStartRowIndex, adjustEndRowIndex);\n // 更新冻结行序号单元格的y和height\n for (let i = 0; i < this.table.frozenRowCount; i++) {\n const cellGroup = this.table.scenegraph.getCell(0, i);\n const cell_attrs = cellGroup.getAttributes();\n this.seriesNumberComponent.setRowSeriesNumberCellAttributes(i, { y: cell_attrs.y, height: cell_attrs.height });\n }\n\n // 更新行序号单元格的y和height\n for (let i = adjustStartRowIndex; i <= adjustEndRowIndex; i++) {\n const cellGroup = this.table.scenegraph.getCell(0, i);\n const cell_attrs = cellGroup.getAttributes();\n this.seriesNumberComponent.setRowSeriesNumberCellAttributes(i, { y: cell_attrs.y, height: cell_attrs.height });\n }\n }\n syncColWidthToComponent() {\n const { colStart, colEnd } = this.table.getBodyVisibleColRange();\n const adjustStartColIndex = colStart;\n const adjustEndColIndex = Math.min(colEnd, this.table.scenegraph.proxy.colEnd);\n // console.log('syncColWidthToComponent adjust', adjustStartColIndex, adjustEndColIndex);\n\n //判断seriesNumberComponent的冻结列数是否变化\n if (this.table.frozenColCount !== (this.seriesNumberComponent.getAttributes() as any).frozenColCount) {\n this.seriesNumberComponent.setAttributes({ frozenColCount: this.table.frozenColCount } as any);\n }\n // 调用列序号重建接口\n this.seriesNumberComponent.recreateCellsToColSeriesNumberGroup(adjustStartColIndex, adjustEndColIndex);\n //更新冻结列序号单元格的x和width\n for (let i = 0; i < this.table.frozenColCount; i++) {\n const colGroup = this.table.scenegraph.getColGroup(i);\n const cell_attrs = colGroup.getAttributes();\n this.seriesNumberComponent.setColSeriesNumberCellAttributes(i, { x: cell_attrs.x, width: cell_attrs.width });\n }\n // 更新列序号单元格的x和width\n for (let i = adjustStartColIndex; i <= adjustEndColIndex; i++) {\n const colGroup = this.table.scenegraph.getColGroup(i);\n const col_attrs = colGroup.getAttributes();\n this.seriesNumberComponent.setColSeriesNumberCellAttributes(i, { x: col_attrs.x, width: col_attrs.width });\n }\n }\n\n syncScrollToComponent() {\n //TODO 根据滚动方向,同步对应的序号组件的滚动\n this.syncRowHeightToComponent();\n this.syncColWidthToComponent();\n const y = this.table.scenegraph.bodyGroup.getAttributes().y;\n const x = this.table.scenegraph.bodyGroup.getAttributes().x;\n this.seriesNumberComponent.setRowSeriesNumberGroupAttributes({\n y: y + this.seriesNumberComponent.colSeriesNumberHeight\n });\n this.seriesNumberComponent.setColSeriesNumberGroupAttributes({\n x: x + this.seriesNumberComponent.rowSeriesNumberWidth\n });\n }\n // syncFrozenToComponent() {\n // const frozenRowCount = this.table.frozenRowCount;\n // const frozenColCount = this.table.frozenColCount;\n // this.seriesNumberComponent.setFrozenTopRow(frozenRowCount);\n // this.seriesNumberComponent.setFrozenLeftCol(frozenColCount);\n // }\n}\n"]}