Skip to content

Commit 36157a8

Browse files
committed
fix: 修复新增流程时无法通过第三步的bpm必填校验问题
1 parent a82862b commit 36157a8

File tree

2 files changed

+32
-30
lines changed

2 files changed

+32
-30
lines changed

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const modelData = computed({
5050
watch(
5151
() => props.modelValue,
5252
(newVal) => {
53-
if (newVal.bpmnXml) {
53+
if (newVal?.bpmnXml) {
5454
xmlString.value = newVal.bpmnXml
5555
}
5656
},
@@ -61,24 +61,29 @@ watch(
6161
const handleDesignSuccess = (bpmnXml?: string) => {
6262
if (bpmnXml) {
6363
xmlString.value = bpmnXml
64-
emit('update:modelValue', {
64+
modelData.value = {
6565
...modelData.value,
6666
bpmnXml
67-
})
67+
}
6868
emit('success', bpmnXml)
6969
}
7070
}
7171
7272
/** 表单校验 */
7373
const validate = async () => {
74-
// 修改场景下,如果已有 modelData.bpmnXml 则不需要重新校验
75-
if (modelData.value.id && modelData.value.bpmnXml) {
74+
// 获取最新的XML数据
75+
const currentXml = xmlString.value || modelData.value?.bpmnXml
76+
77+
// 如果是修改场景且有XML数据(无论是新的还是原有的)
78+
if (modelData.value.id && currentXml) {
7679
return true
7780
}
78-
// 新增场景或无 bpmnXml 时才校验
79-
if (!xmlString.value) {
81+
82+
// 新增场景必须有XML数据
83+
if (!currentXml) {
8084
throw new Error('请设计流程')
8185
}
86+
8287
return true
8388
}
8489
@@ -89,8 +94,7 @@ const showDesigner = computed(() => {
8994
9095
/** 获取当前XML字符串 */
9196
const getXmlString = () => {
92-
// 优先返回最新的 xmlString
93-
return xmlString.value || modelData.value?.bpmnXml
97+
return xmlString.value || modelData.value?.bpmnXml || ''
9498
}
9599
96100
defineExpose({

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

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -169,19 +169,24 @@ const initData = async () => {
169169
/** 保存操作 */
170170
const handleSave = async () => {
171171
try {
172-
// 保存前确保当前步骤的数据已经验证通过
173-
if (typeof steps[currentStep.value].validator === 'function') {
174-
await steps[currentStep.value].validator()
172+
// 保存前确保所有步骤的数据都已经验证通过
173+
for (const step of steps) {
174+
if (step.validator) {
175+
await step.validator()
176+
}
175177
}
176-
177-
// 如果是第三步,需要先获取最新的流程设计数据
178+
179+
// 如果是在第三步,需要先获取最新的流程设计数据
178180
if (currentStep.value === 2) {
181+
await nextTick()
179182
const bpmnXml = processDesignRef.value?.getXmlString()
180-
if (bpmnXml) {
181-
formData.value.bpmnXml = bpmnXml
183+
// 确保有XML数据
184+
if (!bpmnXml) {
185+
throw new Error('请设计流程')
182186
}
187+
formData.value.bpmnXml = bpmnXml
183188
}
184-
189+
185190
if (formData.value.id) {
186191
await ModelApi.updateModel(formData.value)
187192
message.success('修改成功')
@@ -193,31 +198,22 @@ const handleSave = async () => {
193198
} catch (error) {
194199
console.error('保存失败:', error)
195200
message.error(error.message || '保存失败')
201+
throw error
196202
}
197203
}
198204
199205
/** 发布操作 */
200206
const handleDeploy = async () => {
201207
try {
202208
await message.confirm('是否确认发布该流程?')
203-
// 发布时才进行全部校验
204-
for (const step of steps) {
205-
if (step.validator) {
206-
await step.validator()
207-
}
208-
}
209-
// 如果是第三步,需要先获取最新的流程设计数据
210-
if (currentStep.value === 2) {
211-
const bpmnXml = processDesignRef.value?.getXmlString()
212-
if (bpmnXml) {
213-
formData.value.bpmnXml = bpmnXml
214-
}
215-
}
209+
// 先保存所有数据
216210
await handleSave()
211+
// 发布
217212
await ModelApi.deployModel(formData.value.id)
218213
message.success('发布成功')
219214
router.push({ name: 'BpmModel' })
220215
} catch (error) {
216+
console.error('发布失败:', error)
221217
if (error instanceof Error) {
222218
// 校验失败时,跳转到对应步骤
223219
const failedStep = steps.findIndex((step) => {
@@ -231,6 +227,8 @@ const handleDeploy = async () => {
231227
if (failedStep !== -1) {
232228
currentStep.value = failedStep
233229
message.warning('请完善必填信息')
230+
} else {
231+
message.error(error.message || '发布失败')
234232
}
235233
}
236234
}

0 commit comments

Comments
 (0)