fix: 修复新增流程时无法通过第三步的bpm必填校验问题
parent
a82862be47
commit
36157a8f24
|
@ -50,7 +50,7 @@ const modelData = computed({
|
||||||
watch(
|
watch(
|
||||||
() => props.modelValue,
|
() => props.modelValue,
|
||||||
(newVal) => {
|
(newVal) => {
|
||||||
if (newVal.bpmnXml) {
|
if (newVal?.bpmnXml) {
|
||||||
xmlString.value = newVal.bpmnXml
|
xmlString.value = newVal.bpmnXml
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -61,24 +61,29 @@ watch(
|
||||||
const handleDesignSuccess = (bpmnXml?: string) => {
|
const handleDesignSuccess = (bpmnXml?: string) => {
|
||||||
if (bpmnXml) {
|
if (bpmnXml) {
|
||||||
xmlString.value = bpmnXml
|
xmlString.value = bpmnXml
|
||||||
emit('update:modelValue', {
|
modelData.value = {
|
||||||
...modelData.value,
|
...modelData.value,
|
||||||
bpmnXml
|
bpmnXml
|
||||||
})
|
}
|
||||||
emit('success', bpmnXml)
|
emit('success', bpmnXml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 表单校验 */
|
/** 表单校验 */
|
||||||
const validate = async () => {
|
const validate = async () => {
|
||||||
// 修改场景下,如果已有 modelData.bpmnXml 则不需要重新校验
|
// 获取最新的XML数据
|
||||||
if (modelData.value.id && modelData.value.bpmnXml) {
|
const currentXml = xmlString.value || modelData.value?.bpmnXml
|
||||||
|
|
||||||
|
// 如果是修改场景且有XML数据(无论是新的还是原有的)
|
||||||
|
if (modelData.value.id && currentXml) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// 新增场景或无 bpmnXml 时才校验
|
|
||||||
if (!xmlString.value) {
|
// 新增场景必须有XML数据
|
||||||
|
if (!currentXml) {
|
||||||
throw new Error('请设计流程')
|
throw new Error('请设计流程')
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,8 +94,7 @@ const showDesigner = computed(() => {
|
||||||
|
|
||||||
/** 获取当前XML字符串 */
|
/** 获取当前XML字符串 */
|
||||||
const getXmlString = () => {
|
const getXmlString = () => {
|
||||||
// 优先返回最新的 xmlString
|
return xmlString.value || modelData.value?.bpmnXml || ''
|
||||||
return xmlString.value || modelData.value?.bpmnXml
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
|
|
|
@ -169,19 +169,24 @@ const initData = async () => {
|
||||||
/** 保存操作 */
|
/** 保存操作 */
|
||||||
const handleSave = async () => {
|
const handleSave = async () => {
|
||||||
try {
|
try {
|
||||||
// 保存前确保当前步骤的数据已经验证通过
|
// 保存前确保所有步骤的数据都已经验证通过
|
||||||
if (typeof steps[currentStep.value].validator === 'function') {
|
for (const step of steps) {
|
||||||
await steps[currentStep.value].validator()
|
if (step.validator) {
|
||||||
}
|
await step.validator()
|
||||||
|
|
||||||
// 如果是第三步,需要先获取最新的流程设计数据
|
|
||||||
if (currentStep.value === 2) {
|
|
||||||
const bpmnXml = processDesignRef.value?.getXmlString()
|
|
||||||
if (bpmnXml) {
|
|
||||||
formData.value.bpmnXml = bpmnXml
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 如果是在第三步,需要先获取最新的流程设计数据
|
||||||
|
if (currentStep.value === 2) {
|
||||||
|
await nextTick()
|
||||||
|
const bpmnXml = processDesignRef.value?.getXmlString()
|
||||||
|
// 确保有XML数据
|
||||||
|
if (!bpmnXml) {
|
||||||
|
throw new Error('请设计流程')
|
||||||
|
}
|
||||||
|
formData.value.bpmnXml = bpmnXml
|
||||||
|
}
|
||||||
|
|
||||||
if (formData.value.id) {
|
if (formData.value.id) {
|
||||||
await ModelApi.updateModel(formData.value)
|
await ModelApi.updateModel(formData.value)
|
||||||
message.success('修改成功')
|
message.success('修改成功')
|
||||||
|
@ -193,6 +198,7 @@ const handleSave = async () => {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('保存失败:', error)
|
console.error('保存失败:', error)
|
||||||
message.error(error.message || '保存失败')
|
message.error(error.message || '保存失败')
|
||||||
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,24 +206,14 @@ const handleSave = async () => {
|
||||||
const handleDeploy = async () => {
|
const handleDeploy = async () => {
|
||||||
try {
|
try {
|
||||||
await message.confirm('是否确认发布该流程?')
|
await message.confirm('是否确认发布该流程?')
|
||||||
// 发布时才进行全部校验
|
// 先保存所有数据
|
||||||
for (const step of steps) {
|
|
||||||
if (step.validator) {
|
|
||||||
await step.validator()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 如果是第三步,需要先获取最新的流程设计数据
|
|
||||||
if (currentStep.value === 2) {
|
|
||||||
const bpmnXml = processDesignRef.value?.getXmlString()
|
|
||||||
if (bpmnXml) {
|
|
||||||
formData.value.bpmnXml = bpmnXml
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await handleSave()
|
await handleSave()
|
||||||
|
// 发布
|
||||||
await ModelApi.deployModel(formData.value.id)
|
await ModelApi.deployModel(formData.value.id)
|
||||||
message.success('发布成功')
|
message.success('发布成功')
|
||||||
router.push({ name: 'BpmModel' })
|
router.push({ name: 'BpmModel' })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error('发布失败:', error)
|
||||||
if (error instanceof Error) {
|
if (error instanceof Error) {
|
||||||
// 校验失败时,跳转到对应步骤
|
// 校验失败时,跳转到对应步骤
|
||||||
const failedStep = steps.findIndex((step) => {
|
const failedStep = steps.findIndex((step) => {
|
||||||
|
@ -231,6 +227,8 @@ const handleDeploy = async () => {
|
||||||
if (failedStep !== -1) {
|
if (failedStep !== -1) {
|
||||||
currentStep.value = failedStep
|
currentStep.value = failedStep
|
||||||
message.warning('请完善必填信息')
|
message.warning('请完善必填信息')
|
||||||
|
} else {
|
||||||
|
message.error(error.message || '发布失败')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue