StartEventNodePropertyPanel.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <div>
  3. <!-- 开始节点 -->
  4. <el-collapse v-if="localFormData.type=='bpmn:StartEvent'" v-model="activeNames" accordion>
  5. <el-collapse-item name="1">
  6. <template slot="title">
  7. <div class="title">
  8. <i class="header-icon el-icon-setting"></i>
  9. <span>基本设置</span>
  10. </div>
  11. </template>
  12. <div>
  13. <el-form label-position="right" label-width="70px">
  14. <el-form-item label="节点类型">
  15. <el-input v-model="localFormData.type" disabled></el-input>
  16. </el-form-item>
  17. <el-form-item label="ID">
  18. <el-input v-model="localFormData.id" @input="updateId"></el-input>
  19. </el-form-item>
  20. <el-form-item label="名称">
  21. <el-input v-model="localFormData.name " @input="updateName"></el-input>
  22. </el-form-item>
  23. </el-form>
  24. </div>
  25. </el-collapse-item>
  26. <el-collapse-item name="2">
  27. <template slot="title">
  28. <div class="title">
  29. <i class="header-icon el-icon-setting"></i>
  30. <span>执行监听</span>
  31. </div>
  32. </template>
  33. <div>
  34. <div style="margin: 10px 3%;float: right">
  35. <el-button size="mini" plain @click="showEventDialogMethod">添加</el-button>
  36. </div>
  37. <el-table
  38. border :data="listenerTable"
  39. style="width: 93%;margin: 0 auto">
  40. <el-table-column align="center" prop="event"
  41. label="事件">
  42. </el-table-column>
  43. <el-table-column align="center" prop="type" :show-overflow-tooltip="true"
  44. label="类型">
  45. </el-table-column>
  46. <el-table-column align="center" prop="class" :show-overflow-tooltip="true"
  47. label="实现">
  48. </el-table-column>
  49. <el-table-column align="center"
  50. label="操作">
  51. <template slot-scope="scope">
  52. <div>
  53. <i class="el-icon-delete" @click="deleteEvent(scope.$index)"></i>
  54. </div>
  55. </template>
  56. </el-table-column>
  57. </el-table>
  58. </div>
  59. </el-collapse-item>
  60. </el-collapse>
  61. <EventListenerDialog @commitEventForm="commitEventForm"
  62. :dialogFormVisibleBool="showEventDialog"
  63. :formData="eventFormData" :nodeElement="nodeElement" :modeler="modeler" :listenerTable="listenerTable"></EventListenerDialog>
  64. </div>
  65. </template>
  66. <script>
  67. import EventListenerDialog from "./dialog/EventListenerDialog"
  68. import GlobalEventListenerDialog from "./dialog/GlobalEventListenerDialog";
  69. export default {
  70. name: "NodePropertyPanel",
  71. data() {
  72. return {
  73. activeNames: ['1'],
  74. input3: 1,
  75. listenerTable: [],
  76. showEventDialog: false,
  77. eventFormData: {},
  78. bpmnData: {
  79. assignees: [{
  80. value: "${assignee}",
  81. label: "表达式"
  82. }, {
  83. value: "1001",
  84. label: "张三"
  85. }, {
  86. value: "1002",
  87. label: "李四"
  88. }, {
  89. value: "1003",
  90. label: "王五"
  91. }],
  92. candidateUsers:[{
  93. value: "1001",
  94. label: "张三"
  95. }, {
  96. value: "1002",
  97. label: "李四"
  98. }, {
  99. value: "1003",
  100. label: "王五"
  101. }],
  102. roles: [
  103. {
  104. value: "manager",
  105. label: "经理"
  106. },
  107. {
  108. value: "personnel",
  109. label: "人事"
  110. },
  111. {
  112. value: "charge",
  113. label: "主管"
  114. }
  115. ]
  116. }
  117. }
  118. },
  119. components: {
  120. EventListenerDialog
  121. },
  122. props: {
  123. modeler: {
  124. type: Object,
  125. required: true
  126. },
  127. nodeElement: {
  128. type: Object,
  129. required: true
  130. },
  131. formData:{
  132. type: Object,
  133. required: true
  134. }
  135. },
  136. computed:{
  137. localFormData:{
  138. get(){
  139. return this.formData
  140. }
  141. }
  142. },
  143. watch:{
  144. nodeElement:{
  145. handler(){
  146. if(this.nodeElement.type==="bpmn:StartEvent"){
  147. this.updateName("开始");
  148. }
  149. if(this.nodeElement.type==="bpmn:EndEvent"){
  150. this.updateName("结束");
  151. }
  152. }
  153. }
  154. },
  155. mounted() {
  156. const that = this
  157. if (this.nodeElement.businessObject
  158. && this.nodeElement.businessObject.extensionElements
  159. && this.nodeElement.businessObject.extensionElements.values) {
  160. // 根据xml 组合当前节点的监听数据
  161. that.listenerTable = this.nodeElement.businessObject.extensionElements.values.filter(
  162. (item) => {
  163. if (item.$type === 'activiti:ExecutionListener') {
  164. item.type = Object.keys(item)[1]
  165. item.class = item[Object.keys(item)[1]]
  166. return true;
  167. }
  168. }
  169. )
  170. }
  171. },
  172. methods: {
  173. updateProperties(properties){
  174. console.log(this.nodeElement)
  175. console.log(properties)
  176. this.modeler.get("modeling").updateProperties(this.nodeElement, properties);
  177. },
  178. updateId(name) {
  179. this.updateProperties({id: name});
  180. },
  181. updateName(name) {
  182. this.updateProperties({name: name});
  183. },
  184. changeUserType() {
  185. },
  186. updateSequenceFlow(val){
  187. let newCondition = this.modeler.get("moddle").create('bpmn:FormalExpression', {
  188. body: val
  189. });
  190. this.updateProperties({conditionExpression:newCondition});
  191. },
  192. addUser(properties){
  193. this.updateProperties(properties);
  194. Object.assign(properties, {
  195. userType: Object.keys(properties)[0]
  196. });
  197. console.log(properties)
  198. this.$emit('modifyFormData',properties);
  199. },
  200. showEventDialogMethod(){
  201. this.showEventDialog = true;
  202. this.eventFormData= {
  203. event:"start",
  204. type:"class"
  205. }
  206. },
  207. deleteEvent(index){
  208. const data = this.listenerTable[index]
  209. if (this.nodeElement.businessObject
  210. && this.nodeElement.businessObject.extensionElements
  211. && this.nodeElement.businessObject.extensionElements.values) {
  212. // 排除全局监听类型 并且class为删除的class的数据。
  213. const filterArr = this.nodeElement.businessObject.extensionElements.values.filter(
  214. (item) => !(item.$type === 'activiti:ExecutionListener' && item.event === data.event && data.class === item[data.type])
  215. )
  216. // 刷新数据
  217. let extensionElements = this.modeler.get("bpmnFactory").create("bpmn:ExtensionElements", {values: filterArr});
  218. this.modeler.get("modeling").updateProperties(this.nodeElement, {extensionElements});
  219. }
  220. this.listenerTable.splice(index, 1);
  221. },
  222. commitEventForm(from){
  223. this.showEventDialog = false
  224. if (from != null) {
  225. this.listenerTable.push(from)
  226. }
  227. }
  228. }
  229. }
  230. </script>
  231. <style scoped>
  232. .title span{
  233. font-weight: bold;
  234. margin-left: 5px;
  235. }
  236. </style>