ProcessPropertyPanel.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <template>
  2. <div>
  3. <el-collapse v-model="activeNames" accordion>
  4. <el-collapse-item name="1">
  5. <template slot="title">
  6. <div class="title">
  7. <i class="header-icon el-icon-setting"></i>
  8. <span>基本设置</span>
  9. </div>
  10. </template>
  11. <div>
  12. <el-form label-position="right" label-width="70px">
  13. <el-form-item label="流程ID">
  14. <el-input v-model="localProcessData.key" @input="updateId"></el-input>
  15. </el-form-item>
  16. <el-form-item label="流程名称">
  17. <el-input v-model="localProcessData.name" @input="updateName"></el-input>
  18. </el-form-item>
  19. <el-form-item label="流程描述">
  20. <el-input v-model="localProcessData.description" @input="updateDesc"></el-input>
  21. </el-form-item>
  22. </el-form>
  23. </div>
  24. </el-collapse-item>
  25. <el-collapse-item name="2">
  26. <template slot="title">
  27. <div class="title">
  28. <i class="header-icon el-icon-setting"></i>
  29. <span>执行监听</span>
  30. </div>
  31. </template>
  32. <div>
  33. <div style="margin: 10px 3%;float: right">
  34. <el-button size="mini" plain @click="showEventDialogMethod">添加</el-button>
  35. </div>
  36. <el-table
  37. border :data="listenerTable"
  38. style="width: 93%;margin: 0 auto">
  39. <el-table-column align="center" prop="event"
  40. label="事件">
  41. </el-table-column>
  42. <el-table-column align="center" prop="type" :show-overflow-tooltip="true"
  43. label="类型">
  44. </el-table-column>
  45. <el-table-column align="center" prop="class" :show-overflow-tooltip="true"
  46. label="实现">
  47. </el-table-column>
  48. <el-table-column align="center"
  49. label="操作">
  50. <template slot-scope="scope">
  51. <div>
  52. <i class="el-icon-delete" @click="deleteEvent(scope.$index)"></i>
  53. </div>
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. </div>
  58. </el-collapse-item>
  59. <el-collapse-item name="3">
  60. <template slot="title">
  61. <div class="title">
  62. <i class="header-icon el-icon-setting"></i>
  63. <span>全局监听</span>
  64. </div>
  65. </template>
  66. <div>
  67. <div style="margin: 10px 3%;float: right">
  68. <el-button size="mini" plain @click="showGlobalDialogMethod">添加</el-button>
  69. </div>
  70. <el-table
  71. border :data="globalFormTable"
  72. style="width: 93%;margin: 0 auto">
  73. <el-table-column align="center" prop="class" :show-overflow-tooltip="true"
  74. label="值">
  75. </el-table-column>
  76. <el-table-column align="center"
  77. label="操作">
  78. <template slot-scope="scope">
  79. <div>
  80. <i class="el-icon-delete" @click="deleteGlobalEvent(scope.$index)"></i>
  81. </div>
  82. </template>
  83. </el-table-column>
  84. </el-table>
  85. </div>
  86. </el-collapse-item>
  87. </el-collapse>
  88. <GlobalEventListenerDialog @commitGlobalForm="commitGlobalForm"
  89. :dialogFormVisibleBool="showGlobalDialog"
  90. :formData="globalFormData" :element="element" :modeler="modeler" :globalFormTable="globalFormTable"></GlobalEventListenerDialog>
  91. <EventListenerDialog @commitEventForm="commitEventForm"
  92. :dialogFormVisibleBool="showEventDialog"
  93. :formData="eventFormData" :nodeElement="element" :modeler="modeler" :listenerTable="listenerTable"></EventListenerDialog>
  94. </div>
  95. </template>
  96. <script>
  97. import GlobalEventListenerDialog from "./dialog/GlobalEventListenerDialog"
  98. import EventListenerDialog from "./dialog/EventListenerDialog"
  99. export default {
  100. name: "ProcessProperty",
  101. data() {
  102. return {
  103. activeNames: ['1'],
  104. showGlobalDialog: false,
  105. showEventDialog: false,
  106. listenerTable: [
  107. ],
  108. globalFormTable: [
  109. ],
  110. globalFormData: {
  111. type:"start"
  112. },
  113. eventFormData: {
  114. event:"class",
  115. type:"start"
  116. },
  117. localProcessData:this.processData
  118. }
  119. },
  120. components: {
  121. GlobalEventListenerDialog,EventListenerDialog
  122. },
  123. props: {
  124. processData: {
  125. type: Object,
  126. required: true
  127. },
  128. modeler: {
  129. type: Object,
  130. required: true
  131. },
  132. element: {
  133. type: Object,
  134. required: true
  135. }
  136. },
  137. mounted() {
  138. var that = this
  139. if (this.element.businessObject
  140. && this.element.businessObject.extensionElements
  141. && this.element.businessObject.extensionElements.values) {
  142. that.globalFormTable = this.element.businessObject.extensionElements.values.filter(
  143. (item) => item.$type === 'activiti:EventListener'
  144. )
  145. that.listenerTable = this.element.businessObject.extensionElements.values.filter(
  146. (item) => {
  147. if (item.$type === 'activiti:ExecutionListener') {
  148. item.type = Object.keys(item)[1]
  149. item.class = item[Object.keys(item)[1]]
  150. return true;
  151. }
  152. }
  153. )
  154. }
  155. },
  156. methods: {
  157. deleteGlobalEvent(index){
  158. const data = this.globalFormTable[index]
  159. if (this.element.businessObject
  160. && this.element.businessObject.extensionElements
  161. && this.element.businessObject.extensionElements.values) {
  162. // 排除全局监听类型 并且class为删除的class的数据。
  163. const filterArr = this.element.businessObject.extensionElements.values.filter(
  164. (item) => !(item.$type === 'activiti:EventListener' && item.class === data.class)
  165. )
  166. // 刷新数据
  167. let extensionElements = this.modeler.get("bpmnFactory").create("bpmn:ExtensionElements", {values: filterArr});
  168. this.modeler.get("modeling").updateProperties(this.element, {extensionElements});
  169. }
  170. this.globalFormTable.splice(index, 1);
  171. },
  172. deleteEvent(index){
  173. const data = this.listenerTable[index]
  174. if (this.element.businessObject
  175. && this.element.businessObject.extensionElements
  176. && this.element.businessObject.extensionElements.values) {
  177. // 排除全局监听类型 并且class为删除的class的数据。
  178. const filterArr = this.element.businessObject.extensionElements.values.filter(
  179. (item) => !(item.$type === 'activiti:ExecutionListener' && item.event === data.event && data.class === item[data.type])
  180. )
  181. // 刷新数据
  182. let extensionElements = this.modeler.get("bpmnFactory").create("bpmn:ExtensionElements", {values: filterArr});
  183. this.modeler.get("modeling").updateProperties(this.element, {extensionElements});
  184. }
  185. this.listenerTable.splice(index, 1);
  186. },
  187. showGlobalDialogMethod(){
  188. this.showGlobalDialog = true;
  189. this.globalFormData={
  190. type:"class"
  191. }
  192. },
  193. showEventDialogMethod(){
  194. this.showEventDialog = true;
  195. this.eventFormData= {
  196. event:"start",
  197. type:"class"
  198. }
  199. },
  200. updateId(name) {
  201. this.modeler.get("modeling").updateProperties(this.element, {id: name});
  202. },
  203. updateName(name) {
  204. this.modeler.get("modeling").updateProperties(this.element, {name: name});
  205. },
  206. updateDesc(name) {
  207. let doc = this.modeler.get("bpmnFactory").create("bpmn:Documentation", {text: name});
  208. this.modeler.get("modeling").updateProperties(this.element, {documentation: [doc]});
  209. console.log( this.modeler.get("modeling"))
  210. },
  211. commitEventForm(from){
  212. this.showEventDialog = false
  213. if (from != null) {
  214. this.listenerTable.push(from)
  215. }
  216. },
  217. commitGlobalForm(from){
  218. this.showGlobalDialog = false
  219. if (from != null) {
  220. this.globalFormTable.push(from)
  221. }
  222. }
  223. }
  224. }
  225. </script>
  226. <style scoped>
  227. .bpmnclass .title span{
  228. font-weight: bold;
  229. margin-left: 5px;
  230. }
  231. .el-tooltip__popper{
  232. font-size: 14px;
  233. max-width:50%;
  234. backgroud: #68859a !important; /*背景色  !important优先级*/
  235. }
  236. </style>