personScriptAddDialog.jsp 9.6 KB

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