estimate-analysis.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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. }
  82. });
  83. function initData(vm){
  84. //获得缓存中缓存的角色权限
  85. var userRole = window.localStorage.getItem("selectedRole");
  86. if(!userRole){
  87. return false;
  88. }
  89. vm.userRole = JSON.parse(userRole);
  90. vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
  91. vm.area = vm.userRole.code;
  92. vm.areaTitle = vm.userRole.name;
  93. EventBus.$emit('update-area-name', {areaName: vm.areaTitle});
  94. var now = new Date();
  95. vm.endDate = now.format("yyyy-M-dd");
  96. vm.startDate = "2017-01-01"; //评价功能是2017年才上线的
  97. }
  98. function initReqParams(vm){
  99. var param = [{
  100. url: "/statistics/getAVGSocre",
  101. data: {level: vm.level, area: vm.area}
  102. },{
  103. url: "/statistics/getAVGSocreByMonth",
  104. data: {level: vm.level, area: vm.area, statDate: vm.startDate, endDate: vm.endDate}
  105. },{
  106. url: "/statistics/lowlevel_all",
  107. data: {level: vm.level, area: vm.area, index: vm.index, sort: 1, date: vm.endDate, lowLevel: vm.lowLevel}
  108. }];
  109. return param;
  110. }
  111. function loadData(loadArr, vm){
  112. //获取其他请求的参数
  113. var reqParams = initReqParams(vm),
  114. reqPromise = [],
  115. sendPanelReq = [];
  116. for(i=0; i< loadArr.length; i++){
  117. var j = loadArr[i];
  118. var param = reqParams[j];
  119. if(j == 1){
  120. sendPanelReq.push(param);
  121. }else{
  122. reqPromise.push(httpRequest.get(param.url, {data: param.data}));
  123. }
  124. }
  125. //因为中间区域的请求时间较长,所以另外放出来处理
  126. if(sendPanelReq.length > 0){
  127. //删除loadArr里的1
  128. var index = loadArr.indexOf(1);
  129. loadArr.splice(index, 1);
  130. statisticAPI.getAVGSocreByMonth(sendPanelReq[0].data).then(function(res){
  131. if(res.status == 200){
  132. handleSecondPanelData(res.data, vm);
  133. }else{
  134. console.log(res.msg);
  135. }
  136. });
  137. }
  138. if(reqPromise.length > 0){
  139. Promise.all(reqPromise).then(function(ress){
  140. var res1, res2, res3;
  141. for(var i=0; i<loadArr.length; i++){
  142. var j = loadArr[i] + 1;
  143. if(j == 1){
  144. res1 = ress[i];
  145. }
  146. if(j == 3){
  147. res3 = ress[i];
  148. }
  149. }
  150. if(res1){
  151. if(res1.status == 200){
  152. vm.avg = res1.data.rs.avgCount;
  153. }else{
  154. console.log(res1.msg);
  155. }
  156. }
  157. // if(res2){
  158. // if(res2.status == 200){
  159. // handleSecondPanelData(res2.data, vm);
  160. // }else{
  161. // console.log(res2.msg);
  162. // }
  163. //
  164. // }
  165. if(res3){
  166. if(res3.status == 200){
  167. listHandle(res3.data, vm);
  168. }else{
  169. console.log(res3.msg);
  170. }
  171. }
  172. })
  173. }
  174. }
  175. function handleSecondPanelData(data, vm){
  176. var xData = [],
  177. yData = [];
  178. for(i=0; i<data.length; i++){
  179. var item = data[i];
  180. xData.push(item.month);
  181. yData.push(item.socre);
  182. }
  183. drawLine(xData, yData, '平均评分', '#12b7f5');
  184. }
  185. function listHandle(data, vm){
  186. for(i in data){
  187. var data2 = JSON.parse(data[i]);
  188. var list = data2.data;
  189. var topArr = soreRank(getKeyValueArr(list, 'avgCount'));
  190. var arr = _.map(list, function(o, index){
  191. var cols = [o.name, o.avgCount || '暂无评分'];
  192. return {
  193. rank: topArr[index],
  194. code: o.code,
  195. name: o.name,
  196. cols: cols
  197. }
  198. });
  199. EventBus.$emit("render-area-data",{
  200. level: vm.level,
  201. area: vm.area,
  202. lowLevel: vm.lowLevel,
  203. headers: ["排名", "平均评分"],
  204. rows: arr,
  205. cityLevelNoShowTeamTab: true,
  206. districtLevelNoShowTeamTab: true
  207. });
  208. }
  209. }
  210. function drawLine(xData, yData, name, color){
  211. var lineCharts = echarts.init(document.getElementById('lineChart'));
  212. //处理数据, 数据按照10条数一屏展示
  213. var lastIndex = xData.length % 10;
  214. if(xData.length >10 ){
  215. dataZoom_end = 100-(9/xData.length)*100;
  216. }else{
  217. dataZoom_end = 0;
  218. }
  219. var options = {
  220. tooltip: {
  221. trigger: 'axis'
  222. },
  223. legend: {
  224. top: '0px',
  225. data: [name],
  226. borderColor: "#f1f1f1"
  227. },
  228. grid: {
  229. show: false,
  230. left: '20px',
  231. right: '20px',
  232. bottom: '40px',
  233. top: '20px',
  234. containLabel: true
  235. },
  236. xAxis: {
  237. type: 'category',
  238. boundaryGap: false,
  239. data: xData,
  240. axisLabel: {
  241. interval:0,//横轴信息全部显示
  242. formatter: function (value, index) {
  243. return value+"月";
  244. }
  245. }
  246. },
  247. yAxis: {
  248. type: 'value',
  249. axisPointer: {
  250. snap: true
  251. },
  252. scale: true,
  253. minInterval: 1,
  254. boundaryGap: ['10%', '30%'],
  255. splitLine: {show:false}
  256. },
  257. dataZoom: [{//给x轴设置滚动条
  258. start: dataZoom_end,
  259. end: 100,
  260. type: 'slider',
  261. zoomLock: true,
  262. },{ //下面这个属性是内容区域配置
  263. start: dataZoom_end,
  264. end: 100,
  265. type: 'inside',
  266. zoomLock: true,
  267. }],
  268. series: [{
  269. name: name,
  270. type: 'line',
  271. smooth: true,
  272. data: yData,
  273. // color: color,
  274. lineStyle:{
  275. normal:{
  276. color: color
  277. }
  278. },
  279. itemStyle: {
  280. normal: {
  281. color: color
  282. }
  283. }
  284. }]
  285. };
  286. $("#lineChart").removeAttr('_echarts_instance_')
  287. lineCharts.setOption(options);
  288. }