BPMN-JS:修改节点内容面板按钮

修改地址:node_modules\bpmn-js\lib\features\context-pad\ContextPadProvider.js

代码261行开始修改流程内节点按钮

import {

  assign,

  forEach,

  isArray

} from 'min-dash';



import {

  is

} from '../../util/ModelUtil';



import {

  isExpanded,

  isEventSubProcess

} from '../../util/DiUtil';



import {

  isAny

} from '../modeling/util/ModelingUtil';



import {

  getChildLanes

} from '../modeling/util/LaneUtil';



import {

  hasPrimaryModifier

} from 'diagram-js/lib/util/Mouse';




/**

 * A provider for BPMN 2.0 elements context pad

 */

export default function ContextPadProvider(

    config, injector, eventBus,

    contextPad, modeling, elementFactory,

    connect, create, popupMenu,

    canvas, rules, translate) {



  config = config || {};



  contextPad.registerProvider(this);



  this._contextPad = contextPad;



  this._modeling = modeling;



  this._elementFactory = elementFactory;

  this._connect = connect;

  this._create = create;

  this._popupMenu = popupMenu;

  this._canvas = canvas;

  this._rules = rules;

  this._translate = translate;



  if (config.autoPlace !== false) {

    this._autoPlace = injector.get('autoPlace', false);

  }



  eventBus.on('create.end', 250, function(event) {

    var context = event.context,

        shape = context.shape;



    if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {

      return;

    }



    var entries = contextPad.getEntries(shape);



    if (entries.replace) {

      entries.replace.action.click(event, shape);

    }

  });

}



ContextPadProvider.$inject = [

  'config.contextPad',

  'injector',

  'eventBus',

  'contextPad',

  'modeling',

  'elementFactory',

  'connect',

  'create',

  'popupMenu',

  'canvas',

  'rules',

  'translate'

];




