Main.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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.statement}).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.load("x_query_assemble_surface").StatementAction.listWithQuery(this.options.id, {
  125. "justSelect" : true,
  126. "hasView" : true
  127. }, function(json){
  128. //this.action.listStat(this.options.id, function(json){
  129. if (json.data){
  130. json.data.each(function(statement){
  131. debugger;
  132. var item = this.createStatementNaviItem(statement);
  133. if( statement.id === this.options.statementId ){
  134. item.selected()
  135. }
  136. }.bind(this));
  137. }
  138. }.bind(this));
  139. },
  140. createViewNaviItem: function(view){
  141. var item = new MWF.xApplication.query.Query.ViewItem(view, this);
  142. return item;
  143. },
  144. createStatNaviItem: function(stat){
  145. var item = new MWF.xApplication.query.Query.StatItem(stat, this);
  146. return item;
  147. },
  148. createStatementNaviItem: function(statement){
  149. var item = new MWF.xApplication.query.Query.StatementItem(statement, this);
  150. return item;
  151. },
  152. recordStatus: function(){
  153. return {"id": this.options.id};
  154. }
  155. });
  156. MWF.xApplication.query.Query.ViewItem = new Class({
  157. initialize: function(view, app){
  158. this.view = view;
  159. this.app = app;
  160. this.css = this.app.css;
  161. this.lp = this.app.lp;
  162. this.isSelected = false;
  163. this.content = this.getContentNode();
  164. this.viewContent = this.getViewContentNode();
  165. this.load();
  166. },
  167. getContentNode: function(){
  168. return this.app.naviViewContentNode;
  169. },
  170. getViewContentNode: function(){
  171. return this.app.contentNode;
  172. },
  173. load: function(){
  174. this.node = new Element("div", {
  175. "styles": this.css.naviViewContentItemNode,
  176. "text": this.view.name,
  177. "title": this.view.name
  178. }).inject(this.content);
  179. this.node.addEvents({
  180. "mouseover": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode_over); }.bind(this),
  181. "mouseout": function(){if (!this.isSelected) this.node.setStyles(this.css.naviViewContentItemNode); }.bind(this),
  182. "click": function(){this.selected();}.bind(this)
  183. });
  184. },
  185. selected: function(){
  186. if (this.app.currentItem) this.app.currentItem.unselected();
  187. this.node.setStyles(this.css.naviViewContentItemNode_selected);
  188. this.app.currentItem = this;
  189. this.isSelected = true;
  190. this.loadView();
  191. },
  192. unselected: function(){
  193. this.node.setStyles(this.css.naviViewContentItemNode);
  194. this.app.currentItem = null;
  195. this.isSelected = false;
  196. },
  197. loadView: function(){
  198. debugger;
  199. MWF.xDesktop.requireApp("query.Query", "Viewer",function(){
  200. this.viewContent.empty();
  201. var data = JSON.parse(this.view.data);
  202. this.viewer = new MWF.QViewer(this.viewContent, {
  203. "application": this.view.query,
  204. "viewName": this.view.name,
  205. "isExpand": data.isExpand
  206. }, {"export": true}, this.app);
  207. }.bind(this));
  208. }
  209. });
  210. MWF.xApplication.query.Query.StatItem = new Class({
  211. Extends: MWF.xApplication.query.Query.ViewItem,
  212. getContentNode: function(){
  213. return this.app.naviStatContentNode;
  214. },
  215. loadView: function(){
  216. MWF.xDesktop.requireApp("query.Query", "Statistician",function(){
  217. this.viewContent.empty();
  218. this.viewer = new MWF.QStatistician(this.app, this.viewContent, {
  219. "application": this.view.query,
  220. "statName": this.view.name,
  221. "isTable": true,
  222. "isChart": true,
  223. "isLegend": true
  224. });
  225. }.bind(this));
  226. }
  227. });
  228. MWF.xApplication.query.Query.StatementItem = new Class({
  229. Extends: MWF.xApplication.query.Query.ViewItem,
  230. getContentNode: function(){
  231. return this.app.naviStatementContentNode;
  232. },
  233. loadView: function(){
  234. MWF.xDesktop.requireApp("query.Query", "Statement",function(){
  235. this.viewContent.empty();
  236. debugger;
  237. this.viewer = new MWF.QStatement( this.viewContent, {
  238. "application": this.view.query,
  239. "statementName": this.view.name,
  240. "statementId" : this.view.id
  241. },{}, this.app);
  242. }.bind(this));
  243. }
  244. });