ProcessInstanceBpmnViewer.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <el-card v-loading="loading" class="box-card">
  3. <MyProcessViewer key="designer" :xml="view.bpmnXml" :view="view" class="process-viewer" />
  4. </el-card>
  5. </template>
  6. <script lang="ts" setup>
  7. import { propTypes } from '@/utils/propTypes'
  8. import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
  9. defineOptions({ name: 'BpmProcessInstanceBpmnViewer' })
  10. const props = defineProps({
  11. loading: propTypes.bool.def(false), // 是否加载中
  12. bpmnXml: propTypes.string, // BPMN XML
  13. modelView: propTypes.object
  14. })
  15. const view = ref({
  16. bpmnXml: ''
  17. }) // BPMN 流程图数据
  18. /** 只有 loading 完成时,才去加载流程列表 */
  19. watch(
  20. () => props.modelView,
  21. async (newModelView) => {
  22. // 加载最新
  23. if (newModelView) {
  24. //@ts-ignore
  25. view.value = newModelView
  26. }
  27. }
  28. )
  29. /** 监听 bpmnXml */
  30. watch(
  31. () => props.bpmnXml,
  32. (value) => {
  33. view.value.bpmnXml = value
  34. }
  35. )
  36. </script>
  37. <style lang="scss" scoped>
  38. .box-card {
  39. height: 100%;
  40. width: 100%;
  41. margin-bottom: 0;
  42. :deep(.el-card__body) {
  43. height: 100%;
  44. padding: 0;
  45. }
  46. :deep(.process-viewer) {
  47. height: 100% !important;
  48. min-height: 100%;
  49. width: 100%;
  50. overflow: auto;
  51. }
  52. }
  53. </style>