ProcessInstanceBpmnViewer.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <template>
  2. <el-card v-loading="loading" class="box-card">
  3. <template #header>
  4. <span class="el-icon-picture-outline">流程图</span>
  5. </template>
  6. <MyProcessViewer key="designer" :xml="view.bpmnXml" :view="view" class="h-700px" />
  7. </el-card>
  8. </template>
  9. <script lang="ts" setup>
  10. import { propTypes } from '@/utils/propTypes'
  11. import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
  12. import * as ProcessInstanceApi from '@/api/bpm/processInstance'
  13. defineOptions({ name: 'BpmProcessInstanceBpmnViewer' })
  14. const props = defineProps({
  15. loading: propTypes.bool.def(false), // 是否加载中
  16. id: propTypes.string, // 流程实例的编号
  17. bpmnXml: propTypes.string // BPMN XML
  18. })
  19. const view = ref({
  20. bpmnXml: ''
  21. }) // BPMN 流程图数据
  22. /** 只有 loading 完成时,才去加载流程列表 */
  23. watch(
  24. () => props.loading,
  25. async (value) => {
  26. if (value && props.id) {
  27. view.value = await ProcessInstanceApi.getProcessInstanceBpmnModelView(props.id)
  28. }
  29. }
  30. )
  31. /** 监听 bpmnXml */
  32. watch(
  33. () => props.bpmnXml,
  34. (value) => {
  35. view.value.bpmnXml = value
  36. }
  37. )
  38. </script>
  39. <style>
  40. .box-card {
  41. width: 100%;
  42. margin-bottom: 20px;
  43. }
  44. </style>