conditionPanel.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <div>
  3. <el-form label-width="100px" size="small" @submit.native.prevent>
  4. <el-form-item>
  5. <template slot="label">
  6. <span>
  7. 流转类型
  8. <el-tooltip placement="top">
  9. <template slot="content">
  10. <div>
  11. 普通流转路径:流程执行过程中,一个元素被访问后,会沿着其所有出口顺序流继续执行。
  12. <br />默认流转路径:只有当没有其他顺序流可以选择时,才会选择默认顺序流作为活动的出口顺序流。流程会忽略默认顺序流上的条件。
  13. <br />条件流转路径:是计算其每个出口顺序流上的条件。当条件计算为true时,选择该出口顺序流。如果该方法选择了多条顺序流,则会生成多个执行,流程会以并行方式继续。
  14. </div>
  15. </template>
  16. <i class="el-icon-question" />
  17. </el-tooltip>
  18. </span>
  19. </template>
  20. <el-select v-model="bpmnFormData.type" @change="updateFlowType">
  21. <el-option label="普通流转路径" value="normal" />
  22. <el-option label="默认流转路径" value="default" />
  23. <el-option label="条件流转路径" value="condition" />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="条件格式" v-if="bpmnFormData.type === 'condition'" key="condition">
  27. <el-select v-model="bpmnFormData.conditionType">
  28. <el-option label="表达式" value="expression" />
  29. <el-option label="脚本" value="script" />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="表达式" v-if="bpmnFormData.conditionType && bpmnFormData.conditionType === 'expression'" key="express">
  33. <el-input v-model="bpmnFormData.body" clearable @change="updateFlowCondition" />
  34. </el-form-item>
  35. <template v-if="bpmnFormData.conditionType && bpmnFormData.conditionType === 'script'">
  36. <el-form-item label="脚本语言" key="language">
  37. <el-input v-model="bpmnFormData.language" clearable @change="updateFlowCondition" />
  38. </el-form-item>
  39. <el-form-item label="脚本类型" key="scriptType">
  40. <el-select v-model="bpmnFormData.scriptType">
  41. <el-option label="内联脚本" value="inlineScript" />
  42. <el-option label="外部脚本" value="externalScript" />
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="脚本" v-if="bpmnFormData.scriptType === 'inlineScript'" key="body">
  46. <el-input v-model="bpmnFormData.body" type="textarea" clearable @change="updateFlowCondition" />
  47. </el-form-item>
  48. <el-form-item label="资源地址" v-if="bpmnFormData.scriptType === 'externalScript'" key="resource">
  49. <el-input v-model="bpmnFormData.resource" clearable @change="updateFlowCondition" />
  50. </el-form-item>
  51. </template>
  52. </el-form>
  53. </div>
  54. </template>
  55. <script>
  56. import {StrUtil} from "@/utils/StrUtil";
  57. export default {
  58. name: "BpmnModel",
  59. /** 组件传值 */
  60. props : {
  61. id: {
  62. type: String,
  63. required: true
  64. },
  65. },
  66. data() {
  67. return {
  68. bpmnElementSource: {},
  69. bpmnElementSourceRef: {},
  70. bpmnFormData: {}
  71. }
  72. },
  73. /** 传值监听 */
  74. watch: {
  75. id: {
  76. handler(newVal) {
  77. if (StrUtil.isNotBlank(newVal)) {
  78. this.resetFlowCondition();
  79. }
  80. },
  81. immediate: true, // 立即生效
  82. },
  83. },
  84. created() {
  85. },
  86. methods: {
  87. // 方法区
  88. resetFlowCondition() {
  89. this.bpmnFormData = {
  90. body: null
  91. };
  92. this.bpmnElementSource = this.modelerStore.element.source;
  93. this.bpmnElementSourceRef = this.modelerStore.element.businessObject.sourceRef;
  94. if (this.bpmnElementSourceRef && this.bpmnElementSourceRef.default && this.bpmnElementSourceRef.default.id === this.modelerStore.element.id) {
  95. // 默认
  96. this.$set(this.bpmnFormData, "type", "default");
  97. } else if (!this.modelerStore.element.businessObject.conditionExpression) {
  98. // 普通
  99. this.$set(this.bpmnFormData, "type", "normal");
  100. } else {
  101. // 带条件
  102. const conditionExpression = this.modelerStore.element.businessObject.conditionExpression;
  103. this.bpmnFormData = {...conditionExpression, type: "condition"};
  104. // resource 可直接标识 是否是外部资源脚本
  105. if (this.bpmnFormData.resource) {
  106. this.$set(this.bpmnFormData, "conditionType", "script");
  107. this.$set(this.bpmnFormData, "scriptType", "externalScript");
  108. return;
  109. }
  110. if (conditionExpression.language) {
  111. this.$set(this.bpmnFormData, "conditionType", "script");
  112. this.$set(this.bpmnFormData, "scriptType", "inlineScript");
  113. return;
  114. }
  115. this.$set(this.bpmnFormData, "conditionType", "expression");
  116. }
  117. },
  118. updateFlowType(flowType) {
  119. // 正常条件类
  120. if (flowType === "condition") {
  121. const flowConditionRef = this.modelerStore.moddle.create("bpmn:FormalExpression");
  122. this.modelerStore.modeling.updateProperties(this.modelerStore.element, {
  123. conditionExpression: flowConditionRef
  124. });
  125. return;
  126. }
  127. // 默认路径
  128. if (flowType === "default") {
  129. this.modelerStore.modeling.updateProperties(this.modelerStore.element, {
  130. conditionExpression: null
  131. });
  132. this.modelerStore.modeling.updateProperties(this.bpmnElementSource, {
  133. default: this.modelerStore.element
  134. });
  135. // 清空条件格式
  136. this.bpmnFormData.conditionType = null;
  137. return;
  138. }
  139. // 清空条件格式
  140. this.bpmnFormData.conditionType = null;
  141. // 正常路径,如果来源节点的默认路径是当前连线时,清除父元素的默认路径配置
  142. if (this.bpmnElementSourceRef.default && this.bpmnElementSourceRef.default.id === this.modelerStore.element.id) {
  143. this.modelerStore.modeling.updateProperties(this.bpmnElementSource, {
  144. default: null
  145. });
  146. }
  147. this.modelerStore.modeling.updateProperties(this.modelerStore.element, {
  148. conditionExpression: null
  149. });
  150. },
  151. updateFlowCondition() {
  152. let {conditionType, scriptType, body, resource, language} = this.bpmnFormData;
  153. let condition;
  154. if (conditionType === "expression") {
  155. condition = this.modelerStore.moddle.create("bpmn:FormalExpression", {body});
  156. } else {
  157. if (scriptType === "inlineScript") {
  158. condition = this.modelerStore.moddle.create("bpmn:FormalExpression", {body, language});
  159. this.$set(this.bpmnFormData, "resource", "");
  160. } else {
  161. this.$set(this.bpmnFormData, "body", "");
  162. condition = this.modelerStore.moddle.create("bpmn:FormalExpression", {resource, language});
  163. }
  164. }
  165. this.modelerStore.modeling.updateProperties(this.modelerStore.element, {conditionExpression: condition});
  166. }
  167. }
  168. }
  169. </script>