ContextPadProvider.prototype.getContextPadEntries = function(element) {



  var contextPad = this._contextPad,

      modeling = this._modeling,



      elementFactory = this._elementFactory,

      connect = this._connect,

      create = this._create,

      popupMenu = this._popupMenu,

      canvas = this._canvas,

      rules = this._rules,

      autoPlace = this._autoPlace,

      translate = this._translate;



  var actions = {};



  if (element.type === 'label') {

    return actions;

  }



  var businessObject = element.businessObject;



  function startConnect(event, element) {

    connect.start(event, element);

  }



  function removeElement(e) {

    modeling.removeElements([ element ]);

  }



  function getReplaceMenuPosition(element) {



    var Y_OFFSET = 5;



    var diagramContainer = canvas.getContainer(),

        pad = contextPad.getPad(element).html;



    var diagramRect = diagramContainer.getBoundingClientRect(),

        padRect = pad.getBoundingClientRect();



    var top = padRect.top - diagramRect.top;

    var left = padRect.left - diagramRect.left;



    var pos = {

      x: left,

      y: top + padRect.height + Y_OFFSET

    };



    return pos;

  }




  /**

   * Create an append action

   *

   * @param {string} type

   * @param {string} className

   * @param {string} [title]

   * @param {Object} [options]

   *

   * @return {Object} descriptor

   */

  function appendAction(type, className, title, options) {



    if (typeof title !== 'string') {

      options = title;

      title = translate('Append {type}', { type: type.replace(/^bpmn:/, '') });

    }



    function appendStart(event, element) {



      var shape = elementFactory.createShape(assign({ type: type }, options));

      create.start(event, shape, {

        source: element

      });

    }




    var append = autoPlace ? function(event, element) {

      var shape = elementFactory.createShape(assign({ type: type }, options));



      autoPlace.append(element, shape);

    } : appendStart;




    return {

      group: 'model',

      className: className,

      title: title,

      action: {

        dragstart: appendStart,

        click: append

      }

    };

  }



  function splitLaneHandler(count) {



    return function(event, element) {



      // actual split

      modeling.splitLane(element, count);



      // refresh context pad after split to

      // get rid of split icons

      contextPad.open(element, true);

    };

  }




  if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(businessObject)) {



    var childLanes = getChildLanes(element);



    assign(actions, {

      'lane-insert-above': {

        group: 'lane-insert-above',

        className: 'bpmn-icon-lane-insert-above',

        title: translate('Add Lane above'),

        action: {

          click: function(event, element) {

            modeling.addLane(element, 'top');

          }

        }

      }

    });



    if (childLanes.length < 2) {



      if (element.height >= 120) {

        assign(actions, {

          'lane-divide-two': {

            group: 'lane-divide',

            className: 'bpmn-icon-lane-divide-two',

            title: translate('Divide into two Lanes'),

            action: {

              click: splitLaneHandler(2)

            }

          }

        });

      }



      if (element.height >= 180) {

        assign(actions, {

          'lane-divide-three': {

            group: 'lane-divide',

            className: 'bpmn-icon-lane-divide-three',

            title: translate('Divide into three Lanes'),

            action: {

              click: splitLaneHandler(3)

            }

          }

        });

      }

    }



    assign(actions, {

      'lane-insert-below': {

        group: 'lane-insert-below',

        className: 'bpmn-icon-lane-insert-below',

        title: translate('Add Lane below'),

        action: {

          click: function(event, element) {

            modeling.addLane(element, 'bottom');

          }

        }

      }

    });



  }



  if (is(businessObject, 'bpmn:FlowNode')) {



    if (is(businessObject, 'bpmn:EventBasedGateway')) {



      assign(actions, {

        'append.receive-task': appendAction(

          'bpmn:ReceiveTask',

          'bpmn-icon-receive-task',

          translate('Append ReceiveTask')

        ),

        'append.message-intermediate-event': appendAction(

          'bpmn:IntermediateCatchEvent',

          'bpmn-icon-intermediate-event-catch-message',

          translate('Append MessageIntermediateCatchEvent'),

          { eventDefinitionType: 'bpmn:MessageEventDefinition' }

        ),

        'append.timer-intermediate-event': appendAction(

          'bpmn:IntermediateCatchEvent',

          'bpmn-icon-intermediate-event-catch-timer',

          translate('Append TimerIntermediateCatchEvent'),

          { eventDefinitionType: 'bpmn:TimerEventDefinition' }

        ),

        'append.condition-intermediate-event': appendAction(

          'bpmn:IntermediateCatchEvent',

          'bpmn-icon-intermediate-event-catch-condition',

          translate('Append ConditionIntermediateCatchEvent'),

          { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }

        ),

        'append.signal-intermediate-event': appendAction(

          'bpmn:IntermediateCatchEvent',

          'bpmn-icon-intermediate-event-catch-signal',

          translate('Append SignalIntermediateCatchEvent'),

          { eventDefinitionType: 'bpmn:SignalEventDefinition' }

        )

      });

    } else



    if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {



      assign(actions, {

        'append.compensation-activity':

            appendAction(

              'bpmn:Task',

              'bpmn-icon-task',

              translate('Append compensation activity'),

              {

                isForCompensation: true

              }

            )

      });

    } else



    if (!is(businessObject, 'bpmn:EndEvent') &&

        !businessObject.isForCompensation &&

        !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&

        !isEventSubProcess(businessObject)) {



      assign(actions, {

        'append.end-event': appendAction(

          'bpmn:EndEvent',

          'bpmn-icon-end-event-none',

          translate('Append EndEvent')

        ),

        'append.gateway': appendAction(

          'bpmn:ExclusiveGateway',

          'bpmn-icon-gateway-none',

          translate('Append Gateway')

        ),

        'append.append-task': appendAction(

          'bpmn:Task',

          'bpmn-icon-task',

          translate('Append Task')

        ),

        // 'append.intermediate-event': appendAction(

        //   'bpmn:IntermediateThrowEvent',

        //   'bpmn-icon-intermediate-event-none',

        //   translate('Append Intermediate/Boundary Event')

        // )

      });

    }

  }



  if (!popupMenu.isEmpty(element, 'bpmn-replace')) {



    // Replace menu entry

    assign(actions, {

      'replace': {

        group: 'edit',

        className: 'bpmn-icon-screw-wrench',

        title: translate('Change type'),

        action: {

          click: function(event, element) {



            var position = assign(getReplaceMenuPosition(element), {

              cursor: { x: event.x, y: event.y }

            });



            popupMenu.open(element, 'bpmn-replace', position);

          }

        }

      }

    });

  }



  if (isAny(businessObject, [

    'bpmn:FlowNode',

    'bpmn:InteractionNode',

    'bpmn:DataObjectReference',

    'bpmn:DataStoreReference'

  ])) {



    assign(actions, {

      'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation'),



      'connect': {

        group: 'connect',

        className: 'bpmn-icon-connection-multi',

        title: translate('Connect using ' +

                  (businessObject.isForCompensation ? '' : 'Sequence/MessageFlow or ') +

                  'Association'),

        action: {

          click: startConnect,

          dragstart: startConnect

        }

      }

    });

  }



  if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {

    assign(actions, {

      'connect': {

        group: 'connect',

        className: 'bpmn-icon-connection-multi',

        title: translate('Connect using DataInputAssociation'),

        action: {

          click: startConnect,

          dragstart: startConnect

        }

      }

    });

  }



  if (is(businessObject, 'bpmn:Group')) {

    assign(actions, {

      'append.text-annotation': appendAction('bpmn:TextAnnotation', 'bpmn-icon-text-annotation')

    });

  }



  // delete element entry, only show if allowed by rules

  var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });



  if (isArray(deleteAllowed)) {



    // was the element returned as a deletion candidate?

    deleteAllowed = deleteAllowed[0] === element;

  }



  if (deleteAllowed) {

    assign(actions, {

      'delete': {

        group: 'edit',

        className: 'bpmn-icon-trash',

        title: translate('Remove'),

        action: {

          click: removeElement

        }

      }

    });

  }



  return actions;

};




