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