mobileTaskStartFlowForm.jsp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. <%@ page pageEncoding="UTF-8"%>
  2. <%@include file="/commons/include/html_doctype.html"%>
  3. <html>
  4. <head>
  5. <title>流程启动--${bpmDefinition.subject} --版本:${bpmDefinition.versionNo}</title>
  6. <%@include file="/commons/include/customForm.jsp" %>
  7. <link rel="stylesheet" type="text/css" href="${ctx}/styles/default/css/hotent/task.css"></link>
  8. <script type="text/javascript" src="${ctx}/js/hotent/platform/bpm/BpmImageDialog.js"></script>
  9. <script type="text/javascript">
  10. var isExtForm=${isExtForm};
  11. var isFormEmpty=${isFormEmpty};
  12. var isNeedSubmitConfirm=${bpmDefinition.submitConfirm==1};
  13. var bpmGangedSets=[];
  14. var hasLoadComplete=false;
  15. var actDefId="${bpmDefinition.actDefId}";
  16. var defId="${param.defId}";
  17. var form;
  18. $(function(){
  19. //设置表单。
  20. initForm();
  21. //启动流程事件绑定。
  22. $("a.run").click(function(){
  23. var flowNodes = $("input[name='flowNode']");
  24. if(flowNodes && flowNodes.length>1){
  25. var flowNode = $("input[type='radio']:checked");
  26. if(flowNode && flowNode.length==1){
  27. startWorkFlow();
  28. }
  29. else{
  30. $.ligerDialog.warn("请选择一个跳转节点!", '提示');
  31. return;
  32. }
  33. }else{
  34. startWorkFlow();
  35. }
  36. });
  37. //保存表单
  38. $("a.save").click(function(){
  39. saveForm(this);
  40. });
  41. //重置表单
  42. $("a.reset").click(function(){
  43. var fieldName=$(this).attr("name");
  44. if(fieldName!=undefined&&fieldName!=null&&fieldName!=""){
  45. return;
  46. }
  47. $("#frmWorkFlow").resetForm();
  48. var parentObj = $(this).parent();
  49. $("input",parentObj).each(function(){
  50. $(this).val('');
  51. })
  52. });
  53. $("#flowNodeList").delegate("input", "click", function() {
  54. $("#startNode").val($(this).val());
  55. });
  56. //选择第一步任务的执行人
  57. chooseJumpType();
  58. //初始化联动设置
  59. <c:if test="${!empty bpmGangedSets}">
  60. bpmGangedSets = ${bpmGangedSets};
  61. FormUtil.InitGangedSet(bpmGangedSets);
  62. </c:if>
  63. //启动流程时隐藏意见控件
  64. $(".taskopinion").hide();
  65. });
  66. //设置表单。
  67. function initForm(){
  68. //初始化百度编辑器
  69. if(isFormEmpty) return;
  70. //表单不为空的情况。
  71. if(isExtForm){
  72. form=$('#frmWorkFlow').form({excludes:"[type=append]"});
  73. var formUrl=$('#divExternalForm').attr("formUrl");
  74. $('#divExternalForm').load(formUrl, function() {
  75. hasLoadComplete=true;
  76. //动态执行第三方表单指定执行的js
  77. try{
  78. afterOnload();
  79. }catch(e){}
  80. initSubForm();
  81. OfficePlugin.init();
  82. });
  83. }
  84. };
  85. function selExeUsers(btnElement,nodeId,scope){
  86. var spanObj=$(btnElement).prev();
  87. var aryCheckBox=$(":checked",spanObj);
  88. var selectUsers = [];
  89. if(aryCheckBox.length>0){
  90. for(var i=0;i<aryCheckBox.length;i++){
  91. var obj = $(aryCheckBox[i]).val().split("^");
  92. var selectUser={
  93. type:obj[0],
  94. id:obj[1],
  95. name:obj[2]
  96. }
  97. selectUsers.push(selectUser);
  98. }
  99. }
  100. if(!scope){
  101. scope={};
  102. scope.type='system',
  103. scope.value='all';
  104. scope=JSON2.stringify(scope);
  105. }else{
  106. scope=scope.replaceAll("#@","\"");
  107. }
  108. FlowUserDialog({selectUsers:selectUsers,scope:scope,callback:function(aryTypes,aryIds,aryNames){
  109. if(aryIds==null) return;
  110. var aryTmp=[];
  111. var aryUserName=[];
  112. for(var i=0;i<aryIds.length;i++){
  113. var val=aryTypes[i] +"^" + aryIds[i] +"^" +aryNames[i];
  114. var tmp="<input type='checkbox' include='1' name='"+nodeId+"_userId' checked='checked' value='"+val+"'/>"+aryNames[i];
  115. aryTmp.push(tmp);
  116. }
  117. spanObj.html(aryTmp.join(''));
  118. }});
  119. }
  120. //是否点击了开始按钮。
  121. var isStartFlow=true;
  122. function saveForm(obj){
  123. isStartFlow=false;
  124. var action="";
  125. if($(obj).hasClass('isDraft')){
  126. action="${ctx}/platform/bpm/task/saveForm.ht";
  127. }else{
  128. action="${ctx}/platform/bpm/task/saveData.ht";
  129. }
  130. submitForm(action,"a.save");
  131. }
  132. function startWorkFlow(){
  133. isStartFlow=true;
  134. var action="${ctx}/platform/bpm/task/startFlow.ht";
  135. if(isNeedSubmitConfirm){
  136. $.ligerDialog.confirm("确认启动流程吗?","提示",function(rtn){
  137. if(rtn){
  138. submitForm(action,"a.run");
  139. }
  140. });
  141. }
  142. else{
  143. submitForm(action,"a.run");
  144. }
  145. }
  146. //表单数据提交。
  147. //action:表单提交到的URL
  148. //button:点击按钮的样式。
  149. function submitForm(action,button){
  150. //百度编辑器数据处理
  151. var ignoreRequired=false;
  152. if(button=="a.save"){
  153. ignoreRequired=true;
  154. }
  155. var operatorType=(isStartFlow)?1:6;
  156. //前置事件处理
  157. var rtn=beforeClick(operatorType);
  158. if( rtn==false){
  159. return;
  160. }
  161. if($(button).hasClass("disabled"))return;
  162. if(isFormEmpty){
  163. $.ligerDialog.warn('流程表单为空,请先设置流程表单!',"提示信息");
  164. return;
  165. }
  166. var frmWorkFlow=$('#frmWorkFlow');
  167. frmWorkFlow.attr("action",action);
  168. if(isExtForm){
  169. //提交第三方表单时检查该表单的参数
  170. var rtn = true;
  171. if(button!="a.save"){
  172. rtn=form.valid()
  173. }
  174. if(rtn){
  175. if(frmWorkFlow.handleFieldName){//url表单清除命名
  176. frmWorkFlow.handleFieldName();
  177. }
  178. if(frmWorkFlow.setData){
  179. frmWorkFlow.setData();
  180. }
  181. $(button).addClass("disabled");
  182. frmWorkFlow.submit();
  183. }
  184. }else{
  185. var rtn=CustomForm.validate({ignoreRequired:ignoreRequired,returnErrorMsg:true});
  186. if(!rtn.success){
  187. $.ligerDialog.warn("表单验证不成功,请检查表单是否正确填写:"+rtn.errorMsg,"提示信息");
  188. return;
  189. }
  190. // 验证子表是否为必填
  191. rtn = CustomForm.isSubTableRequest();
  192. if(!rtn.success){
  193. $.ligerDialog.warn("表单验证不成功:<br><b>子表:("+rtn.errorMsg+")至少需要有一行数据</b>", "提示信息");
  194. return;
  195. }
  196. //获取自定义表单的数据
  197. var data=CustomForm.getData();
  198. //WebSign控件提交。 有控件时才提交 xcx
  199. if(WebSignPlugin.hasWebSignField){
  200. WebSignPlugin.submit();
  201. }
  202. $(button).addClass("disabled");
  203. var uaName=navigator.userAgent.toLowerCase();
  204. if(uaName.indexOf("firefox")>=0||uaName.indexOf("chrome")>=0){ // 火狐和谷歌 的文档提交
  205. //Office控件提交。 有可以提交的文档
  206. if(OfficePlugin.submitNum>0){
  207. OfficePlugin.submit();
  208. //火狐和谷歌 的文档提交包括了 业务提交代码部分(完成 OfficePlugin.submit()后面的回调 函数 有 业务提交代码),所以 后面就不用加上业务提交代码
  209. }else{ //没有可提交的文档时 直接做 业务提交代码
  210. data=CustomForm.getData();
  211. //设置表单数据
  212. $("#formData").val(data);
  213. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  214. }
  215. }else{ //IE内核的等
  216. //Office控件提交。 有可以提交的文档
  217. if(OfficePlugin.submitNum>0){
  218. OfficePlugin.submit();
  219. //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  220. if(OfficePlugin.submitNum == OfficePlugin.submitNewNum){
  221. //获取自定义表单的数据
  222. data=CustomForm.getData();
  223. //设置表单数据
  224. $("#formData").val(data);
  225. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  226. OfficePlugin.submitNewNum = 0; //重置 提交数量的变量
  227. }else{
  228. $.ligerDialog.warn($lang_bpm.ntkOffice.resetOfficeKj,$lang.tip.warn);
  229. }
  230. }else{
  231. //获取自定义表单的数据
  232. data=CustomForm.getData();
  233. //设置表单数据
  234. $("#formData").val(data);
  235. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  236. }
  237. }
  238. }
  239. }
  240. function showBpmImageDlg(){
  241. BpmImageDialog({actDefId:"${bpmDefinition.actDefId}"});
  242. }
  243. function initSubForm(){
  244. $('#frmWorkFlow').ajaxForm({success:showResponse });
  245. }
  246. function showResponse(responseText){
  247. var button=(isStartFlow)? "a.run":"a.save";
  248. var operatorType=(isStartFlow)?1:6;
  249. var obj=new com.hotent.form.ResultMessage(responseText);
  250. if(obj.isSuccess()){
  251. var msg=(isStartFlow)?"启动流程成功!":"保存表单数据成功!";
  252. $.ligerDialog.success(msg,'提示信息',function(){
  253. //添加后置事件处理
  254. var rtn=afterClick(operatorType);
  255. if( rtn==false){
  256. return;
  257. }
  258. if(window.opener){
  259. window.opener.location.href = window.opener.location.href;
  260. window.close();
  261. }else{
  262. window.close();
  263. }
  264. });
  265. }
  266. else{
  267. var msg=(isStartFlow)?"启动流程失败!":"保存表单数据失败!";
  268. $.ligerDialog.err('提示信息',msg,obj.getMessage());
  269. $(button).removeClass("disabled");
  270. }
  271. }
  272. function chooseJumpType(){
  273. var obj=$('#jumpDiv');
  274. var url="${ctx}/platform/bpm/task/tranTaskUserMap.ht?selectPath=1&isStart=1&actDefId="+actDefId;
  275. url=url.getNewUrl();
  276. obj.html(obj.attr("tipInfo")).show().load(url);
  277. }
  278. function openHelpDoc(fileId){
  279. alert(fileId);
  280. var h=screen.availHeight-35;
  281. var w=screen.availWidth-5;
  282. var vars="top=0,left=0,height="+h+",width="+w+",status=no,toolbar=no,menubar=no,location=no,resizable=1,scrollbars=1";
  283. var showUrl = __ctx+"/platform/form/office/get.ht?fileId=" + fileId;
  284. window.open(showUrl,"myWindow",vars);
  285. }
  286. //增加Web签章
  287. function addWebSigns(){
  288. AddSecSignFromServiceX(); //WebSignPlugin JS类
  289. }
  290. //增加手写签章
  291. function addHangSigns(){
  292. AddSecHandSignNoPromptX(); //WebSignPlugin JS类
  293. }
  294. </script>
  295. </head>
  296. <body>
  297. <form id="frmWorkFlow" method="post" >
  298. <input type="hidden" include="1" name="curUserId" value="${curUserId}"/>
  299. <input type="hidden" include="1" name="curUserName" value="${curUserName}"/>
  300. <input type="hidden" include="1" name="actDefId" value="${bpmDefinition.actDefId}"/>
  301. <input type="hidden" include="1" name="defId" value="${bpmDefinition.defId}"/>
  302. <input type="hidden" include="1" id="businessKey" name="businessKey" value="${businessKey}"/>
  303. <c:if test="${empty runId}">
  304. <input type="hidden" include="1" name="runId" value="${runId}" />
  305. </c:if>
  306. <input type="hidden" include="1" id="startNode" name="startNode" />
  307. <c:if test="${not empty paraMap}">
  308. <c:forEach items="${paraMap}" var="item">
  309. <input include="1" type="hidden" name="${item.key}" value="${item.value}" />
  310. </c:forEach>
  311. </c:if>
  312. <div class="panel">
  313. <%@include file="incToolBarStart.jsp" %>
  314. <div style="padding:6px 8px 3px 12px;" class="noprint">
  315. <b>流程简述:</b>${bpmDefinition.descp}
  316. </div>
  317. <div class="panel-body printForm" style="overflow: auto;">
  318. <c:choose>
  319. <c:when test="${isMultipleFirstNode}">
  320. <div id="flowNodeList">
  321. <table class="table-grid">
  322. <thead>
  323. <tr>
  324. <th height="28" width="20%">选择起始路径</th>
  325. <td>
  326. <c:forEach items="${flowNodeList}" var="flowNode">
  327. <lable>${flowNode.nodeName}<input type="radio" name="flowNode" value="${flowNode.nodeId}" /></lable>
  328. </c:forEach>
  329. </td>
  330. </tr>
  331. </thead>
  332. </table>
  333. </div>
  334. </c:when>
  335. </c:choose>
  336. <c:if test="${bpmDefinition.showFirstAssignee==1}">
  337. <div id="jumpDiv" class="noprint" style="display:none;" tipInfo="正在加载表单请稍候..."></div>
  338. </c:if>
  339. <c:if test="${not empty param.relRunId}">
  340. <div class="noprint">
  341. <jsp:include page="incTaskOpinion.jsp"></jsp:include>
  342. </div>
  343. </c:if>
  344. <c:choose>
  345. <c:when test="${isFormEmpty==true}">
  346. <div class="noForm">没有设置流程表单。</div>
  347. </c:when>
  348. <c:otherwise>
  349. <c:choose>
  350. <c:when test="${isExtForm}">
  351. <div id="divExternalForm" formUrl="${form}"></div>
  352. </c:when>
  353. <c:otherwise>
  354. <div class="panel-detail" type="custform" id="custformDiv">${form}</div>
  355. <input type="hidden" include="1" name="formKey" value="${formKey}"/>
  356. <input type="hidden" include="1" name="formData" id="formData" />
  357. </c:otherwise>
  358. </c:choose>
  359. </c:otherwise>
  360. </c:choose>
  361. </div>
  362. </div>
  363. </form>
  364. </body>
  365. </html>