Main.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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. var item = this.createViewNaviItem(view);
  104. if( view.id === this.options.viewId ){
  105. item.selected()
  106. }
  107. }
  108. }.bind(this));
  109. }
  110. }.bind(this));
  111. MWF.Actions.get("x_query_assemble_surface").listStat(this.options.id, function(json){
  112. //this.action.listStat(this.options.id, function(json){
  113. if (json.data){
  114. json.data.each(function(stat){
  115. var item = this.createStatNaviItem(stat);
  116. if( stat.id === this.options.statId ){
  117. item.selected()
  118. }
  119. }.bind(this));
  120. }
  121. }.bind(this));
  122. },
  123. createViewNaviItem: function(view){
  124. var item = new MWF.xApplication.query.Query.ViewItem(view, this);
  125. return item;
  126. },
  127. createStatNaviItem: function(stat){
  128. var item = new MWF.xApplication.query.Query.StatItem(stat, this);
  129. return item;
  130. },
  131. recordStatus: function(){
  132. return {"id": this.options.id};
  133. }
  134. });
  135. MWF.xApplication.query.Query.ViewItem = new Class({
  136. initialize: function(view, app){
  137. this.view = view;
  138. this.app = app;
  139. this.css = this.app.css;
  140. this.lp = this.app.lp;
  141. this.isSelected = false;
  142. this.content = this.getContentNode();
  143. this.viewContent = this.getViewContentNode();
  144. this.load();
  145. },
  146. getContentNode: function(){
  147. return this.app.naviViewContentNode;
  148. },
  149. getViewContentNode: function(){
  150. return this.app.contentNode;
  151. },
  152. load: function(){
  153. this.node = new Element("div", {
  154. "styles": this.css.naviViewContentItemNode,
  155. "text": this.view.name,
  156. "title": this.view.name
  157. }).inject(this.content);
  158. this.node.addEvents({
  159. "mouseover": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode_over); }.bind(this),
  160. "mouseout": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode); }.bind(this),
  161. "click": function(){this.selected();}.bind(this)
  162. });
  163. },
  164. selected: function(){
  165. if (this.app.currentItem) this.app.currentItem.unselected();
  166. this.node.setStyles(this.css.naviViewContentItemNode_selected);
  167. this.app.currentItem = this;
  168. this.isSelected = true;
  169. this.loadView();
  170. },
  171. unselected: function(){
  172. this.node.setStyles(this.css.naviViewContentItemNode);
  173. this.app.currentItem = null;
  174. this.isSelected = false;
  175. },
  176. loadView: function(){
  177. debugger;
  178. MWF.xDesktop.requireApp("query.Query", "Viewer",function(){
  179. this.viewContent.empty();
  180. var data = JSON.parse(this.view.data);
  181. this.viewer = new MWF.QViewer(this.viewContent, {
  182. "application": this.view.query,
  183. "viewName": this.view.name,
  184. "isExpand": data.isExpand
  185. }, {"export": true});
  186. }.bind(this));
  187. }
  188. });
  189. MWF.xApplication.query.Query.StatItem = new Class({
  190. Extends: MWF.xApplication.query.Query.ViewItem,
  191. getContentNode: function(){
  192. return this.app.naviStatContentNode;
  193. },
  194. loadView: function(){
  195. MWF.xDesktop.requireApp("query.Query", "Statistician",function(){
  196. this.viewContent.empty();
  197. this.viewer = new MWF.QStatistician(this.app, this.viewContent, {
  198. "application": this.view.query,
  199. "statName": this.view.name,
  200. "isTable": true,
  201. "isChart": true,
  202. "isLegend": true
  203. });
  204. }.bind(this));
  205. }
  206. });