index.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import BpmnRenderer from 'bpmn-js/lib/draw/BpmnRenderer';
  2. import CustomizeRenderer from './CustomizeRenderer';
  3. import { getRectPath } from 'bpmn-js/lib/draw/BpmnRenderUtil';
  4. import createAddMarkerSelect from '../simpleModeler/renderer/connect/marker';
  5. import { changeTypeByTaskShape, triggerTypeChange } from '../config';
  6. import { typeTrigger } from '../config/variableName';
  7. let jnpfCanvas: any;
  8. let jnpfFlowInfo: any;
  9. class YmRenderer extends BpmnRenderer {
  10. _injector: any;
  11. constructor(config: any, injector: any, eventBus: any, styles: any, pathMap: any, canvas: any, textRenderer: any, flowInfo: any, priority: number) {
  12. super(
  13. (config = {
  14. defaultLabelColor: 'rgb(102,102,102)',
  15. defaultStrokeColor: '#A2B9D5',
  16. ...config,
  17. }),
  18. eventBus,
  19. styles,
  20. pathMap,
  21. canvas,
  22. textRenderer,
  23. priority,
  24. );
  25. jnpfCanvas = canvas;
  26. jnpfFlowInfo = flowInfo;
  27. this._injector = injector;
  28. }
  29. canRender(element: any) {
  30. return super.canRender(element);
  31. }
  32. // 绘制画布上元素
  33. drawShape(parentNode: any, element: any) {
  34. if (element) return CustomizeRenderer(parentNode, element, jnpfFlowInfo, this._injector) || super.drawShape(parentNode, element);
  35. return super.drawShape(parentNode, element);
  36. }
  37. drawConnection(parentGfx: any, element: any) {
  38. let source = element.source;
  39. let target = element.target;
  40. let nodeMap = jnpfFlowInfo?.nodeList;
  41. let hasLineKey = jnpfFlowInfo.lineKeyList.some(item => item === element?.id);
  42. let stroke = '';
  43. // 过滤任务节点(source为触发节点及执行节点的元素)
  44. let isTaskNode = false;
  45. if (changeTypeByTaskShape[source?.wnType] || triggerTypeChange[source?.wnType] || source?.wnType === typeTrigger) isTaskNode = true;
  46. if (nodeMap.has(source?.id) && nodeMap.has(target?.id)) {
  47. const targetType = nodeMap.get(target.id)?.type;
  48. const sourceType = nodeMap.get(source.id)?.type;
  49. if (sourceType === '0' && targetType === '0') stroke = '#4ED587';
  50. if (sourceType === '0' && targetType === '3' && (hasLineKey || isTaskNode)) stroke = '#4ED587';
  51. if (sourceType === '0' && targetType === '1' && (hasLineKey || isTaskNode)) stroke = '#1eaceb';
  52. }
  53. let connect = super.drawConnection(parentGfx, element, { stroke });
  54. createAddMarkerSelect(element, jnpfCanvas);
  55. return connect;
  56. }
  57. // 绘制
  58. getShapePath(shape: any) {
  59. return getRectPath(shape);
  60. }
  61. }
  62. YmRenderer.$inject = ['config.bpmnRenderer', 'injector', 'eventBus', 'styles', 'pathMap', 'canvas', 'textRenderer', 'config.flowInfo'];
  63. export default YmRenderer;