DecisionTree.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. /**
  2. * Created by Jacky.gao on 2016/2/22.
  3. */
  4. DecisionTree=function(container){
  5. this.container=container;
  6. this.topNode=new VariableTreeNode();
  7. this.initToolbar();
  8. var content=$("<div style='text-align: center'>");
  9. container.append(content);
  10. content.append(this.topNode.container);
  11. };
  12. DecisionTree.prototype.initToolbar=function(){
  13. var file=_getRequestParameter("file");
  14. var version=_getRequestParameter("version")||"";
  15. if(!file || file.length<1){
  16. URule.alert("未指定具体的决策树文件!");
  17. return;
  18. }
  19. var saveButton = '<div class="btn-group navbar-btn" style="margin-top:0px;margin-bottom: 0px" role="group" aria-label="...">'+
  20. '<button id="saveButton" type="button" class="btn btn-default navbar-btn" ><i class="icon-save"></i> 保存</button>' +
  21. '<button id="saveButtonNewVersion" type="button" class="btn btn-default navbar-btn" ><i class="icon-save"></i> 保存新版本</button>' +
  22. '</div>';
  23. var toolbarHtml='<nav class="navbar navbar-default" style="margin: 5px">'+
  24. '<div>'+
  25. '<div>'+
  26. '<div class="btn-group navbar-btn" style="margin-left:5px;margin-top:0px;margin-bottom: 0px" role="group" aria-label="...">'+
  27. '<button id="configVarButton" type="button" class="btn btn-default"><i class="icon-tasks"></i> 导入变量库</button>'+
  28. '<button id="configConstantsButton" type="button" class="btn btn-default"><i class="icon-th-list"></i> 导入常量库</button>'+
  29. '<button id="configActionButton" type="button" class="btn btn-default"><i class="icon-bolt"></i> 导入动作库</button>'+
  30. '<button id="configParameterButton" type="button" class="btn btn-default"><i class="icon-th"></i> 导入参数库</button>'+
  31. '</div>'+
  32. saveButton +
  33. ' </div>'+
  34. '</div>'+
  35. '</nav>';
  36. var toolbar=$(toolbarHtml);
  37. toolbar.css({
  38. diaplay:"inline-block"
  39. });
  40. var toolbarContainer=$("<div>");
  41. toolbarContainer.append(toolbar);
  42. this.container.append(toolbarContainer);
  43. var self=this;
  44. $("#configVarButton").click(function(){
  45. if(!self.configVarDialog){
  46. self.configVarDialog=new urule.ConfigVariableDialog(self);
  47. }
  48. self.configVarDialog.open();
  49. });
  50. $("#configConstantsButton").click(function(){
  51. if(!self.configConstantDialog){
  52. self.configConstantDialog=new urule.ConfigConstantDialog(self);
  53. }
  54. self.configConstantDialog.open();
  55. });
  56. $("#configActionButton").click(function(){
  57. if(!self.configActionDialog){
  58. self.configActionDialog=new urule.ConfigActionDialog(self);
  59. }
  60. self.configActionDialog.open();
  61. });
  62. $("#configParameterButton").click(function(){
  63. if(!self.configParameterDialog){
  64. self.configParameterDialog=new urule.ConfigParameterDialog(self);
  65. }
  66. self.configParameterDialog.open();
  67. });
  68. $("#saveButton").click(function(){
  69. _save(false);
  70. });
  71. $("#saveButtonNewVersion").click(function(){
  72. _save(true);
  73. });
  74. $("#saveButton").addClass("disabled");
  75. $("#saveButtonNewVersion").addClass("disabled");
  76. _loadDecisionTreeFileData();
  77. function _save(newVersion){
  78. if($("#saveButton").hasClass("disabled")){
  79. return false;
  80. }
  81. var xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
  82. xml+="<decision-tree>";
  83. $.each(parameterLibraries,function(index,item){
  84. xml+="<import-parameter-library path=\""+item+"\"/>";
  85. });
  86. $.each(variableLibraries,function(index,item){
  87. xml+="<import-variable-library path=\""+item+"\"/>";
  88. });
  89. $.each(constantLibraries,function(index,item){
  90. xml+="<import-constant-library path=\""+item+"\"/>";
  91. });
  92. $.each(actionLibraries,function(index,item){
  93. xml+="<import-action-library path=\""+item+"\"/>";
  94. });
  95. try{
  96. xml+=self.topNode.toXml();
  97. }catch(error){
  98. URule.alert(error);
  99. return;
  100. }
  101. xml+="</decision-tree>";
  102. var url=(uruleServer || "" )+"urule?action=savexml&file="+file+"";
  103. var dialog=$("<div style='width:100px;height:50px'>文件保存中...</div>");
  104. $.ajax({
  105. cache:false,
  106. url:url,
  107. type:"POST",
  108. data:{xml:xml,newVersion:newVersion},
  109. beforeSend:function(req){
  110. dialog.dialog({
  111. modal : true,
  112. height:80,
  113. width:50,
  114. open : function(event, ui) {
  115. $(".ui-dialog-titlebar",$(this).parent()).hide();
  116. }
  117. });
  118. },
  119. error:function(response){
  120. dialog.dialog("close");
  121. if(response && response.responseText){
  122. bootbox.alert("<span style='color: red'>保存失败:"+response.responseText+"</span>");
  123. }else{
  124. bootbox.alert("<span style='color: red'>保存失败,服务端出错</span>");
  125. }
  126. },
  127. success:function(data){
  128. cancelDirty();
  129. dialog.dialog("close");
  130. }
  131. });
  132. };
  133. function _loadDecisionTreeFileData(){
  134. var url=(uruleServer || "")+"urule?action=loadxml&files="+file+","+version+"";
  135. $.ajax({
  136. cache:false,
  137. dataType:"json",
  138. type:'POST',
  139. url:url,
  140. error:function(response){
  141. if(response && response.responseText){
  142. bootbox.alert("<span style='color: red'>加载文件失败:"+response.responseText+"</span>");
  143. }else{
  144. bootbox.alert("<span style='color: red'>加载文件失败,服务端出错</span>");
  145. }
  146. },
  147. success:function(data){
  148. var treeData=data[0];
  149. var libraries=treeData["libraries"];
  150. if(libraries){
  151. for(var i=0;i<libraries.length;i++){
  152. var lib=libraries[i];
  153. var type=lib["type"];
  154. var path=lib["path"];
  155. switch(type){
  156. case "Constant":
  157. constantLibraries.push(path);
  158. break;
  159. case "Action":
  160. actionLibraries.push(path);
  161. break;
  162. case "Variable":
  163. variableLibraries.push(path);
  164. break;
  165. case "Parameter":
  166. parameterLibraries.push(path);
  167. break;
  168. }
  169. }
  170. }
  171. refreshActionLibraries();
  172. refreshConstantLibraries();
  173. refreshVariableLibraries();
  174. refreshParameterLibraries();
  175. refreshFunctionLibraries();
  176. self.topNode.initData(treeData["variableTreeNode"]);
  177. cancelDirty();
  178. }
  179. });
  180. };
  181. };
  182. function _getRequestParameter(name){
  183. var value=null;
  184. var params=window.location.search.substring(1).split("&");
  185. for(var i=0;i<params.length;i++){
  186. var param=params[i];
  187. if(param.indexOf("=")==-1){
  188. continue;
  189. }
  190. var pair=param.split("=");
  191. var key=pair[0];
  192. if(key==name){
  193. value=pair[1];
  194. break;
  195. }
  196. }
  197. return value;
  198. };
  199. window._setDirty=function(){
  200. if(window._dirty){
  201. return;
  202. }
  203. window._dirty=true;
  204. $("#saveButton").html("<i class='icon-save'></i> *保存");
  205. $("#saveButton").removeClass("disabled");
  206. $("#saveButtonNewVersion").html("<i class='icon-save'></i> *保存新版本");
  207. $("#saveButtonNewVersion").removeClass("disabled");
  208. };
  209. function cancelDirty(){
  210. if(!window._dirty){
  211. return;
  212. }
  213. window._dirty=false;
  214. $("#saveButton").html("<i class='icon-save'></i> 保存");
  215. $("#saveButton").addClass("disabled");
  216. $("#saveButtonNewVersion").html("<i class='icon-save'></i> 保存新版本");
  217. $("#saveButtonNewVersion").addClass("disabled");
  218. };