| 1 |
- MWF.xApplication.query=MWF.xApplication.query||{};MWF.xApplication.query.Query=MWF.xApplication.query.Query||{};MWF.require("MWF.widget.Common",null,false);MWF.require("MWF.xScript.Macro",null,false);MWF.xDesktop.requireApp("query.Query","lp.zh-cn",null,false);MWF.xApplication.query.Query.Statistician=MWF.QStatistician=new Class({Implements:[Options,Events],Extends:MWF.widget.Common,options:{style:"default",resizeNode:true},initialize:function(t,e,s,i){this.setOptions(i);this.path="/x_component_query_Query/$Statistician/";this.cssPath="/x_component_query_Query/$Statistician/"+this.options.style+"/css.wcss";this._loadCss();this.lp=MWF.xApplication.query.Query.LP;this.app=t;this.container=$(e);this.json=s;this.statJson=null;this.gridJson=null;this.load()},load:function(){this.loadLayout();this.loadStatData()},loadLayout:function(){this.node=new Element("div",{styles:this.css.node}).inject(this.container)},createLoadding:function(){this.node.empty();this.loadingAreaNode=new Element("div",{styles:this.css.viewLoadingAreaNode}).inject(this.node);new Element("div",{styles:{height:"5px"}}).inject(this.loadingAreaNode);var t=new Element("div",{styles:this.css.viewLoadingNode}).inject(this.loadingAreaNode);new Element("div",{styles:this.css.viewLoadingIconNode}).inject(t);var e=new Element("div",{styles:this.css.viewLoadingTextNode}).inject(t);e.set("text","loading...")},loadStatData:function(t){this.createLoadding();MWF.Actions.get("x_query_assemble_surface").loadStat(this.json.statName,this.json.application,null,function(t){if(this.loadingAreaNode){this.loadingAreaNode.destroy();this.loadingAreaNode=null}if(t.data.calculate.isGroup){this.stat=new MWF.xApplication.query.Query.Statistician.GroupStat(this,t.data)}else{this.stat=new MWF.xApplication.query.Query.Statistician.Stat(this,t.data)}this.fireEvent("loaded")}.bind(this))}});MWF.xApplication.query.Query.Statistician.Stat=new Class({initialize:function(t,e){this.statistician=t;this.json=this.statistician.json;this.data=e;this.css=this.statistician.css;this.lp=this.statistician.lp;this.node=this.statistician.node;this.load()},load:function(){if(this.json.isChart)this.chartAreaNode=new Element("div",{styles:this.css.statChartAreaNode}).inject(this.node);if(this.json.isTable)this.tableAreaNode=new Element("div",{styles:this.css.statTableAreaNode}).inject(this.node);this.loadData();if(this.json.isTable)this.createTable();if(this.json.isChart)this.createChart()},loadData:function(){var e={};this.data.selectList.each(function(t){e[t.column]=t}.bind(this))},createChart:function(){this.chartNode=new Element("div",{styles:this.css.statChartNode}).inject(this.chartAreaNode);this.loadChart();if(this.statistician.app){this.resizeChartFun=this.resizeChart.bind(this);this.statistician.app.addEvent("resizeCompleted",this.resizeChartFun);this.statistician.app.addEvent("postMaxSize",this.resizeChartFun);this.statistician.app.addEvent("postRestoreSize",this.resizeChartFun)}},resizeChart:function(){if(this.bar)this.bar.destroy();this.bar=null;if(this.chartNode)this.chartNode.empty();this.loadChart()},loadChart:function(){MWF.require("MWF.widget.chart.Bar",function(){this.bar=new MWF.widget.chart.Bar(this.chartNode,this.data.calculateGrid,"displayName",{delay:0,style:"monthly"});this.bar.addBar("value");this.bar.addEvents({mouseover:function(t,e,s,i){e.filter(function(t,e){return e==i}).attr("display","block");var a=t.filter(function(t,e){return e==i});var l=a.attr("fill");a.node().store("color",l);a.attr("fill","brown")}.bind(this),mouseout:function(t,e,s,i){e.filter(function(t,e){return e==i}).attr("display","none");var a=t.filter(function(t,e){return e==i});var l=a.node().retrieve("color");a.attr("fill",l)}.bind(this)});this.bar.load()}.bind(this))},createTable:function(){this.createTableHead();this.createTableData()},createTableHead:function(){this.table=new Element("table",{styles:this.css.statTableNode,width:"100%",border:"0",cellPadding:"0",cellSpacing:"0"}).inject(this.node);this.headTr=new Element("tr").inject(this.table);this.data.calculate.calculateList.each(function(t){var e=new Element("th",{styles:this.css.statHeadTh,text:t.displayName}).inject(this.headTr)}.bind(this))},createTableData:function(){if(this.data.calculateGrid.length){var s=new Element("tr").inject(this.table);this.data.calculateGrid.each(function(t){var e=new Element("td",{styles:this.css.statContentTdNode}).inject(s);e.set("text",t.value)}.bind(this))}},destroy:function(){if(this.bar)this.bar.destroy();if(this.statistician.app){if(this.resizeChartFun){this.resizeChartFun.app.removeEvent("resizeCompleted",this.resizeChartFun);this.resizeChartFun.app.removeEvent("postMaxSize",this.resizeChartFun);this.resizeChartFun.app.removeEvent("postRestoreSize",this.resizeChartFun)}}MWF.release(this)}});MWF.xApplication.query.Query.Statistician.GroupStat=new Class({Extends:MWF.xApplication.query.Query.Statistician.Stat,loadData:function(){var e={};var s=null;this.data.selectList.each(function(t){e[t.column]=t;if(t.column===this.data.group.column){s=t}}.bind(this));this.data.calculateGrid.each(function(t){if(s){t.group=s.code?MWF.Macro.exec(s.code,{value:t.group,data:this.data}):t.group}t.list.each(function(t){t.value=e[t.column].code?MWF.Macro.exec(e[t.column].code,{value:t.value,data:this.data}):t.value}.bind(this))}.bind(this))},createChart:function(){if(this.json.isLegend)this.chartFlagNode=new Element("div",{styles:this.css.statChartFlagAreaNode}).inject(this.chartAreaNode);this.chartNode=new Element("div",{styles:this.css.statChartNode}).inject(this.chartAreaNode);this.loadChart();if(this.statistician.app){this.resizeChartFun=this.resizeChart.bind(this);this.statistician.app.addEvent("resizeCompleted",this.resizeChartFun);this.statistician.app.addEvent("postMaxSize",this.resizeChartFun);this.statistician.app.addEvent("postRestoreSize",this.resizeChartFun)}},resizeChart:function(){if(this.bar)this.bar.destroy();this.bar=null;if(this.json.isLegend)this.chartFlagNode.empty();this.chartNode.empty();this.loadChart()},loadChart:function(){if(!this.selectedData)this.selectedData=this.data.calculateGrid;if(!this.selectedData.length)this.selectedData=this.data.calculateGrid;MWF.require("MWF.widget.chart.Bar",function(){this.flag=[];this.bar=new MWF.widget.chart.Bar(this.chartNode,this.selectedData,"group",{delay:0,style:"monthly"});if(this.selectedData.length){this.selectedData[0].list.each(function(t,e){this.flag.push({name:t.displayName,color:this.bar.colors[e]});this.bar.addBar(function(t){return t.list[e].value})}.bind(this))}this.bar.addEvents({mouseover:function(t,e,s,i){e.filter(function(t,e){return e==i}).attr("display","block");var a=t.filter(function(t,e){return e==i});var l=a.attr("fill");a.node().store("color",l);a.attr("fill","brown")}.bind(this),mouseout:function(t,e,s,i){e.filter(function(t,e){return e==i}).attr("display","none");var a=t.filter(function(t,e){return e==i});var l=a.node().retrieve("color");a.attr("fill",l)}.bind(this)});this.bar.load();if(this.json.isLegend)this.loadFlags()}.bind(this))},loadFlags:function(){this.flag.each(function(t,e){this.loadFlag(t,e)}.bind(this))},loadFlag:function(t,e){var s=new Element("div",{styles:this.css.ststChartFlagNode}).inject(this.chartFlagNode);var i=new Element("div",{styles:this.css.ststChartFlagColorNode}).inject(s);i.setStyle("background-color",t.color);var a=new Element("div",{styles:this.css.ststChartFlagNameNode}).inject(s);a.set("text",t.name);a.set("title",t.name);s.store("idx",e);s.store("barColor",t.color);var l=this;s.addEvents({mouseover:function(){this.getFirst().setStyles(l.css.ststChartFlagColorNode_over);var t=this.retrieve("idx");l.highlightBar(t)},mouseout:function(){this.getFirst().setStyles(l.css.ststChartFlagColorNode);var t=this.retrieve("idx");var e=this.retrieve("barColor");l.unHighlightBar(t,e)}})},createDefs:function(t,e){var s=t.append(e.tag);Object.each(e.attrs,function(t,e){s.attr(e,t)});if(e.subs){e.subs.each(function(t){this.createDefs(s,t)}.bind(this))}},createHighlightDefs:function(t){var e=this.bar.svg.append("defs");var s=this.bar.css["rect_over_defs"];this.createDefs(e,s);e.select(function(){return this.getFirst()}).attr("id",t);e.attr("id","defs_"+t)},unHighlightBar:function(t,e){var s="rect_over_defs"+t;var i=d3.select("#defs_"+s);i.remove();var a=this.bar.rectCluster[t];a.attr(this.bar.css["rect_over_defs"].urlAttr,null);var l=this.bar.textCluster[t];l.attr("display","none");l.attr("font-weight","normal")},highlightBar:function(t){this.bar.rectCluster[t].remove();var e=this.recreateBars(t);var s="rect_over_defs"+t;this.createHighlightDefs(s);e.attr(this.bar.css["rect_over_defs"].urlAttr,"url(#"+s+")");var i=this.bar.textCluster[t];i.attr("display","block");i.attr("font-weight","bold")},recreateBars:function(s){var t=this.data.calculateGrid.map(function(t,e){return{name:t["group"],data:t.list[s].value}}.bind(this));this.bar.rectClass=Math.round(Math.random()*100);var e=this.bar.xScale.bandwidth()/this.bar.barsData.length;var i=this.bar.group.selectAll(".MWFBar_"+this.bar.rectClass+"_"+s).data(t).enter().append("rect").attr("class",".MWFBar_"+this.bar.rectClass+"_"+s).attr("x",function(t){return this.xScale(t.name)+s*e}.bind(this.bar)).attr("width",e).attr("height",function(t){return this.size.y-this.yScale(t.data)}.bind(this.bar)).attr("y",function(t){return this.yScale(t.data)}.bind(this.bar)).attr("fill",this.bar.colors[s]);this.bar.rectCluster[s]=i;this.bar.setEvents();return i},createTableHead:function(){this.selectedCols=[];this.selectedRows=[];this.table=new Element("table",{styles:this.css.statTableNode,width:"100%",border:"0",cellPadding:"0",cellSpacing:"0"}).inject(this.node);_self=this;this.headTr=this.table.insertRow();this.selectAllTd=this.headTr.insertCell().setStyles(this.css.statAllSelectTd).set("title",this.lp.selecteAll);this.selectAllTd.addEvent("click",function(){_self.selectAll(this)});this.selectEntryTd=this.headTr.insertCell().setStyles(this.css.statAllColSelectTd).set("title",this.lp.selecteAllCol);this.selectEntryTd.addEvent("click",function(){_self.selectAllCol(this)});this.data.calculate.calculateList.each(function(t){selectTd=this.headTr.insertCell().setStyles(this.css.statColSelectTd);selectTd.addEvent("click",function(){_self.selectCol(this)})}.bind(this));this.titleTr=this.table.insertRow();this.selectGroupTd=this.titleTr.insertCell().setStyles(this.css.statAllRowSelectTd).set("title",this.lp.selecteAllRow);this.categoryTitleTd=new Element("th",{styles:this.css.statHeadTh,text:this.data.calculate.title||this.lp.category}).inject(this.titleTr);this.categoryTitleTd.setStyle("width","160px");this.data.calculate.calculateList.each(function(t){var e=new Element("th",{styles:this.css.statHeadTh,text:t.displayName}).inject(this.titleTr)}.bind(this))},createTableData:function(){if(this.data.calculateGrid.length){var l=this;var r=null;for(var t=0;t<this.data.selectList.length;t++){if(this.data.selectList[t].column===this.data.group.column){r=this.data.selectList[t];break}}this.data.calculateGrid.each(function(t){var s=this.table.insertRow();var e=s.insertCell().setStyles(this.css.statRowSelectTd);e.addEvent("click",function(){l.selectRow(this)});var i=t.group;if(r){i=r.code?MWF.Macro.exec(r.code,{value:t.group,data:this.data}):t.group}var a=new Element("th",{styles:this.css.statHeadTh,text:i}).inject(s);t.list.each(function(t){var e=new Element("td",{styles:this.css.statContentTdNode}).inject(s);e.set("text",t.value);this.setDragEvent(e)}.bind(this))}.bind(this))}},setDragEvent:function(s){new Drag(s,{onStart:function(t,e){this.cellDragStart(t,e)}.bind(this),onDrag:function(t,e){this.cellDrag(t,e)}.bind(this),onComplete:function(t,e){this.completeDrag(t,e)}.bind(this)});var i=this;s.addEvent("click",function(){var t=s.cellIndex-2;var e=s.getParent("tr").rowIndex-2;if(i.checkIsSelected(t,e)){}else{debugger;if(i.selectedCols.length||i.selectedRows.length){i.selectAll()}}})},cellDragStart:function(t,e){var s=t.getPosition();var i=t.getSize();t.store("start",{x:s.x,y:s.y});t.store("start2",{x:s.x+i.x,y:s.y+i.y})},getSelectedCells:function(t,e,s){var i=s.page.x-e.x;var a=s.page.y-e.y;var l=t.getSize();var r=(i/l.x).toInt();var n=(a/l.y).toInt();return{cols:r,rows:n}},cellDrag:function(t,e){this.selectedRows=[];this.selectedCols=[];this.selectedData=[];var s=t.retrieve("start");var i=t.retrieve("start2");var a=this.getSelectedCells(t,s,e);var l=this.getSelectedCells(t,i,e);var r=Math.abs(a.cols)>Math.abs(l.cols)?a.cols:l.cols;var n=Math.abs(a.rows)>Math.abs(l.rows)?a.rows:l.rows;var h=t.cellIndex-2;var c=t.getParent("tr").rowIndex-2;if(!h||h<0)h=0;if(!c||c<0)c=0;var o=h+r;var d=c+n;if(d>c){for(var u=c;u<=d;u++)this.selectedRows.push(u)}else{for(var u=d;u<=c;u++)this.selectedRows.push(u)}if(o>h){for(var u=h;u<=o;u++)this.selectedCols.push(u)}else{for(var u=o;u<=h;u++)this.selectedCols.push(u)}this.checkSelectedCells()},completeDrag:function(t,e){var s=this.table.getElements("tr");var i=s[0].getElements("td");this.selectedCols.each(function(t){i[t+2].setStyles(this.css.statTableSelectedTd)}.bind(this));this.selectedRows.each(function(t){s[t+2].getElement("td").setStyles(this.css.statTableSelectedTd)}.bind(this));this.reloadChart()},selectCol:function(t){var e=t.cellIndex;var s=e-2;if(this.selectedCols.indexOf(s)!=-1){t.setStyles(this.css.statTableSelectTd);this.selectedCols.erase(s)}else{t.setStyles(this.css.statTableSelectedTd);this.selectedCols.push(s)}this.checkSelectedCells();this.reloadChart()},selectRow:function(t){var e=t.getParent("tr");var s=e.rowIndex;var i=s-2;if(this.selectedRows.indexOf(i)!=-1){t.setStyles(this.css.statTableSelectTd);this.selectedRows.erase(i)}else{t.setStyles(this.css.statTableSelectedTd);this.selectedRows.push(i)}this.checkSelectedCells();this.reloadChart()},selectAllCol:function(){if(this.selectedCols.length){this.selectedCols=[];var t=this.table.getElements("tr");var e=t[0].getElements("td");for(var s=2;s<e.length;s++){e[s].setStyles(this.css.statTableSelectTd)}}else{var i=this.table.getElements("tr");var a=i[0].getElements("td");for(var l=2;l<a.length;l++){this.selectedCols.push(l-2);a[l].setStyles(this.css.statTableSelectedTd)}}this.checkSelectedCells();this.reloadChart()},selectAll:function(){if(this.selectedRows.length||this.selectedCols.length){this.selectedRows=[];this.selectedCols=[];var t=this.table.getElements("tr");var e=t[0].getElements("td");for(var s=2;s<e.length;s++){e[s].setStyles(this.css.statTableSelectTd)}for(var i=2;i<t.length;i++){t[i].getElement("td").setStyles(this.css.statTableSelectTd)}}else{var a=this.table.getElements("tr");var l=a[0].getElements("td");for(var r=2;r<l.length;r++){this.selectedCols.push(r-2);l[r].setStyles(this.css.statTableSelectedTd)}for(var n=2;n<a.length;n++){this.selectedRows.push(n-2);a[n].getElement("td").setStyles(this.css.statTableSelectedTd)}}this.checkSelectedCells();this.reloadChart()},checkIsSelected:function(t,e){if(!this.selectedCols.length&&!this.selectedRows.length)return false;var s=!this.selectedCols.length||this.selectedCols.indexOf(t)!=-1;var i=!this.selectedRows.length||this.selectedRows.indexOf(e)!=-1;return s&&i},checkSelectedCells:function(){this.selectedData=[];var t=this.table.getElements("tr");for(var e=2;e<t.length;e++){var s={group:this.data.calculateGrid[e-2].group,list:[]};var i=t[e].getElements("td");for(var a=1;a<i.length;a++){if(this.checkIsSelected(a-1,e-2)){i[a].setStyles(this.css.statContentTdNode_selected);s.list.push({column:this.data.calculateGrid[e-2].list[a-1].column,displayName:this.data.calculateGrid[e-2].list[a-1].displayName,value:this.data.calculateGrid[e-2].list[a-1].value})}else{i[a].setStyles(this.css.statContentTdNode)}}if(s.list.length)this.selectedData.push(s)}},reloadChart:function(){if(this.json.isChart){if(this.bar)this.bar.destroy();this.bar=null;this.chartFlagNode.empty();this.chartNode.empty();this.loadChart()}}});
|