task-operate.jsp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  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. <t:formvalid formid="formobj" layout="table" dialog="true" usePlugin="password">
  96. <input name="taskId" id="taskId" type="hidden" value="${taskId}" />
  97. <input name="bormoney" id="bormoney" type="hidden" vartype="B" value="${bormoney}">
  98. <input name="keys" id="keys" type="hidden" />
  99. <input name="values" id="values" type="hidden" />
  100. <input name="types" id="types" type="hidden" />
  101. <input name="nextCodeCount" id="nextCodeCount" type="hidden" value="${nextCodeCount}"/>
  102. <div class="ui-widget-content ui-corner-all" style="padding: 10px; margin: 10px;">
  103. <div style="margin: 15px auto; height: 50px; width: 900px;" id="tabs-project">
  104. <c:if test="${bpmLogListCount-3 > 0}">
  105. <div class="progress"></div>
  106. <div class="progress"></div>
  107. </c:if>
  108. <c:forEach items="${bpmLogList}" var="bpmLg" varStatus="name" >
  109. <c:if test="${name.index < bpmLogNewListCount}">
  110. <div class="progress progress"></div>
  111. <div class="progress progress1">
  112. <div class="detial">
  113. <b>${bpmLg.task_node }</b><br/>
  114. [<span style="color:red;"><t:mutiLang langKey="common.task.time"/>:
  115. <fmt:formatDate value="${bpmLg.op_time }" pattern="MM-dd HH:mm:ss"/></span>]<br/>
  116. [<span><t:mutiLang langKey="common.task.operator"/>:${bpmLg.op_name }]</span>
  117. </div>
  118. </div>
  119. </c:if>
  120. </c:forEach>
  121. <c:if test="${taskName != null }">
  122. <div class='progress progress_cancel'></div>
  123. <div class="progress progress3">
  124. <div class="detial">
  125. <span><b>${taskName}</b></span><br>
  126. <!-- [<span><t:mutiLang langKey="common.task.assignee"/>:</span>]<br> -->
  127. [<span><t:mutiLang langKey="common.task.operator"/>:${task.assignee }]</span>
  128. </div>
  129. </div>
  130. </c:if>
  131. <div class='progress progress_unstart'></div>
  132. <div class='progress progress_unstart'></div>
  133. <div class='progress progress_unstart'></div>
  134. </div>
  135. </div>
  136. <table id="t_table" cellpadding="0" cellspacing="1" class="formtable" style="width: 100%;">
  137. <tr height="35">
  138. <td class="value" style="padding: 0px 5px;">
  139. <label class="Validform_label"><t:mutiLang langKey="common.task.suggestion"/></label>
  140. </td>
  141. </tr>
  142. <c:forEach items="${bpmLogList}" var="bpmLog">
  143. <tr height="35">
  144. <td class="value" style="padding: 0px 5px;border-top:1px dashed #00CCCC; font-size:13px;">
  145. <fmt:formatDate value="${bpmLog.op_time }" pattern="yyyy-MM-dd HH:mm:ss"/>[${bpmLog.op_name }]
  146. </td>
  147. </tr>
  148. <tr height="35">
  149. <td class="value" style="padding: 0px 5px;font-size:13px;">
  150. [<span style="color:blue">${bpmLog.task_node }</span>]${bpmLog.memo }
  151. </td>
  152. </tr>
  153. <c:forEach items="${bpmLog.bpmFiles}" var="bpmFile">
  154. <tr height="35">
  155. <td class="value" style="padding: 0px 5px;">
  156. [<span style="color:blue"><t:mutiLang langKey="common.attachment"/></span>] ${bpmFile.attachmenttitle}
  157. <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>
  158. <a href="javascript:void(0);"
  159. 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>
  160. <!-- <a href="javascript:void(0)" class="jeecgDetail" onclick="del('tFinanceController.do?delFile&id=${bpmFile.id}',this)">删除</a>-->
  161. </td>
  162. </tr>
  163. </c:forEach>
  164. <br/>
  165. </c:forEach>
  166. <br>
  167. <tr height="35" >
  168. <td class="value" style="padding: 0px 5px;">
  169. <label class="Validform_label" style="font-size:14px;">
  170. <t:mutiLang langKey="common.handel.suggestion"/><p></p>
  171. </label>
  172. <textarea name="reason" datatype="*" vartype="S" style="resize: none;" rows="3" cols="105"></textarea>
  173. <span class="Validform_checktip"></span>
  174. </td>
  175. </tr>
  176. <tr>
  177. <td class="value" style="padding: 0px 5px;">
  178. <div class="form jeecgDetail" style="padding: 3px;">
  179. <input type="hidden" id="bpmlogId" name="bpmlogId" />
  180. <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">
  181. </t:upload>
  182. </div>
  183. <div class="form" id="filediv" style="height: 50px"></div>
  184. </td>
  185. </tr>
  186. <tr>
  187. <td class="value">
  188. <input type="radio" name="model" value="1" onclick="changeModel(1);" checked/><t:mutiLang langKey="common.model.one"/>
  189. <input type="radio" name="model" value="2" onclick="changeModel(2);"/><t:mutiLang langKey="common.model.more"/>
  190. <span id="manyModel" style="display:none">
  191. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:red"><t:mutiLang langKey="common.model.more.all"/>:</span>
  192. <c:forEach items="${transitionList}" var="trans">
  193. <input type="checkbox" name="transition" value="${trans.nextnode}" checked disabled>${trans.Transition }
  194. </c:forEach>
  195. </span>
  196. <c:if test="${histListSize > 0 }">
  197. <input type="radio" name="model" value="3" onclick="changeModel(3);"/><t:mutiLang langKey="common.reject"/>
  198. <span id="rejectModel" style="display:none">
  199. <select name="rejectModelNode">
  200. <c:forEach items="${histListNode}" var="histNode">
  201. <option value="${histNode.task_def_key_}" <c:if test="${histNode.task_def_key_==turnbackTaskId }">selected</c:if> >${histNode.name_ }</option>
  202. </c:forEach>
  203. </select>
  204. </span>
  205. </c:if>
  206. </td>
  207. </tr>
  208. <tr>
  209. <td class="value">
  210. <input type="checkbox" name="next_username_checkbox" id="next_username_checkbox" onclick="changeUsernameCheckbox();" />
  211. 指定下一步处理人(指定下一步会签人员)
  212. <input type="checkbox" name="ccusername_checkbox" id="ccusername_checkbox" onclick="changeCCUsernameCheckbox();" />
  213. 是否抄送
  214. </td>
  215. </tr>
  216. <tr id="next_username_checkbox_tr" style="display:none">
  217. <td class="value">
  218. 指定下一步处理人/指定下一步会签人员:
  219. <input name="last" id="last" readonly="readonly" type="text">
  220. <input name="id" type="hidden" value="" id="id">
  221. <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"/>
  222. </td>
  223. </tr>
  224. <tr>
  225. <tr id="ccusername_checkbox_tr" style="display:none">
  226. <td class="value">
  227. 抄送给:
  228. <input name="ccUserRealNames" id="ccUserRealNames" readonly="readonly" type="text">
  229. <input name="ccUserNames" type="hidden" value="" id="ccUserNames">
  230. <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>
  231. </td>
  232. </tr>
  233. <tr align="center">
  234. <td class="value" align="center">
  235. <div id="singleModel" style="display:black">
  236. <input type="hidden" name="option" id="option" />
  237. <input type="hidden" name="nextnode" id="nextnode" />
  238. <c:forEach items="${transitionList}" var="trans">
  239. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();procPass('${trans.Transition }','${trans.nextnode}')" value="${trans.Transition }">
  240. </c:forEach>
  241. <c:if test="${histListSize > 0 }">
  242. <c:if test="${turnbackTaskId!='' }">
  243. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();rejectProcessButton('${turnbackTaskId}');" value='退回'>
  244. </c:if>
  245. </c:if>
  246. </div>
  247. <div id="manyModelButton" style="display:none">
  248. <input type="button" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();manyModelSubmit();" value='<t:mutiLang langKey="common.submit"/>'>
  249. <input type="hidden" name="transStr" id="transStr">
  250. <c:if test="${histListSize > 0 }">
  251. <c:if test="${turnbackTaskId!='' }">
  252. <input type="button" id="rejectModelButton" buttongroup="buttongroup" class="blueButton" onclick="disabledButton();rejectProcessButton('${turnbackTaskId}');" value='退回'>
  253. </c:if>
  254. </c:if>
  255. </div>
  256. </td>
  257. </tr>
  258. </table>
  259. </t:formvalid>
  260. <script type="text/javascript">
  261. function disabledButton(){
  262. $('input[buttongroup="buttongroup"]').attr("disabled","true");
  263. $('input[buttongroup="buttongroup"]').attr("class","disabledButton");
  264. }
  265. function procPass(yes,nextnode){
  266. //alert('d.success');
  267. $("#option").val(yes);
  268. $("#nextnode").val(nextnode);
  269. var formData = {};
  270. $(formobj).find("input,textarea,select").each(function(){
  271. if($(this).attr("name") == 'model'){
  272. formData[$(this).attr("name")]= $('input[name="model"]:checked').val();
  273. }else{
  274. formData[$(this).attr("name")]= $(this).val();
  275. }
  276. });
  277. //ajax方式提交iframe内的表单
  278. $.ajax({
  279. async : false,
  280. cache : false,
  281. type : 'POST',
  282. data : formData,
  283. url : 'activitiController.do?processComplete',// 请求的action路径
  284. error : function() {// 请求失败处理函数
  285. alert('提交申请失败');
  286. },
  287. success : function(data) {
  288. var d = data; // ------ $.parseJSON(data);
  289. //alert('d.success'+d.success);
  290. if (d.success) {
  291. $("#bpmlogId").val(d.obj.id);
  292. if($(".uploadify-queue-item").length>0){
  293. upload();
  294. }else{
  295. var msg = d.msg;
  296. W.tip(msg);
  297. W.reloadTable();
  298. windowapi.close();
  299. }
  300. }else{
  301. var msg = d.msg;
  302. //W.tip(msg);
  303. alert(msg);
  304. }
  305. }
  306. });
  307. }
  308. function rejectProcessButton(turnbackTaskId){
  309. var formData = {};
  310. $(formobj).find("input,textarea,select").each(function(){
  311. if($(this).attr("name") == 'model'){
  312. formData[$(this).attr("name")]= "3";
  313. }else if($(this).attr("name") == 'rejectModelNode'){
  314. formData[$(this).attr("name")]= turnbackTaskId;
  315. }else{
  316. formData[$(this).attr("name")]= $(this).val();
  317. }
  318. });
  319. $.ajax({
  320. async : false,
  321. cache : false,
  322. type : 'POST',
  323. data : formData,
  324. url : 'activitiController.do?processComplete',// 请求的action路径
  325. error : function() {// 请求失败处理函数
  326. alert('退回失败');
  327. },
  328. success : function(data) {
  329. var d = data; // ------ $.parseJSON(data);
  330. //alert('d.success'+d.success);
  331. if (d.success) {
  332. $("#bpmlogId").val(d.obj.id);
  333. if($(".uploadify-queue-item").length>0){
  334. upload();
  335. }else{
  336. var msg = d.msg;
  337. W.tip(msg);
  338. W.reloadTable();
  339. windowapi.close();
  340. }
  341. }else{
  342. var msg = d.msg;
  343. //W.tip(msg);
  344. alert(msg);
  345. }
  346. }
  347. });
  348. }
  349. /**
  350. * 单分支模式/多分支模式切换
  351. */
  352. function changeModel(value){
  353. if(value == 1){
  354. //单分支模式
  355. $("#singleModel").show();
  356. $("#manyModel").hide();
  357. $("#manyModelButton").hide();
  358. $("#rejectModel").hide();
  359. }else if(value == 2){
  360. //多分支模式
  361. $("#singleModel").hide();
  362. $("#rejectModel").hide();
  363. $("#manyModel").show();
  364. $("#manyModelButton").show();
  365. $("#rejectModelButton").show();
  366. }else{
  367. $("#singleModel").hide();
  368. $("#manyModel").hide();
  369. $("#rejectModel").show();
  370. $("#manyModelButton").show();
  371. $("#rejectModelButton").hide();
  372. }
  373. }
  374. /**
  375. * 指定下一步处理人/指定下一步会签人员切换
  376. */
  377. function changeUsernameCheckbox(){
  378. if($("#next_username_checkbox").attr("checked")=="checked"
  379. ||$("#next_username_checkbox").attr("checked")=="true"){
  380. //是
  381. $("#next_username_checkbox_tr").show();
  382. }else{
  383. //否
  384. $("#next_username_checkbox_tr").hide();
  385. $("#id").val("");
  386. $("#last").val("");
  387. }
  388. }
  389. /**
  390. * 是否抄送
  391. */
  392. function changeCCUsernameCheckbox(){
  393. if($("#ccusername_checkbox").attr("checked")=="checked"
  394. ||$("#ccusername_checkbox").attr("checked")=="true"){
  395. //是
  396. $("#ccusername_checkbox_tr").show();
  397. }else {
  398. //否
  399. $("#ccusername_checkbox_tr").hide();
  400. $("#ccUserNames").val("");
  401. $("#ccUserRealNames").val("");
  402. }
  403. }
  404. /**
  405. * 多分支模式 提交
  406. */
  407. function manyModelSubmit(){
  408. // alert('d.success');
  409. /** //checkbox 选中
  410. var transStr = "";
  411. var trans = $("input[name='transition']");
  412. for(i=0;i<trans.length;i++){
  413. if(trans[i].checked==true){
  414. transStr += (trans[i].value+',');
  415. }
  416. }
  417. $("#transStr").val(transStr);
  418. if(transStr == ""){
  419. alert("多分支模式必须选择下一步分支");
  420. return;
  421. }
  422. */
  423. var formData = {};
  424. $(formobj).find("input,textarea,select").each(function(){
  425. if($(this).attr("name") == 'model'){
  426. formData[$(this).attr("name")]= $('input[name="model"]:checked').val();
  427. }else{
  428. formData[$(this).attr("name")]= $(this).val();
  429. }
  430. });
  431. $.ajax({
  432. async : false,
  433. cache : false,
  434. type : 'POST',
  435. data : formData,
  436. url : 'activitiController.do?processComplete',// 请求的action路径
  437. error : function() {// 请求失败处理函数
  438. alert('提交申请失败');
  439. },
  440. success : function(data) {
  441. var d = data; // ------ $.parseJSON(data);
  442. //alert('d.success'+d.success);
  443. if (d.success) {
  444. $("#bpmlogId").val(d.obj.id);
  445. if($(".uploadify-queue-item").length>0){
  446. upload();
  447. }else{
  448. var msg = d.msg;
  449. W.tip(msg);
  450. W.reloadTable();
  451. windowapi.close();
  452. }
  453. }else{
  454. var msg = d.msg;
  455. //W.tip(msg);
  456. alert(msg);
  457. }
  458. }
  459. });
  460. }
  461. </script>
  462. </body>
  463. </html>