@@ -322,6 +322,14 @@ const handleDesignSuccess = (bpmnXml?: string) => {
}
}
+/** 返回列表页 */
+const handleBack = () => {
+ // 先删除当前页签
+ delView(unref(router.currentRoute))
+ // 跳转到列表页
+ router.push({ name: 'BpmModel' })
+}
+
/** 初始化 */
onMounted(async () => {
await initData()
From a8c1fd4473364f3a391f7f1ddd98c9050d869531 Mon Sep 17 00:00:00 2001
From: GoldenZqqq <1361001127@qq.com>
Date: Fri, 27 Dec 2024 14:58:43 +0800
Subject: [PATCH 21/24] =?UTF-8?q?feat:=20Simple=E8=AE=BE=E8=AE=A1=E5=99=A8?=
=?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=8E=B7=E5=8F=96bpmnXml=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/SimpleProcessDesigner.vue | 18 ++++++++++++-
.../src/SimpleProcessModel.vue | 17 +++++++-----
src/views/bpm/model/form/ProcessDesign.vue | 20 +++++++++++---
src/views/bpm/model/form/index.vue | 26 ++++++++++++++++---
src/views/bpm/simple/SimpleModelDesign.vue | 17 ++++++++++++
5 files changed, 84 insertions(+), 14 deletions(-)
diff --git a/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue b/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
index bc952d74..a8e1dd4b 100644
--- a/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
+++ b/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
@@ -1,6 +1,7 @@
{
}
}
-// 校验节点设置。 暂时以 showText 为空 未节点错误配置
+// ���验节点设置。 暂时以 showText 为空 未节点错误配置
const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNode[]) => {
if (node) {
const { type, showText, conditionNodes } = node
@@ -225,4 +226,19 @@ onMounted(async () => {
loading.value = false
}
})
+
+const simpleProcessModelRef = ref()
+
+/** 获取当前流程数据 */
+const getCurrentFlowData = async () => {
+ if (simpleProcessModelRef.value) {
+ return await simpleProcessModelRef.value.getCurrentFlowData()
+ }
+ return undefined
+}
+
+defineExpose({
+ getCurrentFlowData,
+ updateModel
+})
diff --git a/src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue b/src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
index bfcaa21e..ccd1f10d 100644
--- a/src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
+++ b/src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
@@ -125,14 +125,19 @@ const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNo
}
/** 获取当前流程数据 */
-const getCurrentFlowData = () => {
- errorNodes = []
- validateNode(processNodeTree.value, errorNodes)
- if (errorNodes.length > 0) {
- errorDialogVisible.value = true
+const getCurrentFlowData = async () => {
+ try {
+ errorNodes = []
+ validateNode(processNodeTree.value, errorNodes)
+ if (errorNodes.length > 0) {
+ errorDialogVisible.value = true
+ return undefined
+ }
+ return processNodeTree.value
+ } catch (error) {
+ console.error('获取流程数据失败:', error)
return undefined
}
- return processNodeTree.value
}
defineExpose({
diff --git a/src/views/bpm/model/form/ProcessDesign.vue b/src/views/bpm/model/form/ProcessDesign.vue
index 11384370..597f0194 100644
--- a/src/views/bpm/model/form/ProcessDesign.vue
+++ b/src/views/bpm/model/form/ProcessDesign.vue
@@ -76,17 +76,31 @@ const validate = async () => {
const getXmlString = async () => {
try {
if (modelData.value.type === BpmModelType.BPMN) {
- console.warn('bpmnEditorRef.value', bpmnEditorRef.value)
// BPMN设计器
if (bpmnEditorRef.value) {
const { xml } = await bpmnEditorRef.value.saveXML()
+ if (xml) {
+ // 更新本地数据
+ modelData.value = {
+ ...modelData.value,
+ bpmnXml: xml
+ }
+ }
return xml
}
} else {
// Simple设计器
if (simpleEditorRef.value) {
- const flowData = simpleEditorRef.value.getCurrentFlowData()
- return flowData ? JSON.stringify(flowData) : undefined
+ const flowData = await simpleEditorRef.value.getCurrentFlowData()
+ if (flowData) {
+ const jsonData = JSON.stringify(flowData)
+ // 更新本地数据
+ modelData.value = {
+ ...modelData.value,
+ bpmnXml: jsonData
+ }
+ return jsonData
+ }
}
}
return undefined
diff --git a/src/views/bpm/model/form/index.vue b/src/views/bpm/model/form/index.vue
index 0b55e483..23c88d5e 100644
--- a/src/views/bpm/model/form/index.vue
+++ b/src/views/bpm/model/form/index.vue
@@ -213,8 +213,16 @@ const handleSave = async () => {
await validateAllSteps()
// 获取最新的流程设计数据
- const bpmnXml = processDesignRef.value?.getXmlString()
- formData.value.bpmnXml = bpmnXml
+ const bpmnXml = await processDesignRef.value?.getXmlString()
+ if (!bpmnXml) {
+ throw new Error('获取流程数据失败')
+ }
+
+ // 更新表单数据
+ formData.value = {
+ ...formData.value,
+ bpmnXml: bpmnXml
+ }
if (formData.value.id) {
// 修改场景
@@ -245,6 +253,8 @@ const handleSave = async () => {
params: { id: formData.value.id }
})
} catch {
+ // 先删除当前页签
+ delView(unref(router.currentRoute))
// 用户点击返回列表
await router.push({ name: 'BpmModel' })
}
@@ -267,8 +277,16 @@ const handleDeploy = async () => {
await validateAllSteps()
// 获取最新的流程设计数据
- const bpmnXml = processDesignRef.value?.getXmlString()
- formData.value.bpmnXml = bpmnXml
+ const bpmnXml = await processDesignRef.value?.getXmlString()
+ if (!bpmnXml) {
+ throw new Error('获取流程数据失败')
+ }
+
+ // 更新表单数据
+ formData.value = {
+ ...formData.value,
+ bpmnXml: bpmnXml
+ }
// 先保存所有数据
if (formData.value.id) {
diff --git a/src/views/bpm/simple/SimpleModelDesign.vue b/src/views/bpm/simple/SimpleModelDesign.vue
index 456098a6..3fa50c55 100644
--- a/src/views/bpm/simple/SimpleModelDesign.vue
+++ b/src/views/bpm/simple/SimpleModelDesign.vue
@@ -36,5 +36,22 @@ watch([() => props.modelKey, () => props.modelName], ([newKey, newName]) => {
const handleSuccess = (data?: any) => {
emit('success', data)
}
+
+/** 获取当前流程数据 */
+const getCurrentFlowData = async () => {
+ try {
+ if (designerRef.value) {
+ return await designerRef.value.getCurrentFlowData()
+ }
+ return undefined
+ } catch (error) {
+ console.error('获取流程数据失败:', error)
+ return undefined
+ }
+}
+
+defineExpose({
+ getCurrentFlowData
+})
From 3ba5cb460cc3dfddbff930fc77568ac1e1aadc95 Mon Sep 17 00:00:00 2001
From: GoldenZqqq <1361001127@qq.com>
Date: Fri, 27 Dec 2024 15:01:31 +0800
Subject: [PATCH 22/24] =?UTF-8?q?chore:=20=E4=B9=B1=E7=A0=81=E6=96=87?=
=?UTF-8?q?=E5=AD=97=E6=81=A2=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue b/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
index a8e1dd4b..bdea492a 100644
--- a/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
+++ b/src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
@@ -135,7 +135,7 @@ const saveSimpleFlowModel = async (simpleModelNode: SimpleFlowNode) => {
}
}
-// ���验节点设置。 暂时以 showText 为空 未节点错误配置
+// 校验节点设置。 暂时以 showText 为空 未节点错误配置
const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNode[]) => {
if (node) {
const { type, showText, conditionNodes } = node
From eeda821b74cd1952ce2122156601e6cae3ae012d Mon Sep 17 00:00:00 2001
From: GoldenZqqq <1361001127@qq.com>
Date: Fri, 27 Dec 2024 15:22:02 +0800
Subject: [PATCH 23/24] =?UTF-8?q?fix:=20=E5=8C=BA=E5=88=86=E5=85=BC?=
=?UTF-8?q?=E5=AE=B9bpmn=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=B8=8Esimple?=
=?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=B8=8D=E5=90=8C=E4=BC=A0=E5=8F=82?=
=?UTF-8?q?=E4=B8=8E=E4=B8=8D=E5=90=8C=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/bpm/model/form/ProcessDesign.vue | 89 +++++++++++-----------
src/views/bpm/model/form/index.vue | 56 ++++++++------
2 files changed, 77 insertions(+), 68 deletions(-)
diff --git a/src/views/bpm/model/form/ProcessDesign.vue b/src/views/bpm/model/form/ProcessDesign.vue
index 597f0194..c6d787ba 100644
--- a/src/views/bpm/model/form/ProcessDesign.vue
+++ b/src/views/bpm/model/form/ProcessDesign.vue
@@ -49,57 +49,23 @@ const modelData = computed({
set: (val) => emit('update:modelValue', val)
})
-/** 表单校验 */
-const validate = async () => {
- try {
- // 根据流程类型获取对应的编辑器引用
- const editorRef =
- modelData.value.type === BpmModelType.BPMN ? bpmnEditorRef.value : simpleEditorRef.value
- if (!editorRef) {
- throw new Error('流程设计器未初始化')
- }
-
- // 获取最新的XML数据
- const bpmnXml = await getXmlString()
- console.warn(bpmnXml, 'bpmnXml')
- if (!bpmnXml) {
- throw new Error('请设计流程')
- }
-
- return true
- } catch (error) {
- throw error
- }
-}
-
-/** 获取当前XML字符串 */
-const getXmlString = async () => {
+/** 获取当前流程数据 */
+const getProcessData = async () => {
try {
if (modelData.value.type === BpmModelType.BPMN) {
// BPMN设计器
if (bpmnEditorRef.value) {
const { xml } = await bpmnEditorRef.value.saveXML()
if (xml) {
- // 更新本地数据
- modelData.value = {
- ...modelData.value,
- bpmnXml: xml
- }
+ return xml
}
- return xml
}
} else {
// Simple设计器
if (simpleEditorRef.value) {
const flowData = await simpleEditorRef.value.getCurrentFlowData()
if (flowData) {
- const jsonData = JSON.stringify(flowData)
- // 更新本地数据
- modelData.value = {
- ...modelData.value,
- bpmnXml: jsonData
- }
- return jsonData
+ return flowData // 直接返回流程数据对象,不需要转换为字符串
}
}
}
@@ -110,14 +76,45 @@ const getXmlString = async () => {
}
}
-/** 处理设计器保存成功 */
-const handleDesignSuccess = (bpmnXml?: string) => {
- if (bpmnXml) {
- modelData.value = {
- ...modelData.value,
- bpmnXml
+/** 表单校验 */
+const validate = async () => {
+ try {
+ // 根据流程类型获取对应的编辑器引用
+ const editorRef =
+ modelData.value.type === BpmModelType.BPMN ? bpmnEditorRef.value : simpleEditorRef.value
+ if (!editorRef) {
+ throw new Error('流程设计器未初始化')
}
- emit('success', bpmnXml)
+
+ // 获取最新的流程数据
+ const processData = await getProcessData()
+ if (!processData) {
+ throw new Error('请设计流程')
+ }
+
+ return true
+ } catch (error) {
+ throw error
+ }
+}
+
+/** 处理设计器保存成功 */
+const handleDesignSuccess = (data?: any) => {
+ if (data) {
+ if (modelData.value.type === BpmModelType.BPMN) {
+ modelData.value = {
+ ...modelData.value,
+ bpmnXml: data,
+ simpleModel: null
+ }
+ } else {
+ modelData.value = {
+ ...modelData.value,
+ bpmnXml: null,
+ simpleModel: data
+ }
+ }
+ emit('success', data)
}
}
@@ -128,6 +125,6 @@ const showDesigner = computed(() => {
defineExpose({
validate,
- getXmlString
+ getProcessData
})
diff --git a/src/views/bpm/model/form/index.vue b/src/views/bpm/model/form/index.vue
index 23c88d5e..4e807a26 100644
--- a/src/views/bpm/model/form/index.vue
+++ b/src/views/bpm/model/form/index.vue
@@ -177,7 +177,7 @@ const validateAllSteps = async () => {
currentStep.value = 0
throw new Error('请完善基本信息')
}
-
+
// 表单设计校验
await formDesignRef.value?.validate()
if (formData.value.formType === 10 && !formData.value.formId) {
@@ -191,15 +191,15 @@ const validateAllSteps = async () => {
currentStep.value = 1
throw new Error('请完善自定义表单信息')
}
-
+
// 流程设计校验
await processDesignRef.value?.validate()
- const bpmnXml = processDesignRef.value?.getXmlString()
- if (!bpmnXml) {
+ const processData = await processDesignRef.value?.getProcessData()
+ if (!processData) {
currentStep.value = 2
throw new Error('请设计流程')
}
-
+
return true
} catch (error) {
throw error
@@ -211,22 +211,28 @@ const handleSave = async () => {
try {
// 保存前校验所有步骤的数据
await validateAllSteps()
-
+
// 获取最新的流程设计数据
- const bpmnXml = await processDesignRef.value?.getXmlString()
- if (!bpmnXml) {
+ const processData = await processDesignRef.value?.getProcessData()
+ if (!processData) {
throw new Error('获取流程数据失败')
}
// 更新表单数据
- formData.value = {
- ...formData.value,
- bpmnXml: bpmnXml
+ const modelData = {
+ ...formData.value
}
-
+ if (formData.value.type === BpmModelType.BPMN) {
+ modelData.bpmnXml = processData
+ modelData.simpleModel = null
+ } else {
+ modelData.bpmnXml = null
+ modelData.simpleModel = processData // 直接使用流程数据对象
+ }
+
if (formData.value.id) {
// 修改场景
- await ModelApi.updateModel(formData.value)
+ await ModelApi.updateModel(modelData)
message.success('修改成功')
// 询问是否发布流程
try {
@@ -238,7 +244,7 @@ const handleSave = async () => {
}
} else {
// 新增场景
- const result = await ModelApi.createModel(formData.value)
+ const result = await ModelApi.createModel(modelData)
formData.value.id = result
message.success('新增成功')
try {
@@ -275,24 +281,30 @@ const handleDeploy = async () => {
// 校验所有步骤
await validateAllSteps()
-
+
// 获取最新的流程设计数据
- const bpmnXml = await processDesignRef.value?.getXmlString()
- if (!bpmnXml) {
+ const processData = await processDesignRef.value?.getProcessData()
+ if (!processData) {
throw new Error('获取流程数据失败')
}
// 更新表单数据
- formData.value = {
- ...formData.value,
- bpmnXml: bpmnXml
+ const modelData = {
+ ...formData.value
+ }
+ if (formData.value.type === BpmModelType.BPMN) {
+ modelData.bpmnXml = processData
+ modelData.simpleModel = null
+ } else {
+ modelData.bpmnXml = null
+ modelData.simpleModel = processData // 直接使用流程数据对象
}
// 先保存所有数据
if (formData.value.id) {
- await ModelApi.updateModel(formData.value)
+ await ModelApi.updateModel(modelData)
} else {
- const result = await ModelApi.createModel(formData.value)
+ const result = await ModelApi.createModel(modelData)
formData.value.id = result.id
}
From 6f724d9d52e136679b8fc8989d816ecfbebca723 Mon Sep 17 00:00:00 2001
From: YunaiV
Date: Fri, 27 Dec 2024 21:28:12 +0800
Subject: [PATCH 24/24] =?UTF-8?q?=E3=80=90=E4=BB=A3=E7=A0=81=E8=AF=84?=
=?UTF-8?q?=E5=AE=A1=E3=80=91Bpm=EF=BC=9A=E6=96=B0=E7=9A=84=E7=BC=96?=
=?UTF-8?q?=E8=BE=91=E7=95=8C=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../package/designer/ProcessDesigner.vue | 83 +++++--------------
src/views/bpm/model/editor/index.vue | 6 +-
src/views/bpm/model/form/index.vue | 27 +++---
3 files changed, 35 insertions(+), 81 deletions(-)
diff --git a/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue b/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
index e9427292..9d2fa5ba 100644
--- a/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
+++ b/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
@@ -309,18 +309,26 @@ const props = defineProps({
})
// 监听value变化,重新加载流程图
-watch(() => props.value, (newValue) => {
- if (newValue && bpmnModeler) {
- createNewDiagram(newValue)
- }
-}, { immediate: true })
+watch(
+ () => props.value,
+ (newValue) => {
+ if (newValue && bpmnModeler) {
+ createNewDiagram(newValue)
+ }
+ },
+ { immediate: true }
+)
// 监听processId和processName变化
-watch([() => props.processId, () => props.processName], ([newId, newName]) => {
- if (newId && newName && !props.value) {
- createNewDiagram(null)
- }
-}, { immediate: true })
+watch(
+ [() => props.processId, () => props.processName],
+ ([newId, newName]) => {
+ if (newId && newName && !props.value) {
+ createNewDiagram(null)
+ }
+ },
+ { immediate: true }
+)
provide('configGlobal', props)
let bpmnModeler: any = null
@@ -599,16 +607,6 @@ const processZoomOut = (zoomStep = 0.1) => {
defaultZoom.value = newZoom
bpmnModeler.get('canvas').zoom(defaultZoom.value)
}
-// const processZoomTo = (newZoom = 1) => {
-// if (newZoom < 0.2) {
-// throw new Error('[Process Designer Warn ]: The zoom ratio cannot be less than 0.2')
-// }
-// if (newZoom > 4) {
-// throw new Error('[Process Designer Warn ]: The zoom ratio cannot be greater than 4')
-// }
-// defaultZoom = newZoom
-// bpmnModeler.get('canvas').zoom(newZoom)
-// }
const processReZoom = () => {
defaultZoom.value = 1
bpmnModeler.get('canvas').zoom('fit-viewport', 'auto')
@@ -647,62 +645,19 @@ const previewProcessXML = () => {
}
const previewProcessJson = () => {
bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
- // console.log(xml, 'xml')
-
- // const rootNode = parseXmlString(xml)
- // console.log(rootNode, 'rootNoderootNode')
const rootNodes = new XmlNode(XmlNodeType.Root, parseXmlString(xml))
- // console.log(rootNodes, 'rootNodesrootNodesrootNodes')
- // console.log(rootNodes.parent.toJsObject(), 'rootNodes.toJSON()')
- // console.log(JSON.stringify(rootNodes.parent.toJsObject()), 'rootNodes.toJSON()')
- // console.log(JSON.stringify(rootNodes.parent.toJSON()), 'rootNodes.toJSON()')
-
- // const parser = new xml2js.XMLParser()
- // let jObj = parser.parse(xml)
- // console.log(jObj, 'jObjjObjjObjjObjjObj')
- // const builder = new xml2js.XMLBuilder(xml)
- // const xmlContent = builder
- // console.log(xmlContent, 'xmlContent')
- // console.log(xml2js, 'convertconvertconvert')
previewResult.value = rootNodes.parent?.toJSON() as unknown as string
- // previewResult.value = jObj
- // previewResult.value = convert.xml2json(xml, {explicitArray : false},{ spaces: 2 })
previewType.value = 'json'
previewModelVisible.value = true
})
}
+
/* ------------------------------------------------ 芋道源码 methods ------------------------------------------------------ */
-const processSave = async () => {
- try {
- const { err, xml } = await bpmnModeler.saveXML()
- if (err) {
- ElMessage.error('保存流程设计失败,请重试!')
- return
- }
- emit('save', xml)
- } catch (error) {
- console.error(error)
- ElMessage.error('保存流程设计失败,请重试!')
- }
-}
-/** 高亮显示 */
-// const highlightedCode = (previewType, previewResult) => {
-// console.log(previewType, 'previewType, previewResult')
-// console.log(previewResult, 'previewType, previewResult')
-// console.log(hljs.highlight, 'hljs.highlight')
-// const result = hljs.highlight(previewType, previewResult.value || '', true)
-// return result.value || ' '
-// }
-onBeforeMount(() => {
- console.log(props, 'propspropspropsprops')
-})
onMounted(() => {
initBpmnModeler()
createNewDiagram(props.value)
})
onBeforeUnmount(() => {
- // this.$once('hook:beforeDestroy', () => {
- // })
if (bpmnModeler) bpmnModeler.destroy()
emit('destroy', bpmnModeler)
bpmnModeler = null
diff --git a/src/views/bpm/model/editor/index.vue b/src/views/bpm/model/editor/index.vue
index 063e5709..6e71d01c 100644
--- a/src/views/bpm/model/editor/index.vue
+++ b/src/views/bpm/model/editor/index.vue
@@ -206,7 +206,7 @@ onBeforeUnmount(() => {
}
})
-/** 获取XML字符串 */
+/** 获取 XML 字符串 */
const saveXML = async () => {
if (!modeler.value) {
return { xml: undefined }
@@ -251,7 +251,7 @@ defineExpose({
diff --git a/src/views/bpm/model/form/index.vue b/src/views/bpm/model/form/index.vue
index 4e807a26..ac628e0a 100644
--- a/src/views/bpm/model/form/index.vue
+++ b/src/views/bpm/model/form/index.vue
@@ -79,14 +79,14 @@