兰宝车间质量管理系统-前端
dap
2024-05-16 3062c46b496236ce1f89ece74e4626c15c66bfe5
fix: 流程定义xml预览问题 & 重构代码
已修改2个文件
66 ■■■■ 文件已修改
src/views/workflow/processDefinition/components/processPreview.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workflow/processDefinition/index.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 @@
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 @@
  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>
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 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 @@
  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');
    previewRef.value.openDialog(xmlStr, type);
  }
};
//预览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');
  }
};
/** 删除按钮操作 */
const handleDelete = async (row?: ProcessDefinitionVO) => {
  const id = row?.id || ids.value;