@xpyjs/gantt-core 0.0.1-alpha.2 → 0.0.1-alpha.4
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/dist/style.css +1 -0
- package/dist/x-gantt.js +6442 -0
- package/dist/x-gantt.umd.cjs +18 -0
- package/package.json +1 -1
- package/types/GanttContext.d.ts +33 -0
- package/types/XGantt.d.ts +248 -0
- package/types/event/index.d.ts +75 -0
- package/types/index.d.ts +13 -0
- package/types/logo.d.ts +2 -0
- package/types/models/Baseline.d.ts +37 -0
- package/types/models/Task.d.ts +77 -0
- package/types/rendering/RenderScheduler.d.ts +93 -0
- package/types/rendering/Renderer.d.ts +52 -0
- package/types/rendering/chart/ChartBaseline.d.ts +50 -0
- package/types/rendering/chart/ChartBody.d.ts +102 -0
- package/types/rendering/chart/ChartGrid.d.ts +37 -0
- package/types/rendering/chart/ChartHeader.d.ts +54 -0
- package/types/rendering/chart/ChartHoliday.d.ts +38 -0
- package/types/rendering/chart/ChartLink.d.ts +87 -0
- package/types/rendering/chart/ChartRow.d.ts +17 -0
- package/types/rendering/chart/ChartSlider.d.ts +58 -0
- package/types/rendering/chart/ChartToday.d.ts +31 -0
- package/types/rendering/chart/ChartWeekend.d.ts +43 -0
- package/types/rendering/chart/Pattern.d.ts +19 -0
- package/types/rendering/chart/index.d.ts +34 -0
- package/types/rendering/other/GuideLine.d.ts +50 -0
- package/types/rendering/other/MiddleResizeLine.d.ts +15 -0
- package/types/rendering/scrollbar/index.d.ts +132 -0
- package/types/rendering/table/Checkbox.d.ts +39 -0
- package/types/rendering/table/TableBody.d.ts +25 -0
- package/types/rendering/table/TableCell.d.ts +43 -0
- package/types/rendering/table/TableHeader.d.ts +13 -0
- package/types/rendering/table/TableHeaderCell.d.ts +20 -0
- package/types/rendering/table/TableHeaderGroup.d.ts +15 -0
- package/types/rendering/table/TableRow.d.ts +57 -0
- package/types/rendering/table/index.d.ts +15 -0
- package/types/store/ColumnManager.d.ts +81 -0
- package/types/store/DataManager.d.ts +132 -0
- package/types/store/OptionManager.d.ts +12 -0
- package/types/store/TimeAxis.d.ts +88 -0
- package/types/store/index.d.ts +21 -0
- package/types/types/baseline.d.ts +16 -0
- package/types/types/chart.d.ts +59 -0
- package/types/types/event.d.ts +29 -0
- package/types/types/global.d.ts +9 -0
- package/types/types/index.d.ts +26 -0
- package/types/types/link.d.ts +23 -0
- package/types/types/options.d.ts +827 -0
- package/types/types/render.d.ts +26 -0
- package/types/types/styles.d.ts +37 -0
- package/types/types/table.d.ts +139 -0
- package/types/utils/color.d.ts +148 -0
- package/types/utils/helpers.d.ts +47 -0
- package/types/utils/id.d.ts +1 -0
- package/types/utils/logger.d.ts +88 -0
- package/types/utils/size.d.ts +7 -0
- package/types/utils/time.d.ts +9 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { IOptionConfig, IOptions } from "./types";
|
|
2
|
+
import { EventMap } from "./types/event";
|
|
3
|
+
/**
|
|
4
|
+
* XGantt 甘特图组件的主要接口
|
|
5
|
+
*
|
|
6
|
+
* @description 这是 XGantt 甘特图组件的核心接口,提供了创建、配置、渲染和管理甘特图的所有功能。
|
|
7
|
+
* XGantt 是一个功能强大的甘特图组件,支持任务管理、时间轴显示、关联线、进度跟踪等功能。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // 基本使用
|
|
12
|
+
* const gantt = new XGantt('#container', {
|
|
13
|
+
* data: [
|
|
14
|
+
* {
|
|
15
|
+
* id: 1,
|
|
16
|
+
* name: '任务1',
|
|
17
|
+
* startTime: '2023-01-01',
|
|
18
|
+
* endTime: '2023-01-10',
|
|
19
|
+
* progress: 50
|
|
20
|
+
* }
|
|
21
|
+
* ]
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // 监听事件
|
|
25
|
+
* gantt.on('select', (data, checked, all) => {
|
|
26
|
+
* console.log('选择了任务:', data);
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // 更新配置
|
|
30
|
+
* gantt.update({
|
|
31
|
+
* unit: 'week',
|
|
32
|
+
* primaryColor: '#007acc'
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // 跳转到指定日期
|
|
36
|
+
* gantt.jumpTo('2023-06-01');
|
|
37
|
+
*
|
|
38
|
+
* // 销毁组件
|
|
39
|
+
* gantt.destroy();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class XGantt {
|
|
43
|
+
private context;
|
|
44
|
+
private events;
|
|
45
|
+
constructor(element: string | HTMLElement, options?: IOptions);
|
|
46
|
+
/**
|
|
47
|
+
* 更新 XGantt 的配置选项
|
|
48
|
+
*
|
|
49
|
+
* @param options - 新的配置选项,支持部分更新
|
|
50
|
+
* @param config - 配置更新参数的方式
|
|
51
|
+
*
|
|
52
|
+
* @description 此方法允许在运行时动态更新甘特图的配置。
|
|
53
|
+
* 只需要传入需要更改的配置项,其他配置项将保持不变。
|
|
54
|
+
* 更新后会自动重新渲染相关部分以反映新的配置。
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* // 更新数据源。数据会被完全替换,除非原数据的 key 一致
|
|
59
|
+
* gantt.update({
|
|
60
|
+
* data: newTaskData
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // 更新显示单位
|
|
64
|
+
* gantt.update({
|
|
65
|
+
* unit: 'month'
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* // 更新主题色
|
|
69
|
+
* gantt.update({
|
|
70
|
+
* primaryColor: '#ff6b6b'
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* // 批量更新多个配置
|
|
74
|
+
* gantt.update({
|
|
75
|
+
* unit: 'week',
|
|
76
|
+
* primaryColor: '#4ecdc4',
|
|
77
|
+
* dateFormat: 'YYYY-MM-DD',
|
|
78
|
+
* row: {
|
|
79
|
+
* height: 40
|
|
80
|
+
* }
|
|
81
|
+
* });
|
|
82
|
+
*
|
|
83
|
+
* // 完全替换配置(不合并)
|
|
84
|
+
* gantt.update(newOptions, { merge: false });
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
update(options: IOptions, config?: IOptionConfig): void;
|
|
89
|
+
/**
|
|
90
|
+
* 渲染甘特图视图
|
|
91
|
+
*
|
|
92
|
+
* @description 此方法通常不需要主动调用,初始化以及 `update` 中都会自动更新。 如果你需要强制刷新页面,可以在合适的时候调用此方法
|
|
93
|
+
*/
|
|
94
|
+
render(): void;
|
|
95
|
+
/**
|
|
96
|
+
* 销毁甘特图实例,清理所有资源
|
|
97
|
+
*
|
|
98
|
+
* @description 完全销毁甘特图实例并清理所有相关资源,包括:
|
|
99
|
+
* - 移除所有事件监听器
|
|
100
|
+
* - 清理 DOM 元素和事件绑定
|
|
101
|
+
* - 释放内存中的数据引用
|
|
102
|
+
* - 停止所有动画和定时器
|
|
103
|
+
* - 清理渲染上下文
|
|
104
|
+
*
|
|
105
|
+
* 调用此方法后,甘特图实例将不再可用,需要重新创建新实例。
|
|
106
|
+
* 这对于防止内存泄漏和确保组件的正确生命周期管理非常重要。
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const gantt = new XGantt('#container', options);
|
|
111
|
+
* gantt.render();
|
|
112
|
+
*
|
|
113
|
+
* // 在组件卸载或页面离开时销毁
|
|
114
|
+
* gantt.destroy();
|
|
115
|
+
*
|
|
116
|
+
* // React 组件中的使用示例
|
|
117
|
+
* useEffect(() => {
|
|
118
|
+
* const gantt = new XGantt('#gantt-container', options);
|
|
119
|
+
* gantt.render();
|
|
120
|
+
*
|
|
121
|
+
* return () => {
|
|
122
|
+
* gantt.destroy(); // 组件卸载时清理
|
|
123
|
+
* };
|
|
124
|
+
* }, []);
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @warning 销毁后的实例不能再次使用,调用任何方法都可能导致错误
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void;
|
|
130
|
+
/**
|
|
131
|
+
* 跳转到指定日期
|
|
132
|
+
*
|
|
133
|
+
* @param date - 要跳转到的日期,支持多种格式:
|
|
134
|
+
* - Date 对象
|
|
135
|
+
* - ISO 日期字符串 (如 '2023-06-01')
|
|
136
|
+
* - 时间戳数字
|
|
137
|
+
* - 其他可被 Date 构造函数解析的格式
|
|
138
|
+
* - 如果不传入参数或传入 undefined,则跳转到今天
|
|
139
|
+
*
|
|
140
|
+
* @returns 是否成功跳转到指定日期
|
|
141
|
+
* - `true`: 成功跳转,视图已更新到指定日期
|
|
142
|
+
* - `false`: 跳转失败,可能是日期无效或超出数据范围
|
|
143
|
+
*
|
|
144
|
+
* @description 此方法将甘特图的视图定位到指定日期,使该日期在当前视窗中可见。
|
|
145
|
+
* 具体行为取决于当前的显示单位和视图范围:
|
|
146
|
+
* - 如果指定日期在当前视图范围内,视图会滚动到该日期
|
|
147
|
+
* - 如果指定日期超出当前数据范围,可能会扩展时间轴或返回 false
|
|
148
|
+
* - 跳转会触发相应的滚动动画(如果启用)
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* // 跳转到今天(默认行为)
|
|
153
|
+
* const success1 = gantt.jumpTo();
|
|
154
|
+
* const success2 = gantt.jumpTo(undefined);
|
|
155
|
+
*
|
|
156
|
+
* // 跳转到指定日期
|
|
157
|
+
* const success3 = gantt.jumpTo('2023-06-01');
|
|
158
|
+
* const success4 = gantt.jumpTo(new Date('2023-06-01'));
|
|
159
|
+
* const success5 = gantt.jumpTo(1685577600000); // 时间戳
|
|
160
|
+
*
|
|
161
|
+
* // 检查跳转结果
|
|
162
|
+
* if (gantt.jumpTo('2023-12-25')) {
|
|
163
|
+
* console.log('成功跳转到圣诞节');
|
|
164
|
+
* } else {
|
|
165
|
+
* console.log('跳转失败,日期可能超出范围');
|
|
166
|
+
* }
|
|
167
|
+
*
|
|
168
|
+
* // 跳转到项目开始日期
|
|
169
|
+
* const projectStartDate = data[0]?.startTime;
|
|
170
|
+
* if (projectStartDate) {
|
|
171
|
+
* gantt.jumpTo(projectStartDate);
|
|
172
|
+
* }
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
jumpTo(date?: any): boolean;
|
|
176
|
+
/**
|
|
177
|
+
* 注册事件监听器
|
|
178
|
+
*
|
|
179
|
+
* @template K - 事件名称的类型
|
|
180
|
+
* @param event - 要监听的事件名称
|
|
181
|
+
* @param cb - 事件回调函数
|
|
182
|
+
*
|
|
183
|
+
* @description 为甘特图注册事件监听器,支持监听各种用户交互和状态变化事件。
|
|
184
|
+
* 同一个事件注册多个,只会执行最后一个监听器。
|
|
185
|
+
*
|
|
186
|
+
* 支持的事件类型包括:
|
|
187
|
+
* - `loaded`: 加载完成事件,组件初始化完成后触发
|
|
188
|
+
* - `error`: 错误事件,当组件发生错误时触发
|
|
189
|
+
* - `update:link`: 关联线更新事件
|
|
190
|
+
* - `create:link`: 关联线创建事件
|
|
191
|
+
* - `select:link`: 关联线选择事件
|
|
192
|
+
* - `select`: 任务选择事件
|
|
193
|
+
* - `click:row`: 行点击事件
|
|
194
|
+
* - `dblclick:row`: 行双击事件
|
|
195
|
+
* - `contextmenu:row`: 行右键菜单事件
|
|
196
|
+
* - `click:slider`: 任务条点击事件
|
|
197
|
+
* - `dblclick:slider`: 任务条双击事件
|
|
198
|
+
* - `contextmenu:slider`: 任务条右键菜单事件
|
|
199
|
+
* - `move`: 任务移动事件
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* // 监听任务选择事件
|
|
204
|
+
* gantt.on('select', (selectedData, isChecked, allSelectedData) => {
|
|
205
|
+
* console.log('选择状态:', isChecked);
|
|
206
|
+
* console.log('当前选择的数据:', selectedData);
|
|
207
|
+
* console.log('所有选择的数据:', allSelectedData);
|
|
208
|
+
* });
|
|
209
|
+
*
|
|
210
|
+
* // 监听行点击事件
|
|
211
|
+
* gantt.on('click:row', (event, rowData) => {
|
|
212
|
+
* console.log('点击了行:', rowData.name);
|
|
213
|
+
* console.log('鼠标事件:', event);
|
|
214
|
+
* });
|
|
215
|
+
*
|
|
216
|
+
* // 监听任务条双击事件
|
|
217
|
+
* gantt.on('dblclick:slider', (event, taskData) => {
|
|
218
|
+
* console.log('双击了任务条:', taskData.name);
|
|
219
|
+
* // 可以打开任务详情弹窗
|
|
220
|
+
* openTaskDetailModal(taskData);
|
|
221
|
+
* });
|
|
222
|
+
*
|
|
223
|
+
* // 监听任务移动事件
|
|
224
|
+
* gantt.on('move', (moveData) => {
|
|
225
|
+
* moveData.forEach(item => {
|
|
226
|
+
* console.log(`任务 ${item.row.name} 从 ${item.old.startTime} 移动到 ${item.row.startTime}`);
|
|
227
|
+
* });
|
|
228
|
+
* });
|
|
229
|
+
*
|
|
230
|
+
* // 监听关联线创建事件
|
|
231
|
+
* gantt.on('create:link', (link) => {
|
|
232
|
+
* console.log('创建了新的关联线:', link);
|
|
233
|
+
* // 可以保存到后端
|
|
234
|
+
* saveLinkToServer(link);
|
|
235
|
+
* });
|
|
236
|
+
*
|
|
237
|
+
* // 监听错误事件
|
|
238
|
+
* gantt.on('error', (error) => {
|
|
239
|
+
* console.error('甘特图发生错误:', error);
|
|
240
|
+
* // 可以上报错误或显示用户友好的错误信息
|
|
241
|
+
* showErrorNotification(error.message);
|
|
242
|
+
* });
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @see {@link EventMap} 查看所有可用事件及其参数类型
|
|
246
|
+
*/
|
|
247
|
+
on<K extends keyof EventMap>(event: K, cb: EventMap[K]): void;
|
|
248
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export declare class EventBus {
|
|
2
|
+
private events;
|
|
3
|
+
/**
|
|
4
|
+
* 注册事件监听器
|
|
5
|
+
* @param event 事件名称
|
|
6
|
+
* @param callback 回调函数
|
|
7
|
+
*/
|
|
8
|
+
on(event: EventName, callback: Function): void;
|
|
9
|
+
/**
|
|
10
|
+
* 触发事件
|
|
11
|
+
* @param event 事件名称
|
|
12
|
+
* @param args 参数列表
|
|
13
|
+
*/
|
|
14
|
+
emit(event: string, ...args: any[]): void;
|
|
15
|
+
/**
|
|
16
|
+
* 移除特定事件的特定监听器
|
|
17
|
+
* @param event 事件名称
|
|
18
|
+
* @param callback 要移除的回调函数
|
|
19
|
+
*/
|
|
20
|
+
off(event: string, callback: Function): void;
|
|
21
|
+
/**
|
|
22
|
+
* 移除所有事件监听器
|
|
23
|
+
*/
|
|
24
|
+
offAll(): void;
|
|
25
|
+
}
|
|
26
|
+
export declare enum EventName {
|
|
27
|
+
LOADED = "loaded",
|
|
28
|
+
COLUMN_WIDTH_CHANGE = "column-width-change",
|
|
29
|
+
MOVE_GUIDELINE = "move-guideline",
|
|
30
|
+
SHOW_GUIDELINE = "show-guideline",
|
|
31
|
+
HIDE_GUIDELINE = "hide-guideline",
|
|
32
|
+
TOGGLE_COLLAPSE = "toggle-collapse",
|
|
33
|
+
SCROLL = "scroll",
|
|
34
|
+
CHART_OFFSET_CHANGE = "chart_offset_change",
|
|
35
|
+
DATA_UPDATE = "data-update",
|
|
36
|
+
VIEW_UPDATE = "view-update",
|
|
37
|
+
UPDATE_TABLE_HEADER = "update_table_header",
|
|
38
|
+
UPDATE_TABLE_BODY = "update_table_body",
|
|
39
|
+
UPDATE_CHART_HEADER = "update_chart_header",
|
|
40
|
+
UPDATE_TASK = "update_task",
|
|
41
|
+
UPDATE_LINK = "update_link",
|
|
42
|
+
CREATE_LINK = "create_link",
|
|
43
|
+
TASK_SELECTED = "task_selected",
|
|
44
|
+
TASK_UNSELECTED = "task_unselected",
|
|
45
|
+
SELECT_LINK = "select_link",
|
|
46
|
+
CHECK_TASK = "check_task",
|
|
47
|
+
CONTEXT_LINK = "context_link",
|
|
48
|
+
ROW_CLICK = "row-click",
|
|
49
|
+
ROW_DBL_CLICK = "row-dbl-click",
|
|
50
|
+
ROW_CONTEXTMENU = "row-contextmenu",
|
|
51
|
+
SLIDER_CLICK = "slider-click",
|
|
52
|
+
SLIDER_DBL_CLICK = "slider-dbl-click",
|
|
53
|
+
SLIDER_CONTEXTMENU = "slider-contextmenu",
|
|
54
|
+
SLIDER_MOVING = "slider-moving",
|
|
55
|
+
SLIDER_HOVER = "slider-hover",
|
|
56
|
+
SLIDER_LEAVE = "slider-leave",
|
|
57
|
+
ROW_HIGHLIGHT = "row-highlight",
|
|
58
|
+
ROW_UNHIGHLIGHT = "row-unhighlight",
|
|
59
|
+
TASK_DRAG_START = "task-drag-start",
|
|
60
|
+
TASK_DRAG_MOVE = "task-drag-move",
|
|
61
|
+
TASK_DRAG_END = "task-drag-end",
|
|
62
|
+
BASELINE_CLICK = "baseline-click",
|
|
63
|
+
BASELINE_CONTEXTMENU = "baseline-contextmenu",
|
|
64
|
+
BASELINE_MOUSEOVER = "baseline-mouseover",
|
|
65
|
+
BASELINE_MOUSEOUT = "baseline-mouseout",
|
|
66
|
+
ERROR = "error"
|
|
67
|
+
}
|
|
68
|
+
export declare enum ErrorType {
|
|
69
|
+
/** 连线不被允许 */
|
|
70
|
+
LINK_NOT_ALLOWED = "LINK_NOT_ALLOWED",
|
|
71
|
+
/** 相同节点 */
|
|
72
|
+
LINK_SAME = "LINK_SAME",
|
|
73
|
+
/** 当前关联已存在 */
|
|
74
|
+
LINK_EXIST = "LINK_EXIST"
|
|
75
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./styles/main.scss";
|
|
2
|
+
export { XGantt } from "./XGantt";
|
|
3
|
+
export { generateId } from "./utils/id";
|
|
4
|
+
export { default as dayjs } from "./utils/time";
|
|
5
|
+
export type { Dayjs } from "./utils/time";
|
|
6
|
+
export { colorjs, type Colorjs } from "./utils/color";
|
|
7
|
+
export declare const version: string;
|
|
8
|
+
import type { IOptions, IOptionConfig, EmitData } from "./types";
|
|
9
|
+
import type { EventMap } from "./types/event";
|
|
10
|
+
import type { ILink } from "./types/link";
|
|
11
|
+
import type { ErrorType } from "./event";
|
|
12
|
+
import type { XGanttUnit } from "./types/options";
|
|
13
|
+
export type { IOptions, IOptionConfig, EmitData, EventMap, ILink, ErrorType, XGanttUnit };
|
package/types/logo.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Dayjs } from "dayjs";
|
|
2
|
+
import { Store } from "@/store";
|
|
3
|
+
import { type EventBus } from "../event";
|
|
4
|
+
import { BaselineDiff } from "../types/baseline";
|
|
5
|
+
/**
|
|
6
|
+
* 基线数据模型
|
|
7
|
+
*/
|
|
8
|
+
export declare class Baseline {
|
|
9
|
+
private store;
|
|
10
|
+
private event;
|
|
11
|
+
/** 基线ID */
|
|
12
|
+
id: string;
|
|
13
|
+
/** 任务ID */
|
|
14
|
+
taskId: string;
|
|
15
|
+
/** 开始时间 */
|
|
16
|
+
startTime?: Dayjs;
|
|
17
|
+
/** 结束时间 */
|
|
18
|
+
endTime?: Dayjs;
|
|
19
|
+
/** 基线名称 */
|
|
20
|
+
name?: string;
|
|
21
|
+
/** 原始数据 */
|
|
22
|
+
data: any;
|
|
23
|
+
/** 是否高亮 */
|
|
24
|
+
highlight: boolean;
|
|
25
|
+
/** 是否为指示器对比基线 */
|
|
26
|
+
target: boolean;
|
|
27
|
+
constructor(store: Store, event: EventBus, data: any);
|
|
28
|
+
getField(field: string): any;
|
|
29
|
+
/**
|
|
30
|
+
* 验证基线的有效性
|
|
31
|
+
*/
|
|
32
|
+
validate(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 获取基线与任务的时间差异分析
|
|
35
|
+
*/
|
|
36
|
+
getTimeDiff(): BaselineDiff | null;
|
|
37
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Dayjs } from "dayjs";
|
|
2
|
+
import { type EventBus } from "../event";
|
|
3
|
+
import { TaskType } from "../types/options";
|
|
4
|
+
import { EmitData } from "@/types";
|
|
5
|
+
import { Store } from "@/store";
|
|
6
|
+
export declare class Task {
|
|
7
|
+
private store;
|
|
8
|
+
private event;
|
|
9
|
+
__key__: string;
|
|
10
|
+
/**
|
|
11
|
+
* 任务ID
|
|
12
|
+
* 如果没有提供,则会自动生成一个唯一ID
|
|
13
|
+
*/
|
|
14
|
+
id: string;
|
|
15
|
+
/**
|
|
16
|
+
* 任务名称
|
|
17
|
+
*/
|
|
18
|
+
name: string;
|
|
19
|
+
/**
|
|
20
|
+
* 任务开始时间
|
|
21
|
+
* 如果没有提供,则默认为 undefined
|
|
22
|
+
*/
|
|
23
|
+
startTime?: Dayjs;
|
|
24
|
+
/**
|
|
25
|
+
* 任务结束时间
|
|
26
|
+
* 如果没有提供,则默认为 undefined
|
|
27
|
+
*/
|
|
28
|
+
endTime?: Dayjs;
|
|
29
|
+
/**
|
|
30
|
+
* 任务进度
|
|
31
|
+
*/
|
|
32
|
+
progress?: number;
|
|
33
|
+
/** 任务类型 */
|
|
34
|
+
type: TaskType;
|
|
35
|
+
/**
|
|
36
|
+
* 是否展开
|
|
37
|
+
* 如果没有提供,则默认为 true
|
|
38
|
+
*/
|
|
39
|
+
expanded?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 子任务列表
|
|
42
|
+
* 如果没有子任务,则默认为空数组
|
|
43
|
+
*/
|
|
44
|
+
children: Task[];
|
|
45
|
+
/**
|
|
46
|
+
* 父任务
|
|
47
|
+
* 如果没有父任务,则默认为 undefined
|
|
48
|
+
*/
|
|
49
|
+
parent?: Task;
|
|
50
|
+
/**
|
|
51
|
+
* 任务层级,从0开始
|
|
52
|
+
*/
|
|
53
|
+
level: number;
|
|
54
|
+
/**
|
|
55
|
+
* 在扁平化列表中的索引位置,从0开始
|
|
56
|
+
*/
|
|
57
|
+
flatIndex: number;
|
|
58
|
+
/**
|
|
59
|
+
* 时间持续间隔
|
|
60
|
+
*/
|
|
61
|
+
private duration;
|
|
62
|
+
/**
|
|
63
|
+
* 原始数据
|
|
64
|
+
*/
|
|
65
|
+
data: any;
|
|
66
|
+
private fields;
|
|
67
|
+
constructor(store: Store, event: EventBus, data: any, parent?: Task, _id?: string);
|
|
68
|
+
getField(field: string): any;
|
|
69
|
+
/** 切换展示模式时,需要调整时间 */
|
|
70
|
+
updateMode(): void;
|
|
71
|
+
updateData(data: any): void;
|
|
72
|
+
updateTime(startTime: Dayjs, endTime: Dayjs): void;
|
|
73
|
+
clone(): Task;
|
|
74
|
+
getEmitData(): EmitData;
|
|
75
|
+
getAllChildren(): Task[];
|
|
76
|
+
isMilestone(): boolean;
|
|
77
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 渲染任务类型
|
|
3
|
+
*/
|
|
4
|
+
export interface RenderTask {
|
|
5
|
+
type: string;
|
|
6
|
+
refresh?: boolean;
|
|
7
|
+
callback: (...args: any[]) => void;
|
|
8
|
+
args?: any[];
|
|
9
|
+
immediate?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 任务处理器配置
|
|
13
|
+
*/
|
|
14
|
+
export interface TaskHandler {
|
|
15
|
+
callback: (...args: any[]) => void;
|
|
16
|
+
immediate?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 渲染调度器
|
|
20
|
+
* 用于收集和调度不同类型的渲染任务,避免短时间内重复执行
|
|
21
|
+
*/
|
|
22
|
+
export declare class RenderScheduler {
|
|
23
|
+
private taskQueue;
|
|
24
|
+
private taskHandlers;
|
|
25
|
+
private isScheduled;
|
|
26
|
+
private delay;
|
|
27
|
+
private debouncedFlush;
|
|
28
|
+
constructor(delay?: number);
|
|
29
|
+
/**
|
|
30
|
+
* 注册任务处理器
|
|
31
|
+
* @param taskType 任务类型
|
|
32
|
+
* @param handler 处理器配置
|
|
33
|
+
*/
|
|
34
|
+
registerHandler(taskType: string, handler: TaskHandler): void;
|
|
35
|
+
/**
|
|
36
|
+
* 注册任务处理器(简化版本,只传回调函数)
|
|
37
|
+
* @param taskType 任务类型
|
|
38
|
+
* @param callback 回调函数
|
|
39
|
+
* @param immediate 是否总是立即执行
|
|
40
|
+
*/
|
|
41
|
+
registerSimpleHandler(taskType: string, callback: (...args: any[]) => void, immediate?: boolean): void;
|
|
42
|
+
/**
|
|
43
|
+
* 调度任务执行
|
|
44
|
+
* @param taskType 任务类型
|
|
45
|
+
* @param args 传递给处理器的参数
|
|
46
|
+
* @param options 任务选项
|
|
47
|
+
*/
|
|
48
|
+
scheduleTask(taskType: string, args?: any[], options?: {
|
|
49
|
+
refresh?: boolean;
|
|
50
|
+
immediate?: boolean;
|
|
51
|
+
}): void;
|
|
52
|
+
/**
|
|
53
|
+
* 立即执行指定类型的任务(跳过队列)
|
|
54
|
+
* @param taskType 任务类型
|
|
55
|
+
* @param args 传递给处理器的参数
|
|
56
|
+
* @param refresh 是否强制刷新
|
|
57
|
+
*/
|
|
58
|
+
immediateExecuteTask(taskType: string, args?: any[], refresh?: boolean): void;
|
|
59
|
+
/**
|
|
60
|
+
* 立即执行所有队列中的任务
|
|
61
|
+
*/
|
|
62
|
+
immediateFlushAll(): void;
|
|
63
|
+
/**
|
|
64
|
+
* 执行单个任务
|
|
65
|
+
* @param task 任务对象
|
|
66
|
+
*/
|
|
67
|
+
private executeTask;
|
|
68
|
+
/**
|
|
69
|
+
* 清空并执行任务队列
|
|
70
|
+
*/
|
|
71
|
+
private flushTaskQueue;
|
|
72
|
+
/**
|
|
73
|
+
* 取消已调度的任务执行
|
|
74
|
+
*/
|
|
75
|
+
cancelScheduled(): void;
|
|
76
|
+
/**
|
|
77
|
+
* 移除指定类型的任务处理器
|
|
78
|
+
* @param taskType 任务类型
|
|
79
|
+
*/
|
|
80
|
+
unregisterHandler(taskType: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* 获取当前队列中的任务数量
|
|
83
|
+
*/
|
|
84
|
+
getQueueSize(): number;
|
|
85
|
+
/**
|
|
86
|
+
* 获取已注册的处理器类型列表
|
|
87
|
+
*/
|
|
88
|
+
getRegisteredHandlers(): string[];
|
|
89
|
+
/**
|
|
90
|
+
* 销毁调度器
|
|
91
|
+
*/
|
|
92
|
+
destroy(): void;
|
|
93
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Scrollbar } from "./scrollbar";
|
|
2
|
+
import { IContext } from "@/types/render";
|
|
3
|
+
export declare class Renderer {
|
|
4
|
+
private context;
|
|
5
|
+
private container;
|
|
6
|
+
private scrollbar;
|
|
7
|
+
private rootElement;
|
|
8
|
+
private tableContainer;
|
|
9
|
+
private chartContainer;
|
|
10
|
+
private table;
|
|
11
|
+
private chart;
|
|
12
|
+
private middleLine;
|
|
13
|
+
private renderScheduler;
|
|
14
|
+
private _id;
|
|
15
|
+
private width;
|
|
16
|
+
private height;
|
|
17
|
+
private isInitialized;
|
|
18
|
+
getScrollbar(): Scrollbar;
|
|
19
|
+
constructor(context: IContext, // 渲染器上下文
|
|
20
|
+
container: HTMLElement);
|
|
21
|
+
/**
|
|
22
|
+
* 设置任务处理器
|
|
23
|
+
*/
|
|
24
|
+
private setupTaskHandlers;
|
|
25
|
+
/**
|
|
26
|
+
* 设置事件监听器
|
|
27
|
+
*/
|
|
28
|
+
private setupEventListeners;
|
|
29
|
+
/**
|
|
30
|
+
* 实际执行渲染的方法
|
|
31
|
+
* @param refresh 是否强制刷新
|
|
32
|
+
*/
|
|
33
|
+
private performRender;
|
|
34
|
+
/**
|
|
35
|
+
* 公共渲染方法,向后兼容
|
|
36
|
+
* @param refresh 是否强制刷新
|
|
37
|
+
*/
|
|
38
|
+
render(refresh?: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* 立即执行渲染,不经过调度器
|
|
41
|
+
* @param refresh 是否强制刷新
|
|
42
|
+
*/
|
|
43
|
+
immediateRender(refresh?: boolean): void;
|
|
44
|
+
private updateSize;
|
|
45
|
+
/**
|
|
46
|
+
* 设置样式值
|
|
47
|
+
*/
|
|
48
|
+
private setStyleValue;
|
|
49
|
+
private handleUpdateTask;
|
|
50
|
+
private handleColumnWidthChange;
|
|
51
|
+
destroy(): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Konva from "konva";
|
|
2
|
+
import { Task } from "../../models/Task";
|
|
3
|
+
import { IContext } from "@/types/render";
|
|
4
|
+
export declare class ChartBaseline {
|
|
5
|
+
private context;
|
|
6
|
+
private stage;
|
|
7
|
+
private layer;
|
|
8
|
+
private tasks;
|
|
9
|
+
private chartBaselineGroup;
|
|
10
|
+
private indicatorGroup;
|
|
11
|
+
private baselineGroup;
|
|
12
|
+
private width;
|
|
13
|
+
private height;
|
|
14
|
+
private offsetX;
|
|
15
|
+
private offsetY;
|
|
16
|
+
constructor(context: IContext, stage: Konva.Stage, layer: Konva.Layer);
|
|
17
|
+
/**
|
|
18
|
+
* 注册事件
|
|
19
|
+
*/
|
|
20
|
+
private registerEvents;
|
|
21
|
+
/**
|
|
22
|
+
* 调整基线大小
|
|
23
|
+
*/
|
|
24
|
+
resize(width: number, height: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* 设置偏移量 (响应滚动)
|
|
27
|
+
*/
|
|
28
|
+
setOffset(x: number, y: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* 更新数据
|
|
31
|
+
*/
|
|
32
|
+
update(): void;
|
|
33
|
+
/**
|
|
34
|
+
* 渲染基线
|
|
35
|
+
*/
|
|
36
|
+
render(tasks: Task[]): void;
|
|
37
|
+
/**
|
|
38
|
+
* 销毁关联线
|
|
39
|
+
*/
|
|
40
|
+
destroy(): void;
|
|
41
|
+
/**
|
|
42
|
+
* 计算并渲染基线
|
|
43
|
+
*/
|
|
44
|
+
private calculateBaselines;
|
|
45
|
+
private renderBaselineBar;
|
|
46
|
+
private renderText;
|
|
47
|
+
private renderCompareHighlight;
|
|
48
|
+
private renderCompareIndicator;
|
|
49
|
+
private bindEvents;
|
|
50
|
+
}
|