bpmNewFlowTriggerEdit.jsp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. <%@page language="java" pageEncoding="UTF-8"%>
  2. <%@include file="/commons/include/html_doctype.html"%>
  3. <html>
  4. <head>
  5. <title>编辑 触发新流程配置</title>
  6. <%@include file="/commons/include/form.jsp" %>
  7. <script type="text/javascript" src="${ctx}/js/hotent/CustomValid.js"></script>
  8. <script type="text/javascript" src="${ctx}/js/hotent/platform/system/SysDialog.js"></script>
  9. <script type="text/javascript" src="${ctx}/js/hotent/platform/system/BpmDefinitionDialog.js"></script>
  10. <f:link href="tree/zTreeStyle.css"></f:link>
  11. <script type="text/javascript" src="${ctx}/js/tree/jquery.ztree.js"></script>
  12. <script type="text/javascript" src="${ctx}/js/util/ZtreeCreator.js"></script>
  13. <link href="${ctx}/js/jquery/plugins/token-input-facebook.css" rel="stylesheet" type="text/css" />
  14. <script type="text/javascript" src="${ctx}/js/jquery/plugins/jquery.tokeninput.js"></script>
  15. <script type="text/javascript">
  16. var actDefId = '${actDefId}';
  17. var nodeId = '${nodeId}';
  18. var curFormTree,triggerFromTree;
  19. var triggerJson = $.parseJSON('${bpmNewFlowTrigger.triggerJson}');
  20. var jsonmaping = $.parseJSON('${bpmNewFlowTrigger.jsonmaping}');
  21. $(function() {
  22. $("a.save").click(function() {
  23. $("#bpmNewFlowTriggerForm").attr("action","save.ht");
  24. if(curFormTree && triggerFromTree){
  25. $("#jsonmaping").val(JSON.stringify(curFormTree.getNodes()));
  26. $("#triggerJson").val(JSON.stringify(triggerFromTree.getNodes()));
  27. }
  28. submitForm();
  29. });
  30. loadCurFormTree(jsonmaping);
  31. loadTriggerFormTree(triggerJson);
  32. $(".token-input").each(function(){
  33. var _this=$(this);
  34. _this.tokenInput([],{theme:"facebook",onDelete:deleteBpmUserCondition});
  35. //初始化原有数据
  36. var recs = _this.val();
  37. if(!recs){
  38. return;
  39. }
  40. var conds = $.parseJSON(recs);
  41. var tokenData=getTokensFromConditions(conds);
  42. $(tokenData).each(function(){
  43. _this.tokenInput("add",this);
  44. });
  45. });
  46. });
  47. //提交表单
  48. function submitForm(){
  49. var options={};
  50. if(showResponse){
  51. options.success=showResponse;
  52. }
  53. var frm=$('#bpmNewFlowTriggerForm').form();
  54. frm.ajaxForm(options);
  55. if(frm.valid()){
  56. frm.submit();
  57. }
  58. }
  59. function showResponse(responseText) {
  60. var obj = new com.hotent.form.ResultMessage(responseText);
  61. if (obj.isSuccess()) {
  62. $.ligerDialog.success(obj.getMessage(),"提示信息",function(){
  63. window.location.reload();
  64. });
  65. } else {
  66. $.ligerDialog.err("提示信息","触发新流程配置保存失败!",obj.getMessage());
  67. }
  68. }
  69. //选择流程定义
  70. function selectDefinition(){
  71. BpmDefinitionDialog({isSingle:true,showAll:1,returnDefKey:true,defMark:"key",callback:function(defIds,subjects,defKeys){
  72. $("#triggerflowkey").val(defKeys);
  73. $("#triggerflowname").val(subjects);
  74. loadTriggerFormTree();
  75. loadCurFormTree();
  76. }});
  77. }
  78. function loadCurFormTree(json){
  79. var url = '${ctx}/platform/bpm/bpmNewFlowTrigger/getTableTreeByDefkey.ht?defKey=${flowKey}&type=cur'
  80. var ztreeCreator = new ZtreeCreator('curFormTree',url,json)
  81. .setDataKey({idKey:"fieldId",pIdKey:"tableId",name:"fieldDesc"})
  82. .setCallback({beforeDrag: beforeDrag,beforeDrop:beforeDrop})
  83. .initZtree({},function(treeObj){curFormTree=treeObj;});
  84. }
  85. function loadTriggerFormTree(json){
  86. var defKey = $("#triggerflowkey").val();
  87. if(!defKey) {
  88. return ;
  89. }
  90. var url = '${ctx}/platform/bpm/bpmNewFlowTrigger/getTableTreeByDefkey.ht?defKey='+defKey
  91. var ztreeCreator = new ZtreeCreator('triggerFromTree',url,json)
  92. .setDataKey({idKey:"fieldId",pIdKey:"tableId",name:"fieldDesc"})
  93. .setCallback({beforeDrag:beforeDrag,beforeDrop:beforeDrop,onDrop:onDrop})
  94. .initZtree({},function(treeObj){triggerFromTree = treeObj;});
  95. }
  96. function beforeDrag(treeId, treeNodes) {
  97. for (var i=0,l=treeNodes.length; i<l; i++) {
  98. if (treeNodes[i].fieldType == 'table' || treeNodes[i].style == 'cur') {
  99. return false;
  100. }
  101. }
  102. return true;
  103. }
  104. function beforeDrop(treeId, treeNodes, targetNode, moveType) {
  105. //cur =A; trigger = B
  106. //B表to A表,且只能挂A字段之上。
  107. //可以回挂至B表上。
  108. if(moveType !='inner'
  109. || (targetNode.style=='trigger' && targetNode.fieldType != 'table')
  110. || (targetNode.fieldType == 'table' && targetNode.style=='cur')){
  111. return false;
  112. }
  113. //返回目标节点
  114. if(targetNode.fieldType == 'table' && targetNode.style=='trigger'){
  115. if(targetNode.fieldName != treeNodes[0].oldTableName){
  116. $("#span1").html("你回错家了。parentTable:"+treeNodes[0].oldTableName );
  117. return false;
  118. }
  119. $("#span1").html(""); return true;
  120. }
  121. //如果A某表字段已经存在B某子表挂接,则不能再挂接B其他表。//暂时不考虑treeNodes 多个情况
  122. var targetTable = targetNode.getParentNode();
  123. var triggerTable = treeNodes[0].getParentNode();
  124. // 主表对主表。子表对子表 后台将Table.ismain给了type
  125. if(targetTable.type != triggerTable.type){
  126. $("#span1").html(targetTable.type ==1?"主表只接受主表字段映射":"子表只接受子表映射");
  127. return false;
  128. }
  129. if(targetTable.triggerTableName && targetTable.triggerTableName != triggerTable.fieldName){
  130. $("#span1").html("目标节点只接受 "+targetTable.triggerTableName+"字段");
  131. return false;
  132. }
  133. targetTable.triggerTableName = triggerTable.fieldName;
  134. targetTable.targetTableDesc = triggerTable.fieldDesc;
  135. treeNodes[0].oldTableName = triggerTable.fieldName;
  136. treeNodes[0].targetTableName = targetTable.fieldName;
  137. $("#span1").html("");
  138. return true;
  139. }
  140. //var jsonmaping = {main:{},sub:{}};
  141. //{main:{AField:BField,Af2:Bf2},sub{A{from:"B",field{AField:BField,Af2:Bf2}}}}
  142. function onDrop(event, treeId, treeNodes, targetNode, moveType){
  143. // 暂时不构建关系树,直接使用当前树
  144. return;
  145. var triggerFiled = treeNodes[0].getParentNode();
  146. var targetTable = targetNode.getParentNode();
  147. //返回trigger表
  148. if(targetNode.fieldType =='table'){
  149. if(targetTable.type == 1){
  150. removeField(jsonmaping.main[targetTable.fieldName],treeNodes[0].fieldName);
  151. }else{
  152. var targerField = jsonmaping.sub[treeNodes[0].targetTableName].fields[triggerFiled.fieldName];
  153. removeField(targerField,treeNodes[0].fieldName);
  154. }
  155. return;
  156. }
  157. //匹配主表字段
  158. if(targetTable.type == 1){
  159. if(jsonmaping.main[targetNode.fieldName])
  160. alert("")
  161. }else{
  162. var subTableMapping = jsonmaping.sub[targetTable.fieldName];
  163. if(!subTableMapping) {
  164. subTableMapping = {from:"",fields:{}};
  165. subTableMapping.from =targetTable.triggerTableName;
  166. }
  167. addField(subTableMapping.from.fields[targetNode.fieldName],treeNodes[0].fieldName);
  168. }
  169. }
  170. function removeField(targer,trigger){
  171. var fields =targer.split("-");
  172. var newField="";
  173. for(var i=0,field;field =fields[i];){
  174. if(field != trigger){
  175. if(i>0)newField+"-"
  176. newField = newField+field;
  177. }
  178. }
  179. targer =newField;
  180. }
  181. //设置人员的
  182. function getTokensFromConditions(conds){
  183. var tokenData=[];
  184. for(var i=0;i<conds.length;i++){
  185. var id = conds[i].id;
  186. var name = "批次号["+conds[i].groupNo+"] - "+conds[i].conditionShow;
  187. tokenData.push({id:id,name:name});
  188. }
  189. return tokenData;
  190. };
  191. //设置消息接收人
  192. function receiverSetting(type){
  193. var hw = $.getWindowRect();
  194. var dialogWidth = hw.width*9/10;
  195. var dialogHeight = hw.height*9/10;
  196. var url = __ctx+"/platform/bpm/bpmNodeMessage/receiverSetting.ht?actDefId="+actDefId+"&nodeId=newFlow_"+nodeId+"&type="+type;
  197. var winArgs="dialogWidth="+dialogWidth+"px;dialogHeight="+dialogHeight+"px;help:0;status:0;scroll:1;center:1;resizable:1";
  198. url=url.getNewUrl();
  199. //var rtn = window.showModalDialog(url,"",winArgs);
  200. //window.location.reload();
  201. //reloadToken(type);
  202. /*KILLDIALOG*/
  203. DialogUtil.open({
  204. height:dialogHeight,
  205. width: dialogWidth,
  206. title : '消息接收人',
  207. url: url,
  208. isResize: true,
  209. //自定义参数
  210. sucCall:function(rtn){
  211. reloadToken(type);
  212. }
  213. });
  214. };
  215. function reloadToken(type){
  216. var url = __ctx+"/platform/bpm/bpmNodeMessage/getReceiverUserCondition.ht";
  217. var param = {
  218. actDefId:actDefId,
  219. nodeId:nodeId,
  220. receiverType:type
  221. }
  222. var tokenContainer = $(".token-input[rtype="+type+"]");
  223. $.post(url,param,function(data){
  224. if(!data.status){
  225. var tokenData=getTokensFromConditions(data.conditions);
  226. tokenContainer.tokenInput("clearOnly");
  227. $(tokenData).each(function(){
  228. tokenContainer.tokenInput("add",this);
  229. });
  230. }else{
  231. $.ligerDialog.error("重新加载出错!","出错");
  232. }
  233. });
  234. };
  235. function deleteBpmUserCondition(data){
  236. var tokenContainer = $(this);
  237. var type = tokenContainer.attr("rtype");
  238. var id=data.id;
  239. var url =__ctx + '/platform/bpm/bpmUserCondition/delByAjax.ht';
  240. $.post(url,{id:id},function(t){
  241. var resultData=eval('('+t+')');
  242. if(!resultData.result){
  243. $.ligerDialog.error("删除出错!","出错提示");
  244. reloadToken(type);
  245. }
  246. });
  247. };
  248. function del(){
  249. var id = $("#triggerId").val();
  250. var url =__ctx + '/platform/bpm/bpmNewFlowTrigger/del.ht';
  251. if(id)
  252. $.post(url,{id:id},function(data){
  253. var obj = new com.hotent.form.ResultMessage(data);
  254. if (obj.isSuccess()) {
  255. $.ligerDialog.success(obj.getMessage(),"提示信息",function(){
  256. window.location.reload();
  257. });
  258. } else {
  259. $.ligerDialog.err("提示信息","联动设置保存失败!",obj.getMessage());
  260. }
  261. });
  262. };
  263. </script>
  264. <style type="text/css">
  265. ul.ztree {margin-top: 10px;border: 1px solid #617775;background: #f0f6e4;width:220px;height:360px;overflow-y:scroll;overflow-x:auto;}
  266. </style>
  267. </head>
  268. <body>
  269. <div class="panel">
  270. <div class="panel-top">
  271. <div class="tbar-title">
  272. <c:choose>
  273. <c:when test="${bpmNewFlowTrigger.id !=null}">
  274. <span class="tbar-label"><span></span>编辑触发新流程配置</span>
  275. </c:when>
  276. <c:otherwise>
  277. <span class="tbar-label"><span></span>添加触发新流程配置</span>
  278. </c:otherwise>
  279. </c:choose>
  280. </div>
  281. <div class="panel-toolbar">
  282. <div class="toolBar">
  283. <div class="group"><a class="link save" id="dataFormSave" href="#"><span></span>保存</a></div>
  284. <div class="group"><a class="link del" id="dataFormSave" onclick="del()" href="#"><span></span>删除</a></div>
  285. </div>
  286. </div>
  287. </div>
  288. <div class="panel-body">
  289. <form id="bpmNewFlowTriggerForm" method="post" action="save.ht">
  290. <table class="table-detail" cellpadding="0" cellspacing="0" border="0" type="main">
  291. <tr>
  292. <th width="20%">名称: </th>
  293. <td><input type="text" id="name" name="name" value="${bpmNewFlowTrigger.name}" class="inputText" validate="{required:false,maxlength:765}" /></td>
  294. <th width="20%">节点: </th>
  295. <td><input type="text" id="nodeid" name="nodeid" value="${empty bpmNewFlowTrigger ? nodeId:bpmNewFlowTrigger.nodeid}" class="inputText" validate="{required:true,maxlength:765}" /></td>
  296. </tr>
  297. <tr>
  298. <th width="20%">触发动作: </th>
  299. <td>
  300. <select id="action" name="action">
  301. <option value="agree" <c:if test="${bpmNewFlowTrigger.action eq 'agree'}">selected="selected"</c:if>>同意</option>
  302. <option value="opposite" <c:if test="${bpmNewFlowTrigger.action eq 'opposite'}">selected="selected"</c:if>>反对</option>
  303. <option value="reject" <c:if test="${bpmNewFlowTrigger.action eq 'reject'}">selected="selected"</c:if>>驳回</option>
  304. <option value="delete" <c:if test="${bpmNewFlowTrigger.action eq 'delete'}">selected="selected"</c:if>>删除</option>
  305. </select>
  306. <th width="20%">启动新流程选择: </th>
  307. <td><input type="hidden" id="triggerflowkey" name="triggerflowkey" value="${bpmNewFlowTrigger.triggerflowkey}" class="inputText" />
  308. <input type="text" readonly name="triggerflowname" id="triggerflowname" value="${bpmNewFlowTrigger.triggerflowname}" validate="{required:true,maxlength:765}">
  309. <a class="link add" herf="#" onclick="selectDefinition()">选择流程</a>
  310. </td>
  311. </tr>
  312. <tr>
  313. <th width="20%">发起人配置:</th>
  314. <td colspan="3">
  315. <textarea rtype="8" id="starUser" class="token-input" name="starUser" rows="3" readonly="readonly" style="width:328px !important">${starUserCondition}</textarea>
  316. <a href="javascript:;" onclick="receiverSetting(8)" class="link edit">设置</a>
  317. </td>
  318. </tr>
  319. <tr>
  320. <th width="20%">描述: </th>
  321. <td colspan="3"><textarea id="note" name="note" class="inputText" validate="{required:false,maxlength:765}" >${bpmNewFlowTrigger.note}</textarea></td>
  322. </tr>
  323. </table>
  324. <input type="hidden" id="triggerId" name="id" value="${bpmNewFlowTrigger.id}" />
  325. <input type="hidden" id="triggerJson" name="triggerJson" value="${bpmNewFlowTrigger.triggerJson}" />
  326. <input type="hidden" id="jsonmaping" name="jsonmaping" value="${bpmNewFlowTrigger.jsonmaping}" />
  327. <input type="hidden" id="flowkey" name="flowkey" value="${empty bpmNewFlowTrigger ? flowKey : bpmNewFlowTrigger.flowkey}"/>
  328. </form>
  329. <table>
  330. <thead>
  331. <tr>
  332. <th>当前流程表单</th>
  333. <th></th>
  334. <th>新流程表单</th>
  335. </tr>
  336. </thead>
  337. <tr>
  338. <th colspan="3">  <span id="span1" style="color: red;"></span></td>
  339. </tr>
  340. <tr>
  341. <td><ul id="curFormTree" class="ztree"></ul></td>
  342. <td style="width: 30px"></td>
  343. <td><ul id="triggerFromTree" class="ztree"></ul></td>
  344. </tr>
  345. </table>
  346. </div>
  347. </div>
  348. </body>
  349. </html>