Main.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. MWF.xApplication.query.Query.options.multitask = true;
  2. MWF.xApplication.query.Query.Main = new Class({
  3. Extends: MWF.xApplication.Common.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "name": "query.Query",
  8. "icon": "icon.png",
  9. "width": "1200",
  10. "height": "700",
  11. "title": MWF.xApplication.query.Query.LP.title,
  12. "isControl": false,
  13. "taskObject": null,
  14. "parameters": "",
  15. "readonly": false
  16. },
  17. onQueryLoad: function(){
  18. this.lp = MWF.xApplication.query.Query.LP;
  19. if (this.status){
  20. this.options.id = this.status.id;
  21. this.options.viewId = this.status.viewId;
  22. this.options.statId = this.status.statId;
  23. }
  24. },
  25. loadApplication: function(callback){
  26. this.content.setStyle("background-color", "#ffffff");
  27. this.node = new Element("div", {"styles": this.css.content}).inject(this.content);
  28. this.formNode = new Element("div", {"styles": {"min-height": "100%", "font-size": "14px"}}).inject(this.node);
  29. this.action = MWF.Actions.get("x_query_assemble_surface");
  30. // if (!this.options.isRefresh){
  31. // this.maxSize(function(){
  32. // this.loadQuery(this.options.parameters);
  33. // }.bind(this));
  34. // }else{
  35. this.loadQuery(this.options.parameters);
  36. // }
  37. if (callback) callback();
  38. },
  39. loadQuery: function(par){
  40. this.action.getQuery(this.options.id, function(json){
  41. this.query = json.data;
  42. this.setTitle(this.query.name);
  43. if (this.query.icon){
  44. if (this.taskitem){
  45. this.taskitem.iconNode.setStyles({
  46. "background-image": "url(data:image/png;base64,"+this.query.icon+")",
  47. "background-size": "24px 24px"
  48. });
  49. }
  50. }
  51. this.createLayout();
  52. this.createNavi();
  53. this.addEvent("resize", function(){
  54. if (this.currentItem){
  55. if (this.currentItem.viewer){
  56. this.currentItem.viewer.setContentHeight();
  57. }
  58. }
  59. }.bind(this));
  60. }.bind(this));
  61. },
  62. createLayout: function(){
  63. if (!layout.mobile){
  64. this.createLayoutPC();
  65. }else{
  66. this.createLayoutMobile();
  67. }
  68. },
  69. createLayoutPC: function(){
  70. this.naviNode = new Element("div", {"styles": this.css.naviNode}).inject(this.content);
  71. this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  72. this.naviTitleNode = new Element("div", {"styles": this.css.naviTitleNode}).inject(this.naviNode);
  73. this.naviContentNode = new Element("div", {"styles": this.css.naviContentNode}).inject(this.naviNode);
  74. this.naviViewTitleNode = new Element("div", {"styles": this.css.naviViewTitleNode, "text": this.lp.view}).inject(this.naviContentNode);
  75. this.naviViewContentNode = new Element("div", {"styles": this.css.naviViewContentNode}).inject(this.naviContentNode);
  76. this.naviStatTitleNode = new Element("div", {"styles": this.css.naviStatTitleNode, "text": this.lp.stat}).inject(this.naviContentNode);
  77. this.naviStatContentNode = new Element("div", {"styles": this.css.naviStatContentNode}).inject(this.naviContentNode);
  78. this.setContentHeightFun = this.setContentHeight.bind(this);
  79. this.addEvent("resize", this.setContentHeightFun);
  80. this.setContentHeightFun();
  81. this.naviIconTitleNode = new Element("div", {"styles": this.css.naviIconTitleNode}).inject(this.naviTitleNode);
  82. if (this.query.icon){
  83. this.naviIconTitleNode.setStyles({
  84. "background-image": "url(data:image/png;base64,"+this.query.icon+")",
  85. });
  86. }
  87. this.naviRightTitleNode = new Element("div", {"styles": this.css.naviRightTitleNode}).inject(this.naviTitleNode);
  88. this.naviTextTitleNode = new Element("div", {"styles": this.css.naviTextTitleNode, "text": this.query.name}).inject(this.naviRightTitleNode);
  89. this.naviDescriptionTitleNode = new Element("div", {"styles": this.css.naviDescriptionTitleNode, "text": this.query.description || this.lp.noDescription}).inject(this.naviRightTitleNode);
  90. },
  91. createLayoutMobile: function(){},
  92. setContentHeight: function(){
  93. var size = this.content.getSize();
  94. var titleSize = this.naviTitleNode.getSize();
  95. var y = size.y-titleSize.y;
  96. this.naviContentNode.setStyle("height", ""+y+"px");
  97. },
  98. createNavi: function(){
  99. this.action.listView(this.options.id, function(json){
  100. if (json.data){
  101. json.data.each(function(view){
  102. if(view.display) {
  103. this.createViewNaviItem(view);
  104. }
  105. }.bind(this));
  106. }
  107. }.bind(this));
  108. MWF.Actions.get("x_query_assemble_surface").listStat(this.options.id, function(json){
  109. //this.action.listStat(this.options.id, function(json){
  110. if (json.data){
  111. json.data.each(function(stat){
  112. this.createStatNaviItem(stat);
  113. }.bind(this));
  114. }
  115. }.bind(this));
  116. },
  117. createViewNaviItem: function(view){
  118. var item = new MWF.xApplication.query.Query.ViewItem(view, this);
  119. },
  120. createStatNaviItem: function(stat){
  121. var item = new MWF.xApplication.query.Query.StatItem(stat, this);
  122. },
  123. recordStatus: function(){
  124. return {"id": this.options.id};
  125. }
  126. });
  127. MWF.xApplication.query.Query.ViewItem = new Class({
  128. initialize: function(view, app){
  129. this.view = view;
  130. this.app = app;
  131. this.css = this.app.css;
  132. this.lp = this.app.lp;
  133. this.isSelected = false;
  134. this.content = this.getContentNode();
  135. this.viewContent = this.getViewContentNode();
  136. this.load();
  137. },
  138. getContentNode: function(){
  139. return this.app.naviViewContentNode;
  140. },
  141. getViewContentNode: function(){
  142. return this.app.contentNode;
  143. },
  144. load: function(){
  145. this.node = new Element("div", {
  146. "styles": this.css.naviViewContentItemNode,
  147. "text": this.view.name,
  148. "title": this.view.name
  149. }).inject(this.content);
  150. this.node.addEvents({
  151. "mouseover": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode_over); }.bind(this),
  152. "mouseout": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode); }.bind(this),
  153. "click": function(){this.selected();}.bind(this)
  154. });
  155. },
  156. selected: function(){
  157. if (this.app.currentItem) this.app.currentItem.unselected();
  158. this.node.setStyles(this.css.naviViewContentItemNode_selected);
  159. this.app.currentItem = this;
  160. this.isSelected = true;
  161. this.loadView();
  162. },
  163. unselected: function(){
  164. this.node.setStyles(this.css.naviViewContentItemNode);
  165. this.app.currentItem = null;
  166. this.isSelected = false;
  167. },
  168. loadView: function(){
  169. debugger;
  170. MWF.xDesktop.requireApp("query.Query", "Viewer",function(){
  171. this.viewContent.empty();
  172. var data = JSON.parse(this.view.data);
  173. this.viewer = new MWF.QViewer(this.viewContent, {
  174. "application": this.view.query,
  175. "viewName": this.view.name,
  176. "isExpand": data.isExpand
  177. }, {"export": true});
  178. }.bind(this));
  179. }
  180. });
  181. MWF.xApplication.query.Query.StatItem = new Class({
  182. Extends: MWF.xApplication.query.Query.ViewItem,
  183. getContentNode: function(){
  184. return this.app.naviStatContentNode;
  185. },
  186. loadView: function(){
  187. MWF.xDesktop.requireApp("query.Query", "Statistician",function(){
  188. this.viewContent.empty();
  189. this.viewer = new MWF.QStatistician(this.app, this.viewContent, {
  190. "application": this.view.query,
  191. "statName": this.view.name,
  192. "isTable": true,
  193. "isChart": true,
  194. "isLegend": true
  195. });
  196. }.bind(this));
  197. }
  198. });