169 lines
3.5 KiB
Vue
169 lines
3.5 KiB
Vue
|
<script setup lang="ts">
|
|||
|
import demoData from "./dataTurbo.json";
|
|||
|
import "@logicflow/core/dist/style/index.css";
|
|||
|
import "@logicflow/extension/lib/style/index.css";
|
|||
|
|
|||
|
import LogicFlow from "@logicflow/core";
|
|||
|
import { ref, unref, onMounted } from "vue";
|
|||
|
import { BpmnNode } from "@/components/ReFlowChart/src/config";
|
|||
|
import { Snapshot, BpmnElement, Menu } from "@logicflow/extension";
|
|||
|
import { Control, NodePanel, DataDialog } from "@/components/ReFlowChart";
|
|||
|
import { toLogicflowData } from "@/components/ReFlowChart/src/adpterForTurbo";
|
|||
|
|
|||
|
defineOptions({
|
|||
|
name: "FlowChart"
|
|||
|
});
|
|||
|
|
|||
|
const lf = ref(null);
|
|||
|
const graphData = ref(null);
|
|||
|
const dataVisible = ref<boolean>(false);
|
|||
|
const config = ref({
|
|||
|
grid: true,
|
|||
|
background: {
|
|||
|
color: "#f7f9ff"
|
|||
|
},
|
|||
|
keyboard: {
|
|||
|
enabled: true
|
|||
|
}
|
|||
|
});
|
|||
|
const nodeList = BpmnNode;
|
|||
|
|
|||
|
function initLf() {
|
|||
|
// 画布配置
|
|||
|
LogicFlow.use(Snapshot);
|
|||
|
// 使用bpmn插件,引入bpmn元素,这些元素可以在turbo中转换后使用
|
|||
|
LogicFlow.use(BpmnElement);
|
|||
|
// 启动右键菜单
|
|||
|
LogicFlow.use(Menu);
|
|||
|
const domLf = new LogicFlow({
|
|||
|
...unref(config),
|
|||
|
container: document.querySelector("#turbo")
|
|||
|
});
|
|||
|
lf.value = domLf;
|
|||
|
// 设置边类型bpmn:sequenceFlow为默认类型
|
|||
|
unref(lf).setDefaultEdgeType("bpmn:sequenceFlow");
|
|||
|
onRender();
|
|||
|
}
|
|||
|
|
|||
|
function onRender() {
|
|||
|
// Turbo数据转换为LogicFlow内部识别的数据结构
|
|||
|
const lFData = toLogicflowData(demoData);
|
|||
|
lf.value.render(lFData);
|
|||
|
}
|
|||
|
|
|||
|
function catData() {
|
|||
|
graphData.value = unref(lf).getGraphData();
|
|||
|
dataVisible.value = true;
|
|||
|
}
|
|||
|
|
|||
|
onMounted(() => {
|
|||
|
initLf();
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<template>
|
|||
|
<el-card shadow="never">
|
|||
|
<template #header>
|
|||
|
<div class="card-header">
|
|||
|
<span class="font-medium">
|
|||
|
流程图组件,采用开源的
|
|||
|
<el-link
|
|||
|
href="https://site.logic-flow.cn/docs/#/zh/guide/start"
|
|||
|
target="_blank"
|
|||
|
style="margin: 0 4px 5px; font-size: 16px"
|
|||
|
>
|
|||
|
LogicFlow
|
|||
|
</el-link>
|
|||
|
</span>
|
|||
|
</div>
|
|||
|
<el-link
|
|||
|
class="mt-2"
|
|||
|
href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/flow-chart"
|
|||
|
target="_blank"
|
|||
|
>
|
|||
|
代码位置 src/views/flow-chart
|
|||
|
</el-link>
|
|||
|
</template>
|
|||
|
<div class="logic-flow-view">
|
|||
|
<!-- 辅助工具栏 -->
|
|||
|
<Control
|
|||
|
v-if="lf"
|
|||
|
class="demo-control"
|
|||
|
:lf="lf"
|
|||
|
:catTurboData="false"
|
|||
|
@catData="catData"
|
|||
|
/>
|
|||
|
<!-- 节点面板 -->
|
|||
|
<NodePanel v-if="lf" :lf="lf" :nodeList="nodeList" />
|
|||
|
<!-- 画布 -->
|
|||
|
<div id="turbo" />
|
|||
|
<!-- 数据查看面板 -->
|
|||
|
<el-dialog
|
|||
|
v-model="dataVisible"
|
|||
|
class="flow-dialog"
|
|||
|
title="数据"
|
|||
|
width="50%"
|
|||
|
>
|
|||
|
<el-scrollbar>
|
|||
|
<DataDialog :graphData="graphData" />
|
|||
|
</el-scrollbar>
|
|||
|
</el-dialog>
|
|||
|
</div>
|
|||
|
</el-card>
|
|||
|
</template>
|
|||
|
|
|||
|
<style scoped>
|
|||
|
#turbo {
|
|||
|
width: 100%;
|
|||
|
height: 65vh;
|
|||
|
}
|
|||
|
|
|||
|
.logic-flow-view {
|
|||
|
position: relative;
|
|||
|
margin: 10px;
|
|||
|
}
|
|||
|
|
|||
|
.demo-title {
|
|||
|
margin: 20px;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
|
|||
|
.demo-control {
|
|||
|
position: absolute;
|
|||
|
top: 10px;
|
|||
|
right: 20px;
|
|||
|
z-index: 2;
|
|||
|
}
|
|||
|
|
|||
|
.time-plus {
|
|||
|
cursor: pointer;
|
|||
|
}
|
|||
|
|
|||
|
.add-panel {
|
|||
|
position: absolute;
|
|||
|
z-index: 11;
|
|||
|
padding: 10px 5px;
|
|||
|
background-color: white;
|
|||
|
}
|
|||
|
|
|||
|
.el-drawer__body {
|
|||
|
z-index: 3;
|
|||
|
height: 80%;
|
|||
|
margin-top: -30px;
|
|||
|
overflow: auto;
|
|||
|
}
|
|||
|
|
|||
|
:deep(.flow-dialog) {
|
|||
|
position: relative;
|
|||
|
top: 5vh;
|
|||
|
left: 0;
|
|||
|
margin: 0 auto;
|
|||
|
transform: none;
|
|||
|
}
|
|||
|
|
|||
|
:deep(.flow-dialog) .el-dialog__body {
|
|||
|
height: 85vh;
|
|||
|
overflow: auto;
|
|||
|
}
|
|||
|
</style>
|