Main.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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.naviStatementTitleNode = new Element("div", {"styles": this.css.naviStatementTitleNode, "text": this.lp.stat}).inject(this.naviContentNode);
  79. this.naviStatementContentNode = new Element("div", {"styles": this.css.naviStatementContentNode}).inject(this.naviContentNode);
  80. this.setContentHeightFun = this.setContentHeight.bind(this);
  81. this.addEvent("resize", this.setContentHeightFun);
  82. this.setContentHeightFun();
  83. this.naviIconTitleNode = new Element("div", {"styles": this.css.naviIconTitleNode}).inject(this.naviTitleNode);
  84. if (this.query.icon){
  85. this.naviIconTitleNode.setStyles({
  86. "background-image": "url(data:image/png;base64,"+this.query.icon+")",
  87. });
  88. }
  89. this.naviRightTitleNode = new Element("div", {"styles": this.css.naviRightTitleNode}).inject(this.naviTitleNode);
  90. this.naviTextTitleNode = new Element("div", {"styles": this.css.naviTextTitleNode, "text": this.query.name}).inject(this.naviRightTitleNode);
  91. this.naviDescriptionTitleNode = new Element("div", {"styles": this.css.naviDescriptionTitleNode, "text": this.query.description || this.lp.noDescription}).inject(this.naviRightTitleNode);
  92. },
  93. createLayoutMobile: function(){},
  94. setContentHeight: function(){
  95. var size = this.content.getSize();
  96. var titleSize = this.naviTitleNode.getSize();
  97. var y = size.y-titleSize.y;
  98. this.naviContentNode.setStyle("height", ""+y+"px");
  99. },
  100. createNavi: function(){
  101. this.action.listView(this.options.id, function(json){
  102. if (json.data){
  103. json.data.each(function(view){
  104. if(view.display) {
  105. var item = this.createViewNaviItem(view);
  106. if( view.id === this.options.viewId ){
  107. item.selected()
  108. }
  109. }
  110. }.bind(this));
  111. }
  112. }.bind(this));
  113. MWF.Actions.get("x_query_assemble_surface").listStat(this.options.id, function(json){
  114. //this.action.listStat(this.options.id, function(json){
  115. if (json.data){
  116. json.data.each(function(stat){
  117. var item = this.createStatNaviItem(stat);
  118. if( stat.id === this.options.statId ){
  119. item.selected()
  120. }
  121. }.bind(this));
  122. }
  123. }.bind(this));
  124. MWF.Actions.get("x_query_assemble_surface").listStatement(this.options.id, function(json){
  125. //this.action.listStat(this.options.id, function(json){
  126. if (json.data){
  127. json.data.each(function(statement){
  128. debugger;
  129. var item = this.createStatementNaviItem(statement);
  130. if( statement.id === this.options.statementId ){
  131. item.selected()
  132. }
  133. }.bind(this));
  134. }
  135. }.bind(this));
  136. },
  137. createViewNaviItem: function(view){
  138. var item = new MWF.xApplication.query.Query.ViewItem(view, this);
  139. return item;
  140. },
  141. createStatNaviItem: function(stat){
  142. var item = new MWF.xApplication.query.Query.StatItem(stat, this);
  143. return item;
  144. },
  145. createStatementNaviItem: function(stat){
  146. var item = new MWF.xApplication.query.Query.StatementItem(stat, this);
  147. return item;
  148. },
  149. recordStatus: function(){
  150. return {"id": this.options.id};
  151. }
  152. });
  153. MWF.xApplication.query.Query.ViewItem = new Class({
  154. initialize: function(view, app){
  155. this.view = view;
  156. this.app = app;
  157. this.css = this.app.css;
  158. this.lp = this.app.lp;
  159. this.isSelected = false;
  160. this.content = this.getContentNode();
  161. this.viewContent = this.getViewContentNode();
  162. this.load();
  163. },
  164. getContentNode: function(){
  165. return this.app.naviViewContentNode;
  166. },
  167. getViewContentNode: function(){
  168. return this.app.contentNode;
  169. },
  170. load: function(){
  171. this.node = new Element("div", {
  172. "styles": this.css.naviViewContentItemNode,
  173. "text": this.view.name,
  174. "title": this.view.name
  175. }).inject(this.content);
  176. this.node.addEvents({
  177. "mouseover": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode_over); }.bind(this),
  178. "mouseout": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode); }.bind(this),
  179. "click": function(){this.selected();}.bind(this)
  180. });
  181. },
  182. selected: function(){
  183. if (this.app.currentItem) this.app.currentItem.unselected();
  184. this.node.setStyles(this.css.naviViewContentItemNode_selected);
  185. this.app.currentItem = this;
  186. this.isSelected = true;
  187. this.loadView();
  188. },
  189. unselected: function(){
  190. this.node.setStyles(this.css.naviViewContentItemNode);
  191. this.app.currentItem = null;
  192. this.isSelected = false;
  193. },
  194. loadView: function(){
  195. debugger;
  196. MWF.xDesktop.requireApp("query.Query", "Viewer",function(){
  197. this.viewContent.empty();
  198. var data = JSON.parse(this.view.data);
  199. this.viewer = new MWF.QViewer(this.viewContent, {
  200. "application": this.view.query,
  201. "viewName": this.view.name,
  202. "isExpand": data.isExpand
  203. }, {"export": true}, this.app);
  204. }.bind(this));
  205. }
  206. });
  207. MWF.xApplication.query.Query.StatItem = new Class({
  208. Extends: MWF.xApplication.query.Query.ViewItem,
  209. getContentNode: function(){
  210. return this.app.naviStatContentNode;
  211. },
  212. loadView: function(){
  213. MWF.xDesktop.requireApp("query.Query", "Statistician",function(){
  214. this.viewContent.empty();
  215. this.viewer = new MWF.QStatistician(this.app, this.viewContent, {
  216. "application": this.view.query,
  217. "statName": this.view.name,
  218. "isTable": true,
  219. "isChart": true,
  220. "isLegend": true
  221. });
  222. }.bind(this));
  223. }
  224. });
  225. MWF.xApplication.query.Query.StatementItem = new Class({
  226. Extends: MWF.xApplication.query.Query.ViewItem,
  227. getContentNode: function(){
  228. return this.app.naviStatementContentNode;
  229. },
  230. loadView: function(){
  231. MWF.xDesktop.requireApp("query.Query", "Statement",function(){
  232. this.viewContent.empty();
  233. this.viewer = new MWF.QStatement(this.app, this.viewContent, {
  234. "application": this.view.query,
  235. "statementName": this.view.name
  236. });
  237. }.bind(this));
  238. }
  239. });