Skip to content

Commit a8c1fd4

Browse files
committed
feat: Simple设计器同步获取bpmnXml数据相关逻辑
1 parent e50cd22 commit a8c1fd4

File tree

5 files changed

+84
-14
lines changed

5 files changed

+84
-14
lines changed

src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<div v-loading="loading" class="overflow-auto">
33
<SimpleProcessModel
4+
ref="simpleProcessModelRef"
45
v-if="processNodeTree"
56
:flow-node="processNodeTree"
67
:readonly="false"
@@ -134,7 +135,7 @@ const saveSimpleFlowModel = async (simpleModelNode: SimpleFlowNode) => {
134135
}
135136
}
136137
137-
// 校验节点设置。 暂时以 showText 为空 未节点错误配置
138+
// ���验节点设置。 暂时以 showText 为空 未节点错误配置
138139
const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNode[]) => {
139140
if (node) {
140141
const { type, showText, conditionNodes } = node
@@ -225,4 +226,19 @@ onMounted(async () => {
225226
loading.value = false
226227
}
227228
})
229+
230+
const simpleProcessModelRef = ref()
231+
232+
/** 获取当前流程数据 */
233+
const getCurrentFlowData = async () => {
234+
if (simpleProcessModelRef.value) {
235+
return await simpleProcessModelRef.value.getCurrentFlowData()
236+
}
237+
return undefined
238+
}
239+
240+
defineExpose({
241+
getCurrentFlowData,
242+
updateModel
243+
})
228244
</script>

src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,14 +125,19 @@ const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNo
125125
}
126126
127127
/** 获取当前流程数据 */
128-
const getCurrentFlowData = () => {
129-
errorNodes = []
130-
validateNode(processNodeTree.value, errorNodes)
131-
if (errorNodes.length > 0) {
132-
errorDialogVisible.value = true
128+
const getCurrentFlowData = async () => {
129+
try {
130+
errorNodes = []
131+
validateNode(processNodeTree.value, errorNodes)
132+
if (errorNodes.length > 0) {
133+
errorDialogVisible.value = true
134+
return undefined
135+
}
136+
return processNodeTree.value
137+
} catch (error) {
138+
console.error('获取流程数据失败:', error)
133139
return undefined
134140
}
135-
return processNodeTree.value
136141
}
137142
138143
defineExpose({

src/views/bpm/model/form/ProcessDesign.vue

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,31 @@ const validate = async () => {
7676
const getXmlString = async () => {
7777
try {
7878
if (modelData.value.type === BpmModelType.BPMN) {
79-
console.warn('bpmnEditorRef.value', bpmnEditorRef.value)
8079
// BPMN设计器
8180
if (bpmnEditorRef.value) {
8281
const { xml } = await bpmnEditorRef.value.saveXML()
82+
if (xml) {
83+
// 更新本地数据
84+
modelData.value = {
85+
...modelData.value,
86+
bpmnXml: xml
87+
}
88+
}
8389
return xml
8490
}
8591
} else {
8692
// Simple设计器
8793
if (simpleEditorRef.value) {
88-
const flowData = simpleEditorRef.value.getCurrentFlowData()
89-
return flowData ? JSON.stringify(flowData) : undefined
94+
const flowData = await simpleEditorRef.value.getCurrentFlowData()
95+
if (flowData) {
96+
const jsonData = JSON.stringify(flowData)
97+
// 更新本地数据
98+
modelData.value = {
99+
...modelData.value,
100+
bpmnXml: jsonData
101+
}
102+
return jsonData
103+
}
90104
}
91105
}
92106
return undefined

src/views/bpm/model/form/index.vue

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,16 @@ const handleSave = async () => {
213213
await validateAllSteps()
214214
215215
// 获取最新的流程设计数据
216-
const bpmnXml = processDesignRef.value?.getXmlString()
217-
formData.value.bpmnXml = bpmnXml
216+
const bpmnXml = await processDesignRef.value?.getXmlString()
217+
if (!bpmnXml) {
218+
throw new Error('获取流程数据失败')
219+
}
220+
221+
// 更新表单数据
222+
formData.value = {
223+
...formData.value,
224+
bpmnXml: bpmnXml
225+
}
218226
219227
if (formData.value.id) {
220228
// 修改场景
@@ -245,6 +253,8 @@ const handleSave = async () => {
245253
params: { id: formData.value.id }
246254
})
247255
} catch {
256+
// 先删除当前页签
257+
delView(unref(router.currentRoute))
248258
// 用户点击返回列表
249259
await router.push({ name: 'BpmModel' })
250260
}
@@ -267,8 +277,16 @@ const handleDeploy = async () => {
267277
await validateAllSteps()
268278
269279
// 获取最新的流程设计数据
270-
const bpmnXml = processDesignRef.value?.getXmlString()
271-
formData.value.bpmnXml = bpmnXml
280+
const bpmnXml = await processDesignRef.value?.getXmlString()
281+
if (!bpmnXml) {
282+
throw new Error('获取流程数据失败')
283+
}
284+
285+
// 更新表单数据
286+
formData.value = {
287+
...formData.value,
288+
bpmnXml: bpmnXml
289+
}
272290
273291
// 先保存所有数据
274292
if (formData.value.id) {

src/views/bpm/simple/SimpleModelDesign.vue

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,22 @@ watch([() => props.modelKey, () => props.modelName], ([newKey, newName]) => {
3636
const handleSuccess = (data?: any) => {
3737
emit('success', data)
3838
}
39+
40+
/** 获取当前流程数据 */
41+
const getCurrentFlowData = async () => {
42+
try {
43+
if (designerRef.value) {
44+
return await designerRef.value.getCurrentFlowData()
45+
}
46+
return undefined
47+
} catch (error) {
48+
console.error('获取流程数据失败:', error)
49+
return undefined
50+
}
51+
}
52+
53+
defineExpose({
54+
getCurrentFlowData
55+
})
3956
</script>
4057
<style lang="scss" scoped></style>

0 commit comments

Comments
 (0)