task-operate.jsp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/context/mytags.jsp"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title><t:mutiLang langKey="common.task.operate"/></title>
  7. <%-- <t:base type="jquery,tools,easyui,DatePicker"></t:base> --%>
  8. </head>
  9. <body>
  10. <style type="text/css">
  11. #t_table td label {font-size:15px;}
  12. .blueButton{
  13. display: inline-block;
  14. *display: inline;
  15. padding: 4px 12px;
  16. margin-bottom: 0;
  17. *margin-left: .3em;
  18. font-size: 14px;
  19. line-height: 20px;
  20. text-align: center;
  21. vertical-align: middle;
  22. cursor: pointer;
  23. border: 1px solid #cccccc;
  24. *border: 0;
  25. border-bottom-color: #b3b3b3;
  26. -webkit-border-radius: 4px;
  27. -moz-border-radius: 4px;
  28. border-radius: 4px;
  29. *zoom: 1;
  30. -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  31. -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  32. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  33. color: #ffffff;
  34. text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  35. background-color: #006dcc;
  36. *background-color: #0044cc;
  37. background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
  38. background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  39. background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
  40. background-image: -o-linear-gradient(top, #0088cc, #0044cc);
  41. background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  42. background-repeat: repeat-x;
  43. border-color: #0044cc #0044cc #002a80;
  44. border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  45. filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
  46. filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  47. }
  48. .blueButton:hover,
  49. .blueButton:focus,
  50. .blueButton:active,
  51. .blueButton.active,
  52. .blueButton.disabled,
  53. .blueButton[disabled] {
  54. color: #ffffff;
  55. background-color: #0044cc;
  56. *background-color: #003bb3;
  57. }
  58. .disabledButton{
  59. display: inline-block;
  60. *display: inline;
  61. padding: 4px 12px;
  62. margin-bottom: 0;
  63. *margin-left: .3em;
  64. font-size: 14px;
  65. line-height: 20px;
  66. text-align: center;
  67. vertical-align: middle;
  68. cursor: pointer;
  69. border: 1px solid #cccccc;
  70. *border: 0;
  71. border-bottom-color: #b3b3b3;
  72. -webkit-border-radius: 4px;
  73. -moz-border-radius: 4px;
  74. border-radius: 4px;
  75. *zoom: 1;
  76. -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  77. -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  78. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  79. color: #ffffff;
  80. text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  81. background-color: #BDBEC0;
  82. *background-color: #BDBEC0;
  83. background-image: -moz-linear-gradient(top, #BDBEC0, #BDBEC0);
  84. background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#BDBEC0), to(#0044cc));
  85. background-image: -webkit-linear-gradient(top, #BDBEC0, #BDBEC0);
  86. background-image: -o-linear-gradient(top, #BDBEC0, #BDBEC0);
  87. background-image: linear-gradient(to bottom, #BDBEC0, #BDBEC0);
  88. background-repeat: repeat-x;
  89. border-color: #BDBEC0 #BDBEC0 #BDBEC0;
  90. border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  91. filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#BDBEC0', endColorstr='#BDBEC0', GradientType=0);
  92. filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  93. }
  94. </style>
  95. <fieldset style="border: 1px solid #E6E6E6;">
  96. <legend>表单信息</legend>
  97. <div id="panelloadingDiv" class="panel-loading" width="100%">加载中....</div>
  98. <iframe id="taskformiframe" src="taskController.do?goTaskForm&taskId=${taskId }" scrolling="no" frameborder="0" width="100%" height="1%" onload="hiddenloading();iframeresize('taskformiframe');"></iframe>
  99. </fieldset>
  100. <t:formvalid formid="formobj" layout="table" dialog="true" usePlugin="password">
  101. <input name="taskId" id="taskId" type="hidden" value="${taskId}" />
  102. <input name="bormoney" id="bormoney" type="hidden" vartype="B" value="${bormoney}">
  103. <input name="keys" id="keys" type="hidden" />
  104. <input name="values" id="values" type="hidden" />
  105. <input name="types" id="types" type="hidden" />
  106. <input name="nextCodeCount" id="nextCodeCount" type="hidden" value="${nextCodeCount}"/>
  107. <div class="ui-widget-content ui-corner-all" style="padding: 10px; margin: 10px;">
  108. <div style="margin: 15px auto; height: 50px; width: 900px;" id="tabs-project">
  109. <c:if test="${bpmLogListCount-3 > 0}">
  110. <div class="progress"></div>
  111. <div class="progress"></div>
  112. </c:if>
  113. <c:forEach items="${bpmLogList}" var="bpmLg" varStatus="name" >
  114. <c:if test="${name.index < bpmLogNewListCount}">
  115. <div class="progress progress"></div>
  116. <div class="progress progress1">
  117. <div class="detial">
  118. <b>${bpmLg.task_node }</b><br/>
  119. [<span style="color:red;"><t:mutiLang langKey="common.task.time"/>:
  120. <fmt:formatDate value="${bpmLg.op_time }" pattern="MM-dd HH:mm:ss"/></span>]<br/>
  121. [<span><t:mutiLang langKey="common.task.operator"/>:${bpmLg.op_name }]</span>
  122. </div>
  123. </div>
  124. </c:if>
  125. </c:forEach>
  126. <c:if test="${taskName != null }">
  127. <div class='progress progress_cancel'></div>
  128. <div class="progress progress3">
  129. <div class="detial">
  130. <span><b>${taskName}</b></span><br>
  131. <!-- [<span><t:mutiLang langKey="common.task.assignee"/>:</span>]<br> -->
  132. [<span><t:mutiLang langKey="common.task.operator"/>:${task.assignee }]</span>
  133. </div>
  134. </div>
  135. </c:if>
  136. <div class='progress progress_unstart'></div>
  137. <div class='progress progress_unstart'></div>
  138. <div class='progress progress_unstart'></div>
  139. </div>
  140. </div>
  141. <table id="t_table" cellpadding="0" cellspacing="1" class="formtable" style="width: 100%;">
  142. <tr height="35">
  143. <td class="value" style="padding: 0px 5px;">
  144. <label class="Validform_label"><t:mutiLang langKey="common.task.suggestion"/></label>
  145. </td>
  146. </tr>
  147. <c:forEach items="${bpmLogList}" var="bpmLog">
  148. <tr height="35">
  149. <td class="value" style="padding: 0px 5px;border-top:1px dashed #00CCCC; font-size:13px;">
  150. <fmt:formatDate value="${bpmLog.op_time }" pattern="yyyy-MM-dd HH:mm:ss"/>[${bpmLog.op_name }]
  151. </td>
  152. </tr>
  153. <tr height="35">
  154. <td class="value" style="padding: 0px 5px;font-size:13px;">
  155. [<span style="color:blue">${bpmLog.task_node }</span>]${bpmLog.memo }
  156. </td>
  157. </tr>
  158. <c:forEach items="${bpmLog.bpmFiles}" var="bpmFile">
  159. <tr height="35">
  160. <td class="value" style="padding: 0px 5px;">
  161. [<span style="color:blue"><t:mutiLang langKey="common.attachment"/></span>] ${bpmFile.attachmenttitle}
  162. <a href="commonController.do?viewFile&fileid=${bpmFile.id}&subclassname=org.jeecgframework.workflow.pojo.base.TPBpmFile" title="common.document.download"><t:mutiLang langKey="common.document.download"/></a>
  163. <a href="javascript:void(0);"
  164. onclick="openwindow('<t:mutiLang langKey="common.preview"/>','commonController.do?openViewFile&fileid=${bpmFile.id}&subclassname=org.jeecgframework.workflow.pojo.base.TPBpmFile','fList','800','700')"><t:mutiLang langKey="common.preview"/></a>
  165. <!-- <a href="javascript:void(0)" class="jeecgDetail" onclick="del('tFinanceController.do?delFile&id=${bpmFile.id}',this)">删除</a>-->
  166. </td>
  167. </tr>
  168. </c:forEach>
  169. <br/>
  170. </c:forEach>
  171. <br>
  172. <tr height="35" >
  173. <td class="value" style="padding: 0px 5px;">
  174. <label class="Validform_label" style="font-size:14px;">
  175. <t:mutiLang langKey="common.handel.suggestion"/><p></p>
  176. </label>
  177. <textarea name="reason" datatype="*" vartype="S" style="resize: none;" rows="3" cols="105"></textarea>
  178. <span class="Validform_checktip"></span>
  179. </td>
  180. </tr>
  181. <tr>
  182. <td class="value" style="padding: 0px 5px;">
  183. <div class="form jeecgDetail" style="padding: 3px;">
  184. <input type="hidden" id="bpmlogId" name="bpmlogId" />
  185. <br/><t:upload name="fiels" id="file_upload" extend="*.doc;*.docx;*.txt;*.ppt;*.xls;*.xlsx;*.html;*.htm;*.pdf;*.jpg;" buttonText="common.file.add" formData="bpmlogId" uploader="activitiController.do?saveBpmFiles">
  186. </t:upload>
  187. </div>
  188. <div class="form" id="filediv" style="height: 50px"></div>
  189. </td>
  190. </tr>
  191. <tr>
  192. <td class="value">
  193. <input type="radio" name="model" value="1" onchange="changeModel(1);" checked/><t:mutiLang langKey="common.model.one"/>
  194. <input type="radio" name="model" value="2" onchange="changeModel(2);"/><t:mutiLang langKey="common.model.more"/>
  195. <span id="manyModel" style="display:none">
  196. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:red"><t:mutiLang langKey="common.model.more.all"/>:</span>
  197. <c:forEach items="${transitionList}" var="trans">
  198. <input type="checkbox" name="transition" value="${trans.nextnode}" checked disabled>${trans.Transition }
  199. </c:forEach>
  200. </span>
  201. <c:if test="${histListSize > 0 }">
  202. <input type="radio" name="model" value="3" onchange="changeModel(3);"/><t:mutiLang langKey="common.reject"/>
  203. <span id="rejectModel" style="display:none">
  204. <select name="rejectModelNode">
  205. <c:forEach items="${histListNode}" var="histNode">
  206. <option value="${histNode.task_def_key_}" <c:if test="${histNode.task_def_key_==turnbackTaskId }">selected</c:if> >${histNode.name_ }</option>
  207. </c:forEach>
  208. </select>
  209. </span>
  210. </c:if>
  211. </td>
  212. </tr>
  213. <tr>
  214. <td class="value">
  215. <input type="checkbox" name="next_username_checkbox" id="next_username_checkbox" onclick="changeUsernameCheckbox();" />
  216. 指定下一步处理人(指定下一步会签人员)
  217. <input type="checkbox" name="ccusername_checkbox" id="ccusername_checkbox" onclick="changeCCUsernameCheckbox();" />
  218. 是否抄送
  219. </td>
  220. </tr>
  221. <tr id="next_username_checkbox_tr" style="display:none">
  222. <td class="value">
  223. 指定下一步处理人/指定下一步会签人员:
  224. <input name="last" id="last" readonly="readonly" type="text">
  225. <input name="id" type="hidden" value="" id="id">
  226. <t:choose hiddenName="id" hiddenid="id" url="activitiController.do?goEntrust" name="entrusterList" icon="icon-search" title="common.user.list" textname="last" isclear="true"></t:choose><t:mutiLang langKey="common.noselect.default"/>
  227. </td>
  228. </tr>
  229. <tr>
  230. <tr id="ccusername_checkbox_tr" style="display:none">
  231. <td class="value">
  232. 抄送给:
  233. <input name="ccUserRealNames" id="ccUserRealNames" readonly="readonly" type="text">
  234. <input name="ccUserNames" type="hidden" value="" id="ccUserNames">
  235. <t:choose hiddenName="ccUserNames" hiddenid="id" url="activitiController.do?goEntrust" name="entrusterList" icon="icon-search" title="common.user.list" inputTextname="ccUserRealNames" textname="last" isclear="true"></t:choose>
  236. </td>
  237. </tr>
  238. <tr>
  239. <td class="value" align="center">
  240. <div id="singleModel" style="display:black">
  241. <input type="hidden" name="option" id="option" />
  242. <input type="hidden" name="nextnode" id="nextnode" />
  243. <c:forEach items="${transitionList}" var="trans">
  244. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();procPass('${trans.Transition }','${trans.nextnode}')" value="${trans.Transition }">
  245. </c:forEach>
  246. <c:if test="${histListSize > 0 }">
  247. <c:if test="${turnbackTaskId!='' }">
  248. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();rejectProcessButton('${turnbackTaskId}');" value='退回'>
  249. </c:if>
  250. </c:if>
  251. </div>
  252. <div id="manyModelButton" style="display:none">
  253. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();manyModelSubmit();" value='<t:mutiLang langKey="common.submit"/>'>
  254. <input type="hidden" name="transStr" id="transStr">
  255. <c:if test="${histListSize > 0 }">
  256. <c:if test="${turnbackTaskId!='' }">
  257. <input type="button" id="rejectModelButton" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();rejectProcessButton('${turnbackTaskId}');" value='退回'>
  258. </c:if>
  259. </c:if>
  260. </div>
  261. </td>
  262. </tr>
  263. </table>
  264. </t:formvalid>
  265. <script type="text/javascript">
  266. function iframeresize(id)
  267. {
  268. var iframe = document.getElementById(id);
  269. var iframeDocument = null;
  270. //safari和chrome都是webkit内核的浏览器,但是webkit可以,chrome不可以
  271. if (iframe.contentDocument)
  272. {
  273. //ie 8,ff,opera,safari
  274. iframeDocument = iframe.contentDocument;
  275. }
  276. else if (iframe.contentWindow)
  277. {
  278. // for IE, 6 and 7:
  279. iframeDocument = iframe.contentWindow.document;
  280. }
  281. if (!!iframeDocument) {
  282. iframe.width=iframeDocument.documentElement.scrollWidth+"px";
  283. iframe.height=iframeDocument.documentElement.scrollHeight+"px";
  284. } else {
  285. alert("this browser doesn't seem to support the iframe document object");
  286. }
  287. }
  288. function hiddenloading(){
  289. $("#panelloadingDiv").hide();
  290. $("#taskformiframe").show();
  291. }
  292. function disabledButton(){
  293. $('input[buttongroup="buttongroup"]').attr("disabled","true");
  294. $('input[buttongroup="buttongroup"]').attr("class","disabledButton");
  295. }
  296. function procPass(yes,nextnode){
  297. //alert('d.success');
  298. $("#option").val(yes);
  299. $("#nextnode").val(nextnode);
  300. var formData = {};
  301. $(formobj).find("input,textarea,select").each(function(){
  302. if($(this).attr("name") == 'model'){
  303. formData[$(this).attr("name")]= $('input[name="model"]:checked').val();
  304. }else{
  305. formData[$(this).attr("name")]= $(this).val();
  306. }
  307. });
  308. //ajax方式提交iframe内的表单
  309. $.ajax({
  310. async : false,
  311. cache : false,
  312. type : 'POST',
  313. data : formData,
  314. url : 'activitiController.do?processComplete',// 请求的action路径
  315. error : function() {// 请求失败处理函数
  316. alert('提交申请失败');
  317. },
  318. success : function(data) {
  319. var d = data; // ------ $.parseJSON(data);
  320. //alert('d.success'+d.success);
  321. if (d.success) {
  322. $("#bpmlogId").val(d.obj.id);
  323. if($(".uploadify-queue-item").length>0){
  324. upload();
  325. }else{
  326. var msg = d.msg;
  327. W.tip(msg);
  328. W.reloadTable();
  329. windowapi.close();
  330. }
  331. }else{
  332. var msg = d.msg;
  333. //W.tip(msg);
  334. alert(msg);
  335. }
  336. }
  337. });
  338. }
  339. function rejectProcessButton(turnbackTaskId){
  340. var formData = {};
  341. $(formobj).find("input,textarea,select").each(function(){
  342. if($(this).attr("name") == 'model'){
  343. formData[$(this).attr("name")]= "3";
  344. }else if($(this).attr("name") == 'rejectModelNode'){
  345. formData[$(this).attr("name")]= turnbackTaskId;
  346. }else{
  347. formData[$(this).attr("name")]= $(this).val();
  348. }
  349. });
  350. $.ajax({
  351. async : false,
  352. cache : false,
  353. type : 'POST',
  354. data : formData,
  355. url : 'activitiController.do?processComplete',// 请求的action路径
  356. error : function() {// 请求失败处理函数
  357. alert('退回失败');
  358. },
  359. success : function(data) {
  360. var d = data; // ------ $.parseJSON(data);
  361. //alert('d.success'+d.success);
  362. if (d.success) {
  363. $("#bpmlogId").val(d.obj.id);
  364. if($(".uploadify-queue-item").length>0){
  365. upload();
  366. }else{
  367. var msg = d.msg;
  368. W.tip(msg);
  369. W.reloadTable();
  370. windowapi.close();
  371. }
  372. }else{
  373. var msg = d.msg;
  374. //W.tip(msg);
  375. alert(msg);
  376. }
  377. }
  378. });
  379. }
  380. /**
  381. * 单分支模式/多分支模式切换
  382. */
  383. function changeModel(value){
  384. if(value == 1){
  385. //单分支模式
  386. $("#singleModel").show();
  387. $("#manyModel").hide();
  388. $("#manyModelButton").hide();
  389. $("#rejectModel").hide();
  390. }else if(value == 2){
  391. //多分支模式
  392. $("#singleModel").hide();
  393. $("#rejectModel").hide();
  394. $("#manyModel").show();
  395. $("#manyModelButton").show();
  396. $("#rejectModelButton").show();
  397. }else{
  398. $("#singleModel").hide();
  399. $("#manyModel").hide();
  400. $("#rejectModel").show();
  401. $("#manyModelButton").show();
  402. $("#rejectModelButton").hide();
  403. }
  404. }
  405. /**
  406. * 指定下一步处理人/指定下一步会签人员切换
  407. */
  408. function changeUsernameCheckbox(){
  409. if($("#next_username_checkbox").attr("checked")=="checked"
  410. ||$("#next_username_checkbox").attr("checked")=="true"){
  411. //是
  412. $("#next_username_checkbox_tr").show();
  413. }else{
  414. //否
  415. $("#next_username_checkbox_tr").hide();
  416. $("#id").val("");
  417. $("#last").val("");
  418. }
  419. }
  420. /**
  421. * 是否抄送
  422. */
  423. function changeCCUsernameCheckbox(){
  424. if($("#ccusername_checkbox").attr("checked")=="checked"
  425. ||$("#ccusername_checkbox").attr("checked")=="true"){
  426. //是
  427. $("#ccusername_checkbox_tr").show();
  428. }else {
  429. //否
  430. $("#ccusername_checkbox_tr").hide();
  431. $("#ccUserNames").val("");
  432. $("#ccUserRealNames").val("");
  433. }
  434. }
  435. /**
  436. * 多分支模式 提交
  437. */
  438. function manyModelSubmit(){
  439. // alert('d.success');
  440. /** //checkbox 选中
  441. var transStr = "";
  442. var trans = $("input[name='transition']");
  443. for(i=0;i<trans.length;i++){
  444. if(trans[i].checked==true){
  445. transStr += (trans[i].value+',');
  446. }
  447. }
  448. $("#transStr").val(transStr);
  449. if(transStr == ""){
  450. alert("多分支模式必须选择下一步分支");
  451. return;
  452. }
  453. */
  454. var formData = {};
  455. $(formobj).find("input,textarea,select").each(function(){
  456. if($(this).attr("name") == 'model'){
  457. formData[$(this).attr("name")]= $('input[name="model"]:checked').val();
  458. }else{
  459. formData[$(this).attr("name")]= $(this).val();
  460. }
  461. });
  462. $.ajax({
  463. async : false,
  464. cache : false,
  465. type : 'POST',
  466. data : formData,
  467. url : 'activitiController.do?processComplete',// 请求的action路径
  468. error : function() {// 请求失败处理函数
  469. alert('提交申请失败');
  470. },
  471. success : function(data) {
  472. var d = data; // ------ $.parseJSON(data);
  473. //alert('d.success'+d.success);
  474. if (d.success) {
  475. $("#bpmlogId").val(d.obj.id);
  476. if($(".uploadify-queue-item").length>0){
  477. upload();
  478. }else{
  479. var msg = d.msg;
  480. W.tip(msg);
  481. W.reloadTable();
  482. windowapi.close();
  483. }
  484. }else{
  485. var msg = d.msg;
  486. //W.tip(msg);
  487. alert(msg);
  488. }
  489. }
  490. });
  491. }
  492. </script>
  493. </body>
  494. </html>