vue-vben-admin/src/views/demo/comp/flow-chart/index.vue

134 lines
3.1 KiB
Vue
Raw Normal View History

2021-04-17 06:06:08 +08:00
<template>
<div class="logic-flow-view">
<!-- 辅助工具栏 -->
<Control class="demo-control" v-if="lf" :lf="lf" :catTurboData="false" @catData="catData" />
<!-- 节点面板 -->
<NodePanel :lf="lf" :nodeList="nodeList" />
<!-- 画布 -->
<div id="LF-Turbo"></div>
<!-- 数据查看面板 -->
<BasicModal @register="register" title="数据">
<DataDialog :graphData="graphData" />
</BasicModal>
</div>
</template>
<script lang="ts">
import { ref, unref, onMounted } from 'vue';
import LogicFlow from '@logicflow/core';
import { Snapshot, BpmnElement, Menu } from '@logicflow/extension';
import '@logicflow/core/dist/style/index.css';
import '@logicflow/extension/lib/style/index.css';
import { Control, NodePanel, DataDialog } from '/@/components/FlowChart';
import { toLogicflowData } from '/@/components/FlowChart/src/adpterForTurbo';
import { BpmnNode } from '/@/components/FlowChart/src/config';
import demoData from './dataTurbo.json';
import { BasicModal, useModal } from '/@/components/Modal';
export default {
components: { NodePanel, Control, DataDialog, BasicModal },
setup() {
let lf = ref(null);
let graphData = ref(null);
let config = ref({
grid: true,
background: {
color: '#f7f9ff',
},
keyboard: {
enabled: true,
},
});
let nodeList = BpmnNode;
const [register, { openModal }] = useModal();
function initLf() {
// 画布配置
LogicFlow.use(Snapshot);
// 使用bpmn插件引入bpmn元素这些元素可以在turbo中转换后使用
LogicFlow.use(BpmnElement);
// 启动右键菜单
LogicFlow.use(Menu);
const domLf = new LogicFlow({
...unref(config),
container: document.querySelector('#LF-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();
openModal();
}
onMounted(() => {
initLf();
});
return {
lf,
graphData,
config,
nodeList,
catData,
register,
openModal,
};
},
};
</script>
<style scoped>
#LF-Turbo {
width: 100vw;
height: 85%;
outline: none;
}
.logic-flow-view {
position: relative;
height: 100%;
}
.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;
}
</style>