You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyChart/AnyGantt实时编辑:能否禁用单个任务的操作手柄?

在AnyChart甘特图中实现单个任务的编辑限制或特定操作手柄禁用

AnyChart本身没有提供直接配置单个任务编辑权限的API,也没有内置禁用特定操作手柄的选项,但可以通过事件拦截的方式实现需求,以下是具体方案:

一、完全禁用单个任务的所有编辑操作

在任务数据中添加自定义标记(比如isEditable),然后监听所有编辑相关的事件,在回调中判断标记并阻止默认行为:

1. 修改任务数据,添加自定义权限标记

{
    id: 26235,
    name: "AP 10",
    parent: 7251,
    typ: "AD",
    status: 5,
    actualStart: Date.UTC(2024, 3-1, 14),
    actualEnd: Date.UTC(2024, 3-1, 21),
    baselineStart: Date.UTC(2024, 3-1, 11),
    baselineEnd: Date.UTC(2024, 3-1, 18),
    isEditable: false, // 自定义标记:该任务不可编辑
    connector: [
        {
            connectTo: 26236,
            connectorType: 'finish-start'
        }
    ]
}

2. 监听编辑相关事件并拦截

// 拦截任务编辑(双击打开编辑面板)
chart.listen('taskEditStart', function(e) {
    const task = e.task;
    if (!task.get('isEditable')) {
        e.preventDefault();
    }
});

// 拦截任务移动操作
chart.listen('taskMoveStart', function(e) {
    const task = e.task;
    if (!task.get('isEditable')) {
        e.preventDefault();
    }
});

// 拦截任务大小调整操作
chart.listen('taskResizeStart', function(e) {
    const task = e.task;
    if (!task.get('isEditable')) {
        e.preventDefault();
    }
});

// 拦截连接器添加操作
chart.listen('connectorAdd', function(e) {
    const sourceTask = e.sourceTask;
    const targetTask = e.targetTask;
    // 源或目标任务不可编辑时,阻止添加连接器
    if (!sourceTask.get('isEditable') || !targetTask.get('isEditable')) {
        e.preventDefault();
    }
});

// 拦截连接器移除操作
chart.listen('connectorRemove', function(e) {
    const connector = e.connector;
    const sourceTask = connector.sourceTask();
    const targetTask = connector.targetTask();
    if (!sourceTask.get('isEditable') || !targetTask.get('isEditable')) {
        e.preventDefault();
    }
});

二、禁用任务栏的特定操作手柄(比如禁止调整开始日期)

通过taskResizeStart事件的side属性判断拖动的是左侧(修改开始日期)还是右侧(修改结束日期)手柄,结合自定义标记实现精准拦截:

1. 修改任务数据,添加细分权限标记

{
    id: 26235,
    name: "AP 10",
    parent: 7251,
    typ: "AD",
    status: 5,
    actualStart: Date.UTC(2024, 3-1, 14),
    actualEnd: Date.UTC(2024, 3-1, 21),
    baselineStart: Date.UTC(2024, 3-1, 11),
    baselineEnd: Date.UTC(2024, 3-1, 18),
    allowResizeStart: false, // 自定义标记:禁止调整开始日期(左侧手柄)
    allowMove: false, // 可选:禁止移动任务(避免移动时修改开始日期)
    connector: [
        {
            connectTo: 26236,
            connectorType: 'finish-start'
        }
    ]
}

2. 监听对应事件实现拦截

// 禁止拖动左侧手柄修改开始日期
chart.listen('taskResizeStart', function(e) {
    const task = e.task;
    if (e.side === 'left' && !task.get('allowResizeStart')) {
        e.preventDefault();
    }
});

// 可选:禁止移动任务(防止移动时同时修改开始/结束日期)
chart.listen('taskMoveStart', function(e) {
    const task = e.task;
    if (!task.get('allowMove')) {
        e.preventDefault();
    }
});

说明

AnyChart官方文档未提及此类细分权限配置,上述事件拦截方案是基于库的事件系统实现的可行方案,通过自定义数据属性标记权限,再在事件回调中判断并阻止默认行为,即可实现单个任务的编辑控制或特定操作手柄的禁用。

内容的提问来源于stack exchange,提问作者user23733199

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:33:16