taskStartFlowForm.jsp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ page import="com.hotent.core.util.UniqueIdUtil" %>
  3. <%@ page pageEncoding="UTF-8"%>
  4. <%@include file="/commons/include/html_doctype.html"%>
  5. <html>
  6. <head>
  7. <title>流程启动--${bpmDefinition.subject} --版本:${bpmDefinition.versionNo}</title>
  8. <%@include file="/commons/include/customForm.jsp" %>
  9. <link rel="stylesheet" type="text/css" href="${ctx}/styles/default/css/hotent/task.css"></link>
  10. <script type="text/javascript" src="${ctx}/js/hotent/platform/bpm/BpmImageDialog.js"></script>
  11. <script type="text/javascript">
  12. var isExtForm=${isExtForm};
  13. var isFormEmpty=${isFormEmpty};
  14. var isNeedSubmitConfirm=${bpmDefinition.submitConfirm==1};
  15. var bpmGangedSets=[];
  16. var hasLoadComplete=false;
  17. var actDefId="${bpmDefinition.actDefId}";
  18. var defId="${param.defId}";
  19. var form;
  20. var boo=false;
  21. $(function(){
  22. //id="spsrmzfbgsfw_zs"
  23. $("#spsrmzfbgsfw_zs").val("各县(市)、区人民政府,市政府各委办局,各直属机构");
  24. $("#spsrmzfbgsfw_cs").text("市委各部门,市纪委办公室,四平日报社,各人民团体,各民主党派,\n中省直各有关单位。\n"+
  25. "市人大常委会办公室,市政协办公室,市中级法院,市检察院。");
  26. //设置市政府发文的Flag
  27. //设置表单。
  28. initForm();
  29. //启动流程事件绑定。
  30. $("a.run").click(function(){
  31. getSuggestion();
  32. qddks();
  33. fjhb();
  34. });
  35. function qddks(){
  36. var h = document.body.clientHeight;
  37. $('.datagrid-mask').css({display:"block",width:"100%",height:h}).appendTo("body");
  38. }
  39. function qddjs(){
  40. $('.datagrid-mask').remove();
  41. }
  42. function fjhb(){
  43. var txt = [];
  44. var fileidarr = [];
  45. txt = document.getElementsByName("attach");
  46. if(txt.length>0){
  47. //有附件的处理方法
  48. for(var i=0;i<txt.length;i++){
  49. if(txt[i].getAttribute("file").indexOf(".pdf")>0){
  50. fileidarr.push(txt[i].getAttribute("fileid"));
  51. }else{
  52. $.ligerDialog.warn("文件格式错误,只能合并PDF文件!", '提示');
  53. return false;
  54. }
  55. }
  56. var data=CustomForm.getData();
  57. data=JSON.parse(data);
  58. $.post("${ctx}/platform/system/sysFile/mergePdfFiles.ht",{fileId:fileidarr,datastr:JSON.stringify(data.main.fields),defId:defId,runId:$("input[name='startRunId']").val()},function(data){
  59. var JsonStr=JSON.parse("["+data+"]");
  60. var divObj = $("div[class='attachement']");
  61. var textareaObj=$("textarea[controltype='attachment']");
  62. var html=AttachMent.getHtml(JsonStr,"w");
  63. divObj.empty();
  64. divObj.append(html);
  65. textareaObj.empty();
  66. textareaObj.val(JSON.stringify(JsonStr));
  67. //合并后更新附件ID
  68. for(var i=0;i<JsonStr.length;i++) {
  69. var obj = JsonStr[i];
  70. var id = obj.id;
  71. console.log(id);
  72. $("input[name='wj']").val(id);
  73. }
  74. if(typeof CustomForm != "undefined"){
  75. CustomForm.validate();
  76. }
  77. if(JsonStr[0].success){
  78. runTask();
  79. }
  80. });
  81. }else{
  82. //无附件的处理办法
  83. var main = {
  84. fields:{}
  85. };
  86. //取主表的字段。
  87. $("input:text[name^='m:'],input[type='hidden'][name^='m:'],textarea[name^='m:'],select[name^='m:']").each(function() {
  88. var name = $(this).attr('name');
  89. var value=handNumberData(this);
  90. main.fields[name.replace(/.*:/, '')] = value;
  91. });
  92. //请求
  93. $.post("${ctx}/platform/system/sysFile/createPdfFiles.ht",{datastr:JSON.stringify(main.fields),defId:defId,runId:$("input[name='startRunId']").val()},function(data){
  94. var JsonStr=JSON.parse("["+data+"]");
  95. var divObj = $("div[class='attachement']");
  96. var textareaObj=$("textarea[controltype='attachment']");
  97. var html=AttachMent.getHtml(JsonStr,"w");
  98. divObj.empty();
  99. divObj.append(html);
  100. textareaObj.empty();
  101. textareaObj.val(JSON.stringify(JsonStr));
  102. //合并后更新附件ID
  103. for(var i=0;i<JsonStr.length;i++) {
  104. var obj = JsonStr[i];
  105. var id = obj.id;
  106. $("input[name='wj']").val(id);
  107. }
  108. if(typeof CustomForm != "undefined"){
  109. CustomForm.validate();
  110. }
  111. if(JsonStr[0].success){
  112. runTask();
  113. }
  114. });
  115. }
  116. }
  117. function handNumberData (obj){
  118. var value=$(obj).val();
  119. var showType=$(obj).attr("showtype");
  120. if(!showType) return value;
  121. try{
  122. showType=showType.replaceAll("'","\"");
  123. var json=jQuery.parseJSON(showType);
  124. var coinvalue = json.coinValue;
  125. var isShowComdify = json.isShowComdify;
  126. if (coinvalue != null && coinvalue != '' && value.split(coinvalue) != -1) {
  127. var ary = value.split(coinvalue);
  128. value = ary.join("");
  129. }
  130. if (isShowComdify && value.split(",") != -1) {
  131. var temp = value.split(",");
  132. value = temp.join("");
  133. }
  134. }
  135. catch(err){}
  136. return value;
  137. }
  138. function runTask(){
  139. var flowNodes = $("input[name='flowNode']");
  140. if(flowNodes && flowNodes.length>1){
  141. var flowNode = $("input[type='radio']:checked");
  142. if(flowNode && flowNode.length==1){
  143. startWorkFlow();
  144. }
  145. else{
  146. $.ligerDialog.warn("请选择一个跳转节点!", '提示');
  147. return;
  148. }
  149. }else{
  150. startWorkFlow();
  151. }
  152. }
  153. //保存表单
  154. $("a.save").click(function(){
  155. saveForm(this);
  156. });
  157. //重置表单
  158. $("a.reset").click(function(){
  159. var fieldName=$(this).attr("name");
  160. if(fieldName!=undefined&&fieldName!=null&&fieldName!=""){
  161. return;
  162. }
  163. $("#frmWorkFlow").resetForm();
  164. var parentObj = $(this).parent();
  165. $("input",parentObj).each(function(){
  166. $(this).val('');
  167. })
  168. });
  169. $("#flowNodeList").delegate("input", "click", function() {
  170. $("#startNode").val($(this).val());
  171. });
  172. //选择第一步任务的执行人
  173. chooseJumpType();
  174. //初始化联动设置
  175. <c:if test="${!empty bpmGangedSets}">
  176. bpmGangedSets = ${bpmGangedSets};
  177. FormUtil.InitGangedSet(bpmGangedSets);
  178. </c:if>
  179. //启动流程时隐藏意见控件
  180. $(".taskopinion").hide();
  181. });
  182. //设置表单。
  183. function initForm(){
  184. //初始化百度编辑器
  185. if(isFormEmpty) return;
  186. //表单不为空的情况。
  187. if(isExtForm){
  188. form=$('#frmWorkFlow').form({excludes:"[type=append]"});
  189. var formUrl=$('#divExternalForm').attr("formUrl");
  190. $('#divExternalForm').load(formUrl, function() {
  191. hasLoadComplete=true;
  192. //动态执行第三方表单指定执行的js
  193. try{
  194. afterOnload();
  195. }catch(e){}
  196. initSubForm();
  197. OfficePlugin.init();
  198. });
  199. }
  200. //将额外参数渲染到表单中
  201. $("input:text[name^='m:'],input[type='hidden'][name^='m:'],textarea[name^='m:'],select[name^='m:']").each(function() {
  202. var name = $(this).attr('name');
  203. var formValue=name.replace(/.*:/, '');
  204. var title = $("input[name='title']").val();
  205. if(formValue == 'wj'&&$("input[name='"+formValue+"']").val() != null){
  206. var jsonObj = {};
  207. jsonObj.id = $("input[name='"+formValue+"']").val();
  208. if(title != ''){
  209. jsonObj.name = title+".pdf";
  210. }else{
  211. jsonObj.name = $("input[name='"+formValue+"']").val()+".pdf";
  212. }
  213. var JsonStr=JSON.parse("["+JSON.stringify(jsonObj)+"]");
  214. var divObj = $("div[class='attachement']");
  215. var textareaObj=$("textarea[controltype='attachment']");
  216. var html=AttachMent.getHtml(JsonStr,"w");
  217. divObj.empty();
  218. divObj.append(html);
  219. textareaObj.empty();
  220. textareaObj.val(JSON.stringify(JsonStr));
  221. if(typeof CustomForm != "undefined"){
  222. CustomForm.validate();
  223. }
  224. if(JsonStr[0].success){
  225. runTask();
  226. }
  227. }else{
  228. if($("input[name='"+formValue+"']").val()!=null){
  229. $("input[name='"+name+"']").val($("input[name='"+formValue+"']").val());
  230. }
  231. }
  232. });
  233. };
  234. function selExeUsers(btnElement,nodeId,scope){
  235. var spanObj=$(btnElement).prev();
  236. var aryCheckBox=$(":checked",spanObj);
  237. var selectUsers = [];
  238. if(aryCheckBox.length>0){
  239. for(var i=0;i<aryCheckBox.length;i++){
  240. var obj = $(aryCheckBox[i]).val().split("^");
  241. var selectUser={
  242. type:obj[0],
  243. id:obj[1],
  244. name:obj[2]
  245. }
  246. selectUsers.push(selectUser);
  247. }
  248. }
  249. if(!scope){
  250. scope={};
  251. scope.type='system',
  252. scope.value='all';
  253. scope=JSON2.stringify(scope);
  254. }else{
  255. scope=scope.replaceAll("#@","\"");
  256. }
  257. UserDialog({selectUsers:selectUsers,scope:scope,isSingle:true,callback:function(aryIds,aryNames){
  258. if(aryIds==null) return;
  259. var aryTmp=[];
  260. var aryUserName=[];
  261. var val="user" +"^" + aryIds +"^" +aryNames;
  262. var tmp="<input type='checkbox' include='1' name='"+nodeId+"_userId' checked='checked' value='"+val+"'/>"+aryNames;
  263. aryTmp.push(tmp);
  264. spanObj.html(aryTmp.join(''));
  265. }});
  266. }
  267. //是否点击了开始按钮。
  268. var isStartFlow=true;
  269. function saveForm(obj){
  270. isStartFlow=false;
  271. var action="";
  272. if($(obj).hasClass('isDraft')){
  273. action="${ctx}/platform/bpm/task/saveForm.ht";
  274. }else{
  275. action="${ctx}/platform/bpm/task/saveData.ht";
  276. }
  277. submitForm(action,"a.save");
  278. }
  279. function startWorkFlow(){
  280. isStartFlow=true;
  281. var action="${ctx}/platform/bpm/task/startFlow.ht";
  282. if(isNeedSubmitConfirm){
  283. qddjs();
  284. $.ligerDialog.confirm("确认启动流程吗?","提示",function(rtn){
  285. if(rtn){
  286. submitForm(action,"a.run");
  287. }
  288. });
  289. }
  290. else{
  291. submitForm(action,"a.run");
  292. }
  293. }
  294. //表单数据提交。
  295. //action:表单提交到的URL
  296. //button:点击按钮的样式。
  297. function submitForm(action,button){
  298. //百度编辑器数据处理
  299. var ignoreRequired=false;
  300. if(button=="a.save"){
  301. ignoreRequired=true;
  302. }
  303. var operatorType=(isStartFlow)?1:6;
  304. //前置事件处理
  305. var rtn=beforeClick(operatorType);
  306. if( rtn==false){
  307. return;
  308. }
  309. if($(button).hasClass("disabled"))return;
  310. if(isFormEmpty){
  311. $.ligerDialog.warn('流程表单为空,请先设置流程表单!',"提示信息");
  312. return;
  313. }
  314. var frmWorkFlow=$('#frmWorkFlow');
  315. frmWorkFlow.attr("action",action);
  316. if(isExtForm){
  317. //提交第三方表单时检查该表单的参数
  318. var rtn = true;
  319. if(button!="a.save"){
  320. rtn=form.valid()
  321. }
  322. if(rtn){
  323. if(frmWorkFlow.handleFieldName){//url表单清除命名
  324. frmWorkFlow.handleFieldName();
  325. }
  326. if(frmWorkFlow.setData){
  327. frmWorkFlow.setData();
  328. }
  329. $(button).addClass("disabled");
  330. frmWorkFlow.submit();
  331. }
  332. }else{
  333. var rtn=CustomForm.validate({ignoreRequired:ignoreRequired,returnErrorMsg:true});
  334. if(!rtn.success){
  335. $.ligerDialog.warn("表单验证不成功,请检查表单是否正确填写:"+rtn.errorMsg,"提示信息");
  336. return;
  337. }
  338. // 验证子表是否为必填
  339. rtn = CustomForm.isSubTableRequest();
  340. if(!rtn.success){
  341. $.ligerDialog.warn("表单验证不成功:<br><b>子表:("+rtn.errorMsg+")至少需要有一行数据</b>", "提示信息");
  342. return;
  343. }
  344. //获取自定义表单的数据
  345. var data=CustomForm.getData();
  346. //WebSign控件提交。 有控件时才提交 xcx
  347. if(WebSignPlugin.hasWebSignField){
  348. WebSignPlugin.submit();
  349. }
  350. $(button).addClass("disabled");
  351. var uaName=navigator.userAgent.toLowerCase();
  352. if(uaName.indexOf("firefox")>=0||uaName.indexOf("chrome")>=0){ // 火狐和谷歌 的文档提交
  353. //Office控件提交。 有可以提交的文档
  354. if(OfficePlugin.submitNum>0){
  355. OfficePlugin.submit();
  356. //火狐和谷歌 的文档提交包括了 业务提交代码部分(完成 OfficePlugin.submit()后面的回调 函数 有 业务提交代码),所以 后面就不用加上业务提交代码
  357. }else{ //没有可提交的文档时 直接做 业务提交代码
  358. data=CustomForm.getData();
  359. //设置表单数据
  360. $("#formData").val(data);
  361. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  362. }
  363. }else{ //IE内核的等
  364. //Office控件提交。 有可以提交的文档
  365. if(OfficePlugin.submitNum>0){
  366. OfficePlugin.submit();
  367. //当提交问题 等于 提交数量的变量 时 表示所有文档 都提交了 然后做 业务相关的提交
  368. if(OfficePlugin.submitNum == OfficePlugin.submitNewNum){
  369. //获取自定义表单的数据
  370. data=CustomForm.getData();
  371. //设置表单数据
  372. $("#formData").val(data);
  373. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  374. OfficePlugin.submitNewNum = 0; //重置 提交数量的变量
  375. }else{
  376. $.ligerDialog.warn($lang_bpm.ntkOffice.resetOfficeKj,$lang.tip.warn);
  377. }
  378. }else{
  379. //获取自定义表单的数据
  380. data=CustomForm.getData();
  381. //设置表单数据
  382. $("#formData").val(data);
  383. FormSubmitUtil.submitFormAjax(frmWorkFlow,showResponse);
  384. }
  385. }
  386. }
  387. }
  388. function showBpmImageDlg(){
  389. BpmImageDialog({actDefId:"${bpmDefinition.actDefId}"});
  390. }
  391. function initSubForm(){
  392. $('#frmWorkFlow').ajaxForm({success:showResponse });
  393. }
  394. function showResponse(responseText){
  395. var button=(isStartFlow)? "a.run":"a.save";
  396. var operatorType=(isStartFlow)?1:6;
  397. var obj=new com.hotent.form.ResultMessage(responseText);
  398. if(obj.isSuccess()){
  399. var msg=(isStartFlow)?"启动流程成功!":"保存表单数据成功!";
  400. $.ligerDialog.success(msg,'提示信息',function(){
  401. //添加后置事件处理
  402. var rtn=afterClick(operatorType);
  403. if( rtn==false){
  404. return;
  405. }
  406. if(window.opener){
  407. window.opener.location.href = window.opener.location.href;
  408. window.close();
  409. }else{
  410. window.close();
  411. }
  412. });
  413. }
  414. else{
  415. var msg=(isStartFlow)?"启动流程失败!":"保存表单数据失败!";
  416. $.ligerDialog.err('提示信息',msg,obj.getMessage());
  417. $(button).removeClass("disabled");
  418. }
  419. }
  420. function chooseJumpType(){
  421. var obj=$('#jumpDiv');
  422. var url="${ctx}/platform/bpm/task/tranTaskUserMap.ht?selectPath=1&isStart=1&actDefId="+actDefId;
  423. url=url.getNewUrl();
  424. obj.html(obj.attr("tipInfo")).show().load(url);
  425. }
  426. function openHelpDoc(fileId){
  427. var h=screen.availHeight-35;
  428. var w=screen.availWidth-5;
  429. var vars="top=0,left=0,height="+h+",width="+w+",status=no,toolbar=no,menubar=no,location=no,resizable=1,scrollbars=1";
  430. var showUrl = __ctx+"/platform/form/office/get.ht?fileId=" + fileId;
  431. window.open(showUrl,"myWindow",vars);
  432. }
  433. //增加Web签章
  434. function addWebSigns(){
  435. AddSecSignFromServiceX(); //WebSignPlugin JS类
  436. }
  437. //在线拟文方法 limeng 20190517 ADD
  438. function onlineText(){
  439. var runId= $("input[name='startRunId']").val();
  440. OnlineText.CreateNew(runId); //在线编辑 JS类
  441. }
  442. //增加手写签章
  443. function addHangSigns(){
  444. AddSecHandSignNoPromptX(); //WebSignPlugin JS类
  445. }
  446. function handwriting(){
  447. alert("调用手写方法");
  448. $("#processFlg").val('1');
  449. alert($("#processFlg").val());
  450. }
  451. function typing(){
  452. alert("调用打字方法");
  453. //清除手写等方法
  454. $("#processFlg").val('0');
  455. alert($("#processFlg").val());
  456. }
  457. //获取拟办意见
  458. function getSuggestion(){
  459. var suggestion=$("textarea[name$='zhknbyj']").val();
  460. $("input[name='suggestion']").val();
  461. $("input[name='suggestion']").val(suggestion);
  462. }
  463. </script>
  464. </head>
  465. <body>
  466. <form id="frmWorkFlow" method="post" >
  467. <input type="hidden" include="1" name="curUserId" id="curUserId" value="${curUserId}"/>
  468. <input type="hidden" include="1" name="curUserName" value="${curUserName}"/>
  469. <input type="hidden" include="1" name="actDefId" value="${bpmDefinition.actDefId}"/>
  470. <input type="hidden" include="1" name="defId" value="${bpmDefinition.defId}"/>
  471. <input type="hidden" include="1" id="businessKey" name="businessKey" value="${businessKey}"/>
  472. <input type="hidden" include="1" name="startRunId" value="<%=UniqueIdUtil.genId()%>" />
  473. <input type="hidden" include="1" id="startNode" name="startNode" />
  474. <input type="hidden" include="1" id="suggestion" name="suggestion" />
  475. <c:if test="${not empty paraMap}">
  476. <c:forEach items="${paraMap}" var="item">
  477. <input include="1" type="hidden" name="${item.key}" value="${item.value}" />
  478. </c:forEach>
  479. </c:if>
  480. <div class="panel">
  481. <%@include file="incToolBarStart.jsp" %>
  482. <div style=" width:1000px; margin:0px auto; height:30px;line-height:30px;" class="noprint">
  483. <b>流程简述:</b>${bpmDefinition.descp}
  484. </div>
  485. <div class="panel-body printForm" style="overflow: auto;">
  486. <c:choose>
  487. <c:when test="${isMultipleFirstNode}">
  488. <div id="flowNodeList">
  489. <table class="table-grid">
  490. <thead>
  491. <tr>
  492. <th height="28" width="20%">选择起始路径</th>
  493. <td>
  494. <c:forEach items="${flowNodeList}" var="flowNode">
  495. <lable>${flowNode.nodeName}<input type="radio" name="flowNode" value="${flowNode.nodeId}" /></lable>
  496. </c:forEach>
  497. </td>
  498. </tr>
  499. </thead>
  500. </table>
  501. </div>
  502. </c:when>
  503. </c:choose>
  504. <c:if test="${bpmDefinition.showFirstAssignee==1}">
  505. <div id="jumpDiv" class="noprint" style="display:none;" tipInfo="正在加载表单请稍候..."></div>
  506. </c:if>
  507. <c:if test="${not empty param.relRunId}">
  508. <div class="noprint">
  509. <jsp:include page="incTaskOpinion.jsp"></jsp:include>
  510. </div>
  511. </c:if>
  512. <c:choose>
  513. <c:when test="${isFormEmpty==true}">
  514. <div class="noForm">没有设置流程表单。</div>
  515. </c:when>
  516. <c:otherwise>
  517. <c:choose>
  518. <c:when test="${isExtForm}">
  519. <div id="divExternalForm" formUrl="${form}"></div>
  520. </c:when>
  521. <c:otherwise>
  522. <div class="panel-detail" type="custform" id="custformDiv">${form}</div>
  523. <input type="hidden" include="1" name="formKey" value="${formKey}"/>
  524. <input type="hidden" include="1" name="formData" id="formData" />
  525. </c:otherwise>
  526. </c:choose>
  527. </c:otherwise>
  528. </c:choose>
  529. </div>
  530. </div>
  531. </form>
  532. <div class="datagrid-mask" style="position:fixed;z-index:110;top:0px;left:0px;display:none;background-color:rgba(0,0,0,0.2);"><img src="${ctx}/styles/blue/images/qdd.gif" style="left:50%;margin-left:-160px;display:block;position:absolute;top:50%;margin-top:-152px;"></div>
  533. </body>
  534. </html>