mobileTaskToStart.jsp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <c:set var="ctx" value="${pageContext.request.contextPath}" />
  4. <html ng-app="startFlow">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>流程任务-[${task.name}]执行</title>
  8. <script src="${ctx}/weixin/assets/js/importJs.js"></script>
  9. <script type="text/javascript">
  10. importCss(["/weixin/assets/js/ztree/css/zTreeStyle/zTreeStyle.css",
  11. "/weixin/assets/js/ztree/css/outLook.css",
  12. "/weixin/assets/css/jquery.qtip.css",
  13. "/weixin/assets/css/mobiscroll.custom-2.5.2.min.css",
  14. "/weixin/assets/css/form.css",
  15. "/weixin/assets/css/formValid.css"]);
  16. importJs(["/weixin/assets/js/angular.min.js",
  17. "/weixin/assets/js/zh_CN.js",
  18. "/weixin/assets/js/BaseService.js",
  19. "/weixin/assets/js/CustomValid.js",
  20. "/weixin/assets/js/mobiscroll.custom-2.5.2.min.js",
  21. "/js/hotent/platform/form/rule.js",
  22. "/weixin/assets/js/jquery.qtip.js",
  23. "/weixin/assets/js/ztree/js/jquery.ztree.core-3.5.js",
  24. "/weixin/assets/js/ztree/ZtreeCreator.js",
  25. "/weixin/assets/js/dialog/Dialogs.js",
  26. "/weixin/assets/js/formDirective.js",
  27. "/weixin/assets/js/bpm/FlowService.js",
  28. "/weixin/assets/js/bpm/FormService.js",
  29. "/weixin/assets/editor/ueditor.config.js",
  30. "/weixin/assets/editor/ueditor.all.min.js",
  31. "/weixin/assets/js/bpm/mobileTaskController.js",
  32. "/js/hotent/platform/form/OfficePlugin.js",
  33. "/js/hotent/platform/form/CustomForm.js",
  34. "/js/hotent/platform/form/SubtablePermission.js",
  35. "/js/hotent/platform/form/FormInit.js",
  36. "/js/ntkoWebSign/WebSignPlugin.js",
  37. "/js/util/json2.js",
  38. "/js/util/form.js"]);
  39. var taskId="${task.id}";
  40. var isExtForm=${isExtForm};
  41. var isEmptyForm=${isEmptyForm};
  42. var isSignTask=${isSignTask};
  43. var isHidePath=${isHidePath};
  44. var isManage=${isManage};
  45. var isNeedSubmitConfirm=${bpmDefinition.submitConfirm==1};
  46. var isHandChoolse=${isHandChoolse};
  47. var bpmGangedSets=[];
  48. var form;
  49. var signsequence = 0;
  50. //操作类型
  51. //1.完成任务
  52. //2.保存数据
  53. var operatorType=1;
  54. //loadFormSignData();
  55. $(function(){
  56. initForm();
  57. //显示路径
  58. //if(isHandChoolse){
  59. // chooseJumpType(2);
  60. //}else{
  61. // chooseJumpType(1);
  62. //}
  63. //resizeIframe();
  64. //初始化联动设置
  65. //<c:if test="${!empty bpmGangedSets}">
  66. // bpmGangedSets = ${bpmGangedSets};
  67. // FormUtil.InitGangedSet(bpmGangedSets);
  68. //</c:if>
  69. });
  70. function initBtnEvent(){
  71. //0,弃权,1,同意,2反对。
  72. var objVoteAgree=$("#voteAgree");
  73. var objBack=$("#back");
  74. //同意
  75. $("#btnAgree").click(function(){
  76. //var voteContent = $('#voteContent'),
  77. //content = voteContent.val();
  78. setExtFormData();
  79. var isDirectComlete = getIsDirectComplete();
  80. operatorType=1;
  81. //同意:5,一票通过。
  82. var tmp =isDirectComlete?"5":"1";
  83. objVoteAgree.val(tmp);
  84. objBack.val("0");
  85. // 提前校验表单
  86. //var beforeScript=beforeClick(getByOperatorType());
  87. //if(beforeScript==false) return;
  88. var appElement = document.querySelector('[ng-controller=ctrl]');
  89. var $scope = angular.element(appElement).scope();
  90. if($scope.myform.$invalid){
  91. Alert("提示信息","表单验证不成功,请检查表单是否正确填写!");
  92. return;
  93. }
  94. completeTaskBefore();
  95. });
  96. //驳回
  97. $("#btnReject").click(function(){
  98. setExtFormData();
  99. operatorType=4;
  100. objVoteAgree.val(3);
  101. objBack.val(1);
  102. completeTaskBefore();
  103. })
  104. //驳回到发起人
  105. $("#btnRejectToStart").click(function(){
  106. //var voteContent = $('#voteContent'),
  107. //content = voteContent.val();
  108. setExtFormData();
  109. operatorType=5;
  110. //驳回到发起人
  111. objVoteAgree.val(3);
  112. objBack.val(2);
  113. completeTaskBefore();
  114. })
  115. }
  116. function initSubForm(){
  117. $('#frmWorkFlow').ajaxForm({success:showResponse });
  118. }
  119. function initForm(){
  120. //初始化按钮事件。
  121. initBtnEvent();
  122. if(isEmptyForm) return;
  123. if(isExtForm){
  124. form=$('#frmWorkFlow').form({excludes:"[type=append]"});
  125. var formUrl=$('#frmWorkFlow').html();
  126. $('#frmWorkFlow').load(formUrl, function() {
  127. hasLoadComplete=true;
  128. //动态执行第三方表单指定执行的js
  129. try{
  130. afterOnload();
  131. }catch(e){}
  132. initSubForm();
  133. OfficePlugin.init();
  134. });
  135. }else{
  136. $(".taskopinion").each(function(){
  137. $(this).removeClass("taskopinion");
  138. var actInstId=$(this).attr("instanceId");
  139. $(this).load("${ctx}/platform/bpm/taskOpinion/listform.ht?actInstId="+actInstId);
  140. });
  141. }
  142. }
  143. //提交第三方表单时检查该表单的参数
  144. function setExtFormData(){
  145. if(isExtForm){
  146. var frm=$('#frmWorkFlow');
  147. if(!frm.valid()) return ;
  148. if(frm.setData)frm.setData();
  149. }
  150. }
  151. // 在完成任务之前,加上判断是否需要弹出意见对话框
  152. function completeTaskBefore(){
  153. // 加上判断是否需要弹出意见对话框
  154. var isPopup = '${bpmNodeSet.isPopup}';
  155. var isRequired = '${bpmNodeSet.isRequired}';
  156. //if(isPopup == 1){
  157. //var rtn=form.valid();
  158. //if(!rtn) return;
  159. //opintionDialog();
  160. //} else {
  161. completeTask();
  162. //}
  163. }
  164. //完成当前任务。
  165. function completeTask(){
  166. if($("input[name='nextPathId']").length>0){
  167. var b=false;//是否需要判断同步条件
  168. var destTask=$("input[name='destTask']:checked");
  169. if(destTask.length==0){
  170. b=true;
  171. }else{
  172. var nextPathId=destTask.parents("tr").find("[name=nextPathId]");
  173. if(nextPathId.length>0){
  174. b=true;
  175. }
  176. }
  177. if(b){
  178. var v=$("input[name='nextPathId']:checked").val();
  179. if(!v){
  180. $.ligerDialog.error("在同步条件后的执行路径中,您至少需要选择一条路径!",'提示信息');
  181. return;
  182. }
  183. }
  184. }
  185. //if(!checkNodeUser()){//检查节点选择
  186. // return;
  187. //}
  188. var operatorObj=getByOperatorType();
  189. var button="#" +operatorObj.btnId;
  190. var action="${ctx}/mobile/bpm/bpmMobileTask/complete.ht";
  191. //执行前置脚本
  192. //var rtn=beforeClick(operatorType);
  193. //if( rtn==false){
  194. // return;
  195. //}
  196. //确认执行任务。
  197. if(isNeedSubmitConfirm){
  198. $.ligerDialog.confirm("您确定执行此操作吗?","提示",function(rtn){
  199. if(rtn){
  200. submitForm(action,button);
  201. }
  202. });
  203. }
  204. else{
  205. submitForm(action,button);
  206. }
  207. }
  208. function getErrorByOperatorType(){
  209. var rtn="";
  210. switch(operatorType){
  211. //同意
  212. case 1:
  213. //反对
  214. case 2:
  215. //弃权
  216. case 3:
  217. rtn="执行任务失败!";
  218. break;
  219. //驳回
  220. //驳回
  221. case 4:
  222. rtn="驳回任务失败!";
  223. break;
  224. //驳回到发起人
  225. case 5:
  226. rtn="驳回到发起人失败!";
  227. break;
  228. //保存表单
  229. case 8:
  230. rtn="保存表单数据失败!";
  231. break;
  232. }
  233. return rtn;
  234. }
  235. function handFormJson(json){}
  236. function submitForm(action,button){
  237. var ignoreRequired=false;
  238. if(button=="#btnSave" || button=="#btnReject" || button=="#btnRejectToStart"){
  239. ignoreRequired=true;
  240. }
  241. if($(button).hasClass("disabled"))return;
  242. if(isEmptyForm){
  243. Alert("提示信息","还没有设置表单!");
  244. return;
  245. }
  246. var frmWorkFlow=$('#frmWorkFlow');
  247. frmWorkFlow.attr("action",action);
  248. if(isExtForm){
  249. var rtn = true;
  250. if(button!="a.save"){
  251. rtn=form.valid()
  252. }
  253. if(!rtn) return;
  254. $(button).addClass("disabled");
  255. frmWorkFlow.ajaxForm({success:showResponse }); //terry add
  256. if(frmWorkFlow.handleFieldName){//url表单清除命名
  257. frmWorkFlow.handleFieldName();
  258. }
  259. if(frmWorkFlow.setData){
  260. frmWorkFlow.setData();
  261. }
  262. frmWorkFlow.submit();
  263. }else{
  264. if(!ignoreRequired) {
  265. var appElement = document.querySelector('[ng-controller=ctrl]');
  266. var $scope = angular.element(appElement).scope();
  267. if($scope.myform.$invalid){
  268. Alert("提示信息","表单验证不成功,请检查表单是否正确填写!");
  269. return;
  270. }
  271. }
  272. if(button!="#btnSave" || button=="#btnReject" || button=="#btnRejectToStart" ){
  273. //子表必填检查(兼容新旧版本)
  274. rtn = SubtablePermission.subRequired();
  275. if(!rtn){
  276. Alert("提示信息","请填写子表表单数据!");
  277. return;
  278. }
  279. }
  280. //WebSign控件提交。 有控件时才提交 xcx
  281. if(WebSignPlugin.hasWebSignField){
  282. WebSignPlugin.submit();
  283. }
  284. $(button).addClass("disabled");
  285. //获取表单的数据
  286. var data=CustomForm.getMobileData();
  287. //设置表单数据
  288. $("#formData").val(data);
  289. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse,handFormJson);
  290. }
  291. }
  292. function showResponse(responseText){
  293. var operatorObj=getByOperatorType();
  294. $("#" +operatorObj.btnId).removeClass("disabled");
  295. var obj=new com.hotent.form.ResultMessage(responseText);
  296. if(obj.isSuccess()){
  297. //var rtn=afterClick(operatorType);
  298. //if( rtn==false){
  299. // return;
  300. //}
  301. Alert("提示信息",operatorObj.msg);
  302. $('#alertDialog').on('closed.modal.amui', function() {
  303. handJumpOrClose();
  304. });
  305. return;
  306. }
  307. else{
  308. var title=getErrorByOperatorType();
  309. Alert("提示信息",obj.getMessage());
  310. }
  311. }
  312. function handJumpOrClose(){
  313. //如果按钮类型为保存则不关闭窗口。
  314. if(operatorType==8) return;
  315. if(window.opener){
  316. try{
  317. window.opener.location.href=window.opener.location.href.getNewUrl();
  318. }
  319. catch(e){}
  320. }
  321. window.close();
  322. }
  323. function getByOperatorType(){
  324. var obj={};
  325. switch(operatorType){
  326. //同意
  327. case 1:
  328. //LoadSignData();
  329. obj.btnId="btnAgree";
  330. obj.msg="执行任务成功!";
  331. break;
  332. //反对
  333. case 2:
  334. obj.btnId="btnNotAgree";
  335. obj.msg="执行任务成功!";
  336. break;
  337. //弃权
  338. case 3:
  339. obj.btnId="btnAbandon";
  340. obj.msg="执行任务成功!";
  341. break;
  342. //驳回
  343. case 4:
  344. obj.btnId="btnReject";
  345. obj.msg="驳回任务成功!";
  346. break;
  347. //驳回到发起人
  348. case 5:
  349. obj.btnId="btnRejectToStart";
  350. obj.msg="驳回到发起人成功!";
  351. break;
  352. //保存表单
  353. case 8:
  354. obj.btnId="btnSave";
  355. obj.msg="保存表单数据成功!";
  356. break;
  357. }
  358. return obj;
  359. }
  360. //获取是否允许直接结束。
  361. function getIsDirectComplete(){
  362. var isDirectComlete = false;
  363. if($("#chkDirectComplete").length>0){
  364. if($("#chkDirectComplete").attr("checked")=="checked"){
  365. isDirectComlete = true;
  366. }
  367. }
  368. return isDirectComlete;
  369. }
  370. </script>
  371. <style type="text/css">
  372. .am-form-group span{
  373. border:none;
  374. }
  375. </style>
  376. </head>
  377. <body ng-controller="ctrl">
  378. <div id="frmWorkFlow" ht-bind-html="formHtml" style="width: 100%;height:100%;overflow:auto;"></div>
  379. <div id="formMsg">
  380. <div id="divExternalForm">${form}</div>
  381. <input type="hidden" id="tableId" value="${formDef.tableId}">
  382. <input type="hidden" include="1" name="formData" id="formData" />
  383. <input type="hidden" id="taskId" include="1" name="taskId" value="${task.id}"/>
  384. <%--驳回和撤销投票为再次提交 --%>
  385. <c:choose>
  386. <c:when test="${processRun.status eq 5 or processRun.status eq 6}">
  387. <input type="hidden" include="1" id="voteAgree" name="voteAgree" value="34"/>
  388. </c:when>
  389. <c:otherwise>
  390. <input type="hidden" include="1" id="voteAgree" name="voteAgree" value="1"/>
  391. </c:otherwise>
  392. </c:choose>
  393. <input type="hidden" include="1" id="back" name="back" value=""/>
  394. <input type="hidden" include="1" id="actDefId" name="actDefId" value="${bpmDefinition.actDefId}"/>
  395. <input type="hidden" include="1" name="defId" value="${bpmDefinition.defId}"/>
  396. <input type="hidden" include="1" id="isManage" name="isManage" value="${isManage}"/>
  397. <input type="hidden" include="1" id="businessKey" name="businessKey" value="${processRun.businessKey}"/>
  398. <input type="hidden" include="1" id="startNode" name="startNode" value="${toBackNodeId}"/>
  399. <input type="hidden" include="1" name="curUserId" value="${curUserId}"/>
  400. <input type="hidden" include="1" name="curUserName" value="${curUserName}"/>
  401. <input type="hidden" include="1" id="currentNode" name="currentNode" value="${task.taskDefinitionKey}"/>
  402. <input type="hidden" include="1" name="formKey" value="${formKey}"/>
  403. </div>
  404. <div data-am-widget="navbar" class="am-navbar am-cf am-navbar-default">
  405. <ul class="am-navbar-nav am-cf am-avg-sm-4">
  406. <li>
  407. <a id="btnAgree">
  408. <i class="am-icon fa fa-check" ></i>
  409. <span class="am-navbar-label">同意</span>
  410. </a>
  411. </li>
  412. <li>
  413. <a id="btnReject" >
  414. <i class="am-icon fa fa-save" ></i>
  415. <span class="am-navbar-label">驳回</span>
  416. </a>
  417. </li>
  418. <li>
  419. <a id="btnRejectToStart">
  420. <i class="am-icon fa fa-picture-o" ></i>
  421. <span class="am-navbar-label">驳回到发起人</span>
  422. </a>
  423. </li>
  424. </ul>
  425. </div>
  426. </body>
  427. </html>