ScriptEdit.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. /**
  2. * 下拉选项模版。
  3. */
  4. var optiontemplate = '<option value="#value">#text</option>';
  5. $(function(){
  6. getDialogs();
  7. $("select[name='methodName']").change(methodChange);
  8. $('select[name="paraCt"]').live('change',function(){
  9. var parentDiv = $(this).closest('div');
  10. if($(this).val()==0){
  11. $('#settingSpan',parentDiv).show();
  12. }
  13. else{
  14. $('#settingSpan',parentDiv).hide();
  15. }
  16. });
  17. });
  18. //获取自定义对话框
  19. function getDialogs(){
  20. var url = __ctx + '/platform/form/bpmFormDialog/getAllDialogs.ht';
  21. $.ajax({
  22. type:"get",
  23. async:false,
  24. url:url,
  25. success:function(data){
  26. if (data) {
  27. for(var i=0,c;c=data[i++];){
  28. var opt = $('<option value="'+c.alias+'">'+c.name+'</option>');
  29. opt.attr("fields",c.resultfield);
  30. $("select[name='dialog-type']",$("#settingSpan")).append(opt);
  31. }
  32. }
  33. }
  34. });
  35. };
  36. //选择不同的对话框
  37. function dialogChange(obj){
  38. var dia=$(obj).find("option:selected");
  39. var v = dia.attr("fields");
  40. if(v){
  41. var paramSelector = $(obj).siblings("#dialog-param");
  42. var opt = paramSelector.find("option:first-child");
  43. paramSelector.text('');
  44. //添加 请选择…… option
  45. paramSelector.append(opt);
  46. var fields = $.parseJSON(v);
  47. for(var i=0,f;f=fields[i++];){
  48. opt = $('<option value="'+f.field+'">'+f.comment+'</option>');
  49. paramSelector.append(opt);
  50. }
  51. }
  52. }
  53. //选择的方法事件
  54. function methodChange(){
  55. var option = $(this).find("option:selected");
  56. if(!option)return;
  57. var methodInfo = option.data('methodInfo');
  58. if(!methodInfo)return;
  59. $("input[name='returnType']").val(methodInfo.returnType);
  60. $("input[name='returnType']").trigger('change');
  61. var param = constructParamTable(methodInfo);
  62. $("#paraInfo").empty().append(param);
  63. if($('#typeName').val()=="text"){
  64. $("input[name='paraName']").each(function(n){
  65. $(this).blur(function(){
  66. var me = $(this);
  67. var paraValue = me.val();
  68. $("input[name='paraName']").not(this).each(function(m){
  69. var other = $(this);
  70. var value = other.val();
  71. if('undefined' != typeof (paraValue) && paraValue!=null && paraValue!='' && paraValue == value ){
  72. alert('参数值不能为空!');
  73. return false;
  74. }
  75. });
  76. });
  77. });
  78. }
  79. };
  80. //获取该类的方法
  81. function getMethods(url){
  82. $.post(url,'',function(r){
  83. var data = eval("("+r+")");
  84. if(data.result){
  85. var methods = data.methods,
  86. methodSelect = $("select[name='methodName']").empty(),
  87. methodName = $("#methodName").val();
  88. for(var i=0,c;c=methods[i++];){
  89. var newOpt = $('<option></option>').val(c.methodName).text(c.methodName);
  90. if(c.methodName == methodName){
  91. var paraData = $("textarea[name='argument']").val();
  92. if(paraData){
  93. paraData = eval("("+paraData+")");
  94. c.para = paraData;
  95. }
  96. $(newOpt).attr("selected",true);
  97. }
  98. $(newOpt).data('methodInfo',c);
  99. methodSelect.append(newOpt);
  100. }
  101. methodSelect.trigger("change");
  102. }
  103. else{
  104. $.ligerDialog.error(data.message,'出错了!');
  105. }
  106. });
  107. }
  108. //根据表单ID保存并提交
  109. function save(formId){
  110. //验证
  111. var frm=$('#'+formId);
  112. if(!frm.valid()) return ;
  113. var isReturnFalse = false;
  114. var settingSpan = $("[id='settingSpan']");
  115. var setting;
  116. for(var i=0;i<settingSpan.length;i++){
  117. setting = settingSpan[i];
  118. if($(setting).css('display')=='none') continue ;
  119. var dialog = $(setting).find('#dialog-type');
  120. var param = $(setting).find('#dialog-param');
  121. var paraName = $(setting).closest('tr').find('[name="paraName"]').text();
  122. if(!dialog.val()){
  123. $.ligerDialog.warn("请选择参数【"+paraName+"】所要绑定的对话框!",'提示');
  124. isReturnFalse = true;
  125. break;
  126. }else if(!param.val()){
  127. $.ligerDialog.warn("请选择参数【"+paraName+"】对应的对话框返回值!",'提示');
  128. isReturnFalse = true;
  129. break;
  130. }
  131. };
  132. if(isReturnFalse) return false;
  133. var json = getTrJson();
  134. json = JSON2.stringify(json);
  135. if(json=='[]'){
  136. json='';
  137. }
  138. $("textarea[name='argument']").val(json);
  139. $("#"+formId).submit();
  140. };
  141. /**
  142. * 获取参数行的JSON字符口串
  143. */
  144. function getTrJson(){
  145. var json = [];
  146. $("#paraInfo").find("tr").each(function(){
  147. var me = $(this);
  148. var paraNameSpan;
  149. if($('#typeName').val()=="text"){
  150. paraNameSpan = $("input[name='paraName']",me);
  151. }else{
  152. paraNameSpan = $("span[name='paraName']",me);
  153. }
  154. if(!paraNameSpan||paraNameSpan.length==0)return true;
  155. var paraTypeSpan = $("span[name='paraType']",me),
  156. paraDescInput = $("input[name='paraDesc']",me),
  157. paraCtlTypeSelect = $("[name='paraCt']",me),
  158. job = {};
  159. if($('#typeName').val()=="text"){
  160. job.paraName = paraNameSpan.val();
  161. $("input[name='isRequired']",me).each(function(){
  162. if($(this).attr("checked")=="checked"){
  163. job.isRequired = 1;
  164. }else{
  165. job.isRequired = 0;
  166. }
  167. });
  168. }else{
  169. job.paraName = paraNameSpan.text();
  170. }
  171. job.paraType = paraTypeSpan.text();
  172. job.paraDesc = paraDescInput.val();
  173. job.paraCt = paraCtlTypeSelect.val();
  174. if($('#settingSpan',me).css('display')!='none'){
  175. var dialog = $("select[name='dialog-type']",me),
  176. target = $("select[name='dialog-param']",me);
  177. job.dialog = dialog.val();
  178. job.target = target.val();
  179. }
  180. json.push(job);
  181. });
  182. return json;
  183. };
  184. function showResponse(r){
  185. var data = eval("("+r+")");
  186. if(data.result){
  187. $.ligerDialog.success(data.message,'操作成功!',function(){
  188. window.location.href = 'list.ht';
  189. });
  190. }
  191. else{
  192. $.ligerDialog.warn(data.message,'出错了!');
  193. }
  194. }
  195. /**
  196. * 创建参数表格
  197. */
  198. function constructParamTable(params){
  199. var table = $("#para-txt table").clone();
  200. var tbody = $("tbody",table).empty();
  201. for(var i=0;i<params.para.length;i++){
  202. var p = params.para[i];
  203. var tr = constructParamTr(p);
  204. tbody.append(tr);
  205. }
  206. return table;
  207. };
  208. /**
  209. * 创建参数表格行
  210. */
  211. function constructParamTr(p){
  212. var tr = $("#para-txt table tbody tr").clone();
  213. if($('#typeName').val()=="text"){
  214. $("input[name='paraName']",tr).val(p.paraName);
  215. $("input[name='paraName']",tr).attr("validate","{'required':true}");
  216. if(p.isRequired==1){
  217. $("input[name='isRequired']",tr).each(function(){
  218. $(this).attr("checked","checked");
  219. });
  220. }
  221. }else{
  222. $("[name='paraName']",tr).text(p.paraName);
  223. }
  224. $("[name='paraType']",tr).text(p.paraType);
  225. $("[name='paraDesc']",tr).val(p.paraDesc);
  226. $("[name='paraCt']",tr).val(p.paraCt);
  227. if(p.dialog){
  228. var settingSpan = $('#settingSpan',tr);
  229. settingSpan.show();
  230. $("#dialog-type",settingSpan).find("option[value='"+p.dialog+"']").attr("selected","selected");
  231. dialogChange($("#dialog-type",settingSpan));
  232. $("#dialog-param",settingSpan).find("option[value='"+p.target+"']").attr("selected","selected");
  233. }
  234. return tr;
  235. };
  236. /**
  237. * 预览脚本效果
  238. */
  239. function previewScript(){
  240. var scriptType = $("#scriptType").val();
  241. //自定义类型custom\\默认类型
  242. if(scriptType=='custom'){
  243. //先保存脚本编辑器内容到scriptComten
  244. InitMirror.save();
  245. var scriptComten = $("#scriptComten").val();
  246. exeCustomScript(scriptComten,"edit");
  247. }else{
  248. var classInsName = $("input[name='classInsName']").val();
  249. var methodName = $("select[name='methodName']").val();
  250. var json = getTrJson();
  251. exeScript(classInsName,methodName,json);
  252. }
  253. };
  254. //执行脚本方法
  255. function exeCustomScript(scriptComten,type){
  256. if(typeof(scriptComten)==undefined||scriptComten==null||scriptComten==''){
  257. alert("脚本内容不能为空!");
  258. return false;
  259. }
  260. var url= __ctx + '/platform/system/aliasScript/toCustomPreview.ht';
  261. var conf={ scriptComten:scriptComten,type:type };
  262. var winArgs="dialogWidth:800px;dialogHeight:600px;help:0;status:0;scroll:1;center:1";
  263. url=url.getNewUrl();
  264. /*KILLDIALOG*/
  265. DialogUtil.open({
  266. height:600,
  267. width: 800,
  268. title : '执行脚本方法',
  269. url: url,
  270. isResize: true,
  271. //自定义参数
  272. conf: conf,
  273. sucCall:function(returnValue){
  274. if(typeof(returnValue)!=undefined&&returnValue!=null&&type=="edit"){
  275. //编辑进入的方法才有返回值代码
  276. InitMirror.editor.setCode(returnValue);
  277. }
  278. }
  279. });
  280. };
  281. //执行脚本方法
  282. function exeScript(classInsName,methodName,json){
  283. if(typeof(classInsName)==undefined||classInsName==null||classInsName==''){
  284. alert("调用类的对象名不能为空!");
  285. return false;
  286. }
  287. if(typeof(methodName)==undefined||methodName==null||methodName==''){
  288. alert("调用方法名不能为空!");
  289. return false;
  290. }
  291. var scriptStr = classInsName+"."+methodName;
  292. var url= __ctx + '/platform/system/aliasScript/toPreview.ht';
  293. var jsonStr = JSON2.stringify(json);
  294. if(typeof(jsonStr)==undefined||jsonStr==null||jsonStr=='[]'||jsonStr==''){
  295. jsonStr='';
  296. scriptStr += "()";
  297. }else{
  298. var str = '';
  299. for ( var i = 0; i < json.length; i++) {
  300. var obj = json[i];
  301. str += obj.paraName+","
  302. }
  303. str = str.substring(0, str.length-1);
  304. scriptStr += '('+str+')';
  305. }
  306. scriptStr = encodeURIComponent(scriptStr);
  307. jsonStr = encodeURIComponent(jsonStr);
  308. url += "?scriptStr="+scriptStr+"&alias="+jsonStr;
  309. var winArgs='height=500,width=700,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,status=no';
  310. url=url.getNewUrl();
  311. window.open (url,"别名脚本预览",winArgs);
  312. };