conditionScriptAddDialog.jsp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@include file="/commons/include/html_doctype.html"%>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <%@include file="/commons/include/form.jsp"%>
  8. <title>条件脚本添加对话框</title>
  9. <f:link href="form.css" ></f:link>
  10. <script type="text/javascript" src="${ctx}/js/hotent/CustomValid.js"></script>
  11. <script type="text/javascript" src="${ctx}/js/hotent/formdata.js"></script>
  12. <!--<script type="text/javascript"src="${ctx}/js/hotent/platform/system/ConditionScriptAddDialog.js"></script>-->
  13. <script type="text/javascript"src="${ctx}/js/hotent/platform/system/ConditionScriptDialog.js"></script>
  14. <script type="text/javascript" src="${ctx}/js/hotent/platform/system/SysDialog.js"></script>
  15. <script type="text/javascript" src="${ctx}/js/hotent/platform/form/FormUtil.js"></script>
  16. <script type="text/javascript" src="${ctx}/js/hotent/platform/form/SelectorInit.js"></script>
  17. <script type="text/javascript" src="${ctx}/js/hotent/platform/form/CommonDialog.js"></script>
  18. <script type="text/javascript">
  19. /*KILLDIALOG*/
  20. var dialog = frameElement.dialog; //调用页面的dialog对象(ligerui对象)
  21. //var winArgs = window.dialogArguments;
  22. var winArgs =dialog.get('data');
  23. var defId = winArgs.defId;
  24. $(function(){
  25. $(':input[id="dialog"]').live('click',function(){
  26. var target = $(this).attr('param');
  27. var dialog = $(this).attr('dialog');
  28. var me = $(this);
  29. CommonDialog(dialog,function(data){
  30. if(Object.prototype.toString.call((data)) == '[object Array]'){
  31. for(var i=0,d;d=data[i++];){
  32. me.closest('div').find('[name="paraValID"]').val(d[target]);
  33. me.closest('div').find('[name="paraVal"]').val(d[target]);
  34. }
  35. }else{
  36. me.closest('div').find('[name="paraValID"]').val(data[target]);
  37. me.closest('div').find('[name="paraVal"]').val(data[target]);
  38. }
  39. });
  40. });
  41. });
  42. function formSave(obj){
  43. var _this=$(obj);
  44. var form=$('#ruleConditionScriptForm').form();
  45. form.setData();
  46. var json =$('textarea[name="json"]',form).val();
  47. var _this = $(obj);
  48. var script = getScriptJson();
  49. var status = script?1:0;
  50. var winRtn = {
  51. status:status,
  52. data:{
  53. script:script
  54. }
  55. };
  56. //window.returnValue = winRtn;
  57. dialog.get('sucCall')(winRtn);
  58. dialog.close();
  59. };
  60. function getScriptJson(){
  61. var conditionScriptObj = $("[name='condScriptId']").data("conditionScriptObj");
  62. if(!conditionScriptObj){
  63. return null;
  64. }
  65. if(!$.isPlainObject(conditionScriptObj.argument)){
  66. if($.type(conditionScriptObj.argument)=='string'){
  67. conditionScriptObj.argument=$.parseJSON(conditionScriptObj.argument);
  68. }
  69. }
  70. var json={};
  71. $(".para-info-table .param-tr").each(function(i,e){
  72. var _this = $(this);
  73. var paraValType = $("[name='paraValType']",_this).val();
  74. if(!conditionScriptObj.argument[i]){
  75. conditionScriptObj.argument[i]={};
  76. }
  77. conditionScriptObj.argument[i].paraValType = paraValType;
  78. switch(paraValType){
  79. case '1':
  80. conditionScriptObj.argument[i].paraVal = $("[name='flowVar']",_this).val();
  81. conditionScriptObj.argument[i].paraValName = $("[name='flowVar'] option:selected",_this).text();
  82. break;
  83. case '2':
  84. conditionScriptObj.argument[i].paraVal = $("[name='paraValID']",_this).val();
  85. conditionScriptObj.argument[i].paraValName = $("[name='paraVal']",_this).val();
  86. break;
  87. }
  88. });
  89. json = $.extend(true,json,conditionScriptObj);
  90. return json;
  91. };
  92. var conditionScripts={};
  93. /**
  94. * 条件脚本变更处理
  95. * @param obj
  96. * @returns
  97. */
  98. function conditionScriptChange(obj){
  99. var me = $(obj);
  100. var json = me.data("conditionScriptObj");
  101. if(json){
  102. var params = json.argument;
  103. if($.type(params)=='string'){
  104. params = $.parseJSON(json.argument);
  105. }
  106. constructParamTable(params);
  107. }
  108. };
  109. /**
  110. * 选择条件脚本
  111. * @param obj
  112. */
  113. function selectConditionScript(obj){
  114. var me = $(obj);
  115. ConditionScriptDialog({
  116. callback:function(data){
  117. var id = data.id;
  118. var json = getConditionScript(id);
  119. var idObj = me.parent().find("input[type='hidden']");
  120. var nameObj = me.parent().find("input[type='text']");
  121. if(json){
  122. idObj.val(json.id);
  123. nameObj.val(json.methodDesc);
  124. idObj.removeData("conditionScriptObj");
  125. idObj.data("conditionScriptObj",json);
  126. idObj.trigger("change");
  127. }
  128. }
  129. });
  130. };
  131. /**
  132. * 根据条件脚本ID,取得脚本脚本
  133. * @param id
  134. * @returns
  135. */
  136. function getConditionScript(id){
  137. if(conditionScripts[id]){
  138. json = conditionScripts[id];
  139. return json;
  140. }
  141. var url =__ctx+ "/platform/system/conditionScript/getJson.ht";
  142. var params={
  143. id:id
  144. };
  145. var json;
  146. $.ajax({
  147. url:url,
  148. async:false,
  149. data:params
  150. }).done(function(data){
  151. if(!data.status){
  152. json = data.conditionScript;
  153. }else{
  154. //TODO error handle
  155. }
  156. });
  157. conditionScripts[id]=json;
  158. return json;
  159. }
  160. /**
  161. * 构造参数信息表
  162. * @param params
  163. * @returns
  164. */
  165. function constructParamTable(params){
  166. if(!params){
  167. params=[];
  168. }
  169. var paramTableBody = $(".para-info-table tbody").empty();
  170. for(var i=0;i<params.length;i++){
  171. var p = params[i];
  172. var tr = constructParamTr(p);
  173. paramTableBody.append(tr);
  174. tr.data("param",p);
  175. $('[name="paraValType"]',tr).trigger("change");
  176. }
  177. };
  178. /**
  179. * 构造 参数 行
  180. */
  181. function constructParamTr(p){
  182. var tr = $(".param-tr-template").clone().removeClass("param-tr-template");
  183. $("[name='paraName']",tr).text(p.paraName);
  184. $("[name='paraType']",tr).text(p.paraType);
  185. $("[name='paraDesc']",tr).text(p.paraDesc);
  186. return tr;
  187. };
  188. /**
  189. * 参数值来源 变更
  190. */
  191. function paraValTypeChange(obj){
  192. var _this=$(obj);
  193. var paraValType = _this.val();
  194. var tr = _this.closest("tr");
  195. var p = tr.data("param");
  196. var paraValTd = _this.closest("td").next("td");
  197. var div=null;
  198. switch(paraValType){
  199. case '1':
  200. div = $("#template-container [name='flowVars-div']").clone();
  201. break;
  202. case '2':
  203. var input = getInput(p);
  204. div = $("#template-container [name='custom-div']").clone();
  205. div.append(input);
  206. if(p.dialog){
  207. var dialog = '<input type="button" value="…" id="dialog" dialog="'+p.dialog+'" param="'+p.target+'"/>';
  208. div.append(dialog);
  209. }
  210. break;
  211. }
  212. paraValTd.empty().append(div);
  213. };
  214. /**
  215. * 操作类型变更处理
  216. * @param obj 事件源对象
  217. */
  218. function getInput(p){
  219. var ct = p.paraCt;
  220. ct = ""+ct;
  221. var valueName = "paraValID";
  222. // var datefmt = "YYYY-MM-DD"
  223. var getNormalInput = function(){
  224. input = $("#normal-input").clone(true,true).removeAttr("id").attr("name",valueName);
  225. return input;
  226. };
  227. var getSelector = function(str){
  228. var value="paraVal";
  229. var control = $("#"+str).clone(true,true).removeAttr("id");
  230. $("input[type='text']",control).attr("name","paraVal");
  231. $("input[type='hidden']",control).attr("name",valueName);
  232. $("a.link",control).attr("name",value);
  233. return control;
  234. };
  235. // var dateInput = function(){
  236. // dateInput = $("#date-input").clone(true,true).removeAttr("id").attr("datefmt",datefmt).attr("name",valueName);
  237. // };
  238. var dicInput = function(){
  239. var control = getDicControl(flowVarOptioin,container).attr("name",valueName);
  240. return control;
  241. };
  242. var input;
  243. switch(ct){
  244. case "4"://用户单选
  245. case "8"://用户多选
  246. str = "user-div";
  247. input = getSelector(str);
  248. break;
  249. case "5"://角色
  250. case "17"://角色
  251. str = "role-div";
  252. input = getSelector(str);
  253. break;
  254. case "6"://组织
  255. case "18"://组织
  256. str = "org-div";
  257. input = getSelector(str);
  258. break;
  259. case "7"://岗位
  260. case "19"://岗位
  261. str = "position-div";
  262. input = getSelector(str);
  263. break;
  264. default:
  265. input = getNormalInput();
  266. }
  267. return input;
  268. };
  269. </script>
  270. </head>
  271. <body>
  272. <div class="panel">
  273. <div class="panel-top">
  274. <div class="tbar-title">
  275. <span class="tbar-label">条件脚本添加对话框</span>
  276. </div>
  277. <div class="panel-toolbar">
  278. <div class="toolBar">
  279. <div class="group"><a class="link save" onclick="formSave(this)" id="dataFormSave" href="javascript:;"><span></span>确定</a></div>
  280. <div class="l-bar-separator"></div>
  281. <div class="group"><a class="link close" onclick="dialog.close()"><span></span>关闭</a></div>
  282. </div>
  283. </div>
  284. </div>
  285. <div class="panel-body">
  286. <form id="ruleConditionScriptForm">
  287. <table class="table-detail" cellpadding="0" cellspacing="0" border="0" type="main">
  288. <tr>
  289. <th>条件脚本:</th>
  290. <td>
  291. <input type="hidden" name="condScriptId" value="" onchange="conditionScriptChange(this)">
  292. <input type="text" name="condScriptName" readonly="readonly" />
  293. <a class="link detail" onclick="selectConditionScript(this)">选择</a>
  294. </td>
  295. </tr>
  296. </table>
  297. <table class="table-detail para-info-table" cellpadding="0" cellspacing="0" border="0">
  298. <thead>
  299. <tr>
  300. <th width="10%">参数名称</th>
  301. <th width="25%">参数类型</th>
  302. <th width="25%">参数说明</th>
  303. <th colspan="3">参数值</th>
  304. </tr>
  305. </thead>
  306. <tbody>
  307. </tbody>
  308. </table>
  309. </form>
  310. </div>
  311. <div id="template-container" style="display: none">
  312. <table>
  313. <tr class="param-tr-template param-tr">
  314. <td><span name="paraName"></span></td>
  315. <td><span name="paraType"></span></td>
  316. <td><span name="paraDesc"></span></td>
  317. <td>
  318. <select name="paraValType" onchange="paraValTypeChange(this)">
  319. <option value="1">流程变量</option>
  320. <option value="2">固定值</option>
  321. </select>
  322. </td>
  323. <td>
  324. </td>
  325. </tr>
  326. </table>
  327. <div name="flowVars-div">
  328. <f:flowVar defId="${defId}" controlName="flowVar"></f:flowVar>
  329. </div>
  330. <div name="custom-div">
  331. <div name="paraValueDiv"></div>
  332. </div>
  333. <!-- 规则模板 -->
  334. <%@include file="/commons/include/nodeRuleTemplate.jsp" %>
  335. </div>
  336. </body>
  337. </html>