expression.jsp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@include file="/commons/include/html_doctype.html"%>
  3. <%@include file="/commons/include/get.jsp"%>
  4. <html>
  5. <head>
  6. <title>规则表达式</title>
  7. <script type="text/javascript" src="${ctx}/js/lg/plugins/ligerTab.js"></script>
  8. <script type="text/javascript" src="${ctx}/js/javacode/codemirror.js"></script>
  9. <script type="text/javascript" src="${ctx}/js/javacode/InitMirror.js"></script>
  10. <script type="text/javascript" src="${ctx }/js/tree/jquery.ztree.js"></script>
  11. <script type="text/javascript" src="${ctx}/js/hotent/platform/system/expressionMakerDialog.js"></script>
  12. <link rel="stylesheet" href="${ctx }/js/tree/zTreeStyle.css" type="text/css" />
  13. <link href="${ctx}/styles/default/css/expression.css" rel="stylesheet" />
  14. <script type="text/javascript">
  15. /*KILLDIALOG*/
  16. var dialog = frameElement.dialog; //调用页面的dialog对象(ligerui对象)
  17. var calTools = [ {exp : 'like',title : 'like',msg : '类似'}, {exp : 'not',title : 'not', msg : '不是'},
  18. {exp : '||',title : 'or',msg : '或'}, {exp : '&&',title : 'and', msg : '并'},
  19. {exp : '!=',title : '!=',msg : '不等于'}, { exp : '=',title : '=',msg : '等于'},
  20. {exp : '<',title:'&lt;',msg:'小于'},{exp:'>',title : '>',msg : '大于'},
  21. {exp : ')',title : ')',msg : '右括号'}, {exp : '(', title : '(',msg : '左括号'},
  22. {exp : '/',title : '÷',msg : '除'}, {exp : '*', title : '×',msg : '乘'},
  23. {exp : '-',title : '-',msg : '减'}, {exp : '+', title : '+',msg : '加'} ],
  24. scriptTree, scriptTypes = [], varTree;
  25. function clickHandler() {
  26. var exp = $(this).attr("exp");
  27. InitMirror.editor.insertCode(exp);
  28. }
  29. //初始化运算符工具窗口
  30. function initTools() {
  31. var tool;
  32. while (tool = calTools.pop()) {
  33. var div = document.createElement("div");
  34. div.title = tool.msg;
  35. div.innerHTML = tool.title;
  36. div.className = "calTool";
  37. div.setAttribute("exp", tool.exp);
  38. div.onclick = tool.clickHandler || clickHandler;
  39. $("#tools_comment").append(div);
  40. }
  41. $(".calTool").bind("mouseenter mouseleave", function() {
  42. $(this).toggleClass("tool-hover");
  43. });
  44. $(".toolbar_btn").bind("mouseenter mouseleave", function() {
  45. $(this).toggleClass("toolbar_btn_hover");
  46. });
  47. }
  48. //脚本数据返回结果,构建脚本树
  49. function showResult(result) {
  50. var setting = {
  51. data : {
  52. key : {
  53. name : "name"
  54. },
  55. simpleData : {
  56. enable : true,
  57. idKey : "id",
  58. pIdKey : "category",
  59. rootPId : 0
  60. }
  61. },
  62. view : {
  63. selectedMulti : false
  64. },
  65. callback : {
  66. onDblClick : zTreeOnDblClick
  67. }
  68. };
  69. for ( var i = 0; i < result.length; i++) {
  70. var script = result[i];
  71. script.icon = __ctx + "/styles/default/images/icons/icons_34.png";
  72. var typeId = hasExist(script.category);
  73. if (typeId) {
  74. script.category = typeId;
  75. } else {
  76. scriptTypes.push({
  77. name : script.category,
  78. id : 0-i - 1
  79. });
  80. script.category =0- i - 1;
  81. }
  82. }
  83. var type;
  84. while (type = scriptTypes.pop()) {
  85. result.push({
  86. id : type.id,
  87. name : type.name,
  88. category : 0
  89. });
  90. }
  91. //alert(obj2str(result));字符串太长,不能全部显示,复制也不方便
  92. //用div来显示要展示的值
  93. //$("#resulttostr").html(obj2str(result));
  94. scriptTree = $.fn.zTree.init($("#scriptTree"), setting, result);
  95. scriptTree.expandAll(true);
  96. }
  97. //object 转 stirng ,测试树形数据用
  98. /*function obj2str(o){
  99. var r = [];
  100. if(typeof o == "string" || o == null) {
  101. return o;
  102. }
  103. if(typeof o == "object"){
  104. if(!o.sort){
  105. r[0]="{"
  106. for(var i in o){
  107. r[r.length]=i;
  108. r[r.length]=":";
  109. r[r.length]=obj2str(o[i]);
  110. r[r.length]=",";
  111. }
  112. r[r.length-1]="}"
  113. }else{
  114. r[0]="["
  115. for(var i =0;i<o.length;i++){
  116. r[r.length]=obj2str(o[i]);
  117. r[r.length]=",";
  118. }
  119. r[r.length-1]="]"
  120. }
  121. return r.join("");
  122. }
  123. return o.toString();
  124. }*/
  125. //判断是否已添加该脚本类型
  126. function hasExist(d) {
  127. for ( var i = 0; i < scriptTypes.length; i++) {
  128. var type = scriptTypes[i];
  129. if (type.name == d) {
  130. return type.id;
  131. }
  132. }
  133. return false;
  134. }
  135. //获取脚本数据
  136. function getScript() {
  137. var url = __ctx + "/platform/system/script/getScripts.ht";
  138. $.post(url, null, showResult);
  139. }
  140. $(function() {
  141. $("div.top_left_div").ligerTab();
  142. initTools();
  143. //getVar();
  144. getScript();
  145. });
  146. //获取流程变量,构建变量树
  147. function getVar() {
  148. var url = __ctx + "/platform/bpm/bpmDefVar/getVars.ht";
  149. $.post(url, {
  150. defId : "1343718637626"
  151. }, function(result) {
  152. var setting = {
  153. data : {
  154. key : {
  155. name : "varName"
  156. },
  157. simpleData : {
  158. enable : true,
  159. idKey : "varId"
  160. }
  161. },
  162. view : {
  163. selectedMulti : false
  164. },
  165. callback : {
  166. onDblClick : zTreeOnDblClick
  167. }
  168. };
  169. varTree = $.fn.zTree.init($("#varTree"), setting, result);
  170. varTree.expandAll(true);
  171. });
  172. }
  173. //双击树添加内容到规则表达式
  174. function zTreeOnDblClick(event, treeId, treeNode) {
  175. var str = treeNode.varKey || treeNode.script;
  176. InitMirror.editor.insertCode(str);
  177. };
  178. function valiExpression() {
  179. var script = InitMirror.editor.getCode();
  180. $.ligerDialog.waitting('正在验证,请耐心等候... ');
  181. var url = __ctx + "/platform/console/getValidateResult.ht";
  182. $.post(url, {
  183. script : script
  184. }, function(obj) {
  185. $.ligerDialog.closeWaitting();
  186. if(obj.hasError){
  187. showResultDialog("error",obj.errorMsg);
  188. }
  189. else{
  190. var html=['<table class="result_table"><tr><th>结果值类型:</th><td>'];
  191. html.push(obj.resultType);
  192. html.push('</td></tr><tr><th>结果值:</th><td>');
  193. html.push(obj.result);
  194. html.push('</td></tr></table>');
  195. showResultDialog("",html.join(''));
  196. }
  197. });
  198. };
  199. //显示验证结果
  200. function showResultDialog(type,html){
  201. var dialog = $.ligerDialog.open(
  202. {
  203. width:500,
  204. type: type,
  205. isDrag:false,
  206. title:'对话框弹出演示标题',
  207. content: html,
  208. buttons: [{ text: '确定', onclick: function(){dialog.close();} }]
  209. });
  210. }
  211. function clickCancel() {
  212. dialog.close();
  213. };
  214. function clickOk() {
  215. var v = InitMirror.editor.getCode();
  216. //window.returnValue = v;
  217. dialog.get("sucCall")(v);
  218. dialog.close();
  219. };
  220. </script>
  221. </head>
  222. <body>
  223. <div class="comment_div">
  224. <div class="top_div">
  225. <div class="top_left_div">
  226. <!-- <div title="流程变量"> -->
  227. <!-- <ul id="varTree" class="ztree expre-ul"></ul> -->
  228. <!-- </div> -->
  229. <div title="脚本">
  230. <ul id="scriptTree" class="ztree expre-ul"></ul>
  231. </div>
  232. </div>
  233. <div class="top_right_div">
  234. <div class="l-tab-links title-div">&nbsp;&nbsp;表达式运算符</div>
  235. <div id="tools_comment"></div>
  236. </div>
  237. </div>
  238. <div class="bottom_div">
  239. <div class="l-tab-links title-div">&nbsp;&nbsp;规则表达式 </div>
  240. <!--测试用 <div id="resulttostr"></div> -->
  241. <textarea id="exp_text" codemirror="true" mirrorheight="140px" cols="110" rows="6"></textarea>
  242. <div class="bottom_toolbar">
  243. <span class="calTool toolbar_btn" onclick="valiExpression()">验证表达式</span>
  244. <span class="calTool toolbar_btn" style="float: right;"
  245. onclick="clickCancel()">取消</span> <span class="calTool toolbar_btn"
  246. style="float: right;" onclick="clickOk()">确定</span>
  247. </div>
  248. </div>
  249. </div>
  250. </body>
  251. </html>