其他分享
首页 > 其他分享> > 13、Gantt 甘特图元素的工具提示

13、Gantt 甘特图元素的工具提示

作者:互联网

 1 gantt.plugins({
 2    tooltip: true
 3 }); 
 4 // tooltip 自定义
 5 gantt.templates.tooltip_text = function (start, end, task) {
 6   const equipmentCodes = (task.equipmentList || []).map((v) => v.equipmentCode).join(',');
 7   const inChargeName = task.inChargeName ? task.inChargeName : '';
 8   switch (task.type) {
 9     case 'project':
10       return (
11         '<b>阶段:</b> ' +
12         task.taskSpecification +
13         '<br/>' +
14         '<b>开始时间:</b> ' +
15         formatToDate(task.start_date) +
16         '<br/>' +
17         '<b>结束时间:</b> ' +
18         formatToDate(task.end_date) +
19         '<br/>' +
20         '<b>持续时间:</b> ' +
21         task.duration +
22         '天'
23       );
24       break;
25     case 'task':
26       return (
27         '<b>工单:</b> ' +
28         task.taskSpecification +
29         '<br/>' +
30         '<b>开始时间:</b> ' +
31         formatToDate(task.start_date) +
32         '<br/>' +
33         '<b>结束时间:</b> ' +
34         formatToDate(task.end_date) +
35         '<br/>' +
36         '<b>持续时间:</b> ' +
37         task.duration +
38         '天<br/>' +
39         '<b>关联设备编码:</b>' +
40         equipmentCodes +
41         '<br/>' +
42         '<b>负责人:</b> ' +
43         inChargeName +
44         '<br/>' +
45         '<b>实际结束时间:</b> ' +
46         (task.taskCompleteTime ? formatToDate(task.taskCompleteTime) : '')
47       );
48       break;
49     case 'milestone':
50       return (
51         '<b>前置条件:</b> ' +
52         task.taskSpecification +
53         '<br/>' +
54         '<b>开始时间:</b> ' +
55         formatToDate(task.start_date) +
56         '<br/>' +
57         '<b>结束时间:</b> ' +
58         formatToDate(task.end_date) +
59         '<br/>' +
60         '<b>持续时间:</b> ' +
61         task.duration +
62         '天' +
63         '<br/>' +
64         '<b>实际结束时间:</b> ' +
65         (task.taskCompleteTime ? formatToDate(task.taskCompleteTime) : '')
66       );
67       break;
68   }
69 };
tootips 的扩展 https://docs.dhtmlx.com/gantt/desktop__tooltips_ext.html 以下代码是自定义Tooltips。
1 <div :style="getTooltipsStyle" class="gantt-customer-tooltip">
2     。。。。。。
3 </div>
 1 const ganttData = reactive<{
 2   // tooltip样式
 3   isTooltipStatus: boolean;
 4   // tooltip详情
 5   tooltipData: object;
 6 }>({
 7   isTooltipStatus: false,
 8   tooltipData: {
 9     pageY: 0,
10     pageX: 0,
11   },
12 });
 1 // 为指定的甘特图元素添加工具提示。它是attach()方法的更简化版本。该方法将带有工具提示详细信息的对象作为参数
 2 gantt.ext.tooltips.tooltipFor({
 3   // 甘特元素的 CSS 选择器,用于添加工具提示
 4   selector: '.gantt_grid [' + gantt.config.task_attribute + ']',
 5   html: (event) => {
 6     if (ganttObj.config.touch && !gantt.config.touch_tooltip) {
 7       return;
 8     }
 9 
10     const targetTaskId = gantt.locate(event);
11     if (gantt.isTaskExists(targetTaskId)) {
12       const task = gantt.getTask(targetTaskId);
13       return gantt.templates.tooltip_text(task.start_date, task.end_date, task);
14     }
15     return null;
16   },
17   // 定义模块是在整个页面上侦听鼠标事件 ( true ) 还是仅在甘特元素 ( false )内侦听。默认情况下,该选项设置为false
18   global: true,
19 });
20 gantt.ext.tooltips.attach({
21   // 甘特元素的 CSS 选择器,用于添加工具提示
22   selector: '.gantt_grid [' + gantt.config.task_attribute + ']',
23   onm ouseenter: (event) => {
24     // console.log('onmouseenter', event);
25     const targetTaskId = gantt.locate(event);
26     if (gantt.isTaskExists(targetTaskId)) {
27       const task = gantt.getTask(targetTaskId);
28       const equipmentCodes = (task.equipmentList || [])
29         .map((v) => v.equipmentCode)
30         .join(',');
31       const inChargeName = task.inChargeName ? task.inChargeName : '';
32       // return gantt.templates.tooltip_text(task.start_date, task.end_date, task);
33       ganttData.isTooltipStatus = true;
34       task.equipmentCodes = equipmentCodes;
35       task.inChargeName = inChargeName;
36       task.pageX = event.pageX;
37       task.pageY = event.pageY;
38       ganttData.tooltipData = task;
39     }
40   },
41   onm ousemove: (event) => {
42     // console.log('onmousemove', event);
43   },
44   onm ouseleave: (event) => {
45     // console.log('onmouseleave', event);
46     ganttData.isTooltipStatus = false;
47     ganttData.tooltipData = {
48       pageY: 0,
49       pageX: 0,
50     };
51   },
52   //  定义模块是在整个页面上侦听鼠标事件 ( true ) 还是仅在甘特图元素内部 ( false )侦听。默认情况下,该选项设置为false。
53   global: true,
54 });
 1 ganttObj.ext.tooltips.tooltip.show = function (event) {
 2   // console.log('show', event);
 3   const targetTaskId = ganttObj.locate(event);
 4   if (ganttObj.isTaskExists(targetTaskId)) {
 5     const task = ganttObj.getTask(targetTaskId);
 6     const equipmentCodes = (task.equipmentList || [])
 7       .map((v) => v.equipmentCode)
 8       .join(',');
 9     const inChargeName = task.inChargeName ? task.inChargeName : '';
10     ganttData.isTooltipStatus = true;
11     task.equipmentCodes = equipmentCodes;
12     task.inChargeName = inChargeName;
13     task.pageX = event.pageX;
14     task.pageY = event.pageY;
15     ganttData.tooltipData = task;
16   }
17   return event;
18 };
1 // 设置tooltip的右偏移(如果是正的)
2 gantt.config.tooltip_offset_x = 300;
3 // 设置工具提示位置的顶部偏移量(如果是正的)
4 gantt.config.tooltip_offset_y = 300;
5 // 设置在隐藏工具提示之前的时间长度,以毫秒为单位
6 /*ganttObj.config.tooltip_hide_timeout = 10000;*/

 

 

标签:13,task,const,inChargeName,Gantt,甘特图,tooltip,gantt,event
来源: https://www.cnblogs.com/lynn-600/p/16243027.html