index.jsp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/context/mytags.jsp"%>
  3. <%@page import="java.util.ResourceBundle"%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <t:base type="designer,tools" cssTheme="default"></t:base>
  8. <script type="text/javascript">
  9. $(function() {
  10. try {
  11. _task_obj = $('#task');
  12. _task_context_menu = $('#task-context-menu').menu({});
  13. $('.easyui-linkbutton').draggable({
  14. proxy : function(source) {
  15. var n = $('<div class="draggable-model-proxy"></div>');
  16. n.html($(source).html()).appendTo('body');
  17. return n;
  18. },
  19. deltaX : 0,
  20. deltaY : 0,
  21. revert : true,
  22. cursor : 'auto',
  23. onStartDrag : function() {
  24. $(this).draggable('options').cursor = 'not-allowed';
  25. },
  26. onStopDrag : function() {
  27. $(this).draggable('options').cursor = 'auto';
  28. }
  29. });
  30. $('#paintarea').droppable({
  31. accept : '.easyui-linkbutton',
  32. onDragEnter : function(e, source) {
  33. $(source).draggable('options').cursor = 'auto';
  34. },
  35. onDragLeave : function(e, source) {
  36. $(source).draggable('options').cursor = 'not-allowed';
  37. },
  38. onDrop : function(e, source) {
  39. $(this).removeClass('over');
  40. var wfModel = $(source).attr('wfModel');
  41. var shape = $(source).attr('shape');
  42. if (wfModel) {
  43. var x = $(source).draggable('proxy').offset().left;
  44. var y = $(source).draggable('proxy').offset().top;
  45. var xOffset = workflow.getAbsoluteX();
  46. var yOffset = workflow.getAbsoluteY();
  47. var scrollLeft = workflow.getScrollLeft();
  48. var scrollTop = workflow.getScrollTop();
  49. addModel(wfModel, x - xOffset + scrollLeft, y - yOffset + scrollTop, shape);
  50. }
  51. }
  52. });
  53. //$('#paintarea').bind('contextmenu',function(e){
  54. //alert(e.target.tagName);
  55. //});
  56. } catch (e) {
  57. }
  58. });
  59. //-->
  60. </script>
  61. </head>
  62. <body id="designer" class="easyui-layout">
  63. <div region="west" split="true" iconCls="palette-icon" title="<t:mutiLang langKey="bpm.designer.element"/>" style="width: 110px;">
  64. <div class="easyui-accordion" fit="true" border="false">
  65. <div id="event" title="<t:mutiLang langKey="bpm.designer.event"/>" iconCls="palette-menu-icon" class="palette-menu">
  66. <a href="#" class="easyui-linkbutton" plain="true" iconCls="start-event-icon" wfModel="Start"><t:mutiLang langKey="bpm.designer.element.begin"/></a>
  67. <br>
  68. <a href="#" class="easyui-linkbutton" plain="true" iconCls="end-event-icon" wfModel="End"><t:mutiLang langKey="bpm.designer.element.end"/></a>
  69. <br>
  70. </div>
  71. <div id="task" title="<t:mutiLang langKey="bpm.designer.task"/>" iconCls="palette-menu-icon" selected="true" class="palette-menu">
  72. <a href="#" class="easyui-linkbutton" plain="true" iconCls="user-task-icon" wfModel="UserTask"><t:mutiLang langKey="bpm.designer.element.usertask"/></a>
  73. <br>
  74. <a href="#" class="easyui-linkbutton" plain="true" iconCls="manual-task-icon" wfModel="ManualTask"><t:mutiLang langKey="bpm.designer.element.manualtask"/></a>
  75. <br>
  76. <a href="#" class="easyui-linkbutton" plain="true" iconCls="service-task-icon" wfModel="ServiceTask"><t:mutiLang langKey="bpm.designer.element.servicetask"/></a>
  77. <br>
  78. <a href="#" class="easyui-linkbutton" plain="true" iconCls="script-task-icon" wfModel="ScriptTask"><t:mutiLang langKey="bpm.designer.element.scripttask"/></a>
  79. <br>
  80. <a href="#" class="easyui-linkbutton" plain="true" iconCls="mail-task-icon" wfModel="MailTask"><t:mutiLang langKey="bpm.designer.element.mailtask"/></a>
  81. <br>
  82. <a href="#" class="easyui-linkbutton" plain="true" iconCls="receive-task-icon" wfModel="ReceiveTask"><t:mutiLang langKey="bpm.designer.element.receivetask"/></a>
  83. <br>
  84. <a href="#" class="easyui-linkbutton" plain="true" iconCls="business-rule-task-icon" wfModel="BusinessRuleTask"><t:mutiLang langKey="bpm.designer.element.businessrule"/></a>
  85. <br>
  86. <%--
  87. author:zhangdaihao date:20140823 for:用不上暂时屏蔽掉,下面原来叫做调用活动,更名
  88. <a href="#" class="easyui-linkbutton" plain="true" iconCls="subprocess-icon">子流程</a>
  89. <a href="#" class="easyui-linkbutton" plain="true" iconCls="callactivity-icon" wfModel="CallActivity">包容</a>
  90. <br>
  91. --%>
  92. <a href="#" class="easyui-linkbutton" plain="true" iconCls="subprocess-icon" wfModel="CallActivity"><t:mutiLang langKey="bpm.designer.element.subprocess"/></a>
  93. <br>
  94. </div>
  95. <div id="gateway" title="<t:mutiLang langKey="bpm.designer.gateway"/>" iconCls="palette-menu-icon" class="palette-menu">
  96. <a href="#" class="easyui-linkbutton" plain="true" iconCls="parallel-gateway-icon" wfModel="ParallelGateway"><t:mutiLang langKey="bpm.designer.element.synchro"/></a>
  97. <br>
  98. <a href="#" class="easyui-linkbutton" plain="true" iconCls="exclusive-gateway-icon" wfModel="ExclusiveGateway"><t:mutiLang langKey="bpm.designer.element.branch"/></a>
  99. <br>
  100. </div>
  101. <div id="boundary-event" title="<t:mutiLang langKey="bpm.designer.boundaryevent"/>" iconCls="palette-menu-icon" class="palette-menu">
  102. <a href="#" class="easyui-linkbutton" plain="true" iconCls="timer-boundary-event-icon" wfModel="TimerBoundary"><t:mutiLang langKey="bpm.designer.element.time.boundary"/></a>
  103. <br>
  104. <a href="#" class="easyui-linkbutton" plain="true" iconCls="error-boundary-event-icon" wfModel="ErrorBoundary"><t:mutiLang langKey="bpm.designer.element.error.boundary"/></a>
  105. <br>
  106. </div>
  107. </div>
  108. </div>
  109. <div id="process-panel" region="center" style="padding: 1px" split="true" iconCls="process-icon" title="<t:mutiLang langKey="bpm.designer.process"/>">
  110. <div id="process-definition-tab">
  111. <div id="designer-area" title="<t:mutiLang langKey="bpm.designer.design"/>" style="POSITION: absolute; width: 100%; height: 100%; padding: 0; border: none; overflow: auto;">
  112. <div id="paintarea" style="POSITION: absolute; WIDTH: 2000px; HEIGHT: 2000px"></div>
  113. </div>
  114. <div id="xml-area" title="<t:mutiLang langKey="bpm.designer.sourcecode"/>" style="width: 100%; height: 100%; overflow: hidden; overflow-x: hidden; overflow-y: hidden;">
  115. <textarea id="descriptorarea" rows="38" style="width: 100%; height: 100%; padding: 0; border: none; font-size: 12px" readonly="readonly"></textarea>
  116. </div>
  117. </div>
  118. </div>
  119. <!-- toolbar -->
  120. <!-- update-begin--Author:chenxu Date:20130408 for:修改流程时,流程类型不能显示 -->
  121. <div id="toolbar-panel" region="north" border="false" style="height: 55px; background: #d8e4fe;" title="<t:mutiLang langKey="bpm.designer.toolbar"/>">
  122. <input type="hidden" name="processId" id="processId" value="${processid}">
  123. <img width="20" height="18" title="<t:mutiLang langKey="bpm.designer.toolbar.createprocess"/>" src="plug-in/designer/img/save.png" onclick="saveProcessDef()" class="buttonStyle" />
  124. <img width="20" height="18" title="<t:mutiLang langKey="bpm.designer.toolbar.back"/>" src="plug-in/designer/img/back.png" onclick="undo()" class="buttonStyle" />
  125. <img width="20" height="18" title="<t:mutiLang langKey="bpm.designer.toolbar.next"/>" src="plug-in/designer/img/next.png" onclick="redo()" class="buttonStyle" />
  126. <img width="20" height="18" title="<t:mutiLang langKey="bpm.designer.toolbar.export"/>" src="plug-in/designer/img/printer.png" onclick="exportProcessDef(this)" class="buttonStyle" />
  127. </div>
  128. <!-- update-begin--Author:scott Date:20170703 for:重构变更control请求地址 -->
  129. <div region="east" id="properties-panel" href="designerController.do?processProperties&turn=processProperties&processId=${processid }" split="true" iconCls="properties-icon" title="<t:mutiLang langKey="bpm.designer.flow.properties"/>" style="padding:1px;width: 280px;">
  130. <!-- update-end--Author:scott Date:20170703 for:重构变更control请求地址 -->
  131. </div>
  132. <!-- update-end--Author:chenxu Date:20130408 for:修改流程时,流程类型不能显示 -->
  133. <!-- task context menu -->
  134. <div id="task-context-menu" class="easyui-menu" style="width: 120px;">
  135. <div id="properties-task-context-menu" iconCls="properties-icon">
  136. 属性
  137. </div>
  138. <div id="delete-task-context-menu" iconCls="icon-remove">
  139. 删除
  140. </div>
  141. </div>
  142. <!-- form configuration window -->
  143. <div id="form-win" title="表单配置" style="width: 720px; height: 300px;">
  144. </div>
  145. <!-- form configuration window -->
  146. <div id="variable-win" title="变量配置" style="width: 720px; height: 300px;">
  147. </div>
  148. <!-- listener configuration window -->
  149. <div id="listener-win" title="监听配置" style="width: 720px; height: 300px;">
  150. </div>
  151. <!-- candidate configuration window -->
  152. <div id="task-candidate-win" title="任务配置" style="width: 720px; height: 300px;">
  153. </div>
  154. <script type="text/javascript">
  155. $('#process-definition-tab').tabs({
  156. fit : true,
  157. onSelect : function(title) {
  158. if (title == '设计') {
  159. } else if (title == '源码' || title == 'sourcecode') {
  160. $('#descriptorarea').val(workflow.toXML());
  161. }
  162. }
  163. });
  164. </script>
  165. <script type="text/javascript">
  166. createCanvas('${processid}',false);
  167. //update-begin--Author:zhoujf Date:20170609 for:TASK #1840 【功能改进】默认创建流程,都有默认结束监听--------------------
  168. var process;
  169. getDefaultListener('${processid}');
  170. function getDefaultListener(processId){
  171. if(processId!=''&&processId!='0'){
  172. return;
  173. }
  174. $.ajax({
  175. url : "processController.do?getDefaultListener",
  176. type : 'POST',
  177. data : {
  178. processId : processId
  179. },
  180. dataType : 'json',
  181. error : function(data) {
  182. tip(data.msg);
  183. },
  184. success : function(data) {
  185. var win = frameElement.api.opener;
  186. if (data.success) {
  187. var listenerid = data.obj.id;
  188. var listenereven = data.obj.listenereven;
  189. var listenertype = data.obj.listenertype;
  190. var listenervalue = data.obj.listenervalue;
  191. var listenername = data.obj.listenername;
  192. /* alert("listenerid:"+listenerid
  193. +",listenereven:"+listenereven
  194. +",listenertype:"+listenertype
  195. +",listenervalue"+listenervalue
  196. +",listenername"+listenername); */
  197. if ($('#listenername').length >= 1) {
  198. $('#listenername').val(listenername);
  199. $('#listenername').blur();
  200. }
  201. if ($("input[name='listenername']").length >= 1) {
  202. $("input[name='listenername']").val(listenername);
  203. $("input[name='listenername']").blur();
  204. }
  205. if ($('#listenereven').length >= 1) {
  206. $('#listenereven').val(listenereven);
  207. $('#listenereven').blur();
  208. }
  209. if ($("input[name='listenereven']").length >= 1) {
  210. $("input[name='listenereven']").val(listenereven);
  211. $("input[name='listenereven']").blur();
  212. }
  213. if ($('#listenertype').length >= 1) {
  214. $('#listenertype').val(listenertype);
  215. $('#listenertype').blur();
  216. }
  217. if ($("input[name='listenertype']").length >= 1) {
  218. $("input[name='listenertype']").val(listenertype);
  219. $("input[name='listenertype']").blur();
  220. }
  221. if ($('#listenervalue').length >= 1) {
  222. $('#listenervalue').val(listenervalue);
  223. $('#listenervalue').blur();
  224. }
  225. if ($("input[name='listenervalue']").length >= 1) {
  226. $("input[name='listenervalue']").val(listenervalue);
  227. $("input[name='listenervalue']").blur();
  228. }
  229. if (listenerid !== undefined && listenerid != "") {
  230. $('#listenerid').val(listenerid);
  231. }
  232. saveProcessListener(listenerid,listenereven,listenertype,listenervalue,listenername);
  233. }
  234. }
  235. });
  236. }
  237. //保存监听
  238. function saveProcessListener(listenerid,listenereven,listenertype,listenervalue,listenername) {
  239. var listenerids = listenerid.split(",");
  240. var listenerevens = listenereven.split(",");
  241. var listenertypes = listenertype.split(",");
  242. var listenervalues = listenervalue.split(",");
  243. var listenernames = listenername.split(",");
  244. process = workflow.process;
  245. //var count = process.listeners.getSize();
  246. //if(count>0){
  247. // return;
  248. //}
  249. //alert(count);
  250. for(var i=0;i<listenerids.length;i++){
  251. var ls = process.getListener(listenerids[i]);
  252. addListener(listenerids[i],listenerevens[i],listenertypes[i],listenervalues[i]);
  253. if(!ls){
  254. $('#listenerList').datagrid('appendRow',{
  255. id:listenerids[i],
  256. listenername:listenernames[i],
  257. listenereven:listenerevens[i],
  258. listenertype:listenertypes[i],
  259. listenervalue:listenervalues[i]
  260. });
  261. }
  262. }
  263. }
  264. //添加监听器
  265. function addListener(id,event,serviceType,value){
  266. var ls=process.getListener(id);
  267. if(!ls){
  268. var listener = new draw2d.Process.Listener();
  269. listener.id=id;
  270. listener.event = event;
  271. listener.serviceType=serviceType;
  272. listener.serviceClass = value;
  273. listener.serviceExpression = value;
  274. process.addListener(listener);
  275. }
  276. }
  277. //update-end--Author:zhoujf Date:20170609 for:TASK #1840 【功能改进】默认创建流程,都有默认结束监听--------------------
  278. </script>
  279. </body>
  280. </html>