flowChart.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <div>
  3. <el-header style="border-bottom: 1px solid rgb(218 218 218); height: auto">
  4. <div style="display: flex; padding: 10px 0px; justify-content: space-between">
  5. <div>
  6. <el-tooltip effect="dark" content="自适应屏幕" placement="bottom">
  7. <el-button size="small" icon="Rank" @click="zoomViewport(1)">自适应屏幕</el-button>
  8. </el-tooltip>
  9. <el-tooltip effect="dark" content="放大" placement="bottom">
  10. <el-button size="small" icon="ZoomIn" @click="zoomViewport(true)">放大</el-button>
  11. </el-tooltip>
  12. <el-tooltip effect="dark" content="缩小" placement="bottom">
  13. <el-button size="small" icon="ZoomOut" @click="zoomViewport(false)">缩小</el-button>
  14. </el-tooltip>
  15. </div>
  16. <div>
  17. <el-button size="small" style="border: 1px solid #000">未完成</el-button>
  18. <el-button size="small" style="background-color: #fff8dc; border: 1px solid #ffcd17">进行中</el-button>
  19. <el-button size="small" style="background-color: #f0ffd9; border: 1px solid #9dff00">已完成</el-button>
  20. </div>
  21. </div>
  22. </el-header>
  23. <div class="container" ref="container"></div>
  24. </div>
  25. </template>
  26. <script setup lang="ts">
  27. import LogicFlow from '@logicflow/core';
  28. import '@logicflow/core/lib/style/index.css';
  29. import Start from './js/start.js';
  30. import Between from './js/between.js';
  31. import Serial from './js/serial.js';
  32. import Parallel from './js/parallel.js';
  33. import End from './js/end.js';
  34. import Skip from './js/skip.js';
  35. import { json2LogicFlowJson } from './js/tool.js';
  36. // Props 定义方式变化
  37. const props = defineProps({
  38. defJson: {
  39. type: Object,
  40. default: () => ({})
  41. }
  42. });
  43. const container = ref(null);
  44. const lf = ref(null);
  45. const register = () => {
  46. lf.value.register(Start);
  47. lf.value.register(Between);
  48. lf.value.register(Serial);
  49. lf.value.register(Parallel);
  50. lf.value.register(End);
  51. lf.value.register(Skip);
  52. };
  53. const zoomViewport = async (zoom) => {
  54. lf.value.zoom(zoom);
  55. // 将内容平移至画布中心
  56. lf.value.translateCenter();
  57. };
  58. onMounted(async () => {
  59. if (props.defJson) {
  60. const data = json2LogicFlowJson(props.defJson);
  61. lf.value = new LogicFlow({
  62. container: container.value,
  63. grid: false,
  64. isSilentMode: true,
  65. textEdit: false
  66. });
  67. register();
  68. lf.value.render(data);
  69. lf.value.translateCenter();
  70. }
  71. });
  72. </script>
  73. <style scoped>
  74. /* 样式部分保持不变 */
  75. .container {
  76. width: 100%;
  77. height: 500px;
  78. }
  79. </style>