estimate-analysis.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. var reqList = [];
  2. new Vue({
  3. el: "#main",
  4. data: {
  5. appname: "评价分析",
  6. //页面请求参数
  7. index: 28,
  8. level: '',
  9. area: '',
  10. startDate: '',
  11. endDate: '',
  12. avg: 0
  13. },
  14. components: {
  15. vuedals: Vuedals.Component
  16. },
  17. methods: {
  18. getAreaData: function(arg){
  19. //如果level改变,则需要重新加载整个页面的数据,否则只需加载底部区域数据
  20. if(arg.level == this.level){
  21. this.lowLevel = arg.lowLevel;
  22. loadData([2], this);
  23. }else{
  24. this.level = arg.level;
  25. this.lowLevel = arg.lowLevel;
  26. this.area = arg.area;
  27. this.areaTitle = arg.areaTitle;
  28. loadData([0,1,2], this);
  29. }
  30. EventBus.$emit('update-area-name', {areaName: this.areaTitle});
  31. //存储请求所带的参数
  32. reqList.push({
  33. level: this.level,
  34. area: this.area,
  35. areaTitle: this.areaTitle,
  36. index: this.index,
  37. endDate: this.endDate,
  38. startDate: this.startDate,
  39. lowLevel: this.lowLevel
  40. })
  41. }
  42. },
  43. mounted: function(){
  44. //初始化数据
  45. initData(this);
  46. //获得顶部各tab的值
  47. loadData([0,1,2], this); //参数组数表示请求的区域为上中下
  48. //存储请求所带的参数
  49. reqList.push({
  50. level: this.level,
  51. area: this.area,
  52. areaTitle: this.areaTitle,
  53. index: this.index,
  54. endDate: this.endDate,
  55. startDate: this.startDate,
  56. lowLevel: this.lowLevel
  57. });
  58. //设置监听器, 监听折线图日期变化
  59. var vm = this;
  60. //监听后退按钮的操作
  61. EventBus.$on("back-click", function(arg){
  62. if(reqList.length == 1){
  63. history.go(-1);
  64. }
  65. else{
  66. var preInfo = reqList.pop();
  67. var info = reqList[reqList.length - 1];
  68. vm.level = info.level;
  69. vm.area = info.area;
  70. vm.areaTitle = info.areaTitle;
  71. vm.lowLevel = info.lowLevel;
  72. vm.index = info.index;
  73. loadData([0,1,2], vm);
  74. EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
  75. }
  76. });
  77. //监听页面刷新
  78. EventBus.$on("refresh-click", function(arg){
  79. loadData([0,1,2], vm);
  80. });
  81. $("#main").removeClass("c-hide")
  82. }
  83. });
  84. function initData(vm){
  85. //获得缓存中缓存的角色权限
  86. var userRole = window.localStorage.getItem("selectedRole");
  87. if(!userRole){
  88. return false;
  89. }
  90. vm.userRole = JSON.parse(userRole);
  91. vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
  92. vm.area = vm.userRole.code;
  93. vm.areaTitle = vm.userRole.name;
  94. EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
  95. var now = new Date();
  96. vm.endDate = now.format("yyyy-M-dd");
  97. vm.startDate = "2017-01-01"; //评价功能是2017年才上线的
  98. }
  99. function initReqParams(vm){
  100. var param = [{
  101. url: "/statistics/getAVGSocre",
  102. data: {level: vm.level, area: vm.area}
  103. },{
  104. url: "/statistics/getAVGSocreByMonth",
  105. data: {level: vm.level, area: vm.area, statDate: vm.startDate, endDate: vm.endDate}
  106. },{
  107. url: "/statistics/lowlevel_all",
  108. data: {level: vm.level, area: vm.area, index: vm.index, sort: 1, date: vm.endDate, lowLevel: vm.lowLevel}
  109. }];
  110. return param;
  111. }
  112. function loadData(loadArr, vm){
  113. //获取其他请求的参数
  114. var reqParams = initReqParams(vm),
  115. reqPromise = [],
  116. sendPanelReq = [];
  117. for(i=0; i< loadArr.length; i++){
  118. var j = loadArr[i];
  119. var param = reqParams[j];
  120. if(j == 1){
  121. sendPanelReq.push(param);
  122. }else{
  123. reqPromise.push(httpRequest.get(param.url, {data: param.data}));
  124. }
  125. }
  126. //因为中间区域的请求时间较长,所以另外放出来处理
  127. if(sendPanelReq.length > 0){
  128. //删除loadArr里的1
  129. var index = loadArr.indexOf(1);
  130. loadArr.splice(index, 1);
  131. statisticAPI.getAVGSocreByMonth(sendPanelReq[0].data).then(function(res){
  132. if(res.status == 200){
  133. handleSecondPanelData(res.data, vm);
  134. }else{
  135. console.log(res.msg);
  136. }
  137. });
  138. }
  139. if(reqPromise.length > 0){
  140. Promise.all(reqPromise).then(function(ress){
  141. var res1, res2, res3;
  142. for(var i=0; i<loadArr.length; i++){
  143. var j = loadArr[i] + 1;
  144. if(j == 1){
  145. res1 = ress[i];
  146. }
  147. if(j == 3){
  148. res3 = ress[i];
  149. }
  150. }
  151. if(res1){
  152. if(res1.status == 200){
  153. vm.avg = res1.data.rs.avgCount;
  154. }else{
  155. console.log(res1.msg);
  156. }
  157. }
  158. // if(res2){
  159. // if(res2.status == 200){
  160. // handleSecondPanelData(res2.data, vm);
  161. // }else{
  162. // console.log(res2.msg);
  163. // }
  164. //
  165. // }
  166. if(res3){
  167. if(res3.status == 200){
  168. listHandle(res3.data, vm);
  169. }else{
  170. console.log(res3.msg);
  171. }
  172. }
  173. })
  174. }
  175. }
  176. function handleSecondPanelData(data, vm){
  177. var xData = [],
  178. yData = [];
  179. for(i=0; i<data.length; i++){
  180. var item = data[i];
  181. xData.push(item.month);
  182. yData.push(item.socre);
  183. }
  184. drawLine(xData, yData, '平均评分', '#12b7f5');
  185. }
  186. function listHandle(data, vm){
  187. for(i in data){
  188. var data2 = JSON.parse(data[i]);
  189. var list = data2.data;
  190. var topArr = soreRank(getKeyValueArr(list, 'avgCount'));
  191. var arr = _.map(list, function(o, index){
  192. var cols = [o.name, o.avgCount || '暂无评分'];
  193. return {
  194. rank: topArr[index],
  195. code: o.code,
  196. name: o.name,
  197. cols: cols
  198. }
  199. });
  200. EventBus.$emit("render-area-data",{
  201. level: vm.level,
  202. area: vm.area,
  203. lowLevel: vm.lowLevel,
  204. headers: ["排名", "平均评分"],
  205. rows: arr,
  206. cityLevelNoShowTeamTab: true,
  207. districtLevelNoShowTeamTab: true
  208. });
  209. }
  210. }
  211. function drawLine(xData, yData, name, color){
  212. var lineCharts = echarts.init(document.getElementById('lineChart'));
  213. //处理数据, 数据按照10条数一屏展示
  214. var lastIndex = xData.length % 10;
  215. if(xData.length >10 ){
  216. dataZoom_end = 100-(9/xData.length)*100;
  217. }else{
  218. dataZoom_end = 0;
  219. }
  220. var options = {
  221. tooltip: {
  222. trigger: 'axis'
  223. },
  224. legend: {
  225. top: '0px',
  226. data: [name],
  227. borderColor: "#f1f1f1"
  228. },
  229. grid: {
  230. show: false,
  231. left: '10px',
  232. right: '30px',
  233. bottom: '40px',
  234. top: '20px',
  235. containLabel: true
  236. },
  237. xAxis: {
  238. type: 'category',
  239. boundaryGap: false,
  240. data: xData,
  241. axisLabel: {
  242. interval:0,//横轴信息全部显示
  243. formatter: function (value, index) {
  244. return value+"月";
  245. }
  246. }
  247. },
  248. yAxis: {
  249. type: 'value',
  250. axisPointer: {
  251. snap: true
  252. },
  253. scale: true,
  254. minInterval: 1,
  255. boundaryGap: ['10%', '30%'],
  256. splitLine: {show:false}
  257. },
  258. dataZoom: [{//给x轴设置滚动条
  259. start: dataZoom_end,
  260. end: 100,
  261. type: 'slider',
  262. zoomLock: true,
  263. showDetail: false
  264. },{ //下面这个属性是内容区域配置
  265. start: dataZoom_end,
  266. end: 100,
  267. type: 'inside',
  268. zoomLock: true,
  269. }],
  270. series: [{
  271. name: name,
  272. type: 'line',
  273. smooth: true,
  274. data: yData,
  275. // color: color,
  276. lineStyle:{
  277. normal:{
  278. color: color
  279. }
  280. },
  281. itemStyle: {
  282. normal: {
  283. color: color
  284. }
  285. }
  286. }]
  287. };
  288. $("#lineChart").removeAttr('_echarts_instance_')
  289. lineCharts.setOption(options);
  290. }