From 3b8ecadc78d6a247c1bd736fe37dfb7ff53badd4 Mon Sep 17 00:00:00 2001 From: dap <dap@qq.com> Date: 星期三, 15 五月 2024 11:34:58 +0800 Subject: [PATCH] refactor: 流程定义-流程图片改为bpmn组件预览 --- src/components/BpmnView/index.vue | 25 ++++++++++++++++++++++++- src/views/workflow/processDefinition/index.vue | 4 ++-- src/views/workflow/processDefinition/components/processPreview.vue | 21 ++++++++++++++++----- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/components/BpmnView/index.vue b/src/components/BpmnView/index.vue index fa625bf..4ea890d 100644 --- a/src/components/BpmnView/index.vue +++ b/src/components/BpmnView/index.vue @@ -76,6 +76,28 @@ }); }; +const initXml = (xmlStr: string) => { + loading.value = true; + bpmnVisible.value = true; + nextTick(async () => { + if (modeler.value) modeler.value.destroy(); + modeler.value = new BpmnViewer({ + container: canvas.value, + additionalModules: [ + { + //绂佹婊氳疆婊氬姩 + zoomScroll: ['value', ''] + }, + ZoomScrollModule, + MoveCanvasModule + ] as ModuleDeclaration[] + }); + xml.value = xmlStr; + await createDiagram(xml.value); + loading.value = false; + }); +}; + const createDiagram = async (data) => { try { await modeler.value.importXML(data); @@ -238,7 +260,8 @@ } }; defineExpose({ - init + init, + initXml }); </script> diff --git a/src/views/workflow/processDefinition/components/processPreview.vue b/src/views/workflow/processDefinition/components/processPreview.vue index 817552a..3159b32 100644 --- a/src/views/workflow/processDefinition/components/processPreview.vue +++ b/src/views/workflow/processDefinition/components/processPreview.vue @@ -1,9 +1,7 @@ <template> <el-dialog v-model="data.visible" title="棰勮" width="70%" append-to-body> - <div v-if="data.type === 'png'" style="align: center"> - <el-image v-if="data.type === 'png'" :src="data.url[0]"> - <div>娴佺▼鍥惧姞杞戒腑 <i class="el-icon-loading"></i></div> - </el-image> + <div v-if="data.type === 'png' && data.xmlStr" style="align: center"> + <BpmnViewer ref="bpmnViewerRef"></BpmnViewer> </div> <div v-if="data.type === 'xml'" class="xml-data"> <div v-for="(xml, index) in data.url" :key="index"> @@ -17,16 +15,29 @@ </template> <script setup lang="ts"> +import BpmnViewer from '@/components/BpmnView/index.vue'; + const data = reactive({ visible: false, url: new Array<string>(), - type: '' + type: '', + xmlStr: '' }); + +const bpmnViewerRef = ref<InstanceType<typeof BpmnViewer>>(); //鎵撳紑 const openDialog = (url: string[], type: string) => { data.visible = true; data.url = url; data.type = type; + /** 娴佺▼鍥� */ + if (type === 'png') { + data.xmlStr = url.join('\n'); + /** 蹇呴』鏀惧湪nextTick 鍚﹀垯绗竴娆℃墦寮�涓虹┖ */ + nextTick(() => { + bpmnViewerRef.value?.initXml(data.xmlStr); + }); + } }; /** * 瀵瑰鏆撮湶瀛愮粍浠舵柟娉� diff --git a/src/views/workflow/processDefinition/index.vue b/src/views/workflow/processDefinition/index.vue index fde02c7..6f13d32 100644 --- a/src/views/workflow/processDefinition/index.vue +++ b/src/views/workflow/processDefinition/index.vue @@ -403,10 +403,10 @@ //棰勮鍥剧墖 const clickPreviewImg = async (id: string) => { loading.value = true; - const resp = await definitionImage(id); + const resp = await definitionXml(id); if (previewRef.value) { url.value = []; - url.value.push('data:image/png;base64,' + resp.data); + url.value = resp.data.xml; loading.value = false; previewRef.value.openDialog(url.value, 'png'); } -- Gitblit v1.9.3