CustomizeRenderer.ts 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { changeTypeByTaskShape, changeTypeByTrigger, typeConfig } from '../../config';
  2. import { append as svgAppend, create as svgCreate } from 'tiny-svg';
  3. import { bpmnEnd, bpmnGroup, bpmnStart } from '../../config/variableName';
  4. /**
  5. * svg重画bpmn节点
  6. */
  7. export default (parentNode: any, element: any, jnpfFlowInfo: any) => {
  8. let data = jnpfFlowInfo?.flowNodes[element.id];
  9. let nodeMap = jnpfFlowInfo?.nodeList;
  10. let isPreview = jnpfFlowInfo?.isPreview;
  11. let type = element.type; // 获取到类型;
  12. if (typeConfig && typeConfig[type]) {
  13. if (type === bpmnGroup) return null;
  14. if (changeTypeByTrigger[element.wnType || data?.type]) type = changeTypeByTrigger[element.wnType || data?.type];
  15. if (changeTypeByTaskShape[element.wnType || data?.type]) type = changeTypeByTaskShape[element.wnType || data?.type];
  16. let { renderer } = typeConfig[type];
  17. let { icon, iconColor, rendererName, background, titleColor, attr, bodyDefaultText } = renderer;
  18. element['width'] = attr.width;
  19. element['height'] = attr.height;
  20. let nodeName = element.nodeName != null ? element.nodeName : data?.nodeName != null ? data.nodeName : rendererName;
  21. let nodeContent = element.elementBodyName || nodeMap.get(element.id)?.userName || data?.content || bodyDefaultText;
  22. if (element.elementBodyName === '') nodeContent = bodyDefaultText;
  23. if (isPreview) {
  24. if (nodeMap) {
  25. if (nodeMap.get(element.id)?.type === '0') {
  26. titleColor = 'linear-gradient(90deg, #AEEFC2 0%, #4ED587 100%)';
  27. iconColor = '#25a210';
  28. }
  29. if (nodeMap.get(element.id)?.type === '1') {
  30. titleColor = 'linear-gradient(90deg, #C0EDF8 0%, #A6DEF8 100%)';
  31. iconColor = '#1eaceb';
  32. }
  33. if (nodeMap.get(element.id)?.type === '3') {
  34. titleColor = 'linear-gradient(90deg, #FDC9D1 0%,#E03845 100%)';
  35. iconColor = '#E03845';
  36. }
  37. } else {
  38. titleColor = 'linear-gradient(90deg, #CED1D5 0%, #CBCBCC 100%);';
  39. iconColor = '#4c4c58';
  40. }
  41. }
  42. let foreignObject: any = svgCreate('foreignObject', {
  43. width: attr.width,
  44. height: attr.height,
  45. class: type === bpmnStart || type === bpmnEnd ? 'begin-or-end-node' : 'task-node',
  46. });
  47. // 开始节点
  48. if (type === bpmnStart) {
  49. foreignObject.innerHTML = `
  50. <div class="node-container start-node-container" style="background:${background}" >
  51. <div class='node-top-container'>
  52. <i class="${icon}" style="color:${iconColor}"></i>
  53. <span title=${nodeName}>${nodeName}</span>
  54. </div>
  55. </div>`;
  56. svgAppend(parentNode, foreignObject);
  57. return parentNode;
  58. }
  59. // 任务节点
  60. if (changeTypeByTaskShape[element.wnType || data?.type] || changeTypeByTrigger[element.wnType || data?.type]) {
  61. foreignObject.innerHTML = `
  62. <div class="node-container" style="background:${background}" >
  63. <div class='node-top-container' style="background:${titleColor}">
  64. <i class="${icon}" style="color:${iconColor}"></i>
  65. <span>${nodeName}</span>
  66. </div>
  67. <div class='node-bottom-container'>
  68. <span>${nodeContent}</span>
  69. </div>
  70. </div>`;
  71. svgAppend(parentNode, foreignObject);
  72. return parentNode;
  73. }
  74. // 结束节点
  75. if (type === bpmnEnd) {
  76. foreignObject.innerHTML = `
  77. <div class="node-container end-node-container" style="background:${background}" >
  78. <div class='node-top-container'>
  79. <i class="${icon}" style="color:${iconColor}"></i>
  80. <span>${nodeName}</span>
  81. </div>
  82. </div>`;
  83. svgAppend(parentNode, foreignObject);
  84. return parentNode;
  85. }
  86. }
  87. };