ProcessDesign.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <!-- BPMN设计器 -->
  3. <template v-if="modelData.type === BpmModelType.BPMN">
  4. <BpmModelEditor
  5. v-if="showDesigner"
  6. :model-id="modelData.id"
  7. :model-key="modelData.key"
  8. :model-name="modelData.name"
  9. @success="handleDesignSuccess"
  10. />
  11. </template>
  12. <!-- Simple设计器 -->
  13. <template v-else>
  14. <SimpleModelDesign
  15. v-if="showDesigner"
  16. :model-id="modelData.id"
  17. :model-key="modelData.key"
  18. :model-name="modelData.name"
  19. :start-user-ids="modelData.startUserIds"
  20. @success="handleDesignSuccess"
  21. />
  22. </template>
  23. </template>
  24. <script lang="ts" setup>
  25. import { BpmModelType } from '@/utils/constants'
  26. import BpmModelEditor from './editor/index.vue'
  27. import SimpleModelDesign from '../../simple/SimpleModelDesign.vue'
  28. // 创建本地数据副本
  29. const modelData = defineModel<any>()
  30. const processData = inject('processData') as Ref
  31. /** 表单校验 */
  32. const validate = async () => {
  33. try {
  34. // 获取最新的流程数据
  35. if (!processData.value) {
  36. throw new Error('请设计流程')
  37. }
  38. return true
  39. } catch (error) {
  40. throw error
  41. }
  42. }
  43. /** 处理设计器保存成功 */
  44. const handleDesignSuccess = async (data?: any) => {
  45. if (data) {
  46. // 创建新的对象以触发响应式更新
  47. const newModelData = {
  48. ...modelData.value,
  49. bpmnXml: modelData.value.type === BpmModelType.BPMN ? data : null,
  50. simpleModel: modelData.value.type === BpmModelType.BPMN ? null : data
  51. }
  52. // 使用emit更新父组件的数据
  53. await nextTick()
  54. //更新表单的模型数据部分
  55. modelData.value = newModelData
  56. }
  57. }
  58. /** 是否显示设计器 */
  59. const showDesigner = computed(() => {
  60. return Boolean(modelData.value?.key && modelData.value?.name)
  61. })
  62. defineExpose({
  63. validate
  64. })
  65. </script>