// helpers /



function isEventType(eventBo, type, definition) {



  var isType = eventBo.$instanceOf(type);

  var isDefinition = false;



  var definitions = eventBo.eventDefinitions || [];

  forEach(definitions, function(def) {

    if (def.$type === definition) {

      isDefinition = true;

    }

  });



  return isType && isDefinition;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue-BPMN-Element是一个基于Vue.js框架开发的业务流程建模工具。它提供了一套丰富的组件和功能,帮助开发人员快速搭建并定制化业务流程设计器。 Vue-BPMN-Element的主要特点包括: 1. 强大的可扩展性:Vue-BPMN-Element提供了丰富的组件和插件,允许开发人员根据项目需求进行定制化开发。这些组件和插件可实现诸如拖拽、连接线、节点属性编辑等功能,满足各种业务流程的建模需求。 2. 可视化编辑:Vue-BPMN-Element提供了直观的界面,允许用户通过拖拽和连接线的方式创建和编辑业务流程。用户可以通过可视化的界面来管理和优化业务流程,极大地提高了开发效率和用户体验。 3. 高度定制化:Vue-BPMN-Element提供了丰富的配置选项和事件钩子,可以完全适应不同的业务需求。开发人员可以根据具体项目需求,灵活地定制展示样式、交互方式等,实现个性化的业务流程建模工具。 4. 良好的兼容性:Vue-BPMN-Element基于Vue.js框架开发,具有良好的兼容性和扩展性。它可以与其他Vue.js插件和工具库无缝集成,为项目提供更加全面和高效的解决方案。 总之,Vue-BPMN-Element是一个强大、可定制化和易用的业务流程建模工具,通过它可以快速搭建和管理业务流程,提高开发效率和项目质量。无论是小型项目还是大型企业应用,Vue-BPMN-Element都是一个值得考虑的选择。 ### 回答2: vue-bpmn-element是一个基于Vue.js框架的BPMN(Business Process Model and Notation)流程图绘制组件库。BPMN是一种用于描述业务流程的图形化标准,可以方便地表示和分析企业的各个流程。 vue-bpmn-element提供了一系列可复用的组件,用户可以在自己的Vue应用中轻松地集成和使用这些组件。这个库的设计目标是提供一个简洁、易用且高度可定制的BPMN流程图绘制解决方案。 使用vue-bpmn-element,用户可以创建自定义的BPMN流程图,包括各种元素如任务、网关、事件等。这些元素可以通过拖拽、缩放和连接等操作进行编辑和布局。用户还可以为每个元素设置相关属性和约束条件,以便更好地描述和分析业务流程。 在vue-bpmn-element中,还提供了一些实用的功能,如历史记录、撤销恢复、导入导出等。这些功能可以帮助用户方便地管理和操作流程图,提高工作效率。 总之,vue-bpmn-element是一个功能丰富且易于使用的BPMN流程图绘制组件库,通过它,用户可以轻松地创建、编辑和管理自定义的业务流程,帮助企业提高业务流程的可视化管理水平,提高工作效率。 ### 回答3: vue-bpmn-element是一个基于Vue.js的开源项目,它提供了一组可在业务流程管理界面中使用的BPMN(Business Process Model and Notation)元素和功能。 首先,vue-bpmn-element具有良好的可定制性。它提供了一系列可自定义的BPMN元素,如任务、网关、边界事件等,使用户能够根据自己的需求进行灵活的配置和设计。此外,它还支持自定义样式和图标,让用户能够根据自己的品牌或用户界面的要求对BPMN流程进行个性化的呈现。 其次,vue-bpmn-element提供了丰富的交互功能。用户可以通过拖拽、缩放等操作来创建、修改和连接BPMN元素,实现业务流程的设计和调整。同时,它还支持多种事件,如点击、双击、鼠标悬停等,使用户能够对BPMN流程进行更加直观和便捷的操作。 此外,vue-bpmn-element还提供了一些实用的功能和工具。例如,它允许用户导入/导出BPMN文件,从而方便地与其他系统或工具进行集成。它还支持撤销/重做操作,保证用户在编辑过程中的操作精确和安全。另外,它也提供了一些常用的扩展,如条件流程、消息传递等,使用户能够更加灵活地定义和管理业务流程。 总之,vue-bpmn-element是一个功能强大且易于使用的BPMN元素集合,它为用户提供了一套完整的工具和功能,帮助用户进行业务流程的设计、管理和优化。无论是初学者还是有经验的开发者,都可以通过vue-bpmn-element轻松地搭建出高效和可扩展的业务流程管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值