SequenceFlowPanel.vue 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <div>
  3. <el-collapse v-model="currentCollapseItem">
  4. <el-collapse-item name="1">
  5. <template #title>
  6. <div class="collapse__title">
  7. <el-icon>
  8. <InfoFilled />
  9. </el-icon>
  10. 常规
  11. </div>
  12. </template>
  13. <div>
  14. <el-form ref="formRef" :model="formData" :rules="formRules" label-width="90px">
  15. <el-form-item prop="id" label="节点 ID">
  16. <el-input v-model="formData.id" @change="idChange"> </el-input>
  17. </el-form-item>
  18. <el-form-item prop="name" label="节点名称">
  19. <el-input v-model="formData.name" @change="nameChange"> </el-input>
  20. </el-form-item>
  21. <el-form-item prop="conditionExpression" label="跳转条件">
  22. <el-input v-model="formData.conditionExpressionValue" @change="conditionExpressionChange"> </el-input>
  23. </el-form-item>
  24. <el-form-item prop="skipExpression" label="跳过表达式">
  25. <el-input v-model="formData.skipExpression" @change="skipExpressionChange"> </el-input>
  26. </el-form-item>
  27. </el-form>
  28. </div>
  29. </el-collapse-item>
  30. <el-collapse-item name="2">
  31. <template #title>
  32. <div class="collapse__title">
  33. <el-icon>
  34. <BellFilled />
  35. </el-icon>
  36. 执行监听器
  37. </div>
  38. </template>
  39. <div>
  40. <ExecutionListener :element="element"></ExecutionListener>
  41. </div>
  42. </el-collapse-item>
  43. </el-collapse>
  44. </div>
  45. </template>
  46. <script setup lang="ts">
  47. import useParseElement from '../hooks/useParseElement';
  48. import useModelerStore from '@/store/modules/modeler';
  49. import usePanel from '../hooks/usePanel';
  50. import ExecutionListener from './property/ExecutionListener.vue';
  51. import type { Modeler, ModdleElement } from 'bpmn';
  52. import type { SequenceFlowPanel } from 'bpmnDesign';
  53. interface PropType {
  54. element: ModdleElement;
  55. }
  56. const props = withDefaults(defineProps<PropType>(), {});
  57. const { nameChange, idChange, updateProperties } = usePanel({
  58. element: toRaw(props.element)
  59. });
  60. const { parseData } = useParseElement({
  61. element: toRaw(props.element)
  62. });
  63. const moddle = useModelerStore().getModdle();
  64. const currentCollapseItem = ref(['1', '2']);
  65. const formData = ref(parseData<SequenceFlowPanel>());
  66. const formRules = ref<ElFormRules>({
  67. processCategory: [{ required: true, message: '请选择', trigger: 'blur' }],
  68. id: [{ required: true, message: '请输入', trigger: 'blur' }],
  69. name: [{ required: true, message: '请输入', trigger: 'blur' }]
  70. });
  71. const conditionExpressionChange = (val: string) => {
  72. if (val) {
  73. const newCondition = moddle.create('bpmn:FormalExpression', { body: val });
  74. updateProperties({ conditionExpression: newCondition });
  75. } else {
  76. updateProperties({ conditionExpression: null });
  77. }
  78. };
  79. const skipExpressionChange = (val: string) => {
  80. updateProperties({ 'flowable:skipExpression': val });
  81. };
  82. onBeforeMount(() => {
  83. if (formData.value.conditionExpression) {
  84. formData.value.conditionExpressionValue = formData.value.conditionExpression.body;
  85. }
  86. });
  87. </script>
  88. <style lang="scss" scoped></style>