|
|
|
@ -1,7 +1,10 @@ |
|
|
|
<template> |
|
|
|
<div class="h-full" :class="prefixCls"> |
|
|
|
<FlowChartToolbar :prefixCls="prefixCls" v-if="toolbar" /> |
|
|
|
<FlowChartToolbar :prefixCls="prefixCls" v-if="toolbar" @view-data="handlePreview" /> |
|
|
|
<div ref="lfElRef" class="h-full"></div> |
|
|
|
<BasicModal @register="register" title="流程数据" width="50%"> |
|
|
|
<JsonPreview :data="graphData" /> |
|
|
|
</BasicModal> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
<script lang="ts"> |
|
|
|
@ -14,15 +17,18 @@ |
|
|
|
import { Snapshot, BpmnElement, Menu, DndPanel } from '@logicflow/extension'; |
|
|
|
|
|
|
|
import { useDesign } from '/@/hooks/web/useDesign'; |
|
|
|
import { useAppStore } from '/@/store/modules/app'; |
|
|
|
import { createFlowChartContext } from './useFlowContext'; |
|
|
|
|
|
|
|
import { toLogicFlowData } from './adpterForTurbo'; |
|
|
|
import { useModal, BasicModal } from '/@/components/Modal'; |
|
|
|
import { JsonPreview } from '/@/components/CodeEditor'; |
|
|
|
|
|
|
|
import '@logicflow/core/dist/style/index.css'; |
|
|
|
import './index.css'; |
|
|
|
import '@logicflow/extension/lib/style/index.css'; |
|
|
|
export default defineComponent({ |
|
|
|
name: 'FlowChart', |
|
|
|
components: { FlowChartToolbar }, |
|
|
|
components: { BasicModal, FlowChartToolbar, JsonPreview }, |
|
|
|
props: { |
|
|
|
flowOptions: { |
|
|
|
type: Object as PropType<Definition>, |
|
|
|
@ -41,10 +47,13 @@ |
|
|
|
}, |
|
|
|
setup(props) { |
|
|
|
const lfElRef = ref<ElRef>(null); |
|
|
|
const graphData = ref<Recordable>({}); |
|
|
|
|
|
|
|
const lfInstance = ref<Nullable<LogicFlow>>(null); |
|
|
|
|
|
|
|
const { prefixCls } = useDesign('flow-chart'); |
|
|
|
const appStore = useAppStore(); |
|
|
|
const [register, { openModal }] = useModal(); |
|
|
|
createFlowChartContext({ |
|
|
|
logicFlow: (lfInstance as unknown) as LogicFlow, |
|
|
|
}); |
|
|
|
@ -55,7 +64,7 @@ |
|
|
|
const defaultOptions: Partial<Definition> = { |
|
|
|
grid: true, |
|
|
|
background: { |
|
|
|
color: '#f7f9ff', |
|
|
|
color: appStore.getDarkMode === 'light' ? '#f7f9ff' : '#151515', |
|
|
|
}, |
|
|
|
keyboard: { |
|
|
|
enabled: true, |
|
|
|
@ -73,12 +82,20 @@ |
|
|
|
); |
|
|
|
|
|
|
|
watch( |
|
|
|
() => props.flowOptions, |
|
|
|
() => appStore.getDarkMode, |
|
|
|
() => { |
|
|
|
init(); |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
watch( |
|
|
|
() => unref(getFlowOptions), |
|
|
|
(options) => { |
|
|
|
unref(lfInstance)?.updateEditConfig(options); |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
let isInit = false; |
|
|
|
// init logicFlow |
|
|
|
async function init() { |
|
|
|
await nextTick(); |
|
|
|
@ -87,14 +104,17 @@ |
|
|
|
if (!lfEl) { |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!isInit) { |
|
|
|
// Canvas configuration |
|
|
|
LogicFlow.use(Snapshot); |
|
|
|
// Use the bpmn plug-in to introduce bpmn elements, which can be used after conversion in turbo |
|
|
|
LogicFlow.use(BpmnElement); |
|
|
|
// Start the right-click menu |
|
|
|
LogicFlow.use(Menu); |
|
|
|
LogicFlow.use(DndPanel); |
|
|
|
isInit = true; |
|
|
|
} |
|
|
|
|
|
|
|
// Canvas configuration |
|
|
|
LogicFlow.use(Snapshot); |
|
|
|
// Use the bpmn plug-in to introduce bpmn elements, which can be used after conversion in turbo |
|
|
|
LogicFlow.use(BpmnElement); |
|
|
|
// Start the right-click menu |
|
|
|
LogicFlow.use(Menu); |
|
|
|
LogicFlow.use(DndPanel); |
|
|
|
lfInstance.value = new LogicFlow({ |
|
|
|
...unref(getFlowOptions), |
|
|
|
container: lfEl, |
|
|
|
@ -113,11 +133,24 @@ |
|
|
|
lf.render(lFData); |
|
|
|
} |
|
|
|
|
|
|
|
function handlePreview() { |
|
|
|
const lf = unref(lfInstance); |
|
|
|
if (!lf) { |
|
|
|
return; |
|
|
|
} |
|
|
|
graphData.value = unref(lf).getGraphData(); |
|
|
|
|
|
|
|
openModal(); |
|
|
|
} |
|
|
|
|
|
|
|
onMounted(init); |
|
|
|
|
|
|
|
return { |
|
|
|
register, |
|
|
|
prefixCls, |
|
|
|
lfElRef, |
|
|
|
handlePreview, |
|
|
|
graphData, |
|
|
|
}; |
|
|
|
}, |
|
|
|
}); |
|
|
|
|