@visactor/vtable-gantt 1.26.2-alpha.1 → 1.27.0-alpha.3
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.
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/scenegraph/scenegraph.d.ts +1 -0
- package/cjs/scenegraph/scenegraph.js +15 -3
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/zoom-scale/DataZoomIntegration.d.ts +1 -0
- package/cjs/zoom-scale/DataZoomIntegration.js +16 -4
- package/cjs/zoom-scale/DataZoomIntegration.js.map +1 -1
- package/dist/vtable-gantt.js +21496 -14756
- package/dist/vtable-gantt.min.js +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/scenegraph/scenegraph.d.ts +1 -0
- package/es/scenegraph/scenegraph.js +16 -5
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/zoom-scale/DataZoomIntegration.d.ts +1 -0
- package/es/zoom-scale/DataZoomIntegration.js +17 -5
- package/es/zoom-scale/DataZoomIntegration.js.map +1 -1
- package/package.json +3 -3
package/cjs/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ import * as tools from './tools';
|
|
|
6
6
|
import * as VRender from './vrender';
|
|
7
7
|
import * as VTable from './vtable';
|
|
8
8
|
import * as plugins from './plugins';
|
|
9
|
-
export declare const version = "1.26.
|
|
9
|
+
export declare const version = "1.26.1";
|
|
10
10
|
export { TYPES, GanttConstructorOptions, Gantt, ColumnsDefine, ColumnDefine, LinkColumnDefine, ChartColumnDefine, ImageColumnDefine, SparklineColumnDefine, ProgressbarColumnDefine, TextColumnDefine, GroupColumnDefine, TextAlignType, TextBaselineType, tools, VRender, VTable, plugins };
|
package/cjs/index.js
CHANGED
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,QAAQ,CAAC","file":"index.js","sourcesContent":["import type { GanttConstructorOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vtable';\nimport { Gantt } from './Gantt';\nimport * as tools from './tools';\nimport * as VRender from './vrender';\nimport * as VTable from './vtable';\nimport * as plugins from './plugins';\nexport const version = \"1.26.1\";\n/**\n * @namespace VTableGantt\n */\nexport {\n TYPES,\n GanttConstructorOptions,\n Gantt,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n tools,\n VRender,\n VTable,\n plugins\n};\n"]}
|
|
@@ -19,7 +19,8 @@ class Scenegraph {
|
|
|
19
19
|
let width, height;
|
|
20
20
|
this._gantt = gantt, this.tableGroupWidth = gantt.tableNoFrameWidth, this.tableGroupHeight = Math.min(gantt.tableNoFrameHeight, gantt.drawHeight),
|
|
21
21
|
"node" === env_1.Env.mode || (vrender_1.vglobal.setEnv("browser"), width = gantt.canvas.width,
|
|
22
|
-
height = gantt.canvas.height)
|
|
22
|
+
height = gantt.canvas.height);
|
|
23
|
+
const {stage: stage, releaseAppRef: releaseAppRef} = (0, vrender_1.createStageFromVRenderApp)({
|
|
23
24
|
canvas: gantt.canvas,
|
|
24
25
|
width: width,
|
|
25
26
|
height: height,
|
|
@@ -31,7 +32,12 @@ class Scenegraph {
|
|
|
31
32
|
appName: "vtable"
|
|
32
33
|
},
|
|
33
34
|
pluginList: [ "poptipForText" ]
|
|
34
|
-
}
|
|
35
|
+
}, {
|
|
36
|
+
mode: "node" === env_1.Env.mode ? "node" : "browser",
|
|
37
|
+
scope: "vtable-gantt"
|
|
38
|
+
});
|
|
39
|
+
this.stage = stage, this.releaseVRenderAppRef = releaseAppRef, this.stage.gantt = this._gantt,
|
|
40
|
+
this.stage.table = this._gantt, this.stage.defaultLayer.setTheme({
|
|
35
41
|
group: {
|
|
36
42
|
boundsPadding: 0,
|
|
37
43
|
strokeBoundsBuffer: 0,
|
|
@@ -136,7 +142,13 @@ class Scenegraph {
|
|
|
136
142
|
this.updateTableSize(), this.scrollbarComponent.updateScrollBar(), this.updateNextFrame();
|
|
137
143
|
}
|
|
138
144
|
release() {
|
|
139
|
-
this.
|
|
145
|
+
const releaseAppRef = this.releaseVRenderAppRef;
|
|
146
|
+
this.releaseVRenderAppRef = void 0;
|
|
147
|
+
try {
|
|
148
|
+
this.stage.release();
|
|
149
|
+
} finally {
|
|
150
|
+
null == releaseAppRef || releaseAppRef();
|
|
151
|
+
}
|
|
140
152
|
}
|
|
141
153
|
showTaskCreationButton(x, y, dateIndex) {
|
|
142
154
|
this.taskCreationButton || (this.taskCreationButton = new task_creation_button_1.TaskCreationButton(this._gantt.scenegraph));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { Stage } from '@visactor/vtable/es/vrender';\nimport { container, Group, vglobal, createStage } from '@visactor/vtable/es/vrender';\nimport { Grid } from './grid';\nimport type { Gantt } from '../Gantt';\nimport { Env } from '../env';\nimport { ScrollBarComponent } from './scroll-bar';\nimport { bindScrollBarListener } from '../event/scroll';\nimport { TimelineHeader } from './timeline-header';\nimport { TaskBar } from './task-bar';\nimport { MarkLine } from './mark-line';\nimport { FrameBorder } from './frame-border';\nimport { findRecordByTaskKey, getTaskIndexsByTaskY } from '../gantt-helper';\nimport graphicContribution from './graphic';\nimport { TaskCreationButton } from './task-creation-button';\nimport { ToolTip } from './tooltip';\nimport { DependencyLink, updateLinkLinePoints } from './dependency-link';\nimport { DragOrderLine } from './drag-order-line';\nimport type { GanttTaskBarNode } from './gantt-node';\nimport { TasksShowMode, TaskType } from '../ts-types';\ncontainer.load(graphicContribution);\nexport class Scenegraph {\n dateStepWidth: number;\n rowHeight: number;\n _scales: {}[];\n timelineHeader: TimelineHeader;\n grid: Grid;\n dependencyLink: DependencyLink;\n taskBar: TaskBar;\n _gantt: Gantt;\n ganttGroup: Group;\n scrollbarComponent: ScrollBarComponent;\n markLine: MarkLine;\n dragOrderLine: DragOrderLine;\n frameBorder: FrameBorder;\n taskCreationButton: TaskCreationButton;\n toolTip: ToolTip;\n stage: Stage;\n tableGroupWidth: number;\n tableGroupHeight: number;\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.tableGroupWidth = gantt.tableNoFrameWidth;\n this.tableGroupHeight = Math.min(gantt.tableNoFrameHeight, gantt.drawHeight);\n let width;\n let height;\n if (Env.mode === 'node') {\n // vglobal.setEnv('node', gantt.options.modeParams);\n // width = table.canvasWidth;\n // height = table.canvasHeight;\n } else {\n vglobal.setEnv('browser');\n width = gantt.canvas.width;\n height = gantt.canvas.height;\n }\n this.stage = createStage({\n canvas: gantt.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: gantt.parsedOptions.underlayBackgroundColor,\n // dpr: gantt.internalProps.pixelRatio,\n enableLayout: true,\n autoRender: false,\n context: {\n appName: 'vtable'\n },\n pluginList: ['poptipForText']\n // afterRender: () => {\n // this._gantt.fireListeners('after_render', null);\n // }\n });\n (this.stage as any).gantt = this._gantt;\n (this.stage as any).table = this._gantt; // 为了使用bindDebugTool\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n }\n\n initSceneGraph() {\n const scene = this;\n\n scene.ganttGroup = new Group({\n x: scene._gantt.tableX,\n y: scene._gantt.tableY,\n width: this.tableGroupWidth,\n height: this.tableGroupHeight,\n clip: true,\n pickable: false\n });\n scene.stage.defaultLayer.add(scene.ganttGroup);\n scene.ganttGroup.name = 'table';\n // 初始化顶部时间线表头部分\n scene.timelineHeader = new TimelineHeader(scene);\n\n // 初始化网格线组件\n scene.grid = new Grid(scene);\n // 初始化任务条线组件\n scene.dependencyLink = new DependencyLink(scene);\n // 初始化任务条线组件\n scene.taskBar = new TaskBar(scene);\n\n // 初始化标记线组件\n scene.markLine = new MarkLine(scene);\n scene.toolTip = new ToolTip(scene);\n\n // 初始化边框\n scene.frameBorder = new FrameBorder(scene);\n\n // 初始化滚动条组件\n scene.scrollbarComponent = new ScrollBarComponent(scene._gantt);\n scene.stage.defaultLayer.addChild(scene.scrollbarComponent.hScrollBar);\n scene.stage.defaultLayer.addChild(scene.scrollbarComponent.vScrollBar);\n\n //初始化换位交互标记线\n scene.dragOrderLine = new DragOrderLine(scene);\n }\n updateSceneGraph() {\n const gantt = this._gantt;\n this.tableGroupWidth = gantt.tableNoFrameWidth;\n this.tableGroupHeight = Math.min(gantt.tableNoFrameHeight, gantt.drawHeight);\n let width;\n let height;\n if (Env.mode === 'node') {\n } else {\n vglobal.setEnv('browser');\n width = gantt.canvas.width;\n height = gantt.canvas.height;\n }\n this.stage.resize(width, height);\n this.refreshAll();\n }\n\n afterCreateSceneGraph() {\n this.scrollbarComponent.updateScrollBar();\n bindScrollBarListener(this._gantt.eventManager);\n }\n\n refreshAll() {\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.tableGroupWidth = this._gantt.tableNoFrameWidth;\n this.ganttGroup.setAttribute('height', this.tableGroupHeight);\n this.ganttGroup.setAttribute('width', this.tableGroupWidth);\n this.timelineHeader.refresh();\n this.grid.refresh();\n this.taskBar.refresh();\n this.dependencyLink.refresh();\n this.markLine.refresh();\n this.dependencyLink.refresh();\n this.frameBorder.refresh();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n\n refreshTaskBars() {\n // this.timelineHeader.refresh();\n // this.grid.refresh();\n this.dependencyLink.refresh();\n this.taskBar.refresh();\n // this.markLine.refresh();\n // this.frameBorder.refresh();\n // this.scrollbarComponent.refresh();\n this.updateNextFrame();\n }\n refreshTaskBarsAndGrid() {\n this._gantt.verticalSplitResizeLine.style.height = this._gantt.drawHeight + 'px'; //'100%';\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.ganttGroup.setAttribute('height', this.tableGroupHeight);\n // this.timelineHeader.refresh();\n this.grid.refresh();\n this.taskBar.refresh();\n this.dependencyLink.refresh();\n this.markLine.refresh();\n this.frameBorder.resize();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.tableGroupWidth = this._gantt.tableNoFrameWidth;\n this.ganttGroup.setAttributes({\n x: this._gantt.tableX,\n y: this._gantt.tableY,\n width: this._gantt.tableNoFrameWidth,\n height: this.tableGroupHeight\n } as any);\n this.grid.resize();\n this.taskBar.resize();\n this.dependencyLink.resize();\n this.markLine.refresh();\n this.frameBorder.resize();\n }\n\n updateStageBackground() {\n this.stage.background = this._gantt.parsedOptions.underlayBackgroundColor;\n this.updateNextFrame();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.stage.renderNextFrame();\n }\n get width(): number {\n return this.ganttGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.ganttGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.ganttGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.ganttGroup.attribute?.y ?? 0;\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.timelineHeader.setX(x);\n this.grid.setX(x);\n this.taskBar.setX(x);\n this.dependencyLink.setX(x);\n this.markLine.setX(x);\n this.updateNextFrame();\n // this._gantt.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n // this._gantt.scenegraph.proxy.setY(-y, isEnd);\n this.grid.setY(y);\n this.taskBar.setY(y);\n this.dependencyLink.setY(y);\n this.updateNextFrame();\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n resize() {\n this.updateTableSize();\n // this.updateBorderSizeAndPosition();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n release() {\n this.stage.release();\n }\n\n showTaskCreationButton(x: number, y: number, dateIndex: number) {\n if (!this.taskCreationButton) {\n this.taskCreationButton = new TaskCreationButton(this._gantt.scenegraph);\n }\n //根据最大最小宽度计算按钮的宽度\n const createButton_max_width = this._gantt.parsedOptions.taskBarCreationMaxWidth;\n const createButton_min_width = this._gantt.parsedOptions.taskBarCreationMinWidth;\n const col_width = this._gantt.getDateColWidth(dateIndex);\n const button_width = createButton_max_width\n ? Math.min(\n createButton_max_width,\n createButton_min_width ? Math.max(createButton_min_width, col_width) : col_width\n )\n : createButton_min_width\n ? Math.max(createButton_min_width, col_width)\n : col_width;\n // 调整x,使按钮居中\n const button_x = x - (button_width - col_width) / 2;\n this.taskCreationButton.show(button_x, y, button_width, this._gantt.parsedOptions.rowHeight);\n this.updateNextFrame();\n }\n\n hideTaskCreationButton() {\n if (this.taskCreationButton) {\n this.taskCreationButton.hide();\n this.updateNextFrame();\n }\n }\n\n showToolTip(target: any) {\n if (!this.toolTip) {\n this.toolTip = new ToolTip(this._gantt.scenegraph);\n }\n this.toolTip.show(target);\n }\n\n hideToolTip() {\n this.toolTip.hide();\n }\n\n refreshRecordLinkNodes(taskIndex: number, sub_task_index: number, target: GanttTaskBarNode, dy: number = 0) {\n const gantt: Gantt = this._gantt;\n const record = gantt.getRecordByIndex(taskIndex, sub_task_index);\n const vtable_gantt_linkedTo = record.vtable_gantt_linkedTo;\n const vtable_gantt_linkedFrom = record.vtable_gantt_linkedFrom;\n for (let i = 0; i < vtable_gantt_linkedTo?.length; i++) {\n const link = vtable_gantt_linkedTo[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = gantt.parsedOptions;\n const linkedFromTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedFromTaskKey);\n const linkedToTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedToTaskKey);\n // const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskIndex);\n // const taskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n // const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n\n let linkedToTaskStartDate;\n let linkedToTaskEndDate;\n let linkedToTaskTaskDays;\n // let linkedToTaskTaskRecord;\n let linkedFromTaskStartDate;\n let linkedFromTaskEndDate;\n let linkedFromTaskTaskDays;\n // let linkedFromTaskTaskRecord;\n\n let linkedToTaskShowIndex;\n let linkedFromTaskShowIndex;\n let diffY: number;\n const taskBarStyle = this._gantt.getTaskBarStyle(taskIndex, sub_task_index);\n if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n linkedFromTaskShowIndex = linkedFromTaskRecord.index[0];\n // linkedToTaskShowIndex = linkedToTaskRecord.index[0];\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex = beforeRowCountLinkedTo;\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n\n const taskbarHeight = taskBarStyle.width;\n diffY = target.attribute.y + taskbarHeight / 2 - (linkedToTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) {\n const fromParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index.slice(0, -1));\n const toParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index.slice(0, -1));\n const fromParentRecord = gantt.getRecordByIndex(fromParentRecordShowIndex);\n const toParentRecord = gantt.getRecordByIndex(toParentRecordShowIndex);\n if (\n fromParentRecord.type === TaskType.PROJECT &&\n fromParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedFromTaskShowIndex = fromParentRecordShowIndex;\n } else {\n // Normal task display\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n }\n if (\n toParentRecord.type === TaskType.PROJECT &&\n toParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedToTaskShowIndex = toParentRecordShowIndex;\n } else {\n // Normal task display\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex, linkedToTaskRecord.index));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex, linkedFromTaskRecord.index));\n } else if (\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex =\n beforeRowCountLinkedFrom +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedFromTaskRecord.record.vtable_gantt_showIndex\n : linkedFromTaskRecord.index[1]);\n // const beforeRowCountLinkedTo =\n // gantt.getRowsHeightByIndex(0, linkedToTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n // linkedToTaskShowIndex = beforeRowCountLinkedTo + linkedToTaskRecord.index[1];\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex =\n beforeRowCountLinkedTo +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedToTaskRecord.record.vtable_gantt_showIndex\n : new_indexs.sub_task_index);\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n\n const taskbarHeight = taskBarStyle.width;\n diffY = target.attribute.y + taskbarHeight / 2 - (linkedToTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else {\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n if (linkedFromTaskShowIndex === -1 || linkedToTaskShowIndex === -1) {\n continue;\n }\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex));\n }\n if (\n !linkedFromTaskStartDate ||\n !linkedFromTaskEndDate ||\n !linkedToTaskStartDate ||\n !linkedToTaskEndDate ||\n !linkLineNode ||\n !lineArrowNode\n ) {\n return;\n }\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n linkedFromTaskShowIndex,\n linkedFromTaskTaskDays,\n linkedFromTaskRecord.record.type === TaskType.MILESTONE,\n null,\n 0,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n linkedToTaskShowIndex,\n linkedToTaskTaskDays,\n linkedToTaskRecord.record.type === TaskType.MILESTONE,\n target,\n diffY ?? 0,\n this._gantt\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n\n for (let i = 0; i < vtable_gantt_linkedFrom?.length; i++) {\n const link = vtable_gantt_linkedFrom[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = gantt.parsedOptions;\n const linkedToTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedFromTaskKey);\n // const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskIndex);\n // const taskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n // const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n\n let linkedToTaskStartDate;\n let linkedToTaskEndDate;\n let linkedToTaskTaskDays;\n let linkedFromTaskStartDate;\n let linkedFromTaskEndDate;\n let linkedFromTaskTaskDays;\n\n let linkedToTaskShowIndex;\n let linkedFromTaskShowIndex;\n let diffY: number;\n const taskBarStyle = this._gantt.getTaskBarStyle(taskIndex, sub_task_index);\n if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex = beforeRowCountLinkedFrom;\n\n // linkedFromTaskShowIndex = linkedFromTaskRecord.index[0];\n linkedToTaskShowIndex = linkedToTaskRecord.index[0];\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n const taskbarHeight = taskBarStyle.width;\n diffY =\n target.attribute.y + taskbarHeight / 2 - (linkedFromTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) {\n const fromParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index.slice(0, -1));\n const toParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index.slice(0, -1));\n const fromParentRecord = gantt.getRecordByIndex(fromParentRecordShowIndex);\n const toParentRecord = gantt.getRecordByIndex(toParentRecordShowIndex);\n if (\n fromParentRecord.type === TaskType.PROJECT &&\n fromParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedFromTaskShowIndex = fromParentRecordShowIndex;\n } else {\n // Normal task display\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n }\n if (\n toParentRecord.type === TaskType.PROJECT &&\n toParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedToTaskShowIndex = toParentRecordShowIndex;\n } else {\n // Normal task display\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex, linkedToTaskRecord.index));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex, linkedFromTaskRecord.index));\n } else if (\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n // const beforeRowCountLinkedFrom =\n // gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n // linkedFromTaskShowIndex = beforeRowCountLinkedFrom + linkedFromTaskRecord.index[1];\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex =\n beforeRowCountLinkedFrom +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedFromTaskRecord.record.vtable_gantt_showIndex\n : new_indexs.sub_task_index);\n\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, linkedToTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex =\n beforeRowCountLinkedTo +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedToTaskRecord.record.vtable_gantt_showIndex\n : linkedToTaskRecord.index[1]);\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n const taskbarHeight = taskBarStyle.width;\n diffY =\n target.attribute.y + taskbarHeight / 2 - (linkedFromTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else {\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n if (linkedFromTaskShowIndex === -1 || linkedToTaskShowIndex === -1) {\n continue;\n }\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex));\n }\n if (\n !linkedFromTaskStartDate ||\n !linkedFromTaskEndDate ||\n !linkedToTaskStartDate ||\n !linkedToTaskEndDate ||\n !linkLineNode ||\n !lineArrowNode\n ) {\n return;\n }\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n linkedFromTaskShowIndex,\n linkedFromTaskTaskDays,\n linkedFromTaskRecord.record.type === TaskType.MILESTONE,\n target,\n diffY ?? 0,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n linkedToTaskShowIndex,\n linkedToTaskTaskDays,\n linkedToTaskRecord.record.type === TaskType.MILESTONE,\n null,\n 0,\n this._gantt\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { Stage } from '@visactor/vtable/es/vrender';\nimport { container, Group, vglobal, createStageFromVRenderApp } from '@visactor/vtable/es/vrender';\nimport { Grid } from './grid';\nimport type { Gantt } from '../Gantt';\nimport { Env } from '../env';\nimport { ScrollBarComponent } from './scroll-bar';\nimport { bindScrollBarListener } from '../event/scroll';\nimport { TimelineHeader } from './timeline-header';\nimport { TaskBar } from './task-bar';\nimport { MarkLine } from './mark-line';\nimport { FrameBorder } from './frame-border';\nimport { findRecordByTaskKey, getTaskIndexsByTaskY } from '../gantt-helper';\nimport graphicContribution from './graphic';\nimport { TaskCreationButton } from './task-creation-button';\nimport { ToolTip } from './tooltip';\nimport { DependencyLink, updateLinkLinePoints } from './dependency-link';\nimport { DragOrderLine } from './drag-order-line';\nimport type { GanttTaskBarNode } from './gantt-node';\nimport { TasksShowMode, TaskType } from '../ts-types';\ncontainer.load(graphicContribution);\nexport class Scenegraph {\n dateStepWidth: number;\n rowHeight: number;\n _scales: {}[];\n timelineHeader: TimelineHeader;\n grid: Grid;\n dependencyLink: DependencyLink;\n taskBar: TaskBar;\n _gantt: Gantt;\n ganttGroup: Group;\n scrollbarComponent: ScrollBarComponent;\n markLine: MarkLine;\n dragOrderLine: DragOrderLine;\n frameBorder: FrameBorder;\n taskCreationButton: TaskCreationButton;\n toolTip: ToolTip;\n stage: Stage;\n releaseVRenderAppRef?: () => void;\n tableGroupWidth: number;\n tableGroupHeight: number;\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.tableGroupWidth = gantt.tableNoFrameWidth;\n this.tableGroupHeight = Math.min(gantt.tableNoFrameHeight, gantt.drawHeight);\n let width;\n let height;\n if (Env.mode === 'node') {\n // vglobal.setEnv('node', gantt.options.modeParams);\n // width = table.canvasWidth;\n // height = table.canvasHeight;\n } else {\n vglobal.setEnv('browser');\n width = gantt.canvas.width;\n height = gantt.canvas.height;\n }\n const { stage, releaseAppRef } = createStageFromVRenderApp(\n {\n canvas: gantt.canvas,\n width,\n height,\n disableDirtyBounds: false,\n background: gantt.parsedOptions.underlayBackgroundColor,\n // dpr: gantt.internalProps.pixelRatio,\n enableLayout: true,\n autoRender: false,\n context: {\n appName: 'vtable'\n },\n pluginList: ['poptipForText']\n // afterRender: () => {\n // this._gantt.fireListeners('after_render', null);\n // }\n },\n { mode: Env.mode === 'node' ? 'node' : 'browser', scope: 'vtable-gantt' }\n );\n this.stage = stage as Stage;\n this.releaseVRenderAppRef = releaseAppRef;\n (this.stage as any).gantt = this._gantt;\n (this.stage as any).table = this._gantt; // 为了使用bindDebugTool\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n },\n text: {\n ignoreBuf: true\n }\n });\n this.initSceneGraph();\n }\n\n initSceneGraph() {\n const scene = this;\n\n scene.ganttGroup = new Group({\n x: scene._gantt.tableX,\n y: scene._gantt.tableY,\n width: this.tableGroupWidth,\n height: this.tableGroupHeight,\n clip: true,\n pickable: false\n });\n scene.stage.defaultLayer.add(scene.ganttGroup);\n scene.ganttGroup.name = 'table';\n // 初始化顶部时间线表头部分\n scene.timelineHeader = new TimelineHeader(scene);\n\n // 初始化网格线组件\n scene.grid = new Grid(scene);\n // 初始化任务条线组件\n scene.dependencyLink = new DependencyLink(scene);\n // 初始化任务条线组件\n scene.taskBar = new TaskBar(scene);\n\n // 初始化标记线组件\n scene.markLine = new MarkLine(scene);\n scene.toolTip = new ToolTip(scene);\n\n // 初始化边框\n scene.frameBorder = new FrameBorder(scene);\n\n // 初始化滚动条组件\n scene.scrollbarComponent = new ScrollBarComponent(scene._gantt);\n scene.stage.defaultLayer.addChild(scene.scrollbarComponent.hScrollBar);\n scene.stage.defaultLayer.addChild(scene.scrollbarComponent.vScrollBar);\n\n //初始化换位交互标记线\n scene.dragOrderLine = new DragOrderLine(scene);\n }\n updateSceneGraph() {\n const gantt = this._gantt;\n this.tableGroupWidth = gantt.tableNoFrameWidth;\n this.tableGroupHeight = Math.min(gantt.tableNoFrameHeight, gantt.drawHeight);\n let width;\n let height;\n if (Env.mode === 'node') {\n } else {\n vglobal.setEnv('browser');\n width = gantt.canvas.width;\n height = gantt.canvas.height;\n }\n this.stage.resize(width, height);\n this.refreshAll();\n }\n\n afterCreateSceneGraph() {\n this.scrollbarComponent.updateScrollBar();\n bindScrollBarListener(this._gantt.eventManager);\n }\n\n refreshAll() {\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.tableGroupWidth = this._gantt.tableNoFrameWidth;\n this.ganttGroup.setAttribute('height', this.tableGroupHeight);\n this.ganttGroup.setAttribute('width', this.tableGroupWidth);\n this.timelineHeader.refresh();\n this.grid.refresh();\n this.taskBar.refresh();\n this.dependencyLink.refresh();\n this.markLine.refresh();\n this.dependencyLink.refresh();\n this.frameBorder.refresh();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n\n refreshTaskBars() {\n // this.timelineHeader.refresh();\n // this.grid.refresh();\n this.dependencyLink.refresh();\n this.taskBar.refresh();\n // this.markLine.refresh();\n // this.frameBorder.refresh();\n // this.scrollbarComponent.refresh();\n this.updateNextFrame();\n }\n refreshTaskBarsAndGrid() {\n this._gantt.verticalSplitResizeLine.style.height = this._gantt.drawHeight + 'px'; //'100%';\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.ganttGroup.setAttribute('height', this.tableGroupHeight);\n // this.timelineHeader.refresh();\n this.grid.refresh();\n this.taskBar.refresh();\n this.dependencyLink.refresh();\n this.markLine.refresh();\n this.frameBorder.resize();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroupHeight = Math.min(this._gantt.tableNoFrameHeight, this._gantt.drawHeight);\n this.tableGroupWidth = this._gantt.tableNoFrameWidth;\n this.ganttGroup.setAttributes({\n x: this._gantt.tableX,\n y: this._gantt.tableY,\n width: this._gantt.tableNoFrameWidth,\n height: this.tableGroupHeight\n } as any);\n this.grid.resize();\n this.taskBar.resize();\n this.dependencyLink.resize();\n this.markLine.refresh();\n this.frameBorder.resize();\n }\n\n updateStageBackground() {\n this.stage.background = this._gantt.parsedOptions.underlayBackgroundColor;\n this.updateNextFrame();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n this.stage.renderNextFrame();\n }\n get width(): number {\n return this.ganttGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.ganttGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.ganttGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.ganttGroup.attribute?.y ?? 0;\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number, isEnd = false) {\n this.timelineHeader.setX(x);\n this.grid.setX(x);\n this.taskBar.setX(x);\n this.dependencyLink.setX(x);\n this.markLine.setX(x);\n this.updateNextFrame();\n // this._gantt.scenegraph.proxy.setX(-x, isEnd);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number, isEnd = false) {\n // this._gantt.scenegraph.proxy.setY(-y, isEnd);\n this.grid.setY(y);\n this.taskBar.setY(y);\n this.dependencyLink.setY(y);\n this.updateNextFrame();\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n resize() {\n this.updateTableSize();\n // this.updateBorderSizeAndPosition();\n this.scrollbarComponent.updateScrollBar();\n this.updateNextFrame();\n }\n release() {\n const releaseAppRef = this.releaseVRenderAppRef;\n this.releaseVRenderAppRef = undefined;\n\n try {\n this.stage.release();\n } finally {\n releaseAppRef?.();\n }\n }\n\n showTaskCreationButton(x: number, y: number, dateIndex: number) {\n if (!this.taskCreationButton) {\n this.taskCreationButton = new TaskCreationButton(this._gantt.scenegraph);\n }\n //根据最大最小宽度计算按钮的宽度\n const createButton_max_width = this._gantt.parsedOptions.taskBarCreationMaxWidth;\n const createButton_min_width = this._gantt.parsedOptions.taskBarCreationMinWidth;\n const col_width = this._gantt.getDateColWidth(dateIndex);\n const button_width = createButton_max_width\n ? Math.min(\n createButton_max_width,\n createButton_min_width ? Math.max(createButton_min_width, col_width) : col_width\n )\n : createButton_min_width\n ? Math.max(createButton_min_width, col_width)\n : col_width;\n // 调整x,使按钮居中\n const button_x = x - (button_width - col_width) / 2;\n this.taskCreationButton.show(button_x, y, button_width, this._gantt.parsedOptions.rowHeight);\n this.updateNextFrame();\n }\n\n hideTaskCreationButton() {\n if (this.taskCreationButton) {\n this.taskCreationButton.hide();\n this.updateNextFrame();\n }\n }\n\n showToolTip(target: any) {\n if (!this.toolTip) {\n this.toolTip = new ToolTip(this._gantt.scenegraph);\n }\n this.toolTip.show(target);\n }\n\n hideToolTip() {\n this.toolTip.hide();\n }\n\n refreshRecordLinkNodes(taskIndex: number, sub_task_index: number, target: GanttTaskBarNode, dy: number = 0) {\n const gantt: Gantt = this._gantt;\n const record = gantt.getRecordByIndex(taskIndex, sub_task_index);\n const vtable_gantt_linkedTo = record.vtable_gantt_linkedTo;\n const vtable_gantt_linkedFrom = record.vtable_gantt_linkedFrom;\n for (let i = 0; i < vtable_gantt_linkedTo?.length; i++) {\n const link = vtable_gantt_linkedTo[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = gantt.parsedOptions;\n const linkedFromTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedFromTaskKey);\n const linkedToTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedToTaskKey);\n // const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskIndex);\n // const taskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n // const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n\n let linkedToTaskStartDate;\n let linkedToTaskEndDate;\n let linkedToTaskTaskDays;\n // let linkedToTaskTaskRecord;\n let linkedFromTaskStartDate;\n let linkedFromTaskEndDate;\n let linkedFromTaskTaskDays;\n // let linkedFromTaskTaskRecord;\n\n let linkedToTaskShowIndex;\n let linkedFromTaskShowIndex;\n let diffY: number;\n const taskBarStyle = this._gantt.getTaskBarStyle(taskIndex, sub_task_index);\n if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n linkedFromTaskShowIndex = linkedFromTaskRecord.index[0];\n // linkedToTaskShowIndex = linkedToTaskRecord.index[0];\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex = beforeRowCountLinkedTo;\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n\n const taskbarHeight = taskBarStyle.width;\n diffY = target.attribute.y + taskbarHeight / 2 - (linkedToTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) {\n const fromParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index.slice(0, -1));\n const toParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index.slice(0, -1));\n const fromParentRecord = gantt.getRecordByIndex(fromParentRecordShowIndex);\n const toParentRecord = gantt.getRecordByIndex(toParentRecordShowIndex);\n if (\n fromParentRecord.type === TaskType.PROJECT &&\n fromParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedFromTaskShowIndex = fromParentRecordShowIndex;\n } else {\n // Normal task display\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n }\n if (\n toParentRecord.type === TaskType.PROJECT &&\n toParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedToTaskShowIndex = toParentRecordShowIndex;\n } else {\n // Normal task display\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex, linkedToTaskRecord.index));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex, linkedFromTaskRecord.index));\n } else if (\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex =\n beforeRowCountLinkedFrom +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedFromTaskRecord.record.vtable_gantt_showIndex\n : linkedFromTaskRecord.index[1]);\n // const beforeRowCountLinkedTo =\n // gantt.getRowsHeightByIndex(0, linkedToTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n // linkedToTaskShowIndex = beforeRowCountLinkedTo + linkedToTaskRecord.index[1];\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex =\n beforeRowCountLinkedTo +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedToTaskRecord.record.vtable_gantt_showIndex\n : new_indexs.sub_task_index);\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n\n const taskbarHeight = taskBarStyle.width;\n diffY = target.attribute.y + taskbarHeight / 2 - (linkedToTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else {\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n if (linkedFromTaskShowIndex === -1 || linkedToTaskShowIndex === -1) {\n continue;\n }\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex));\n }\n if (\n !linkedFromTaskStartDate ||\n !linkedFromTaskEndDate ||\n !linkedToTaskStartDate ||\n !linkedToTaskEndDate ||\n !linkLineNode ||\n !lineArrowNode\n ) {\n return;\n }\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n linkedFromTaskShowIndex,\n linkedFromTaskTaskDays,\n linkedFromTaskRecord.record.type === TaskType.MILESTONE,\n null,\n 0,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n linkedToTaskShowIndex,\n linkedToTaskTaskDays,\n linkedToTaskRecord.record.type === TaskType.MILESTONE,\n target,\n diffY ?? 0,\n this._gantt\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n\n for (let i = 0; i < vtable_gantt_linkedFrom?.length; i++) {\n const link = vtable_gantt_linkedFrom[i];\n const linkLineNode = link.vtable_gantt_linkLineNode;\n const lineArrowNode = link.vtable_gantt_linkArrowNode;\n\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n const { taskKeyField, minDate } = gantt.parsedOptions;\n const linkedToTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(gantt.records, taskKeyField, linkedFromTaskKey);\n // const { startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskIndex);\n // const taskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n // const { startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate } =\n // gantt.getTaskInfoByTaskListIndex(taskShowIndex);\n\n let linkedToTaskStartDate;\n let linkedToTaskEndDate;\n let linkedToTaskTaskDays;\n let linkedFromTaskStartDate;\n let linkedFromTaskEndDate;\n let linkedFromTaskTaskDays;\n\n let linkedToTaskShowIndex;\n let linkedFromTaskShowIndex;\n let diffY: number;\n const taskBarStyle = this._gantt.getTaskBarStyle(taskIndex, sub_task_index);\n if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex = beforeRowCountLinkedFrom;\n\n // linkedFromTaskShowIndex = linkedFromTaskRecord.index[0];\n linkedToTaskShowIndex = linkedToTaskRecord.index[0];\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n const taskbarHeight = taskBarStyle.width;\n diffY =\n target.attribute.y + taskbarHeight / 2 - (linkedFromTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else if (gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) {\n const fromParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index.slice(0, -1));\n const toParentRecordShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index.slice(0, -1));\n const fromParentRecord = gantt.getRecordByIndex(fromParentRecordShowIndex);\n const toParentRecord = gantt.getRecordByIndex(toParentRecordShowIndex);\n if (\n fromParentRecord.type === TaskType.PROJECT &&\n fromParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedFromTaskShowIndex = fromParentRecordShowIndex;\n } else {\n // Normal task display\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n }\n if (\n toParentRecord.type === TaskType.PROJECT &&\n toParentRecord.hierarchyState !== 'expand' &&\n gantt.parsedOptions.projectSubTasksExpandable !== false\n ) {\n // Task is part of a collapsed project - it appears inline with project\n linkedToTaskShowIndex = toParentRecordShowIndex;\n } else {\n // Normal task display\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex, linkedToTaskRecord.index));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex, linkedFromTaskRecord.index));\n } else if (\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const new_indexs = getTaskIndexsByTaskY(target.attribute.y + dy, gantt);\n // const beforeRowCountLinkedFrom =\n // gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n // linkedFromTaskShowIndex = beforeRowCountLinkedFrom + linkedFromTaskRecord.index[1];\n const beforeRowCountLinkedFrom =\n gantt.getRowsHeightByIndex(0, new_indexs.task_index - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedFromTaskShowIndex =\n beforeRowCountLinkedFrom +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedFromTaskRecord.record.vtable_gantt_showIndex\n : new_indexs.sub_task_index);\n\n const beforeRowCountLinkedTo =\n gantt.getRowsHeightByIndex(0, linkedToTaskRecord.index[0] - 1) / gantt.parsedOptions.rowHeight; // 耦合了listTableOption的customComputeRowHeight\n linkedToTaskShowIndex =\n beforeRowCountLinkedTo +\n (gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ? linkedToTaskRecord.record.vtable_gantt_showIndex\n : linkedToTaskRecord.index[1]);\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1]));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1]));\n const taskbarHeight = taskBarStyle.width;\n diffY =\n target.attribute.y + taskbarHeight / 2 - (linkedFromTaskShowIndex + 0.5) * gantt.parsedOptions.rowHeight;\n } else {\n linkedFromTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkedToTaskShowIndex = gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n if (linkedFromTaskShowIndex === -1 || linkedToTaskShowIndex === -1) {\n continue;\n }\n ({\n startDate: linkedToTaskStartDate,\n endDate: linkedToTaskEndDate,\n taskDays: linkedToTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex));\n ({\n startDate: linkedFromTaskStartDate,\n endDate: linkedFromTaskEndDate,\n taskDays: linkedFromTaskTaskDays\n } = gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex));\n }\n if (\n !linkedFromTaskStartDate ||\n !linkedFromTaskEndDate ||\n !linkedToTaskStartDate ||\n !linkedToTaskEndDate ||\n !linkLineNode ||\n !lineArrowNode\n ) {\n return;\n }\n const { linePoints, arrowPoints } = updateLinkLinePoints(\n type,\n linkedFromTaskStartDate,\n linkedFromTaskEndDate,\n linkedFromTaskShowIndex,\n linkedFromTaskTaskDays,\n linkedFromTaskRecord.record.type === TaskType.MILESTONE,\n target,\n diffY ?? 0,\n linkedToTaskStartDate,\n linkedToTaskEndDate,\n linkedToTaskShowIndex,\n linkedToTaskTaskDays,\n linkedToTaskRecord.record.type === TaskType.MILESTONE,\n null,\n 0,\n this._gantt\n );\n linkLineNode.setAttribute('points', linePoints);\n lineArrowNode.setAttribute('points', arrowPoints);\n }\n }\n}\n"]}
|
|
@@ -50,13 +50,17 @@ class DataZoomIntegration {
|
|
|
50
50
|
dataZoomWrapper.id = "dataZoomWrapper", dataZoomWrapper.style.cssText = `\n width: 100%;\n height: ${height}px;\n position: absolute;\n bottom: ${y}px;\n left: 0px;\n background: transparent;\n overflow: visible;\n pointer-events: none;\n z-index: 1000;\n `,
|
|
51
51
|
this.canvas = document.createElement("canvas"), this.canvas.id = "dataZoomCanvas",
|
|
52
52
|
this.canvas.width = width, this.canvas.height = height, this.canvas.style.cssText = `\n width: ${width}px;\n height: ${height}px;\n position: absolute;\n top: 0px;\n left: ${x}px;\n pointer-events: auto;\n `,
|
|
53
|
-
dataZoomWrapper.appendChild(this.canvas), ganttContainer.appendChild(dataZoomWrapper)
|
|
54
|
-
|
|
53
|
+
dataZoomWrapper.appendChild(this.canvas), ganttContainer.appendChild(dataZoomWrapper);
|
|
54
|
+
const {stage: stage, releaseAppRef: releaseAppRef} = (0, vrender_1.createStageFromVRenderApp)({
|
|
55
55
|
canvas: this.canvas,
|
|
56
56
|
width: width,
|
|
57
57
|
height: height,
|
|
58
58
|
autoRender: !0
|
|
59
|
-
}
|
|
59
|
+
}, {
|
|
60
|
+
mode: "browser",
|
|
61
|
+
scope: "vtable-gantt-datazoom"
|
|
62
|
+
});
|
|
63
|
+
this.stage = stage, this.releaseVRenderAppRef = releaseAppRef, this.dataZoomAxis = new vrender_1.DataZoom({
|
|
60
64
|
start: start,
|
|
61
65
|
end: end,
|
|
62
66
|
position: {
|
|
@@ -265,7 +269,15 @@ class DataZoomIntegration {
|
|
|
265
269
|
const wrapper = this.canvas.parentNode;
|
|
266
270
|
wrapper && "dataZoomWrapper" === wrapper.id && wrapper.parentNode ? wrapper.parentNode.removeChild(wrapper) : wrapper.removeChild(this.canvas);
|
|
267
271
|
}
|
|
268
|
-
|
|
272
|
+
if (this.stage) {
|
|
273
|
+
const releaseAppRef = this.releaseVRenderAppRef;
|
|
274
|
+
this.releaseVRenderAppRef = void 0;
|
|
275
|
+
try {
|
|
276
|
+
this.stage.release();
|
|
277
|
+
} finally {
|
|
278
|
+
null == releaseAppRef || releaseAppRef();
|
|
279
|
+
}
|
|
280
|
+
}
|
|
269
281
|
}
|
|
270
282
|
}
|
|
271
283
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/zoom-scale/DataZoomIntegration.ts"],"names":[],"mappings":"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","file":"DataZoomIntegration.js","sourcesContent":["import type { Gantt } from '../Gantt';\nimport { DataZoom, createStage, vglobal } from '@visactor/vtable/es/vrender';\n\nexport interface DataZoomConfig {\n /** DataZoom 容器 ID(可选,如果不提供会自动从 Gantt 实例获取) */\n containerId?: string;\n /** DataZoom 初始开始位置 (0-1) */\n start?: number;\n /** DataZoom 初始结束位置 (0-1) */\n end?: number;\n /** DataZoom 宽度 */\n width?: number;\n /** DataZoom 高度 */\n height?: number;\n /** X 坐标 */\n x?: number;\n /** Y 坐标 */\n y?: number;\n /** 事件触发延迟时间 */\n delayTime?: number;\n}\n\nexport interface DataZoomLimits {\n minRangeRatio: number;\n maxRangeRatio: number;\n minMillisecondsPerPixel: number;\n maxMillisecondsPerPixel: number;\n}\n\n/**\n * DataZoom 与 Gantt 集成管理器\n * 负责 DataZoom 组件与 Gantt 图表的双向同步\n */\nexport class DataZoomIntegration {\n private gantt: Gantt;\n private dataZoomAxis: DataZoom;\n private stage: any;\n private canvas: HTMLCanvasElement;\n private isUpdatingFromDataZoom = false;\n private isUpdatingFromGantt = false;\n private lastDataZoomState = { start: 0.2, end: 0.5 };\n private lastSpanLimits: { minSpan: number; maxSpan: number } | null = null;\n private cleanupCallbacks: (() => void)[] = [];\n private resizeTimeout: NodeJS.Timeout | null = null;\n private isInitializing = true;\n\n constructor(gantt: Gantt, config: DataZoomConfig) {\n this.gantt = gantt;\n this.initializeDataZoom(config);\n this.setupEventListeners();\n\n // 延迟初始化 limits 和同步位置,等待 Gantt 完全就绪\n setTimeout(() => {\n this.updateDataZoomLimits();\n this.syncDataZoomToGanttView();\n }, 0);\n }\n\n /**\n * 同步 DataZoom 位置到 Gantt 当前视图\n * 根据 Gantt 的实际滚动位置和视口大小,计算并设置 DataZoom 的 start/end\n */\n private syncDataZoomToGanttView(): void {\n try {\n const scrollLeft = this.gantt.stateManager?.scrollLeft || 0;\n const totalWidth = this.gantt.getAllDateColsWidth?.() || 0;\n const viewportWidth = this.gantt.tableNoFrameWidth || 0;\n\n if (totalWidth > 0 && viewportWidth > 0) {\n const start = Math.max(0, Math.min(1, scrollLeft / totalWidth));\n const end = Math.max(0, Math.min(1, (scrollLeft + viewportWidth) / totalWidth));\n\n this.dataZoomAxis.setStartAndEnd(start, end);\n }\n } catch (error) {\n console.warn('⚠️ 无法同步 DataZoom 位置:', error);\n }\n }\n\n /**\n * 获取容器 ID\n */\n private getContainerId(providedId?: string): string {\n if (providedId) {\n return providedId;\n }\n\n // 尝试从 Gantt 实例获取容器 ID\n const ganttContainer = (this.gantt as any).container;\n if (ganttContainer?.id) {\n return ganttContainer.id;\n }\n\n const ganttElements = document.querySelectorAll(\n '[id*=\"gantt\"], [id*=\"table\"], [class*=\"gantt\"], [class*=\"vtable\"]'\n );\n if (ganttElements.length > 0) {\n const element = ganttElements[0] as HTMLElement;\n if (element.id) {\n return element.id;\n }\n }\n\n // 生成默认 ID\n return 'vTable';\n }\n\n /**\n * 初始化 DataZoom 组件\n */\n private initializeDataZoom(config: DataZoomConfig): void {\n // 自动获取容器 ID\n const containerId = this.getContainerId(config.containerId);\n const container = document.getElementById(containerId);\n if (!container) {\n throw new Error(`DataZoom container with ID \"${containerId}\" not found`);\n }\n\n // 获取甘特图容器(VTable 容器)\n const ganttContainer = this.gantt.container as HTMLElement;\n if (!ganttContainer) {\n throw new Error('Gantt container not found');\n }\n\n // 计算 DataZoom 的默认宽度:甘特图容器宽度减去左侧表头宽度\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n const ganttContainerWidth = ganttContainer.offsetWidth || 1000;\n const defaultWidth = ganttContainerWidth - taskTableWidth;\n\n // 计算默认 x 坐标,排除左侧表头宽度\n const defaultX = this.gantt.taskTableWidth || 0;\n\n const {\n start = 0.2,\n end = 0.5,\n width = defaultWidth, // 默认使用容器宽度\n height = 30,\n x = defaultX, // 默认排除左侧表头宽度,与时间轴内容区域对齐\n y = 0, // 默认贴着容器底部\n delayTime = 10\n } = config;\n\n // 确保 VTable 容器有相对定位\n const containerStyle = window.getComputedStyle(ganttContainer);\n if (containerStyle.position === 'static') {\n ganttContainer.style.position = 'relative';\n }\n\n const dataZoomWrapper = document.createElement('div');\n dataZoomWrapper.id = 'dataZoomWrapper';\n dataZoomWrapper.style.cssText = `\n width: 100%;\n height: ${height}px;\n position: absolute;\n bottom: ${y}px;\n left: 0px;\n background: transparent;\n overflow: visible;\n pointer-events: none;\n z-index: 1000;\n `;\n\n // 创建独立的 Canvas 和 Stage\n this.canvas = document.createElement('canvas');\n this.canvas.id = 'dataZoomCanvas';\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.canvas.style.cssText = `\n width: ${width}px;\n height: ${height}px;\n position: absolute;\n top: 0px;\n left: ${x}px;\n pointer-events: auto;\n `;\n\n // 将 Canvas 添加到包装器,再将包装器添加到 VTable 容器\n dataZoomWrapper.appendChild(this.canvas);\n ganttContainer.appendChild(dataZoomWrapper);\n\n this.stage = createStage({\n canvas: this.canvas,\n width,\n height,\n autoRender: true\n });\n\n // 创建 DataZoom 实例\n this.dataZoomAxis = new DataZoom({\n start,\n end,\n position: { x: 0, y: 0 },\n size: { width, height: height - 1 },\n showDetail: false,\n delayTime,\n brushSelect: false,\n backgroundChartStyle: {\n line: { visible: true, stroke: '#ddd' },\n area: { visible: true, fill: '#f5f5f5' }\n },\n startHandlerStyle: {\n symbolType:\n 'M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\\n' +\n 'C-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1' +\n 'v-2.6\\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,' +\n '0-0.1,0-0.1v-2.6\\nC0.3-1.4,0.3-1.4,0.3-1.4z;',\n fill: '#fff',\n size: config.width ?? 30,\n stroke: '#c2c8cf',\n lineWidth: 1\n },\n endHandlerStyle: {\n symbolType:\n 'M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\\n' +\n 'C-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1' +\n 'v-2.6\\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,' +\n '0-0.1,0-0.1v-2.6\\nC0.3-1.4,0.3-1.4,0.3-1.4z;',\n fill: '#fff',\n size: config.width ?? 30,\n stroke: '#c2c8cf',\n lineWidth: 1\n },\n middleHandlerStyle: {\n visible: false\n }\n });\n\n this.stage.defaultLayer.add(this.dataZoomAxis as any);\n\n vglobal.getRequestAnimationFrame()(() => {\n if (this.isInitializing) {\n const boundaries = this.getGanttViewBoundaries();\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n this.isInitializing = false;\n }\n this.stage.render();\n });\n\n this.lastDataZoomState = { start, end };\n }\n\n /**\n * 设置事件监听器\n */\n private setupEventListeners(): void {\n // DataZoom 变化时同步到 Gantt\n const dataZoomChangeHandler = (event: any) => {\n if (this.isUpdatingFromGantt) {\n return;\n }\n\n this.isUpdatingFromDataZoom = true;\n\n let start = event.start ?? event.detail?.start ?? event.currentTarget?.attribute?.start;\n let end = event.end ?? event.detail?.end ?? event.currentTarget?.attribute?.end;\n\n if (start === undefined || end === undefined) {\n start = this.dataZoomAxis.attribute.start;\n end = this.dataZoomAxis.attribute.end;\n }\n\n if (start !== undefined && end !== undefined && !isNaN(start) && !isNaN(end)) {\n this.applyDataZoomRangeToGantt(start, end);\n }\n this.updateDataZoomLimits();\n this.isUpdatingFromDataZoom = false;\n };\n\n this.dataZoomAxis.addEventListener('dataZoomChange', dataZoomChangeHandler);\n\n this.cleanupCallbacks.push(() => {\n this.dataZoomAxis.removeEventListener('dataZoomChange', dataZoomChangeHandler);\n });\n\n // Gantt 滚动时同步到 DataZoom\n const ganttScrollHandler = (event: any) => {\n if (this.isUpdatingFromDataZoom) {\n return;\n }\n if (event.scrollDirection !== 'horizontal') {\n return;\n }\n\n this.isUpdatingFromGantt = true;\n const boundaries = this.getGanttViewBoundaries();\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n\n this.stage.render();\n\n this.dataZoomAxis.setAttribute('disableTriggerEvent', false);\n this.isUpdatingFromGantt = false;\n };\n\n this.gantt.addEventListener('scroll', ganttScrollHandler);\n this.cleanupCallbacks.push(() => {\n this.gantt.removeEventListener('scroll', ganttScrollHandler);\n });\n\n // 窗口大小变化时的响应式更新\n const windowResizeHandler = () => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n this.updateDataZoomLimits();\n this.updateResponsive();\n }, 70);\n };\n\n window.addEventListener('resize', windowResizeHandler);\n this.cleanupCallbacks.push(() => {\n window.removeEventListener('resize', windowResizeHandler);\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n });\n\n // 监听 Gantt 的缩放事件,重新计算限制并同步 DataZoom 位置\n const ganttZoomHandler = () => {\n if (this.isUpdatingFromDataZoom) {\n return;\n }\n\n this.isUpdatingFromGantt = true;\n\n this.updateDataZoomLimits();\n\n // 同步 DataZoom 位置到当前 Gantt 视图\n if (!this.isUpdatingFromDataZoom) {\n this.syncToDataZoom();\n }\n\n this.isUpdatingFromGantt = false;\n };\n\n this.gantt.addEventListener('zoom', ganttZoomHandler);\n this.cleanupCallbacks.push(() => {\n this.gantt.removeEventListener('zoom', ganttZoomHandler);\n });\n }\n\n /**\n * 计算 DataZoom 的合理范围限制\n */\n private calculateDataZoomLimits(): DataZoomLimits {\n // 获取 Gantt 的缩放限制\n let minMillisecondsPerPixel: number;\n let maxMillisecondsPerPixel: number;\n\n if (this.gantt.zoomScaleManager) {\n minMillisecondsPerPixel = this.gantt.zoomScaleManager.getGlobalMinMillisecondsPerPixel?.() || 1000;\n maxMillisecondsPerPixel = this.gantt.zoomScaleManager.getGlobalMaxMillisecondsPerPixel?.() || 6000000;\n } else {\n minMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.minMillisecondsPerPixel ?? 1000;\n maxMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.maxMillisecondsPerPixel ?? 6000000;\n }\n\n // 获取关键参数\n const viewportWidth = this.gantt.tableNoFrameWidth; // 视口宽度(像素)\n const totalTimeRange = this.gantt.parsedOptions._maxDateTime - this.gantt.parsedOptions._minDateTime; // 总时间范围\n\n // 计算 minSpan:当使用 minMillisecondsPerPixel 时,视口能显示的时间范围占总时间的比例\n const minViewTimeRange = minMillisecondsPerPixel * viewportWidth; // 最小缩放时视口显示的时间范围\n const minRangeRatio = Math.min(1.0, minViewTimeRange / totalTimeRange);\n\n // 计算 maxSpan:当使用 maxMillisecondsPerPixel 时,视口能显示的时间范围占总时间的比例\n const maxViewTimeRange = maxMillisecondsPerPixel * viewportWidth; // 最大缩放时视口显示的时间范围\n const maxRangeRatio = Math.min(1.0, maxViewTimeRange / totalTimeRange);\n\n // 确保逻辑正确:minSpan < maxSpan\n const finalMinRangeRatio = Math.min(minRangeRatio, maxRangeRatio);\n const finalMaxRangeRatio = Math.max(minRangeRatio, maxRangeRatio);\n\n return {\n minRangeRatio: finalMinRangeRatio,\n maxRangeRatio: finalMaxRangeRatio,\n minMillisecondsPerPixel,\n maxMillisecondsPerPixel\n };\n }\n\n /**\n * 更新 DataZoom 的范围限制\n */\n private updateDataZoomLimits(): void {\n const limits = this.calculateDataZoomLimits();\n\n // 只在值改变时才更新,避免无效的 setAttributes 调用\n const hasChanged =\n !this.lastSpanLimits ||\n limits.minRangeRatio !== this.lastSpanLimits.minSpan ||\n limits.maxRangeRatio !== this.lastSpanLimits.maxSpan;\n\n if (!hasChanged) {\n return;\n }\n // 使用 lastDataZoomState 记录的当前位置\n const start = this.lastDataZoomState.start;\n const end = this.lastDataZoomState.end;\n\n this.dataZoomAxis.setAttributes({\n minSpan: limits.minRangeRatio,\n maxSpan: limits.maxRangeRatio,\n start,\n end\n });\n\n // 更新缓存\n this.lastSpanLimits = {\n minSpan: limits.minRangeRatio,\n maxSpan: limits.maxRangeRatio\n };\n\n this.stage.render();\n }\n\n /**\n * 获取 Gantt 视图边界信息\n */\n private getGanttViewBoundaries() {\n const scrollLeft = this.gantt.stateManager.scrollLeft;\n const totalWidth = this.gantt.getAllDateColsWidth();\n const viewportWidth = this.gantt.tableNoFrameWidth;\n\n const startRatio = Math.max(0, Math.min(1, scrollLeft / totalWidth));\n const endRatio = Math.max(0, Math.min(1, (scrollLeft + viewportWidth) / totalWidth));\n\n return {\n scrollLeft,\n totalWidth,\n viewportWidth,\n startRatio,\n endRatio\n };\n }\n\n /**\n * 将 DataZoom 范围应用到 Gantt 视图\n */\n private applyDataZoomRangeToGantt(start: number, end: number): void {\n if (start === undefined || end === undefined || isNaN(start) || isNaN(end)) {\n return;\n }\n\n // 更新状态记录\n this.lastDataZoomState = { start, end };\n\n // 获取当前 Gantt 的基础信息\n const currentViewportWidth = this.gantt.tableNoFrameWidth;\n const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n const rangeRatio = end - start;\n\n // 根据 DataZoom 范围计算目标 millisecondsPerPixel\n const totalTimeRange = this.gantt.parsedOptions._maxDateTime - this.gantt.parsedOptions._minDateTime;\n const selectedTimeRange = totalTimeRange * rangeRatio;\n const targetMillisecondsPerPixel = selectedTimeRange / currentViewportWidth;\n\n // 应用新的 millisecondsPerPixel\n if (Math.abs(targetMillisecondsPerPixel - currentMillisecondsPerPixel) > currentMillisecondsPerPixel * 0.01) {\n if (this.gantt.zoomScaleManager) {\n const targetLevel = this.gantt.zoomScaleManager.findOptimalLevel(targetMillisecondsPerPixel);\n const currentLevel = this.gantt.zoomScaleManager.getCurrentLevel();\n\n if (targetLevel !== currentLevel) {\n this.gantt.zoomScaleManager.switchToLevel(targetLevel);\n }\n\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n } else {\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n }\n }\n\n // 重新计算滚动位置\n const newTotalWidth = this.gantt.getAllDateColsWidth();\n const targetScrollLeft = start * newTotalWidth;\n this.gantt.stateManager.setScrollLeft(targetScrollLeft);\n }\n\n /**\n * 同步初始位置\n */\n private syncInitialPosition(): void {\n setTimeout(() => {\n const boundaries = this.getGanttViewBoundaries();\n if (boundaries.startRatio > 0 || boundaries.endRatio < 1) {\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n }\n }, 100);\n }\n\n /**\n * 手动同步 DataZoom 到 Gantt 当前视图\n */\n syncToGantt(): void {\n const start = this.dataZoomAxis.attribute.start || 0;\n const end = this.dataZoomAxis.attribute.end || 1;\n this.applyDataZoomRangeToGantt(start, end);\n }\n\n /**\n * 手动同步 Gantt 当前视图到 DataZoom\n */\n syncToDataZoom(): void {\n const boundaries = this.getGanttViewBoundaries();\n\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n }\n\n /**\n * 私有方法:同步 DataZoom 范围到 Gantt\n */\n private syncToGanttWithState(start: number, end: number): void {\n this.isUpdatingFromDataZoom = true;\n this.applyDataZoomRangeToGantt(start, end);\n setTimeout(() => {\n this.isUpdatingFromDataZoom = false;\n }, 50);\n }\n\n /**\n * 设置 DataZoom 的范围\n */\n setRange(start: number, end: number): void {\n this.dataZoomAxis.setStartAndEnd(start, end);\n }\n\n /**\n * 获取 DataZoom 当前范围\n */\n getRange(): { start: number; end: number } {\n return {\n start: this.dataZoomAxis.attribute.start || 0,\n end: this.dataZoomAxis.attribute.end || 1\n };\n }\n\n /**\n * 更新 DataZoom 尺寸\n */\n resize(width?: number, height?: number): void {\n if (width === undefined) {\n // 使用甘特图容器而不是外部容器来计算宽度\n const ganttContainer = this.gantt.container as HTMLElement;\n if (ganttContainer) {\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n width = ganttContainer.offsetWidth - taskTableWidth;\n } else {\n width = 1000;\n }\n }\n\n if (height === undefined) {\n height = 30;\n }\n\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvas.style.width = `${width}px`;\n this.canvas.style.height = `${height}px`;\n\n this.stage.resize(width, height);\n this.dataZoomAxis.setAttributes({\n size: { width, height: height - 1 }\n });\n\n // 强制重新渲染\n this.stage.render();\n }\n\n /**\n * 响应式更新 DataZoom 大小和位置\n * 当容器大小或位置发生变化时调用\n */\n updateResponsive(): void {\n const ganttContainer = this.gantt.container as HTMLElement;\n if (!ganttContainer) {\n return;\n }\n\n // 计算新宽度:甘特图容器宽度减去左侧表头宽度\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n const newWidth = ganttContainer.offsetWidth - taskTableWidth;\n\n this.resize(newWidth);\n\n // 更新位置(保持与时间轴内容区域对齐,排除左侧表头)\n const defaultX = this.gantt.taskTableWidth || 0;\n this.updatePosition(defaultX, 0);\n\n // 重新同步 DataZoom 状态,因为视图宽度变化会影响时间范围的显示比例\n this.syncToDataZoom();\n }\n\n /**\n * 更新 DataZoom 位置\n * 当容器位置发生变化时调用\n */\n updatePosition(x?: number, y?: number): void {\n const xPos = x ?? this.gantt.taskTableWidth ?? 0;\n this.canvas.style.left = `${xPos}px`;\n }\n\n /**\n * 销毁 DataZoom 集成\n */\n destroy(): void {\n this.cleanupCallbacks.forEach(cleanup => cleanup());\n this.cleanupCallbacks = [];\n\n // 清理包装器和 Canvas\n if (this.canvas && this.canvas.parentNode) {\n const wrapper = this.canvas.parentNode as HTMLElement;\n if (wrapper && wrapper.id === 'dataZoomWrapper' && wrapper.parentNode) {\n // 移除整个包装器\n wrapper.parentNode.removeChild(wrapper);\n } else {\n // 如果没有包装器,直接移除 Canvas\n wrapper.removeChild(this.canvas);\n }\n }\n\n if (this.stage) {\n this.stage.release();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/zoom-scale/DataZoomIntegration.ts"],"names":[],"mappings":"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","file":"DataZoomIntegration.js","sourcesContent":["import type { Gantt } from '../Gantt';\nimport { DataZoom, createStageFromVRenderApp, vglobal } from '@visactor/vtable/es/vrender';\n\nexport interface DataZoomConfig {\n /** DataZoom 容器 ID(可选,如果不提供会自动从 Gantt 实例获取) */\n containerId?: string;\n /** DataZoom 初始开始位置 (0-1) */\n start?: number;\n /** DataZoom 初始结束位置 (0-1) */\n end?: number;\n /** DataZoom 宽度 */\n width?: number;\n /** DataZoom 高度 */\n height?: number;\n /** X 坐标 */\n x?: number;\n /** Y 坐标 */\n y?: number;\n /** 事件触发延迟时间 */\n delayTime?: number;\n}\n\nexport interface DataZoomLimits {\n minRangeRatio: number;\n maxRangeRatio: number;\n minMillisecondsPerPixel: number;\n maxMillisecondsPerPixel: number;\n}\n\n/**\n * DataZoom 与 Gantt 集成管理器\n * 负责 DataZoom 组件与 Gantt 图表的双向同步\n */\nexport class DataZoomIntegration {\n private gantt: Gantt;\n private dataZoomAxis: DataZoom;\n private stage: any;\n private releaseVRenderAppRef?: () => void;\n private canvas: HTMLCanvasElement;\n private isUpdatingFromDataZoom = false;\n private isUpdatingFromGantt = false;\n private lastDataZoomState = { start: 0.2, end: 0.5 };\n private lastSpanLimits: { minSpan: number; maxSpan: number } | null = null;\n private cleanupCallbacks: (() => void)[] = [];\n private resizeTimeout: NodeJS.Timeout | null = null;\n private isInitializing = true;\n\n constructor(gantt: Gantt, config: DataZoomConfig) {\n this.gantt = gantt;\n this.initializeDataZoom(config);\n this.setupEventListeners();\n\n // 延迟初始化 limits 和同步位置,等待 Gantt 完全就绪\n setTimeout(() => {\n this.updateDataZoomLimits();\n this.syncDataZoomToGanttView();\n }, 0);\n }\n\n /**\n * 同步 DataZoom 位置到 Gantt 当前视图\n * 根据 Gantt 的实际滚动位置和视口大小,计算并设置 DataZoom 的 start/end\n */\n private syncDataZoomToGanttView(): void {\n try {\n const scrollLeft = this.gantt.stateManager?.scrollLeft || 0;\n const totalWidth = this.gantt.getAllDateColsWidth?.() || 0;\n const viewportWidth = this.gantt.tableNoFrameWidth || 0;\n\n if (totalWidth > 0 && viewportWidth > 0) {\n const start = Math.max(0, Math.min(1, scrollLeft / totalWidth));\n const end = Math.max(0, Math.min(1, (scrollLeft + viewportWidth) / totalWidth));\n\n this.dataZoomAxis.setStartAndEnd(start, end);\n }\n } catch (error) {\n console.warn('⚠️ 无法同步 DataZoom 位置:', error);\n }\n }\n\n /**\n * 获取容器 ID\n */\n private getContainerId(providedId?: string): string {\n if (providedId) {\n return providedId;\n }\n\n // 尝试从 Gantt 实例获取容器 ID\n const ganttContainer = (this.gantt as any).container;\n if (ganttContainer?.id) {\n return ganttContainer.id;\n }\n\n const ganttElements = document.querySelectorAll(\n '[id*=\"gantt\"], [id*=\"table\"], [class*=\"gantt\"], [class*=\"vtable\"]'\n );\n if (ganttElements.length > 0) {\n const element = ganttElements[0] as HTMLElement;\n if (element.id) {\n return element.id;\n }\n }\n\n // 生成默认 ID\n return 'vTable';\n }\n\n /**\n * 初始化 DataZoom 组件\n */\n private initializeDataZoom(config: DataZoomConfig): void {\n // 自动获取容器 ID\n const containerId = this.getContainerId(config.containerId);\n const container = document.getElementById(containerId);\n if (!container) {\n throw new Error(`DataZoom container with ID \"${containerId}\" not found`);\n }\n\n // 获取甘特图容器(VTable 容器)\n const ganttContainer = this.gantt.container as HTMLElement;\n if (!ganttContainer) {\n throw new Error('Gantt container not found');\n }\n\n // 计算 DataZoom 的默认宽度:甘特图容器宽度减去左侧表头宽度\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n const ganttContainerWidth = ganttContainer.offsetWidth || 1000;\n const defaultWidth = ganttContainerWidth - taskTableWidth;\n\n // 计算默认 x 坐标,排除左侧表头宽度\n const defaultX = this.gantt.taskTableWidth || 0;\n\n const {\n start = 0.2,\n end = 0.5,\n width = defaultWidth, // 默认使用容器宽度\n height = 30,\n x = defaultX, // 默认排除左侧表头宽度,与时间轴内容区域对齐\n y = 0, // 默认贴着容器底部\n delayTime = 10\n } = config;\n\n // 确保 VTable 容器有相对定位\n const containerStyle = window.getComputedStyle(ganttContainer);\n if (containerStyle.position === 'static') {\n ganttContainer.style.position = 'relative';\n }\n\n const dataZoomWrapper = document.createElement('div');\n dataZoomWrapper.id = 'dataZoomWrapper';\n dataZoomWrapper.style.cssText = `\n width: 100%;\n height: ${height}px;\n position: absolute;\n bottom: ${y}px;\n left: 0px;\n background: transparent;\n overflow: visible;\n pointer-events: none;\n z-index: 1000;\n `;\n\n // 创建独立的 Canvas 和 Stage\n this.canvas = document.createElement('canvas');\n this.canvas.id = 'dataZoomCanvas';\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.canvas.style.cssText = `\n width: ${width}px;\n height: ${height}px;\n position: absolute;\n top: 0px;\n left: ${x}px;\n pointer-events: auto;\n `;\n\n // 将 Canvas 添加到包装器,再将包装器添加到 VTable 容器\n dataZoomWrapper.appendChild(this.canvas);\n ganttContainer.appendChild(dataZoomWrapper);\n\n const { stage, releaseAppRef } = createStageFromVRenderApp(\n {\n canvas: this.canvas,\n width,\n height,\n autoRender: true\n },\n { mode: 'browser', scope: 'vtable-gantt-datazoom' }\n );\n this.stage = stage;\n this.releaseVRenderAppRef = releaseAppRef;\n\n // 创建 DataZoom 实例\n this.dataZoomAxis = new DataZoom({\n start,\n end,\n position: { x: 0, y: 0 },\n size: { width, height: height - 1 },\n showDetail: false,\n delayTime,\n brushSelect: false,\n backgroundChartStyle: {\n line: { visible: true, stroke: '#ddd' },\n area: { visible: true, fill: '#f5f5f5' }\n },\n startHandlerStyle: {\n symbolType:\n 'M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\\n' +\n 'C-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1' +\n 'v-2.6\\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,' +\n '0-0.1,0-0.1v-2.6\\nC0.3-1.4,0.3-1.4,0.3-1.4z;',\n fill: '#fff',\n size: config.width ?? 30,\n stroke: '#c2c8cf',\n lineWidth: 1\n },\n endHandlerStyle: {\n symbolType:\n 'M-0.5-2.4h0.9c0.4,0,0.7,0.3,0.7,0.7v3.3c0,0.4-0.3,0.7-0.7,0.7h-0.9c-0.4,0-0.7-0.3-0.7-0.7v-3.3\\n' +\n 'C-1.2-2-0.9-2.4-0.5-2.4z M-0.4-1.4L-0.4-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,0-0.1,0-0.1' +\n 'v-2.6\\nC-0.4-1.4-0.4-1.4-0.4-1.4z M0.3-1.4L0.3-1.4c0,0,0,0.1,0,0.1v2.6c0,0.1,0,0.1,0,0.1l0,0c0,0,' +\n '0-0.1,0-0.1v-2.6\\nC0.3-1.4,0.3-1.4,0.3-1.4z;',\n fill: '#fff',\n size: config.width ?? 30,\n stroke: '#c2c8cf',\n lineWidth: 1\n },\n middleHandlerStyle: {\n visible: false\n }\n });\n\n this.stage.defaultLayer.add(this.dataZoomAxis as any);\n\n vglobal.getRequestAnimationFrame()(() => {\n if (this.isInitializing) {\n const boundaries = this.getGanttViewBoundaries();\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n this.isInitializing = false;\n }\n this.stage.render();\n });\n\n this.lastDataZoomState = { start, end };\n }\n\n /**\n * 设置事件监听器\n */\n private setupEventListeners(): void {\n // DataZoom 变化时同步到 Gantt\n const dataZoomChangeHandler = (event: any) => {\n if (this.isUpdatingFromGantt) {\n return;\n }\n\n this.isUpdatingFromDataZoom = true;\n\n let start = event.start ?? event.detail?.start ?? event.currentTarget?.attribute?.start;\n let end = event.end ?? event.detail?.end ?? event.currentTarget?.attribute?.end;\n\n if (start === undefined || end === undefined) {\n start = this.dataZoomAxis.attribute.start;\n end = this.dataZoomAxis.attribute.end;\n }\n\n if (start !== undefined && end !== undefined && !isNaN(start) && !isNaN(end)) {\n this.applyDataZoomRangeToGantt(start, end);\n }\n this.updateDataZoomLimits();\n this.isUpdatingFromDataZoom = false;\n };\n\n this.dataZoomAxis.addEventListener('dataZoomChange', dataZoomChangeHandler);\n\n this.cleanupCallbacks.push(() => {\n this.dataZoomAxis.removeEventListener('dataZoomChange', dataZoomChangeHandler);\n });\n\n // Gantt 滚动时同步到 DataZoom\n const ganttScrollHandler = (event: any) => {\n if (this.isUpdatingFromDataZoom) {\n return;\n }\n if (event.scrollDirection !== 'horizontal') {\n return;\n }\n\n this.isUpdatingFromGantt = true;\n const boundaries = this.getGanttViewBoundaries();\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n\n this.stage.render();\n\n this.dataZoomAxis.setAttribute('disableTriggerEvent', false);\n this.isUpdatingFromGantt = false;\n };\n\n this.gantt.addEventListener('scroll', ganttScrollHandler);\n this.cleanupCallbacks.push(() => {\n this.gantt.removeEventListener('scroll', ganttScrollHandler);\n });\n\n // 窗口大小变化时的响应式更新\n const windowResizeHandler = () => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n this.updateDataZoomLimits();\n this.updateResponsive();\n }, 70);\n };\n\n window.addEventListener('resize', windowResizeHandler);\n this.cleanupCallbacks.push(() => {\n window.removeEventListener('resize', windowResizeHandler);\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n });\n\n // 监听 Gantt 的缩放事件,重新计算限制并同步 DataZoom 位置\n const ganttZoomHandler = () => {\n if (this.isUpdatingFromDataZoom) {\n return;\n }\n\n this.isUpdatingFromGantt = true;\n\n this.updateDataZoomLimits();\n\n // 同步 DataZoom 位置到当前 Gantt 视图\n if (!this.isUpdatingFromDataZoom) {\n this.syncToDataZoom();\n }\n\n this.isUpdatingFromGantt = false;\n };\n\n this.gantt.addEventListener('zoom', ganttZoomHandler);\n this.cleanupCallbacks.push(() => {\n this.gantt.removeEventListener('zoom', ganttZoomHandler);\n });\n }\n\n /**\n * 计算 DataZoom 的合理范围限制\n */\n private calculateDataZoomLimits(): DataZoomLimits {\n // 获取 Gantt 的缩放限制\n let minMillisecondsPerPixel: number;\n let maxMillisecondsPerPixel: number;\n\n if (this.gantt.zoomScaleManager) {\n minMillisecondsPerPixel = this.gantt.zoomScaleManager.getGlobalMinMillisecondsPerPixel?.() || 1000;\n maxMillisecondsPerPixel = this.gantt.zoomScaleManager.getGlobalMaxMillisecondsPerPixel?.() || 6000000;\n } else {\n minMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.minMillisecondsPerPixel ?? 1000;\n maxMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.maxMillisecondsPerPixel ?? 6000000;\n }\n\n // 获取关键参数\n const viewportWidth = this.gantt.tableNoFrameWidth; // 视口宽度(像素)\n const totalTimeRange = this.gantt.parsedOptions._maxDateTime - this.gantt.parsedOptions._minDateTime; // 总时间范围\n\n // 计算 minSpan:当使用 minMillisecondsPerPixel 时,视口能显示的时间范围占总时间的比例\n const minViewTimeRange = minMillisecondsPerPixel * viewportWidth; // 最小缩放时视口显示的时间范围\n const minRangeRatio = Math.min(1.0, minViewTimeRange / totalTimeRange);\n\n // 计算 maxSpan:当使用 maxMillisecondsPerPixel 时,视口能显示的时间范围占总时间的比例\n const maxViewTimeRange = maxMillisecondsPerPixel * viewportWidth; // 最大缩放时视口显示的时间范围\n const maxRangeRatio = Math.min(1.0, maxViewTimeRange / totalTimeRange);\n\n // 确保逻辑正确:minSpan < maxSpan\n const finalMinRangeRatio = Math.min(minRangeRatio, maxRangeRatio);\n const finalMaxRangeRatio = Math.max(minRangeRatio, maxRangeRatio);\n\n return {\n minRangeRatio: finalMinRangeRatio,\n maxRangeRatio: finalMaxRangeRatio,\n minMillisecondsPerPixel,\n maxMillisecondsPerPixel\n };\n }\n\n /**\n * 更新 DataZoom 的范围限制\n */\n private updateDataZoomLimits(): void {\n const limits = this.calculateDataZoomLimits();\n\n // 只在值改变时才更新,避免无效的 setAttributes 调用\n const hasChanged =\n !this.lastSpanLimits ||\n limits.minRangeRatio !== this.lastSpanLimits.minSpan ||\n limits.maxRangeRatio !== this.lastSpanLimits.maxSpan;\n\n if (!hasChanged) {\n return;\n }\n // 使用 lastDataZoomState 记录的当前位置\n const start = this.lastDataZoomState.start;\n const end = this.lastDataZoomState.end;\n\n this.dataZoomAxis.setAttributes({\n minSpan: limits.minRangeRatio,\n maxSpan: limits.maxRangeRatio,\n start,\n end\n });\n\n // 更新缓存\n this.lastSpanLimits = {\n minSpan: limits.minRangeRatio,\n maxSpan: limits.maxRangeRatio\n };\n\n this.stage.render();\n }\n\n /**\n * 获取 Gantt 视图边界信息\n */\n private getGanttViewBoundaries() {\n const scrollLeft = this.gantt.stateManager.scrollLeft;\n const totalWidth = this.gantt.getAllDateColsWidth();\n const viewportWidth = this.gantt.tableNoFrameWidth;\n\n const startRatio = Math.max(0, Math.min(1, scrollLeft / totalWidth));\n const endRatio = Math.max(0, Math.min(1, (scrollLeft + viewportWidth) / totalWidth));\n\n return {\n scrollLeft,\n totalWidth,\n viewportWidth,\n startRatio,\n endRatio\n };\n }\n\n /**\n * 将 DataZoom 范围应用到 Gantt 视图\n */\n private applyDataZoomRangeToGantt(start: number, end: number): void {\n if (start === undefined || end === undefined || isNaN(start) || isNaN(end)) {\n return;\n }\n\n // 更新状态记录\n this.lastDataZoomState = { start, end };\n\n // 获取当前 Gantt 的基础信息\n const currentViewportWidth = this.gantt.tableNoFrameWidth;\n const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n const rangeRatio = end - start;\n\n // 根据 DataZoom 范围计算目标 millisecondsPerPixel\n const totalTimeRange = this.gantt.parsedOptions._maxDateTime - this.gantt.parsedOptions._minDateTime;\n const selectedTimeRange = totalTimeRange * rangeRatio;\n const targetMillisecondsPerPixel = selectedTimeRange / currentViewportWidth;\n\n // 应用新的 millisecondsPerPixel\n if (Math.abs(targetMillisecondsPerPixel - currentMillisecondsPerPixel) > currentMillisecondsPerPixel * 0.01) {\n if (this.gantt.zoomScaleManager) {\n const targetLevel = this.gantt.zoomScaleManager.findOptimalLevel(targetMillisecondsPerPixel);\n const currentLevel = this.gantt.zoomScaleManager.getCurrentLevel();\n\n if (targetLevel !== currentLevel) {\n this.gantt.zoomScaleManager.switchToLevel(targetLevel);\n }\n\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n } else {\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n }\n }\n\n // 重新计算滚动位置\n const newTotalWidth = this.gantt.getAllDateColsWidth();\n const targetScrollLeft = start * newTotalWidth;\n this.gantt.stateManager.setScrollLeft(targetScrollLeft);\n }\n\n /**\n * 同步初始位置\n */\n private syncInitialPosition(): void {\n setTimeout(() => {\n const boundaries = this.getGanttViewBoundaries();\n if (boundaries.startRatio > 0 || boundaries.endRatio < 1) {\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n }\n }, 100);\n }\n\n /**\n * 手动同步 DataZoom 到 Gantt 当前视图\n */\n syncToGantt(): void {\n const start = this.dataZoomAxis.attribute.start || 0;\n const end = this.dataZoomAxis.attribute.end || 1;\n this.applyDataZoomRangeToGantt(start, end);\n }\n\n /**\n * 手动同步 Gantt 当前视图到 DataZoom\n */\n syncToDataZoom(): void {\n const boundaries = this.getGanttViewBoundaries();\n\n this.dataZoomAxis.setStartAndEnd(boundaries.startRatio, boundaries.endRatio);\n }\n\n /**\n * 私有方法:同步 DataZoom 范围到 Gantt\n */\n private syncToGanttWithState(start: number, end: number): void {\n this.isUpdatingFromDataZoom = true;\n this.applyDataZoomRangeToGantt(start, end);\n setTimeout(() => {\n this.isUpdatingFromDataZoom = false;\n }, 50);\n }\n\n /**\n * 设置 DataZoom 的范围\n */\n setRange(start: number, end: number): void {\n this.dataZoomAxis.setStartAndEnd(start, end);\n }\n\n /**\n * 获取 DataZoom 当前范围\n */\n getRange(): { start: number; end: number } {\n return {\n start: this.dataZoomAxis.attribute.start || 0,\n end: this.dataZoomAxis.attribute.end || 1\n };\n }\n\n /**\n * 更新 DataZoom 尺寸\n */\n resize(width?: number, height?: number): void {\n if (width === undefined) {\n // 使用甘特图容器而不是外部容器来计算宽度\n const ganttContainer = this.gantt.container as HTMLElement;\n if (ganttContainer) {\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n width = ganttContainer.offsetWidth - taskTableWidth;\n } else {\n width = 1000;\n }\n }\n\n if (height === undefined) {\n height = 30;\n }\n\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvas.style.width = `${width}px`;\n this.canvas.style.height = `${height}px`;\n\n this.stage.resize(width, height);\n this.dataZoomAxis.setAttributes({\n size: { width, height: height - 1 }\n });\n\n // 强制重新渲染\n this.stage.render();\n }\n\n /**\n * 响应式更新 DataZoom 大小和位置\n * 当容器大小或位置发生变化时调用\n */\n updateResponsive(): void {\n const ganttContainer = this.gantt.container as HTMLElement;\n if (!ganttContainer) {\n return;\n }\n\n // 计算新宽度:甘特图容器宽度减去左侧表头宽度\n const taskTableWidth = this.gantt.taskTableWidth || 0;\n const newWidth = ganttContainer.offsetWidth - taskTableWidth;\n\n this.resize(newWidth);\n\n // 更新位置(保持与时间轴内容区域对齐,排除左侧表头)\n const defaultX = this.gantt.taskTableWidth || 0;\n this.updatePosition(defaultX, 0);\n\n // 重新同步 DataZoom 状态,因为视图宽度变化会影响时间范围的显示比例\n this.syncToDataZoom();\n }\n\n /**\n * 更新 DataZoom 位置\n * 当容器位置发生变化时调用\n */\n updatePosition(x?: number, y?: number): void {\n const xPos = x ?? this.gantt.taskTableWidth ?? 0;\n this.canvas.style.left = `${xPos}px`;\n }\n\n /**\n * 销毁 DataZoom 集成\n */\n destroy(): void {\n this.cleanupCallbacks.forEach(cleanup => cleanup());\n this.cleanupCallbacks = [];\n\n // 清理包装器和 Canvas\n if (this.canvas && this.canvas.parentNode) {\n const wrapper = this.canvas.parentNode as HTMLElement;\n if (wrapper && wrapper.id === 'dataZoomWrapper' && wrapper.parentNode) {\n // 移除整个包装器\n wrapper.parentNode.removeChild(wrapper);\n } else {\n // 如果没有包装器,直接移除 Canvas\n wrapper.removeChild(this.canvas);\n }\n }\n\n if (this.stage) {\n const releaseAppRef = this.releaseVRenderAppRef;\n this.releaseVRenderAppRef = undefined;\n\n try {\n this.stage.release();\n } finally {\n releaseAppRef?.();\n }\n }\n }\n}\n"]}
|