Przeglądaj źródła

fix: 流程定义xml预览问题 & 重构代码

dap 11 miesięcy temu
rodzic
commit
3062c46b49

+ 8 - 31
src/views/workflow/processDefinition/components/processPreview.vue

@@ -1,12 +1,10 @@
 <template>
-  <el-dialog v-model="data.visible" title="预览" width="70%" append-to-body>
-    <div v-if="data.type === 'png' && data.xmlStr" style="align: center">
+  <el-dialog v-model="data.visible" title="预览" width="70%" append-to-body destroy-on-close>
+    <div v-if="data.type === 'bpmn' && data.xmlStr">
       <BpmnViewer ref="bpmnViewerRef"></BpmnViewer>
     </div>
-    <div v-if="data.type === 'xml'" class="xml-data">
-      <div v-for="(xml, index) in data.url" :key="index">
-        <pre class="font">{{ xml }}</pre>
-      </div>
+    <div v-if="data.type === 'xml' && data.xmlStr">
+      <highlightjs language="xml" :code="data.xmlStr" />
     </div>
     <template #footer>
       <span v-if="data.type === 'xml'" class="dialog-footer"> </span>
@@ -19,20 +17,19 @@ import BpmnViewer from '@/components/BpmnView/index.vue';
 
 const data = reactive({
   visible: false,
-  url: new Array<string>(),
   type: '',
   xmlStr: ''
 });
 
 const bpmnViewerRef = ref<InstanceType<typeof BpmnViewer>>();
+type PreviewType = 'xml' | 'bpmn';
 //打开
-const openDialog = (url: string[], type: string) => {
+const openDialog = (xmlStr: string, type: PreviewType) => {
   data.visible = true;
-  data.url = url;
+  data.xmlStr = xmlStr;
   data.type = type;
   /** 流程图 */
-  if (type === 'png') {
-    data.xmlStr = url.join('\n');
+  if (type === 'bpmn') {
     /** 必须放在nextTick 否则第一次打开为空 */
     nextTick(() => {
       bpmnViewerRef.value?.initXml(data.xmlStr);
@@ -46,23 +43,3 @@ defineExpose({
   openDialog
 });
 </script>
-<style>
-.xml-data {
-  background-color: #2b2b2b;
-  border-radius: 5px;
-  color: #c6c6c6;
-  word-break: break-all;
-  overflow-y: scroll;
-  overflow-x: hidden;
-  box-sizing: border-box;
-  padding: 8px 0px;
-  height: 500px;
-  width: inherit;
-  line-height: 1px;
-  overflow: auto;
-}
-.font {
-  font-family: '幼圆';
-  font-weight: 500;
-}
-</style>

+ 8 - 19
src/views/workflow/processDefinition/index.vue

@@ -61,12 +61,12 @@
             </el-table-column>
             <el-table-column align="center" prop="resourceName" label="流程XML" width="100" :show-overflow-tooltip="true">
               <template #default="scope">
-                <el-link type="primary" @click="clickPreviewXML(scope.row.id)">{{ scope.row.resourceName }}</el-link>
+                <el-link type="primary" @click="clickPreview(scope.row.id, 'xml')">{{ scope.row.resourceName }}</el-link>
               </template>
             </el-table-column>
             <el-table-column align="center" prop="diagramResourceName" label="流程图片" width="100" :show-overflow-tooltip="true">
               <template #default="scope">
-                <el-link type="primary" @click="clickPreviewImg(scope.row.id)">{{ scope.row.diagramResourceName }}</el-link>
+                <el-link type="primary" @click="clickPreview(scope.row.id, 'bpmn')">{{ scope.row.diagramResourceName }}</el-link>
               </template>
             </el-table-column>
             <el-table-column align="center" prop="suspensionState" label="状态" width="80">
@@ -293,7 +293,6 @@ const total = ref(0);
 const uploadDialogLoading = ref(false);
 const processDefinitionList = ref<ProcessDefinitionVO[]>([]);
 const processDefinitionHistoryList = ref<ProcessDefinitionVO[]>([]);
-const url = ref<string[]>([]);
 const categoryOptions = ref<CategoryOption[]>([]);
 const categoryName = ref('');
 /** 部署文件分类选择 */
@@ -400,28 +399,18 @@ const getProcessDefinitionHitoryList = async (id: string, key: string) => {
   loading.value = false;
 };
 
-//预览图片
-const clickPreviewImg = async (id: string) => {
+type PreviewType = 'xml' | 'bpmn';
+//预览 公共方法
+const clickPreview = async (id: string, type: PreviewType) => {
   loading.value = true;
   const resp = await definitionXml(id);
   if (previewRef.value) {
-    url.value = [];
-    url.value = resp.data.xml;
+    const xmlStr = resp.data.xmlStr;
     loading.value = false;
-    previewRef.value.openDialog(url.value, 'png');
-  }
-};
-//预览xml
-const clickPreviewXML = async (id: string) => {
-  loading.value = true;
-  const resp = await definitionXml(id);
-  if (previewRef.value) {
-    url.value = [];
-    url.value = resp.data.xml;
-    loading.value = false;
-    previewRef.value.openDialog(url.value, 'xml');
+    previewRef.value.openDialog(xmlStr, type);
   }
 };
+
 /** 删除按钮操作 */
 const handleDelete = async (row?: ProcessDefinitionVO) => {
   const id = row?.id || ids.value;