sign-progress.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. var reqList = []; //记录请求的参数和url,用于后退时使用
  2. Vue.use(Vuedals.default);
  3. new Vue({
  4. el: "#main",
  5. data: {
  6. appname: "签约进展",
  7. isback: true,
  8. isrefresh: true,
  9. isfilter: true,
  10. isopen: false,
  11. //请求页面所需参数
  12. level: '',
  13. area: '',
  14. areaTitle: '',
  15. index: '3',
  16. selectedDateType: 1, //折线图坐标值1-日,2-周,3-月
  17. endDate: '',
  18. startDate: '',
  19. lowLevel: '',
  20. lowCode: '',
  21. chooseYear: '',
  22. userRole: '',
  23. analysisType: "1", // 筛选维度的id, 1-按任务,2-按人口,3-高血压,4-糖尿病,5-65岁以上人群
  24. analysisName:"按任务",
  25. signRateData:{
  26. signRateText:"",
  27. signRate:"",
  28. signAmount:"",
  29. signRateAll:"",
  30. completeRateText:"",
  31. completeRate:"",
  32. completeAmount:"",
  33. completeRateAll:""
  34. }
  35. },
  36. components: {
  37. vuedals: Vuedals.Component
  38. },
  39. methods: {
  40. changeTag: function(val) {
  41. this.index = val;
  42. loadData([1, 2], this);
  43. //存储请求所带的参数
  44. reqList.push({
  45. level: this.level,
  46. area: this.area,
  47. areaTitle: this.areaTitle,
  48. index: this.index,
  49. endDate: this.endDate,
  50. startDate: this.startDate,
  51. lowLevel: this.lowLevel,
  52. lowCode:this.lowCode
  53. })
  54. },
  55. getNewLineData: function(arg) {
  56. this.selectedDateType = arg.dateType;
  57. loadData([1], this);
  58. },
  59. getAreaData: function(arg) {
  60. //如果level改变,则需要重新加载整个页面的数据,否则只需加载底部区域数据
  61. if(arg.level == this.level) {
  62. this.lowLevel = arg.lowLevel;
  63. loadData([2], this);
  64. } else {
  65. this.level = arg.level;
  66. this.lowLevel = arg.lowLevel;
  67. this.area = arg.area;
  68. loadData([0, 1, 2], this);
  69. }
  70. //存储请求所带的参数
  71. reqList.push({
  72. level: this.level,
  73. area: this.area,
  74. areaTitle: this.areaTitle,
  75. index: this.index,
  76. endDate: this.endDate,
  77. startDate: this.startDate,
  78. lowLevel: this.lowLevel,
  79. lowCode:this.lowCode
  80. })
  81. }
  82. },
  83. mounted: function() {
  84. //初始化数据
  85. initData(this);
  86. //获得顶部各tab的值
  87. loadData([0, 1, 2], this); //参数组数表示请求的区域为上中下
  88. //存储请求所带的参数
  89. reqList.push({
  90. level: this.level,
  91. area: this.area,
  92. areaTitle: this.areaTitle,
  93. index: this.index,
  94. endDate: this.endDate,
  95. startDate: this.startDate,
  96. lowLevel: this.lowLevel,
  97. lowCode:this.lowCode
  98. });
  99. //设置监听器, 监听折线图日期变化
  100. var vm = this;
  101. //监听后退按钮的操作
  102. EventBus.$on("back-click", function(arg) {
  103. EventBus.$emit('update-statistics-time', {});//更新统计时间
  104. if(reqList.length == 1) {
  105. history.go(-1);
  106. } else {
  107. var preInfo = reqList.pop();
  108. var info = reqList[reqList.length - 1];
  109. vm.level = info.level;
  110. vm.area = info.area;
  111. vm.areaTitle = info.areaTitle;
  112. vm.lowLevel = info.lowLevel;
  113. vm.index = info.index;
  114. vm.lowCode = info.lowCode;
  115. loadData([0, 1, 2], vm);
  116. }
  117. });
  118. //监听页面刷新
  119. EventBus.$on("refresh-click", function(arg) {
  120. EventBus.$emit('update-statistics-time', {});//更新统计时间
  121. loadData([0, 1, 2], vm);
  122. });
  123. //弹出筛选框
  124. EventBus.$on('filter-click', function(arg) {
  125. //弹框显示筛选条件
  126. Vuedals.Bus.$emit('new', {
  127. title: '条件筛选',
  128. onClose:function(data){
  129. },
  130. component: 'sign-progress-filter',
  131. props: {
  132. }
  133. });
  134. });
  135. }
  136. })
  137. function initData(vm) {
  138. //获得缓存中缓存的角色权限
  139. var userRole = window.localStorage.getItem("selectedRole");
  140. if(!userRole) {
  141. return false;
  142. }
  143. vm.userRole = JSON.parse(userRole);
  144. vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
  145. vm.area = vm.userRole.code;
  146. vm.areaTile = vm.userRole.name;
  147. var now = new Date();
  148. if(now.getMonth() >= 6) {
  149. vm.chooseYear = now.getFullYear();
  150. } else {
  151. vm.chooseYear = now.getFullYear() - 1;
  152. }
  153. vm.startDate = getStartDate(vm.chooseYear);
  154. vm.endDate = getEndDate(vm.chooseYear);
  155. //更新头部信息
  156. EventBus.$emit('update-all-prompt-info', {areaName:vm.areaTile,selectDate:vm.chooseYear+"年",dimensionVal:vm.analysisName});
  157. }
  158. function initReqParams(vm) {
  159. vm.index = 13;
  160. if(vm.lowCode) {
  161. vm.index = 17;
  162. }
  163. reqParam = [{
  164. url: "/statistics/sign_info",
  165. reqType: 'get',
  166. data: {
  167. level: vm.level,
  168. area: vm.area,
  169. lowCode: vm.lowCode,
  170. year: vm.chooseYear,
  171. endDate: vm.endDate
  172. }
  173. }, {
  174. url: "/statistics/interval_total",
  175. reqType: 'get',
  176. data: {
  177. level: vm.level,
  178. area: vm.area,
  179. startDate: vm.startDate,
  180. endDate: vm.endDate,
  181. interval: vm.selectedDateType,
  182. index: vm.index,
  183. lowCode: vm.lowCode
  184. }
  185. }, {
  186. url: "/statistics/lowlevel_all",
  187. reqType: 'get',
  188. data: {
  189. sort: 1,
  190. date: vm.endDate,
  191. level: vm.level,
  192. index: vm.index,
  193. area: vm.area,
  194. lowCode: vm.lowCode
  195. }
  196. }];
  197. if(vm.lowLevel) {
  198. reqParam[2].data.lowLevel = vm.lowLevel;
  199. }
  200. return reqParam;
  201. }
  202. function getTopReqParams(index1, vm) {
  203. var url = "statistics/interval_total",
  204. data = {
  205. index: index1,
  206. level: vm.level,
  207. area: vm.area,
  208. year: vm.chooseYear,
  209. endDate: vm.endDate,
  210. startDate: vm.startDate
  211. };
  212. return {
  213. url: url,
  214. data: data
  215. };
  216. }
  217. function getTopTagDatas(data,vm) {
  218. vm.signRateData.signRateText = data.signRate.rate.substring(0,data.signRate.rate.length-2) + "%"
  219. vm.signRateData.signRate = parseFloat(data.signRate.rate)/100;
  220. vm.signRateData.signAmount = data.signRate.sign;
  221. vm.signRateData.signRateAll = data.signRate.people;
  222. vm.signRateData.completeRateText = data.signTaskRate.rate.substring(0,data.signTaskRate.rate.length-2) + "%"
  223. vm.signRateData.completeRate = parseFloat(data.signTaskRate.rate)/100;
  224. vm.signRateData.completeAmount = data.signTaskRate.sign;
  225. vm.signRateData.completeRateAll = data.signTaskRate.people;
  226. var signArr = [{
  227. name: '签约量',
  228. value: vm.signRateData.signAmount
  229. },{
  230. name: '签约总量',
  231. value: vm.signRateData.signRateAll
  232. }];
  233. var completeArr = [{
  234. name: '完成量',
  235. value: vm.signRateData.completeAmount
  236. },{
  237. name: '完成总量',
  238. value: vm.signRateData.completeRateAll
  239. }];
  240. drawPieChart('signMain', signArr, ['#12b7f5', '#ebebf5']);//签约率
  241. drawPieChart('completeMain', completeArr, ['#12b7f5', '#ebebf5']);//完成率
  242. }
  243. function loadData(loadArr, vm) {
  244. //获取其他请求的参数
  245. var reqParams = initReqParams(vm),
  246. reqPromise = [],
  247. newArr = []; //记录非顶部请求的请求数组
  248. for(i = 0; i < loadArr.length; i++) {
  249. var j = loadArr[i];
  250. var param = reqParams[j];
  251. reqPromise.push(httpRequest.get(param.url, {
  252. data: param.data
  253. }));
  254. newArr.push(loadArr[i]);
  255. }
  256. if(reqPromise.length > 0) {
  257. Promise.all(reqPromise).then(function(ress) {
  258. var res1, res2, res3;
  259. for(var i = 0; i < loadArr.length; i++) {
  260. var j = loadArr[i] + 1;
  261. if(j == 1) {
  262. res1 = ress[i];
  263. }
  264. if(j == 2) {
  265. res2 = ress[i];
  266. }
  267. if(j == 3) {
  268. res3 = ress[i];
  269. }
  270. }
  271. if(res1 && res1.status == 200) {
  272. getTopTagDatas(res1.data,vm);
  273. }
  274. if(res2 && res2.status == 200) {
  275. handleSecondPanelData(res2.data, vm);
  276. }
  277. if(res3) {
  278. if(res3.status == 200) {
  279. listHandle(res3.data, vm);
  280. } else {
  281. console.log(res3.msg);
  282. }
  283. }
  284. })
  285. }
  286. }
  287. function handleSecondPanelData(data, vm) {
  288. var xDatas = [],
  289. yDatas = [],
  290. names = [],
  291. colors = ['#12b7f5'],
  292. index_names = {
  293. 'index_1': '总签约人数'
  294. };
  295. for(var p in data) {
  296. names.push(index_names[p]);
  297. var xData = _.map(data[p].data, function(o) {
  298. return o.range;
  299. });
  300. var yData = _.map(data[p].data, function(o) {
  301. return o.amount;
  302. });
  303. xDatas.push(xData);
  304. yDatas.push(yData);
  305. }
  306. EventBus.$emit("draw-line-chart", {
  307. panelName: "签约量趋势",
  308. quotaNames: names,
  309. xData: xDatas[0],
  310. yDatas: yDatas,
  311. colors: colors
  312. });
  313. }
  314. function listHandle(data, vm) {
  315. for(i in data) {
  316. var list = data[i];
  317. var topArr = [];
  318. topArr = soreRank(getKeyValueArr(list, 'amount'));
  319. var arr = _.map(list, function(o, index) {
  320. var cols = [o.name];
  321. if(vm.analysisType=="2" && vm.level>2 && vm.lowLevel!=1){
  322. cols.push(o.num);
  323. }else{
  324. cols.push(o.amount);
  325. }
  326. if(vm.level>2 && vm.lowLevel!=1){
  327. cols.push(o.signTaskNum);
  328. cols.push(parseFloat(o.rate).toFixed(2)+"%");
  329. }else if(vm.chooseYear!="2016"){
  330. cols.push(o.signRegulationNum);
  331. }
  332. return {
  333. rank: topArr[index],
  334. code: o.code,
  335. name: o.name,
  336. cols: cols
  337. }
  338. });
  339. var activeTab = $(".area-tab-panel .area-tab.active span").html();
  340. var headers = ["排名", "签约量", "目标率","当前签约率"];
  341. if(activeTab=="团队"){
  342. headers = ["排名", "签约量", "调控量"];
  343. }
  344. EventBus.$emit("render-area-data", {
  345. level: vm.level,
  346. area: vm.area,
  347. lowLevel: vm.lowLevel,
  348. headers: headers,
  349. rows: arr
  350. });
  351. }
  352. }